summaryrefslogtreecommitdiff
path: root/public/js/extra.js
diff options
context:
space:
mode:
authorCheng-Han, Wu2016-06-21 21:44:06 +0800
committerCheng-Han, Wu2016-06-21 21:44:06 +0800
commit3424cdd7713421d3fc88a501c1cd7606c943a05e (patch)
tree9dbdda181307dfe9903bdd05aedee1a0c070ede1 /public/js/extra.js
parent558304ff62a648e604b03afe3372ef9566aea850 (diff)
Add support of embed pdf
Diffstat (limited to 'public/js/extra.js')
-rw-r--r--public/js/extra.js41
1 files changed, 40 insertions, 1 deletions
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 = $('<div></div>');
+ $(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 class="pdf raw"></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