Skip to content

Commit 3424cdd

Browse files
committed
Add support of embed pdf
1 parent 558304f commit 3424cdd

File tree

6 files changed

+52
-16
lines changed

6 files changed

+52
-16
lines changed

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@
5555
"list.js": "^1.2.0",
5656
"store-js": "store.js#^1.3.20",
5757
"string": "^3.3.1",
58-
"visibilityjs": "^1.2.3"
58+
"visibilityjs": "^1.2.3",
59+
"pdfobject": "pdfobject2#*"
5960
},
6061
"resolutions": {
6162
"jquery": "~2.2.4"

public/docs/features.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ alert(s);
186186
### Speakerdeck
187187
{%speakerdeck sugarenia/xxlcss-how-to-scale-css-and-keep-your-sanity %}
188188

189+
### PDF
190+
**Caution: this might be blocked by your browser if not using https url.**
191+
{%pdf https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf %}
192+
189193
## MathJax
190194

191195
You can render *LaTeX* mathematical expressions using **MathJax**, as on [math.stackexchange.com](http://math.stackexchange.com/):

public/js/extra.js

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,20 @@ function slugifyWithUTF8(text) {
8383
return newText;
8484
}
8585

86+
function isValidURL(str) {
87+
var pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
88+
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
89+
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
90+
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
91+
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
92+
'(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
93+
if (!pattern.test(str)) {
94+
return false;
95+
} else {
96+
return true;
97+
}
98+
}
99+
86100
//parse meta
87101
function parseMeta(md, edit, view, toc, tocAffix) {
88102
var lang = null;
@@ -403,6 +417,16 @@ function finishView(view) {
403417
}
404418
});
405419
});
420+
//pdf
421+
view.find(".pdf.raw").removeClass("raw")
422+
.each(function (key, value) {
423+
var url = $(value).attr('data-pdfurl');
424+
var inner = $('<div></div>');
425+
$(this).append(inner);
426+
PDFObject.embed(url, inner, {
427+
height: '400px'
428+
});
429+
});
406430
//render title
407431
document.title = renderTitle(view);
408432
}
@@ -901,6 +925,20 @@ var speakerdeckPlugin = new Plugin(
901925
return div[0].outerHTML;
902926
}
903927
);
928+
//pdf
929+
var pdfPlugin = new Plugin(
930+
// regexp to match
931+
/{%pdf\s*([\d\D]*?)\s*%}/,
932+
933+
// this function will be called when something matches
934+
function (match, utils) {
935+
var pdfurl = match[1];
936+
if (!isValidURL(pdfurl)) return match[0];
937+
var div = $('<div class="pdf raw"></div>');
938+
div.attr('data-pdfurl', pdfurl);
939+
return div[0].outerHTML;
940+
}
941+
);
904942

905943
//yaml meta, from https://github.com/eugeneware/remarkable-meta
906944
function get(state, line) {
@@ -949,4 +987,5 @@ md.use(vimeoPlugin);
949987
md.use(gistPlugin);
950988
md.use(tocPlugin);
951989
md.use(slidesharePlugin);
952-
md.use(speakerdeckPlugin);
990+
md.use(speakerdeckPlugin);
991+
md.use(pdfPlugin);

public/js/index.js

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ var supportExternals = [
152152
{
153153
text: '{%speakerdeck speakerdeckid %}',
154154
search: 'speakerdeck'
155+
},
156+
{
157+
text: '{%pdf pdfurl %}',
158+
search: 'pdf'
155159
}
156160
];
157161
var supportExtraTags = [
@@ -1836,20 +1840,6 @@ function importFromUrl(url) {
18361840
});
18371841
}
18381842

1839-
function isValidURL(str) {
1840-
var pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
1841-
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
1842-
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
1843-
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
1844-
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
1845-
'(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
1846-
if (!pattern.test(str)) {
1847-
return false;
1848-
} else {
1849-
return true;
1850-
}
1851-
}
1852-
18531843
//mode
18541844
ui.toolbar.mode.click(function () {
18551845
toggleMode();

public/views/foot.ejs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<script src="<%- url %>/vendor/sequence-diagrams/sequence-diagram-min.js" defer></script>
6060
<script src="<%- url %>/vendor/flowchart/release/flowchart.min.js" defer></script>
6161
<script src="<%- url %>/vendor/viz.js/viz.js" defer></script>
62+
<script src="<%- url %>/vendor/pdfobject/pdfobject.min.js" defer></script>
6263
<script src="<%- url %>/vendor/file-saver/FileSaver.min.js" defer></script>
6364
<script src="<%- url %>/vendor/store-js/store.min.js" defer></script>
6465
<script src="<%- url %>/vendor/js-url/url.min.js" defer></script>

public/views/pretty.ejs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
<script src="<%- url %>/vendor/sequence-diagrams/sequence-diagram-min.js" defer></script>
117117
<script src="<%- url %>/vendor/flowchart/release/flowchart.min.js" defer></script>
118118
<script src="<%- url %>/vendor/viz.js/viz.js" defer></script>
119+
<script src="<%- url %>/vendor/pdfobject/pdfobject.min.js" defer></script>
119120
<script src="<%- url %>/vendor/md-toc.js" defer></script>
120121
<script src="<%- url %>/js/common.js" defer></script>
121122
<script src="<%- url %>/js/extra.js" defer></script>

0 commit comments

Comments
 (0)