feat(completeHTMLOutput): add option to output a complete HTML document

This commit is contained in:
Estevao Soares dos Santos 2017-12-10 04:49:24 +00:00
parent cc19d9b3e0
commit a8427c9423
10 changed files with 58 additions and 1 deletions

BIN
dist/showdown.js vendored

Binary file not shown.

BIN
dist/showdown.js.map vendored

Binary file not shown.

BIN
dist/showdown.min.js vendored

Binary file not shown.

Binary file not shown.

View File

@ -314,6 +314,9 @@ showdown.Converter = function (converterOptions) {
// attacklab: Restore tremas // attacklab: Restore tremas
text = text.replace(/¨T/g, '¨'); text = text.replace(/¨T/g, '¨');
// render a complete html document instead of a partial if the option is enabled
text = showdown.subParser('completeHTMLOutput')(text, options, globals);
// Run output modifiers // Run output modifiers
showdown.helper.forEach(outputModifiers, function (ext) { showdown.helper.forEach(outputModifiers, function (ext) {
text = showdown.subParser('runExtension')(ext, text, options, globals); text = showdown.subParser('runExtension')(ext, text, options, globals);

View File

@ -150,6 +150,11 @@ function getDefaultOpts (simple) {
defaultValue: false, defaultValue: false,
description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`', description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`',
type: 'boolean' type: 'boolean'
},
completeHTMLOutput: {
defaultValue: false,
description: 'Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags',
type: 'boolean'
} }
}; };
if (simple === false) { if (simple === false) {

View File

@ -0,0 +1,17 @@
/**
* Turn Markdown link shortcuts into XHTML <a> tags.
*/
showdown.subParser('completeHTMLOutput', function (text, options, globals) {
'use strict';
if (!options.completeHTMLOutput) {
return text;
}
text = globals.converter._dispatch('completeHTMLOutput.before', text, options, globals);
text = '<html>\n<head>\n<meta charset="UTF-8">\n</head>\n<body>\n' + text.trim() + '\n</body>\n</html>';
text = globals.converter._dispatch('completeHTMLOutput.after', text, options, globals);
return text;
});

View File

@ -0,0 +1,14 @@
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>This is a <strong>markdown</strong> file</p>
<p>Converted into a full HTML document</p>
<ul>
<li>this</li>
<li>is</li>
<li>awesome</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,7 @@
This is a **markdown** file
Converted into a full HTML document
- this
- is
- awesome

View File

@ -14,7 +14,8 @@ var bootstrap = require('../bootstrap.js'),
emojisSuite = bootstrap.getTestSuite('test/features/emojis/'), emojisSuite = bootstrap.getTestSuite('test/features/emojis/'),
underlineSuite = bootstrap.getTestSuite('test/features/underline/'), underlineSuite = bootstrap.getTestSuite('test/features/underline/'),
literalMidWordUnderscoresSuite = bootstrap.getTestSuite('test/features/literalMidWordUnderscores/'), literalMidWordUnderscoresSuite = bootstrap.getTestSuite('test/features/literalMidWordUnderscores/'),
literalMidWordAsterisksSuite = bootstrap.getTestSuite('test/features/literalMidWordAsterisks/'); literalMidWordAsterisksSuite = bootstrap.getTestSuite('test/features/literalMidWordAsterisks/'),
completeHTMLOutputSuite = bootstrap.getTestSuite('test/features/completeHTMLOutput/');
describe('makeHtml() features testsuite', function () { describe('makeHtml() features testsuite', function () {
'use strict'; 'use strict';
@ -231,4 +232,14 @@ describe('makeHtml() features testsuite', function () {
it(suite[i].name.replace(/-/g, ' '), assertion(suite[i], converter)); it(suite[i].name.replace(/-/g, ' '), assertion(suite[i], converter));
} }
}); });
/** test completeHTMLOutput option **/
describe('completeHTMLOutput option', function () {
var converter,
suite = completeHTMLOutputSuite;
for (var i = 0; i < suite.length; ++i) {
converter = new showdown.Converter({completeHTMLOutput: true});
it(suite[i].name.replace(/-/g, ' '), assertion(suite[i], converter));
}
});
}); });