Stackedit/public/res/extensions/yamlFrontMatterParser.js

40 lines
1.3 KiB
JavaScript
Raw Normal View History

define([
"classes/Extension",
2013-10-07 00:17:21 +00:00
"yaml-js",
2013-11-07 23:10:38 +00:00
], function(Extension, YAML) {
2013-10-06 14:34:01 +00:00
var yamlFrontMatterParser = new Extension("yamlFrontMatterParser", "YAML front matter");
2013-11-07 23:10:38 +00:00
var eventMgr;
yamlFrontMatterParser.onEventMgrCreated = function(eventMgrParameter) {
eventMgr = eventMgrParameter;
};
2013-11-07 23:10:38 +00:00
var fileDesc;
2013-10-06 14:34:01 +00:00
yamlFrontMatterParser.onFileSelected = function(fileDescParam) {
fileDesc = fileDescParam;
};
var regex = /^(\s*-{3}\s*\n([\w\W]+?)\n\s*-{3}\s*\n)?([\w\W]*)$/;
yamlFrontMatterParser.onPagedownConfigure = function(editor) {
var converter = editor.getConverter();
converter.hooks.chain("preConversion", function(text) {
var results = regex.exec(text);
var yaml = results[2];
if (yaml && (!fileDesc.frontMatter || fileDesc.frontMatter._yaml != yaml)) {
2013-10-06 14:34:01 +00:00
fileDesc.frontMatter = undefined;
try {
2013-10-07 00:17:21 +00:00
fileDesc.frontMatter = YAML.parse(yaml);
2013-10-06 14:34:01 +00:00
fileDesc.frontMatter._yaml = yaml;
fileDesc.frontMatter._frontMatter = results[1];
}
2013-10-06 14:34:01 +00:00
catch (e) {}
}
2013-10-06 14:34:01 +00:00
eventMgr.onMarkdownTrim((results[1] || '').length);
return results[3];
});
};
return yamlFrontMatterParser;
});