Stackedit/js/extensions/markdownExtra.js
2013-07-24 00:51:21 +01:00

70 lines
3.0 KiB
JavaScript

define([
"jquery",
"utils",
"classes/Extension",
"text!html/markdownExtraSettingsBlock.html",
"libs/Markdown.Extra",
], function($, utils, Extension, markdownExtraSettingsBlockHTML) {
var markdownExtra = new Extension("markdownExtra", "Markdown Extra", true);
markdownExtra.settingsBlock = markdownExtraSettingsBlockHTML;
markdownExtra.defaultConfig = {
extensions: [
"fenced_code_gfm",
"tables",
"def_list",
"attr_list",
"footnotes"
],
highlighter: "prettify"
};
markdownExtra.onLoadSettings = function() {
function hasExtension(extensionName) {
return _.some(markdownExtra.config.extensions, function(extension) {
return extension == extensionName;
});
}
utils.setInputChecked("#input-markdownextra-fencedcodegfm", hasExtension("fenced_code_gfm"));
utils.setInputChecked("#input-markdownextra-tables", hasExtension("tables"));
utils.setInputChecked("#input-markdownextra-deflist", hasExtension("def_list"));
utils.setInputChecked("#input-markdownextra-attrlist", hasExtension("attr_list"));
utils.setInputChecked("#input-markdownextra-footnotes", hasExtension("footnotes"));
utils.setInputValue("#input-markdownextra-highlighter", markdownExtra.config.highlighter);
};
markdownExtra.onSaveSettings = function(newConfig, event) {
newConfig.extensions = [];
utils.getInputChecked("#input-markdownextra-fencedcodegfm") && newConfig.extensions.push("fenced_code_gfm");
utils.getInputChecked("#input-markdownextra-tables") && newConfig.extensions.push("tables");
utils.getInputChecked("#input-markdownextra-deflist") && newConfig.extensions.push("def_list");
utils.getInputChecked("#input-markdownextra-attrlist") && newConfig.extensions.push("attr_list");
utils.getInputChecked("#input-markdownextra-footnotes") && newConfig.extensions.push("footnotes");
newConfig.highlighter = utils.getInputValue("#input-markdownextra-highlighter");
};
markdownExtra.onEditorConfigure = function(editor) {
var converter = editor.getConverter();
var options = {
extensions: markdownExtra.config.extensions
};
if(markdownExtra.config.highlighter == "highlight") {
options.highlighter = "prettify";
editor.hooks.chain("onPreviewRefresh", function() {
$('.prettyprint').each(function(i, e) {
hljs.highlightBlock(e);
});
});
}
else if(markdownExtra.config.highlighter == "prettify") {
options.highlighter = "prettify";
editor.hooks.chain("onPreviewRefresh", prettyPrint);
}
Markdown.Extra.init(converter, options);
// Store extensions list in converter for partialRendering
converter.extraExtensions = markdownExtra.config.extensions;
};
return markdownExtra;
});