mirror of
https://github.com/arnaucube/blog.git
synced 2026-02-10 12:46:41 +01:00
Update to latest version
This commit is contained in:
133
public/js/drawdown.js
Normal file
133
public/js/drawdown.js
Normal file
@@ -0,0 +1,133 @@
|
||||
// Code from the repo: https://github.com/adamvleggett/drawdown
|
||||
//
|
||||
|
||||
/**
|
||||
* drawdown.js
|
||||
* (c) Adam Leggett
|
||||
*/
|
||||
|
||||
|
||||
;function markdown(src) {
|
||||
|
||||
var rx_lt = /</g;
|
||||
var rx_gt = />/g;
|
||||
var rx_space = /\t|\r|\uf8ff/g;
|
||||
var rx_escape = /\\([\\\|`*_{}\[\]()#+\-~])/g;
|
||||
var rx_hr = /^([*\-=_] *){3,}$/gm;
|
||||
var rx_blockquote = /\n *> *([^]*?)(?=(\n|$){2})/g;
|
||||
var rx_list = /\n( *)(?:[*\-+]|((\d+)|([a-z])|[A-Z])[.)]) +([^]*?)(?=(\n|$){2})/g;
|
||||
var rx_listjoin = /<\/(ol|ul)>\n\n<\1>/g;
|
||||
var rx_highlight = /(^|[^A-Za-z\d\\])(([*_])|(~)|(\^)|(--)|(\+\+)|`)(\2?)([^<]*?)\2\8(?!\2)(?=\W|_|$)/g;
|
||||
var rx_code = /\n((```|~~~).*\n?([^]*?)\n?\2|(( .*?\n)+))/g;
|
||||
var rx_link = /((!?)\[(.*?)\]\((.*?)( ".*")?\)|\\([\\`*_{}\[\]()#+\-.!~]))/g;
|
||||
var rx_table = /\n(( *\|.*?\| *\n)+)/g;
|
||||
var rx_thead = /^.*\n( *\|( *\:?-+\:?-+\:? *\|)* *\n|)/;
|
||||
var rx_row = /.*\n/g;
|
||||
var rx_cell = /\||(.*?[^\\])\|/g;
|
||||
var rx_heading = /(?=^|>|\n)([>\s]*?)(#{1,6}) (.*?)( #*)? *(?=\n|$)/g;
|
||||
var rx_para = /(?=^|>|\n)\s*\n+([^<]+?)\n+\s*(?=\n|<|$)/g;
|
||||
var rx_stash = /-\d+\uf8ff/g;
|
||||
|
||||
function replace(rex, fn) {
|
||||
src = src.replace(rex, fn);
|
||||
}
|
||||
|
||||
function element(tag, content) {
|
||||
return '<' + tag + '>' + content + '</' + tag + '>';
|
||||
}
|
||||
|
||||
function blockquote(src) {
|
||||
return src.replace(rx_blockquote, function(all, content) {
|
||||
return element('blockquote', blockquote(highlight(content.replace(/^ *> */gm, ''))));
|
||||
});
|
||||
}
|
||||
|
||||
function list(src) {
|
||||
return src.replace(rx_list, function(all, ind, ol, num, low, content) {
|
||||
var entry = element('li', highlight(content.split(
|
||||
RegExp('\n ?' + ind + '(?:(?:\\d+|[a-zA-Z])[.)]|[*\\-+]) +', 'g')).map(list).join('</li><li>')));
|
||||
|
||||
return '\n' + (ol
|
||||
? '<ol start="' + (num
|
||||
? ol + '">'
|
||||
: parseInt(ol,36) - 9 + '" style="list-style-type:' + (low ? 'low' : 'upp') + 'er-alpha">') + entry + '</ol>'
|
||||
: element('ul', entry));
|
||||
});
|
||||
}
|
||||
|
||||
function highlight(src) {
|
||||
return src.replace(rx_highlight, function(all, _, p1, emp, sub, sup, small, big, p2, content) {
|
||||
return _ + element(
|
||||
emp ? (p2 ? 'strong' : 'em')
|
||||
: sub ? (p2 ? 's' : 'sub')
|
||||
: sup ? 'sup'
|
||||
: small ? 'small'
|
||||
: big ? 'big'
|
||||
: 'code',
|
||||
highlight(content));
|
||||
});
|
||||
}
|
||||
|
||||
function unesc(str) {
|
||||
return str.replace(rx_escape, '$1');
|
||||
}
|
||||
|
||||
var stash = [];
|
||||
var si = 0;
|
||||
|
||||
src = '\n' + src + '\n';
|
||||
|
||||
replace(rx_lt, '<');
|
||||
replace(rx_gt, '>');
|
||||
replace(rx_space, ' ');
|
||||
|
||||
// blockquote
|
||||
src = blockquote(src);
|
||||
|
||||
// horizontal rule
|
||||
replace(rx_hr, '<hr/>');
|
||||
|
||||
// list
|
||||
src = list(src);
|
||||
replace(rx_listjoin, '');
|
||||
|
||||
// code
|
||||
replace(rx_code, function(all, p1, p2, p3, p4) {
|
||||
stash[--si] = element('pre', element('code', p3||p4.replace(/^ /gm, '')));
|
||||
return si + '\uf8ff';
|
||||
});
|
||||
|
||||
// link or image
|
||||
replace(rx_link, function(all, p1, p2, p3, p4, p5, p6) {
|
||||
stash[--si] = p4
|
||||
? p2
|
||||
? '<img src="' + p4 + '" alt="' + p3 + '"/>'
|
||||
: '<a href="' + p4 + '">' + unesc(highlight(p3)) + '</a>'
|
||||
: p6;
|
||||
return si + '\uf8ff';
|
||||
});
|
||||
|
||||
// table
|
||||
replace(rx_table, function(all, table) {
|
||||
var sep = table.match(rx_thead)[1];
|
||||
return '\n' + element('table',
|
||||
table.replace(rx_row, function(row, ri) {
|
||||
return row == sep ? '' : element('tr', row.replace(rx_cell, function(all, cell, ci) {
|
||||
return ci ? element(sep && !ri ? 'th' : 'td', unesc(highlight(cell || ''))) : ''
|
||||
}))
|
||||
})
|
||||
)
|
||||
});
|
||||
|
||||
// heading
|
||||
replace(rx_heading, function(all, _, p1, p2) { return _ + element('h' + p1.length, unesc(highlight(p2))) });
|
||||
|
||||
// paragraph
|
||||
replace(rx_para, function(all, content) { return element('p', unesc(highlight(content))) });
|
||||
|
||||
// stash
|
||||
replace(rx_stash, function(all) { return stash[parseInt(all)] });
|
||||
|
||||
return src.trim();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user