@@ -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
87101function 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+ / { % p d f \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
906944function get ( state , line ) {
@@ -949,4 +987,5 @@ md.use(vimeoPlugin);
949987md . use ( gistPlugin ) ;
950988md . use ( tocPlugin ) ;
951989md . use ( slidesharePlugin ) ;
952- md . use ( speakerdeckPlugin ) ;
990+ md . use ( speakerdeckPlugin ) ;
991+ md . use ( pdfPlugin ) ;
0 commit comments