meta.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. /**
  2. * Meta Helper
  3. * @description Generate meta tags for HTML header
  4. * @example
  5. * <%- meta(post) %>
  6. */
  7. function trim (str) {
  8. return str.trim().replace(/^"(.*)"$/, '$1').replace(/^'(.*)'$/, '$1');
  9. }
  10. function split (str, sep) {
  11. var result = [];
  12. var matched = null;
  13. while (matched = sep.exec(str)) {
  14. result.push(matched[0]);
  15. }
  16. return result;
  17. }
  18. hexo.extend.helper.register('meta', function (post) {
  19. var metas = post.meta || [];
  20. var output = '';
  21. var metaDOMArray = metas.map(function (meta) {
  22. var entities = split(meta, /(?:[^\\;]+|\\.)+/g);
  23. var entityArray = entities.map(function (entity) {
  24. var keyValue = split(entity, /(?:[^\\=]+|\\.)+/g);
  25. if (keyValue.length < 2) {
  26. return null;
  27. }
  28. var key = trim(keyValue[0]);
  29. var value = trim(keyValue[1]);
  30. return key + '="' + value + '"';
  31. }).filter(function (entity) {
  32. return entity;
  33. });
  34. return '<meta ' + entityArray.join(' ') + ' />';
  35. });
  36. return metaDOMArray.join('\n');
  37. });