1
1
( function ( f ) { if ( typeof exports === "object" && typeof module !== "undefined" ) { module . exports = f ( ) } else if ( typeof define === "function" && define . amd ) { define ( [ ] , f ) } else { var g ; if ( typeof window !== "undefined" ) { g = window } else if ( typeof global !== "undefined" ) { g = global } else if ( typeof self !== "undefined" ) { g = self } else { g = this } g . markdownitHTML5Embed = f ( ) } } ) ( function ( ) { var define , module , exports ; return ( function e ( t , n , r ) { function s ( o , u ) { if ( ! n [ o ] ) { if ( ! t [ o ] ) { var a = typeof require == "function" && require ; if ( ! u && a ) return a ( o , ! 0 ) ; if ( i ) return i ( o , ! 0 ) ; var f = new Error ( "Cannot find module '" + o + "'" ) ; throw f . code = "MODULE_NOT_FOUND" , f } var l = n [ o ] = { exports :{ } } ; t [ o ] [ 0 ] . call ( l . exports , function ( e ) { var n = t [ o ] [ 1 ] [ e ] ; return s ( n ?n :e ) } , l , l . exports , e , t , n , r ) } return n [ o ] . exports } var i = typeof require == "function" && require ; for ( var o = 0 ; o < r . length ; o ++ ) s ( r [ o ] ) ; return s } ) ( { 1 :[ function ( require , module , exports ) {
2
- /*! markdown-it-html5-embed https://github.com/cmrd-senya/markdown-it-html5-embed @license MIT */
2
+ /*! markdown-it-html5-embed https://github.com/cmrd-senya/markdown-it-html5-embed @license MPLv2 */
3
3
// This is a plugin for markdown-it which adds support for embedding audio/video in the HTML5 way.
4
4
5
5
'use strict' ;
@@ -16,7 +16,7 @@ var Mimoza = require('mimoza');
16
16
// you have to provide a translation function via options.translateFn.
17
17
//
18
18
// The "untitled video" / "untitled audio" messages are only relevant to usage
19
- // inside Handlebars templates , where you can access the title between [] as
19
+ // inside alternative render functions , where you can access the title between [] as
20
20
// {{title}}, and this text is used if no title is provided.
21
21
var messages = {
22
22
en : {
@@ -70,7 +70,7 @@ function parseToken(tokens, idx, env) {
70
70
}
71
71
72
72
if ( parsed . mediaType !== null ) {
73
- // For use as titles in handlebars templates , we store the description
73
+ // For use as titles in alternative render functions , we store the description
74
74
// in parsed.title. For use as fallback text, we store it in parsed.fallback
75
75
// alongside the standard fallback text.
76
76
parsed . fallback = translate ( {
@@ -100,49 +100,39 @@ function isAllowedMimeType(parsed, options) {
100
100
( ! options . isAllowedMimeType || options . isAllowedMimeType ( [ parsed . mimeType , parsed . mediaType ] ) ) ;
101
101
}
102
102
103
- function renderMediaEmbed ( parsed , options ) {
104
- var attributes = options . attributes [ parsed . mediaType ] ;
105
- var useHandlebars = false ;
106
-
107
- if ( options . templateName ) {
108
- if ( typeof HandlebarsTemplates === "undefined" ) {
109
- console . log ( "handlebars_assets is not on the assets pipeline; fall back to the usual mode" ) ;
110
- } else {
111
- useHandlebars = true ;
112
- }
103
+ function isAllowedSchema ( parsed , options ) {
104
+ if ( ! options . isAllowedHttp && parsed . url . match ( '^http://' ) ) {
105
+ return false ;
113
106
}
107
+ return true ;
108
+ }
114
109
115
- if ( useHandlebars ) {
116
- return HandlebarsTemplates [ options . templateName ] ( {
117
- media_type : parsed . mediaType ,
118
- attributes : attributes ,
119
- mimetype : parsed . mimeType ,
120
- source_url : parsed . url ,
121
- title : parsed . title ,
122
- fallback : parsed . fallback ,
123
- needs_cover : parsed . mediaType === "video"
124
- } ) ;
125
- } else {
126
- return [ '<' + parsed . mediaType + ' ' + attributes + '>' ,
127
- '<source type="' + parsed . mimeType + '" src="' + parsed . url + '"></source>' ,
128
- parsed . fallback ,
129
- '</' + parsed . mediaType + '>'
130
- ] . join ( '\n' ) ;
131
- }
110
+ function isAllowedToEmbed ( parsed , options ) {
111
+ return isAllowedMimeType ( parsed , options ) && isAllowedSchema ( parsed , options ) ;
112
+ }
113
+
114
+ function renderMediaEmbed ( parsed , mediaAttributes ) {
115
+ var attributes = mediaAttributes [ parsed . mediaType ] ;
116
+
117
+ return [ '<' + parsed . mediaType + ' ' + attributes + '>' ,
118
+ '<source type="' + parsed . mimeType + '" src="' + parsed . url + '"></source>' ,
119
+ parsed . fallback ,
120
+ '</' + parsed . mediaType + '>'
121
+ ] . join ( '\n' ) ;
132
122
}
133
123
134
124
function html5EmbedRenderer ( tokens , idx , options , env , renderer , defaultRender ) {
135
125
var parsed = parseToken ( tokens , idx , env ) ;
136
126
137
- if ( ! isAllowedMimeType ( parsed , options . html5embed ) ) {
127
+ if ( ! isAllowedToEmbed ( parsed , options . html5embed ) ) {
138
128
return defaultRender ( tokens , idx , options , env , renderer ) ;
139
129
}
140
130
141
131
if ( parsed . isLink ) {
142
132
clearTokens ( tokens , idx + 1 ) ;
143
133
}
144
134
145
- return renderMediaEmbed ( parsed , options . html5embed ) ;
135
+ return renderMediaEmbed ( parsed , options . html5embed . attributes ) ;
146
136
}
147
137
148
138
function forEachLinkOpen ( state , action ) {
@@ -241,11 +231,11 @@ module.exports = function html5_embed_plugin(md, options) {
241
231
forEachLinkOpen ( gstate , function ( tokens , idx ) {
242
232
var parsed = parseToken ( tokens , idx , env ) ;
243
233
244
- if ( ! isAllowedMimeType ( parsed , options ) ) {
234
+ if ( ! isAllowedToEmbed ( parsed , options ) ) {
245
235
return ;
246
236
}
247
237
248
- result += renderMediaEmbed ( parsed , options ) ;
238
+ result += renderMediaEmbed ( parsed , options . attributes ) ;
249
239
} ) ;
250
240
if ( result . length ) {
251
241
result += "\n" ;
@@ -291,6 +281,10 @@ module.exports = function html5_embed_plugin(md, options) {
291
281
translate = typeof options . translateFn == 'function' ?
292
282
options . translateFn . bind ( options . messages ) :
293
283
translate . bind ( options . messages ) ;
284
+
285
+ if ( typeof options . renderFn == 'function' ) {
286
+ renderMediaEmbed = options . renderFn ;
287
+ }
294
288
} ;
295
289
296
290
} , { "mimoza" :2 } ] , 2 :[ function ( require , module , exports ) {
0 commit comments