From 3424cdd7713421d3fc88a501c1cd7606c943a05e Mon Sep 17 00:00:00 2001 From: Cheng-Han, Wu Date: Tue, 21 Jun 2016 21:44:06 +0800 Subject: Add support of embed pdf --- public/js/extra.js | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'public/js/extra.js') diff --git a/public/js/extra.js b/public/js/extra.js index e67eee53..b30a8cb0 100644 --- a/public/js/extra.js +++ b/public/js/extra.js @@ -83,6 +83,20 @@ function slugifyWithUTF8(text) { return newText; } +function isValidURL(str) { + var pattern = new RegExp('^(https?:\\/\\/)?' + // protocol + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name + '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path + '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string + '(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator + if (!pattern.test(str)) { + return false; + } else { + return true; + } +} + //parse meta function parseMeta(md, edit, view, toc, tocAffix) { var lang = null; @@ -403,6 +417,16 @@ function finishView(view) { } }); }); + //pdf + view.find(".pdf.raw").removeClass("raw") + .each(function (key, value) { + var url = $(value).attr('data-pdfurl'); + var inner = $('
'); + $(this).append(inner); + PDFObject.embed(url, inner, { + height: '400px' + }); + }); //render title document.title = renderTitle(view); } @@ -901,6 +925,20 @@ var speakerdeckPlugin = new Plugin( return div[0].outerHTML; } ); +//pdf +var pdfPlugin = new Plugin( + // regexp to match + /{%pdf\s*([\d\D]*?)\s*%}/, + + // this function will be called when something matches + function (match, utils) { + var pdfurl = match[1]; + if (!isValidURL(pdfurl)) return match[0]; + var div = $('
'); + div.attr('data-pdfurl', pdfurl); + return div[0].outerHTML; + } +); //yaml meta, from https://github.com/eugeneware/remarkable-meta function get(state, line) { @@ -949,4 +987,5 @@ md.use(vimeoPlugin); md.use(gistPlugin); md.use(tocPlugin); md.use(slidesharePlugin); -md.use(speakerdeckPlugin); \ No newline at end of file +md.use(speakerdeckPlugin); +md.use(pdfPlugin); \ No newline at end of file -- cgit v1.2.3