can.Component.extend({
tag: 'x-markdown',
template: '<div class="markdown" style="display:none;"><content/></div><div>{{{html}}}</div>',
scope: {
html: can.compute(function() {
var markdown = this.attr('markdown');
var converter = new Showdown.converter();
var html = converter.makeHtml(markdown);
return html;
}),
markdown: ''
},
events: {
'inserted': function(el) {
var content = el.find('.markdown').html();
this.scope.attr('markdown', content);
},
}
});
$('#main').html(can.view('my-prose', {}));
<div id="main"></div>
<script id="my-prose" type="text/mustache">
<x-markdown>
# Hey there!
This is written in markdown.
- There are lists
- And _italics_
**And bold!**
</x-markdown>
</script>
x-markdown {
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue",
Helvetica, Arial, "Lucida Grande", sans-serif;
}
External resources loaded into this fiddle: