completeHTMLDocument.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * Turn Markdown link shortcuts into XHTML <a> tags.
  3. */
  4. showdown.subParser('completeHTMLDocument', function (text, options, globals) {
  5. 'use strict';
  6. if (!options.completeHTMLDocument) {
  7. return text;
  8. }
  9. text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);
  10. var doctype = 'html',
  11. doctypeParsed = '<!DOCTYPE HTML>\n',
  12. title = '',
  13. charset = '<meta charset="utf-8">\n',
  14. lang = '',
  15. metadata = '';
  16. if (typeof globals.metadata.parsed.doctype !== 'undefined') {
  17. doctypeParsed = '<!DOCTYPE ' + globals.metadata.parsed.doctype + '>\n';
  18. doctype = globals.metadata.parsed.doctype.toString().toLowerCase();
  19. if (doctype === 'html' || doctype === 'html5') {
  20. charset = '<meta charset="utf-8">';
  21. }
  22. }
  23. for (var meta in globals.metadata.parsed) {
  24. if (globals.metadata.parsed.hasOwnProperty(meta)) {
  25. switch (meta.toLowerCase()) {
  26. case 'doctype':
  27. break;
  28. case 'title':
  29. title = '<title>' + globals.metadata.parsed.title + '</title>\n';
  30. break;
  31. case 'charset':
  32. if (doctype === 'html' || doctype === 'html5') {
  33. charset = '<meta charset="' + globals.metadata.parsed.charset + '">\n';
  34. } else {
  35. charset = '<meta name="charset" content="' + globals.metadata.parsed.charset + '">\n';
  36. }
  37. break;
  38. case 'language':
  39. case 'lang':
  40. lang = ' lang="' + globals.metadata.parsed[meta] + '"';
  41. metadata += '<meta name="' + meta + '" content="' + globals.metadata.parsed[meta] + '">\n';
  42. break;
  43. default:
  44. metadata += '<meta name="' + meta + '" content="' + globals.metadata.parsed[meta] + '">\n';
  45. }
  46. }
  47. }
  48. text = doctypeParsed + '<html' + lang + '>\n<head>\n' + title + charset + metadata + '</head>\n<body>\n' + text.trim() + '\n</body>\n</html>';
  49. text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);
  50. return text;
  51. });