meta.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. var each = require('./each');
  2. var isStr = require('./isStr');
  3. var isUndef = require('./isUndef');
  4. var contain = require('./contain');
  5. var isArr = require('./isArr');
  6. var isObj = require('./isObj');
  7. var toArr = require('./toArr');
  8. exports = function(name, content) {
  9. if (isUndef(name)) return getAllMeta();
  10. var isGetter = (isStr(name) && isUndef(content)) || isArr(name);
  11. if (isGetter) return getMeta(name);
  12. var metas = name;
  13. if (!isObj(metas)) {
  14. metas = {};
  15. metas[name] = content;
  16. }
  17. setMeta(metas);
  18. };
  19. exports.remove = function(nameList) {
  20. nameList = toArr(nameList);
  21. each(nameList, function(name) {
  22. var meta = selectMeta(name);
  23. if (meta) doc.head.removeChild(meta);
  24. });
  25. };
  26. var doc = document;
  27. function getAllMeta() {
  28. var ret = {};
  29. metaEach(function(name, content) {
  30. ret[name] = content;
  31. });
  32. return ret;
  33. }
  34. function getMeta(name) {
  35. if (isStr(name)) {
  36. var meta = selectMeta(name);
  37. if (meta) return meta.getAttribute('content');
  38. } else {
  39. var ret = {};
  40. metaEach(function(key, val) {
  41. if (contain(name, key)) ret[key] = val;
  42. });
  43. return ret;
  44. }
  45. }
  46. function setMeta(metas) {
  47. each(metas, function(content, name) {
  48. var meta = selectMeta(name);
  49. if (meta) return meta.setAttribute('content', content);
  50. meta = doc.createElement('meta');
  51. meta.setAttribute('name', name);
  52. meta.setAttribute('content', content);
  53. doc.head.appendChild(meta);
  54. });
  55. }
  56. function metaEach(fn) {
  57. var metaList = doc.querySelectorAll('meta');
  58. each(metaList, function(meta) {
  59. var name = meta.getAttribute('name');
  60. var content = meta.getAttribute('content');
  61. if (!name || !content) return;
  62. fn(name, content);
  63. });
  64. }
  65. function selectMeta(name) {
  66. return doc.querySelector('meta[name="' + name + '"]');
  67. }
  68. module.exports = exports;