summaryrefslogtreecommitdiff
path: root/public/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
parent558304ff62a648e604b03afe3372ef9566aea850 (diff)
Add support of embed pdf
Diffstat (limited to 'public/js')
-rw-r--r--public/js/extra.js41
-rw-r--r--public/js/index.js18
2 files changed, 44 insertions, 15 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
diff --git a/public/js/index.js b/public/js/index.js
index dc5f928c..43296af4 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -152,6 +152,10 @@ var supportExternals = [
{
text: '{%speakerdeck speakerdeckid %}',
search: 'speakerdeck'
+ },
+ {
+ text: '{%pdf pdfurl %}',
+ search: 'pdf'
}
];
var supportExtraTags = [
@@ -1836,20 +1840,6 @@ function importFromUrl(url) {
});
}
-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;
- }
-}
-
//mode
ui.toolbar.mode.click(function () {
toggleMode();