switch from showdown to marked
add better yaml support for metadata
This commit is contained in:
parent
e4afc0fb0d
commit
036434dd7a
20
bower.json
20
bower.json
|
@ -2,16 +2,18 @@
|
||||||
"name": "realms",
|
"name": "realms",
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"components-bootstrap": "3.0.0",
|
"components-bootstrap": "~3.2.0",
|
||||||
"jquery": "1.9.1",
|
"jquery": "~1.11.1",
|
||||||
"components-underscore": "~1.5.1",
|
"components-underscore": "~1.5.2",
|
||||||
"requirejs": "~2.1.8",
|
"requirejs": "~2.1.14",
|
||||||
"highlightjs": "~7.3.0",
|
"highlightjs": "~8.0.0",
|
||||||
"handlebars": "~1.0.0",
|
"handlebars": "~2.0.0",
|
||||||
"components-font-awesome": "~3.2.1",
|
"components-font-awesome": "~4.1.0",
|
||||||
"showdown": "~0.3.1",
|
"showdown": "~0.3.1",
|
||||||
"keymaster": "madrobby/keymaster",
|
"keymaster": "madrobby/keymaster",
|
||||||
"ace": "~1.1.0",
|
"ace": "~1.1.6",
|
||||||
"parsleyjs": "~2.0.3"
|
"parsleyjs": "~2.0.3",
|
||||||
|
"marked": "~0.3.2",
|
||||||
|
"js-yaml": "~3.2.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -184,13 +184,13 @@ cache = Cache(app)
|
||||||
|
|
||||||
assets = Assets(app)
|
assets = Assets(app)
|
||||||
assets.register('main.js',
|
assets.register('main.js',
|
||||||
'vendor/jquery/jquery.js',
|
#'vendor/requirejs/require.js',
|
||||||
'vendor/components-underscore/underscore.js',
|
'vendor/jquery/dist/jquery.js',
|
||||||
'vendor/components-bootstrap/js/bootstrap.js',
|
'vendor/components-bootstrap/js/bootstrap.js',
|
||||||
'vendor/handlebars/handlebars.js',
|
'vendor/handlebars/handlebars.js',
|
||||||
'vendor/showdown/src/showdown.js',
|
'vendor/js-yaml/dist/js-yaml.js',
|
||||||
'vendor/showdown/src/extensions/table.js',
|
'vendor/marked/lib/marked.js',
|
||||||
'js/wmd.js',
|
#'js/wmd.js',
|
||||||
'js/html-sanitizer-minified.js', # don't minify?
|
'js/html-sanitizer-minified.js', # don't minify?
|
||||||
'vendor/highlightjs/highlight.pack.js',
|
'vendor/highlightjs/highlight.pack.js',
|
||||||
'vendor/parsleyjs/dist/parsley.js',
|
'vendor/parsleyjs/dist/parsley.js',
|
||||||
|
|
|
@ -1,17 +1,71 @@
|
||||||
|
/* © 2013 j201
|
||||||
|
* https://github.com/j201/meta-marked */
|
||||||
|
|
||||||
|
// Splits the given string into a meta section and a markdown section if a meta section is present, else returns null
|
||||||
|
function splitInput(str) {
|
||||||
|
if (str.slice(0, 3) !== '---') return;
|
||||||
|
|
||||||
|
var matcher = /\n(\.{3}|\-{3})/g;
|
||||||
|
var metaEnd = matcher.exec(str);
|
||||||
|
|
||||||
|
return metaEnd && [str.slice(0, metaEnd.index), str.slice(matcher.lastIndex)];
|
||||||
|
}
|
||||||
|
|
||||||
|
var metaMarked = function(src, opt, callback) {
|
||||||
|
if (Object.prototype.toString.call(src) !== '[object String]')
|
||||||
|
throw new TypeError('First parameter must be a string.');
|
||||||
|
|
||||||
|
var mySplitInput = splitInput(src);
|
||||||
|
if (mySplitInput) {
|
||||||
|
var meta;
|
||||||
|
try {
|
||||||
|
meta = jsyaml.safeLoad(mySplitInput[0]);
|
||||||
|
} catch(e) {
|
||||||
|
meta = null;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
meta: meta,
|
||||||
|
md: mySplitInput[1]
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
meta: null,
|
||||||
|
md: src
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
marked.setOptions({
|
||||||
|
renderer: new marked.Renderer(),
|
||||||
|
gfm: true,
|
||||||
|
tables: true,
|
||||||
|
breaks: false,
|
||||||
|
pedantic: false,
|
||||||
|
sanitize: false,
|
||||||
|
smartLists: true,
|
||||||
|
smartypants: false
|
||||||
|
});
|
||||||
|
|
||||||
// Init highlight JS
|
// Init highlight JS
|
||||||
hljs.initHighlightingOnLoad();
|
hljs.initHighlightingOnLoad();
|
||||||
|
|
||||||
// Markdown Renderer
|
// Markdown Renderer
|
||||||
MDR = {
|
var MDR = {
|
||||||
doc: null,
|
meta: null,
|
||||||
callback: WMD.convert,
|
md: null,
|
||||||
sanitize: true, // Override
|
sanitize: true, // Override
|
||||||
|
parse: function(md){ return marked(md); },
|
||||||
convert: function(md, sanitize){
|
convert: function(md, sanitize){
|
||||||
if (this.sanitize !== null) {
|
if (this.sanitize !== null) {
|
||||||
sanitize = this.sanitize;
|
sanitize = this.sanitize;
|
||||||
}
|
}
|
||||||
this.doc = this.callback(md);
|
this.md = md;
|
||||||
var html = this.doc.html;
|
this.processMeta();
|
||||||
|
try {
|
||||||
|
var html = this.parse(this.md);
|
||||||
|
} catch(e) {
|
||||||
|
return this.md;
|
||||||
|
}
|
||||||
if (sanitize) {
|
if (sanitize) {
|
||||||
// Causes some problems with inline styles
|
// Causes some problems with inline styles
|
||||||
html = html_sanitize(html, function(url) {
|
html = html_sanitize(html, function(url) {
|
||||||
|
@ -22,16 +76,29 @@ MDR = {
|
||||||
return id;
|
return id;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
html = this.hook(html);
|
//html = this.hook(html);
|
||||||
return html;
|
return html;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
processMeta: function() {
|
||||||
|
var doc = metaMarked(this.md);
|
||||||
|
this.md = doc.md;
|
||||||
|
this.meta = doc.meta;
|
||||||
|
if (this.meta) {
|
||||||
|
try {
|
||||||
|
var template = Handlebars.compile(this.md);
|
||||||
|
this.md = template(this.meta);
|
||||||
|
} catch(e) {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
hook: function(html) {
|
hook: function(html) {
|
||||||
if (!this.doc.metadata) {
|
if (!this.doc.meta) {
|
||||||
return html;
|
return html;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var template = Handlebars.compile(html);
|
var template = Handlebars.compile(html);
|
||||||
return template(this.doc.metadata);
|
return template(this.doc.meta);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
return html;
|
return html;
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,11 @@
|
||||||
</div>
|
</div>
|
||||||
{% for bundle in g.assets['js'] %}
|
{% for bundle in g.assets['js'] %}
|
||||||
{% assets bundle %}
|
{% assets bundle %}
|
||||||
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
|
{% if bundle == 'editor.js' %}
|
||||||
|
<script type="text/javascript" data-ace-base="src" charset="utf-8" src="{{ ASSET_URL }}"></script>
|
||||||
|
{% else %}
|
||||||
|
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
|
||||||
|
{% endif %}
|
||||||
{% endassets %}
|
{% endassets %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% block js %}{% endblock %}
|
{% block js %}{% endblock %}
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
});
|
});
|
||||||
revs.reverse();
|
revs.reverse();
|
||||||
revs = revs.join("..");
|
revs = revs.join("..");
|
||||||
location.href = "{{ config.BASE_URL }}/_compare/{{ name }}/" + revs;
|
location.href = "{{ config.RELATIVE_PATH }}/_compare/{{ name }}/" + revs;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in a new issue