Commit feb84573ce296270b336dfad200b704ead0e2a8e
1 parent
f77b0058
Exists in
pdf_file_html
insert js for enbeed pdf
Showing
3 changed files
with
640 additions
and
1 deletions
Show diff stats
... | ... | @@ -0,0 +1,511 @@ |
1 | +/* | |
2 | + * jQuery Media Plugin for converting elements into rich media content. | |
3 | + * | |
4 | + * Examples and documentation at: http://malsup.com/jquery/media/ | |
5 | + * Copyright (c) 2007-2010 M. Alsup | |
6 | + * Dual licensed under the MIT and GPL licenses: | |
7 | + * http://www.opensource.org/licenses/mit-license.php | |
8 | + * http://www.gnu.org/licenses/gpl.html | |
9 | + * | |
10 | + * @author: M. Alsup | |
11 | + * @version: 0.99 (05-JUN-2013) | |
12 | + * @requires jQuery v1.1.2 or later | |
13 | + * $Id: jquery.media.js 2460 2007-07-23 02:53:15Z malsup $ | |
14 | + * | |
15 | + * Supported Media Players: | |
16 | + * - Flash | |
17 | + * - Quicktime | |
18 | + * - Real Player | |
19 | + * - Silverlight | |
20 | + * - Windows Media Player | |
21 | + * - iframe | |
22 | + * | |
23 | + * Supported Media Formats: | |
24 | + * Any types supported by the above players, such as: | |
25 | + * Video: asf, avi, flv, mov, mpg, mpeg, mp4, qt, smil, swf, wmv, 3g2, 3gp | |
26 | + * Audio: aif, aac, au, gsm, mid, midi, mov, mp3, m4a, snd, rm, wav, wma | |
27 | + * Other: bmp, html, pdf, psd, qif, qtif, qti, tif, tiff, xaml | |
28 | + * | |
29 | + * Thanks to Mark Hicken and Brent Pedersen for helping me debug this on the Mac! | |
30 | + * Thanks to Dan Rossi for numerous bug reports and code bits! | |
31 | + * Thanks to Skye Giordano for several great suggestions! | |
32 | + * Thanks to Richard Connamacher for excellent improvements to the non-IE behavior! | |
33 | + */ | |
34 | +/*global SWFObject alert Sys */ | |
35 | +/*jshint forin:false */ | |
36 | +;(function($) { | |
37 | +"use strict"; | |
38 | + | |
39 | +var mode = document.documentMode || 0; | |
40 | +var msie = /MSIE/.test(navigator.userAgent); | |
41 | +var lameIE = msie && (/MSIE (6|7|8)\.0/.test(navigator.userAgent) || mode < 9); | |
42 | + | |
43 | +/** | |
44 | + * Chainable method for converting elements into rich media. | |
45 | + * | |
46 | + * @param options | |
47 | + * @param callback fn invoked for each matched element before conversion | |
48 | + * @param callback fn invoked for each matched element after conversion | |
49 | + */ | |
50 | +$.fn.media = function(options, f1, f2) { | |
51 | + if (options == 'undo') { | |
52 | + return this.each(function() { | |
53 | + var $this = $(this); | |
54 | + var html = $this.data('media.origHTML'); | |
55 | + if (html) | |
56 | + $this.replaceWith(html); | |
57 | + }); | |
58 | + } | |
59 | + | |
60 | + return this.each(function() { | |
61 | + if (typeof options == 'function') { | |
62 | + f2 = f1; | |
63 | + f1 = options; | |
64 | + options = {}; | |
65 | + } | |
66 | + var o = getSettings(this, options); | |
67 | + // pre-conversion callback, passes original element and fully populated options | |
68 | + if (typeof f1 == 'function') f1(this, o); | |
69 | + | |
70 | + var r = getTypesRegExp(); | |
71 | + var m = r.exec(o.src.toLowerCase()) || ['']; | |
72 | + var fn; | |
73 | + | |
74 | + if (o.type) | |
75 | + m[0] = o.type; | |
76 | + else | |
77 | + m.shift(); | |
78 | + | |
79 | + for (var i=0; i < m.length; i++) { | |
80 | + fn = m[i].toLowerCase(); | |
81 | + if (isDigit(fn[0])) fn = 'fn' + fn; // fns can't begin with numbers | |
82 | + if (!$.fn.media[fn]) | |
83 | + continue; // unrecognized media type | |
84 | + // normalize autoplay settings | |
85 | + var player = $.fn.media[fn+'_player']; | |
86 | + if (!o.params) o.params = {}; | |
87 | + if (player) { | |
88 | + var num = player.autoplayAttr == 'autostart'; | |
89 | + o.params[player.autoplayAttr || 'autoplay'] = num ? (o.autoplay ? 1 : 0) : o.autoplay ? true : false; | |
90 | + } | |
91 | + var $div = $.fn.media[fn](this, o); | |
92 | + | |
93 | + $div.css('backgroundColor', o.bgColor).width(o.width); | |
94 | + | |
95 | + if (o.canUndo) { | |
96 | + var $temp = $('<div></div>').append(this); | |
97 | + $div.data('media.origHTML', $temp.html()); // store original markup | |
98 | + } | |
99 | + | |
100 | + // post-conversion callback, passes original element, new div element and fully populated options | |
101 | + if (typeof f2 == 'function') f2(this, $div[0], o, player.name); | |
102 | + break; | |
103 | + } | |
104 | + }); | |
105 | +}; | |
106 | + | |
107 | +/** | |
108 | + * Non-chainable method for adding or changing file format / player mapping | |
109 | + * @name mapFormat | |
110 | + * @param String format File format extension (ie: mov, wav, mp3) | |
111 | + * @param String player Player name to use for the format (one of: flash, quicktime, realplayer, winmedia, silverlight or iframe | |
112 | + */ | |
113 | +$.fn.media.mapFormat = function(format, player) { | |
114 | + if (!format || !player || !$.fn.media.defaults.players[player]) return; // invalid | |
115 | + format = format.toLowerCase(); | |
116 | + if (isDigit(format[0])) format = 'fn' + format; | |
117 | + $.fn.media[format] = $.fn.media[player]; | |
118 | + $.fn.media[format+'_player'] = $.fn.media.defaults.players[player]; | |
119 | +}; | |
120 | + | |
121 | +// global defautls; override as needed | |
122 | +$.fn.media.defaults = { | |
123 | + standards: true, // use object tags only (no embeds for non-IE browsers) | |
124 | + canUndo: true, // tells plugin to store the original markup so it can be reverted via: $(sel).mediaUndo() | |
125 | + width: 400, | |
126 | + height: 400, | |
127 | + autoplay: 0, // normalized cross-player setting | |
128 | + bgColor: '#ffffff', // background color | |
129 | + params: { wmode: 'transparent'}, // added to object element as param elements; added to embed element as attrs | |
130 | + attrs: {}, // added to object and embed elements as attrs | |
131 | + flvKeyName: 'file', // key used for object src param (thanks to Andrea Ercolino) | |
132 | + flashvars: {}, // added to flash content as flashvars param/attr | |
133 | + flashVersion: '7', // required flash version | |
134 | + expressInstaller: null, // src for express installer | |
135 | + | |
136 | + // default flash video and mp3 player (@see: http://jeroenwijering.com/?item=Flash_Media_Player) | |
137 | + flvPlayer: 'mediaplayer.swf', | |
138 | + mp3Player: 'mediaplayer.swf', | |
139 | + | |
140 | + // @see http://msdn2.microsoft.com/en-us/library/bb412401.aspx | |
141 | + silverlight: { | |
142 | + inplaceInstallPrompt: 'true', // display in-place install prompt? | |
143 | + isWindowless: 'true', // windowless mode (false for wrapping markup) | |
144 | + framerate: '24', // maximum framerate | |
145 | + version: '0.9', // Silverlight version | |
146 | + onError: null, // onError callback | |
147 | + onLoad: null, // onLoad callback | |
148 | + initParams: null, // object init params | |
149 | + userContext: null // callback arg passed to the load callback | |
150 | + } | |
151 | +}; | |
152 | + | |
153 | +// Media Players; think twice before overriding | |
154 | +$.fn.media.defaults.players = { | |
155 | + flash: { | |
156 | + name: 'flash', | |
157 | + title: 'Flash', | |
158 | + types: 'flv,mp3,swf', | |
159 | + mimetype: 'application/x-shockwave-flash', | |
160 | + pluginspage: 'http://www.adobe.com/go/getflashplayer', | |
161 | + ieAttrs: { | |
162 | + classid: 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000', | |
163 | + type: 'application/x-oleobject', | |
164 | + codebase: 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + $.fn.media.defaults.flashVersion | |
165 | + } | |
166 | + }, | |
167 | + quicktime: { | |
168 | + name: 'quicktime', | |
169 | + title: 'QuickTime', | |
170 | + mimetype: 'video/quicktime', | |
171 | + pluginspage: 'http://www.apple.com/quicktime/download/', | |
172 | + types: 'aif,aiff,aac,au,bmp,gsm,mov,mid,midi,mpg,mpeg,mp4,m4a,psd,qt,qtif,qif,qti,snd,tif,tiff,wav,3g2,3gp', | |
173 | + ieAttrs: { | |
174 | + classid: 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', | |
175 | + codebase: 'http://www.apple.com/qtactivex/qtplugin.cab' | |
176 | + } | |
177 | + }, | |
178 | + realplayer: { | |
179 | + name: 'real', | |
180 | + title: 'RealPlayer', | |
181 | + types: 'ra,ram,rm,rpm,rv,smi,smil', | |
182 | + mimetype: 'audio/x-pn-realaudio-plugin', | |
183 | + pluginspage: 'http://www.real.com/player/', | |
184 | + autoplayAttr: 'autostart', | |
185 | + ieAttrs: { | |
186 | + classid: 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA' | |
187 | + } | |
188 | + }, | |
189 | + winmedia: { | |
190 | + name: 'winmedia', | |
191 | + title: 'Windows Media', | |
192 | + types: 'asx,asf,avi,wma,wmv', | |
193 | + mimetype: isFirefoxWMPPluginInstalled() ? 'application/x-ms-wmp' : 'application/x-mplayer2', | |
194 | + pluginspage: 'http://www.microsoft.com/Windows/MediaPlayer/', | |
195 | + autoplayAttr: 'autostart', | |
196 | + oUrl: 'url', | |
197 | + ieAttrs: { | |
198 | + classid: 'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6', | |
199 | + type: 'application/x-oleobject' | |
200 | + } | |
201 | + }, | |
202 | + // special cases | |
203 | + img: { | |
204 | + name: 'img', | |
205 | + title: 'Image', | |
206 | + types: 'gif,png,jpg' | |
207 | + }, | |
208 | + iframe: { | |
209 | + name: 'iframe', | |
210 | + types: 'html,pdf' | |
211 | + }, | |
212 | + silverlight: { | |
213 | + name: 'silverlight', | |
214 | + types: 'xaml' | |
215 | + } | |
216 | +}; | |
217 | + | |
218 | +// | |
219 | +// everything below here is private | |
220 | +// | |
221 | + | |
222 | + | |
223 | +// detection script for FF WMP plugin (http://www.therossman.org/experiments/wmp_play.html) | |
224 | +// (hat tip to Mark Ross for this script) | |
225 | +function isFirefoxWMPPluginInstalled() { | |
226 | + var plugs = navigator.plugins || []; | |
227 | + for (var i = 0; i < plugs.length; i++) { | |
228 | + var plugin = plugs[i]; | |
229 | + if (plugin['filename'] == 'np-mswmp.dll') | |
230 | + return true; | |
231 | + } | |
232 | + return false; | |
233 | +} | |
234 | + | |
235 | +var counter = 1; | |
236 | + | |
237 | +for (var player in $.fn.media.defaults.players) { | |
238 | + var types = $.fn.media.defaults.players[player].types; | |
239 | + $.each(types.split(','), function(i,o) { | |
240 | + if (isDigit(o[0])) o = 'fn' + o; | |
241 | + $.fn.media[o] = $.fn.media[player] = getGenerator(player); | |
242 | + $.fn.media[o+'_player'] = $.fn.media.defaults.players[player]; | |
243 | + }); | |
244 | +} | |
245 | + | |
246 | +function getTypesRegExp() { | |
247 | + var types = ''; | |
248 | + for (var player in $.fn.media.defaults.players) { | |
249 | + if (types.length) types += ','; | |
250 | + types += $.fn.media.defaults.players[player].types; | |
251 | + } | |
252 | + return new RegExp('\\.(' + types.replace(/,/ig,'|') + ')\\b'); | |
253 | +} | |
254 | + | |
255 | +function getGenerator(player) { | |
256 | + return function(el, options) { | |
257 | + return generate(el, options, player); | |
258 | + }; | |
259 | +} | |
260 | + | |
261 | +function isDigit(c) { | |
262 | + return '0123456789'.indexOf(c) > -1; | |
263 | +} | |
264 | + | |
265 | +// flatten all possible options: global defaults, meta, option obj | |
266 | +function getSettings(el, options) { | |
267 | + options = options || {}; | |
268 | + var a, n; | |
269 | + var $el = $(el); | |
270 | + var cls = el.className || ''; | |
271 | + // support metadata plugin (v1.0 and v2.0) | |
272 | + var meta = $.metadata ? $el.metadata() : $.meta ? $el.data() : {}; | |
273 | + meta = meta || {}; | |
274 | + var w = meta.width || parseInt(((cls.match(/\bw:(\d+)/)||[])[1]||0),10) || parseInt(((cls.match(/\bwidth:(\d+)/)||[])[1]||0),10); | |
275 | + var h = meta.height || parseInt(((cls.match(/\bh:(\d+)/)||[])[1]||0),10) || parseInt(((cls.match(/\bheight:(\d+)/)||[])[1]||0),10); | |
276 | + | |
277 | + if (w) meta.width = w; | |
278 | + if (h) meta.height = h; | |
279 | + if (cls) meta.cls = cls; | |
280 | + | |
281 | + // crank html5 style data attributes | |
282 | + var dataName = 'data-'; | |
283 | + for (var i=0; i < el.attributes.length; i++) { | |
284 | + a = el.attributes[i], n = $.trim(a.name); | |
285 | + var index = n.indexOf(dataName); | |
286 | + if (index === 0) { | |
287 | + n = n.substring(dataName.length); | |
288 | + meta[n] = a.value; | |
289 | + } | |
290 | + } | |
291 | + | |
292 | + a = $.fn.media.defaults; | |
293 | + var b = options; | |
294 | + var c = meta; | |
295 | + | |
296 | + var p = { params: { bgColor: options.bgColor || $.fn.media.defaults.bgColor } }; | |
297 | + var opts = $.extend({}, a, b, c); | |
298 | + $.each(['attrs','params','flashvars','silverlight'], function(i,o) { | |
299 | + opts[o] = $.extend({}, p[o] || {}, a[o] || {}, b[o] || {}, c[o] || {}); | |
300 | + }); | |
301 | + | |
302 | + if (typeof opts.caption == 'undefined') opts.caption = $el.text(); | |
303 | + | |
304 | + // make sure we have a source! | |
305 | + opts.src = opts.src || $el.attr('href') || $el.attr('src') || 'unknown'; | |
306 | + return opts; | |
307 | +} | |
308 | + | |
309 | +// | |
310 | +// Flash Player | |
311 | +// | |
312 | + | |
313 | +// generate flash using SWFObject library if possible | |
314 | +$.fn.media.swf = function(el, opts) { | |
315 | + var f, p; | |
316 | + if (!window.SWFObject && !window.swfobject) { | |
317 | + // roll our own | |
318 | + if (opts.flashvars) { | |
319 | + var a = []; | |
320 | + for (f in opts.flashvars) | |
321 | + a.push(f + '=' + opts.flashvars[f]); | |
322 | + if (!opts.params) opts.params = {}; | |
323 | + opts.params.flashvars = a.join('&'); | |
324 | + } | |
325 | + return generate(el, opts, 'flash'); | |
326 | + } | |
327 | + | |
328 | + var id = el.id ? (' id="'+el.id+'"') : ''; | |
329 | + var cls = opts.cls ? (' class="' + opts.cls + '"') : ''; | |
330 | + var $div = $('<div' + id + cls + '>'); | |
331 | + | |
332 | + // swfobject v2+ | |
333 | + if (window.swfobject) { | |
334 | + $(el).after($div).appendTo($div); | |
335 | + if (!el.id) el.id = 'movie_player_' + counter++; | |
336 | + | |
337 | + // replace el with swfobject content | |
338 | + window.swfobject.embedSWF(opts.src, el.id, opts.width, opts.height, opts.flashVersion, | |
339 | + opts.expressInstaller, opts.flashvars, opts.params, opts.attrs); | |
340 | + } | |
341 | + // swfobject < v2 | |
342 | + else { | |
343 | + $(el).after($div).remove(); | |
344 | + var so = new SWFObject(opts.src, 'movie_player_' + counter++, opts.width, opts.height, opts.flashVersion, opts.bgColor); | |
345 | + if (opts.expressInstaller) so.useExpressInstall(opts.expressInstaller); | |
346 | + | |
347 | + for (p in opts.params) | |
348 | + if (p != 'bgColor') so.addParam(p, opts.params[p]); | |
349 | + for (f in opts.flashvars) | |
350 | + so.addVariable(f, opts.flashvars[f]); | |
351 | + so.write($div[0]); | |
352 | + } | |
353 | + | |
354 | + if (opts.caption) $('<div>').appendTo($div).html(opts.caption); | |
355 | + return $div; | |
356 | +}; | |
357 | + | |
358 | +// map flv and mp3 files to the swf player by default | |
359 | +$.fn.media.flv = $.fn.media.mp3 = function(el, opts) { | |
360 | + var src = opts.src; | |
361 | + var player = /\.mp3\b/i.test(src) ? opts.mp3Player : opts.flvPlayer; | |
362 | + var key = opts.flvKeyName; | |
363 | + src = encodeURIComponent(src); | |
364 | + opts.src = player; | |
365 | + opts.src = opts.src + '?'+key+'=' + (src); | |
366 | + var srcObj = {}; | |
367 | + srcObj[key] = src; | |
368 | + opts.flashvars = $.extend({}, srcObj, opts.flashvars ); | |
369 | + return $.fn.media.swf(el, opts); | |
370 | +}; | |
371 | + | |
372 | +// | |
373 | +// Silverlight | |
374 | +// | |
375 | +$.fn.media.xaml = function(el, opts) { | |
376 | + if (!window.Sys || !window.Sys.Silverlight) { | |
377 | + if ($.fn.media.xaml.warning) return; | |
378 | + $.fn.media.xaml.warning = 1; | |
379 | + alert('You must include the Silverlight.js script.'); | |
380 | + return; | |
381 | + } | |
382 | + | |
383 | + var props = { | |
384 | + width: opts.width, | |
385 | + height: opts.height, | |
386 | + background: opts.bgColor, | |
387 | + inplaceInstallPrompt: opts.silverlight.inplaceInstallPrompt, | |
388 | + isWindowless: opts.silverlight.isWindowless, | |
389 | + framerate: opts.silverlight.framerate, | |
390 | + version: opts.silverlight.version | |
391 | + }; | |
392 | + var events = { | |
393 | + onError: opts.silverlight.onError, | |
394 | + onLoad: opts.silverlight.onLoad | |
395 | + }; | |
396 | + | |
397 | + var id1 = el.id ? (' id="'+el.id+'"') : ''; | |
398 | + var id2 = opts.id || 'AG' + counter++; | |
399 | + // convert element to div | |
400 | + var cls = opts.cls ? (' class="' + opts.cls + '"') : ''; | |
401 | + var $div = $('<div' + id1 + cls + '>'); | |
402 | + $(el).after($div).remove(); | |
403 | + | |
404 | + Sys.Silverlight.createObjectEx({ | |
405 | + source: opts.src, | |
406 | + initParams: opts.silverlight.initParams, | |
407 | + userContext: opts.silverlight.userContext, | |
408 | + id: id2, | |
409 | + parentElement: $div[0], | |
410 | + properties: props, | |
411 | + events: events | |
412 | + }); | |
413 | + | |
414 | + if (opts.caption) $('<div>').appendTo($div).html(opts.caption); | |
415 | + return $div; | |
416 | +}; | |
417 | + | |
418 | +// | |
419 | +// generate object/embed markup | |
420 | +// | |
421 | +function generate(el, opts, player) { | |
422 | + var $el = $(el); | |
423 | + var o = $.fn.media.defaults.players[player]; | |
424 | + var a, key, v; | |
425 | + | |
426 | + if (player == 'iframe') { | |
427 | + o = $('<iframe' + ' width="' + opts.width + '" height="' + opts.height + '" >'); | |
428 | + o.attr('src', opts.src); | |
429 | + o.css('backgroundColor', o.bgColor); | |
430 | + } | |
431 | + else if (player == 'img') { | |
432 | + o = $('<img>'); | |
433 | + o.attr('src', opts.src); | |
434 | + if (opts.width) | |
435 | + o.attr('width', opts.width); | |
436 | + if (opts.height) | |
437 | + o.attr('height', opts.height); | |
438 | + o.css('backgroundColor', o.bgColor); | |
439 | + } | |
440 | + else if (lameIE) { | |
441 | + a = ['<object width="' + opts.width + '" height="' + opts.height + '" ']; | |
442 | + for (key in opts.attrs) | |
443 | + a.push(key + '="'+opts.attrs[key]+'" '); | |
444 | + for (key in o.ieAttrs || {}) { | |
445 | + v = o.ieAttrs[key]; | |
446 | + if (key == 'codebase' && window.location.protocol == 'https:') | |
447 | + v = v.replace('http','https'); | |
448 | + a.push(key + '="'+v+'" '); | |
449 | + } | |
450 | + a.push('></ob'+'ject'+'>'); | |
451 | + var p = ['<param name="' + (o.oUrl || 'src') +'" value="' + opts.src + '">']; | |
452 | + for (key in opts.params) | |
453 | + p.push('<param name="'+ key +'" value="' + opts.params[key] + '">'); | |
454 | + o = document.createElement(a.join('')); | |
455 | + for (var i=0; i < p.length; i++) | |
456 | + o.appendChild(document.createElement(p[i])); | |
457 | + } | |
458 | + else if (opts.standards) { | |
459 | + // Rewritten to be standards compliant by Richard Connamacher | |
460 | + a = ['<object type="' + o.mimetype +'" width="' + opts.width + '" height="' + opts.height +'"']; | |
461 | + if (opts.src) a.push(' data="' + opts.src + '" '); | |
462 | + if (msie) { | |
463 | + for (key in o.ieAttrs || {}) { | |
464 | + v = o.ieAttrs[key]; | |
465 | + if (key == 'codebase' && window.location.protocol == 'https:') | |
466 | + v = v.replace('http','https'); | |
467 | + a.push(key + '="'+v+'" '); | |
468 | + } | |
469 | + } | |
470 | + a.push('>'); | |
471 | + a.push('<param name="' + (o.oUrl || 'src') +'" value="' + opts.src + '">'); | |
472 | + for (key in opts.params) { | |
473 | + if (key == 'wmode' && player != 'flash') // FF3/Quicktime borks on wmode | |
474 | + continue; | |
475 | + a.push('<param name="'+ key +'" value="' + opts.params[key] + '">'); | |
476 | + } | |
477 | + // Alternate HTML | |
478 | + a.push('<div><p><strong>'+o.title+' Required</strong></p><p>'+o.title+' is required to view this media. <a href="'+o.pluginspage+'">Download Here</a>.</p></div>'); | |
479 | + a.push('</ob'+'ject'+'>'); | |
480 | + } | |
481 | + else { | |
482 | + a = ['<embed width="' + opts.width + '" height="' + opts.height + '" style="display:block"']; | |
483 | + if (opts.src) a.push(' src="' + opts.src + '" '); | |
484 | + for (key in opts.attrs) | |
485 | + a.push(key + '="'+opts.attrs[key]+'" '); | |
486 | + for (key in o.eAttrs || {}) | |
487 | + a.push(key + '="'+o.eAttrs[key]+'" '); | |
488 | + for (key in opts.params) { | |
489 | + if (key == 'wmode' && player != 'flash') // FF3/Quicktime borks on wmode | |
490 | + continue; | |
491 | + a.push(key + '="'+opts.params[key]+'" '); | |
492 | + } | |
493 | + a.push('></em'+'bed'+'>'); | |
494 | + } | |
495 | + // convert element to div | |
496 | + var id = el.id ? (' id="'+el.id+'"') : ''; | |
497 | + var cls = opts.cls ? (' class="' + opts.cls + '"') : ''; | |
498 | + var $div = $('<div' + id + cls + '>'); | |
499 | + $el.after($div).remove(); | |
500 | + if (lameIE || player == 'iframe' || player == 'img') | |
501 | + $div.append(o); | |
502 | + else | |
503 | + $div.html(a.join('')); | |
504 | + | |
505 | + if (opts.caption) | |
506 | + $('<div>').appendTo($div).html(opts.caption); | |
507 | + return $div; | |
508 | +} | |
509 | + | |
510 | + | |
511 | +})(jQuery); | |
0 | 512 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,120 @@ |
1 | +/* | |
2 | + * Metadata - jQuery plugin for parsing metadata from elements | |
3 | + * | |
4 | + * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer | |
5 | + * | |
6 | + * Dual licensed under the MIT and GPL licenses: | |
7 | + * http://www.opensource.org/licenses/mit-license.php | |
8 | + * http://www.gnu.org/licenses/gpl.html | |
9 | + * | |
10 | + * Revision: $Id$ | |
11 | + * | |
12 | + */ | |
13 | + | |
14 | +/** | |
15 | + * Sets the type of metadata to use. Metadata is encoded in JSON, and each property | |
16 | + * in the JSON will become a property of the element itself. | |
17 | + * | |
18 | + * There are three supported types of metadata storage: | |
19 | + * | |
20 | + * attr: Inside an attribute. The name parameter indicates *which* attribute. | |
21 | + * | |
22 | + * class: Inside the class attribute, wrapped in curly braces: { } | |
23 | + * | |
24 | + * elem: Inside a child element (e.g. a script tag). The | |
25 | + * name parameter indicates *which* element. | |
26 | + * | |
27 | + * The metadata for an element is loaded the first time the element is accessed via jQuery. | |
28 | + * | |
29 | + * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements | |
30 | + * matched by expr, then redefine the metadata type and run another $(expr) for other elements. | |
31 | + * | |
32 | + * @name $.meta.setType | |
33 | + * | |
34 | + * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p> | |
35 | + * @before $.meta.setType("class") | |
36 | + * @after $("#one").data().item_id == 1; $("#one")[0].item_label == "Label" | |
37 | + * @desc Reads metadata from the class attribute | |
38 | + * | |
39 | + * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p> | |
40 | + * @before $.meta.setType("attr", "data") | |
41 | + * @after $("#one").data().item_id == 1; $("#one")[0].item_label == "Label" | |
42 | + * @desc Reads metadata from a "data" attribute | |
43 | + * | |
44 | + * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p> | |
45 | + * @before $.meta.setType("elem", "script") | |
46 | + * @after $("#one").data().item_id == 1; $("#one")[0].item_label == "Label" | |
47 | + * @desc Reads metadata from a nested script element | |
48 | + * | |
49 | + * @param String type The encoding type | |
50 | + * @param String name The name of the attribute to be used to get metadata (optional) | |
51 | + * @cat Plugins/Metadata | |
52 | + * @descr Sets the type of encoding to be used when loading metadata for the first time | |
53 | + * @type undefined | |
54 | + * @see data() | |
55 | + */ | |
56 | + | |
57 | +(function($) { | |
58 | + // settings | |
59 | + $.meta = { | |
60 | + type: "class", | |
61 | + name: "data", | |
62 | + setType: function(type,name){ | |
63 | + this.type = type; | |
64 | + this.name = name; | |
65 | + }, | |
66 | + cre: /({.*})/, | |
67 | + single: 'data' | |
68 | + }; | |
69 | + | |
70 | + // reference to original setArray() | |
71 | + var setArray = $.fn.setArray; | |
72 | + | |
73 | + // define new setArray() | |
74 | + $.fn.setArray = function(arr){ | |
75 | + return setArray.apply( this, arguments ).each(function(){ | |
76 | + if ( this.nodeType == 9 || $.isXMLDoc(this) || this.metaDone ) return; | |
77 | + | |
78 | + var data = "{}"; | |
79 | + | |
80 | + if ( $.meta.type == "class" ) { | |
81 | + var m = $.meta.cre.exec( this.className ); | |
82 | + if ( m ) | |
83 | + data = m[1]; | |
84 | + } else if ( $.meta.type == "elem" ) { | |
85 | + if( !this.getElementsByTagName ) return; | |
86 | + var e = this.getElementsByTagName($.meta.name); | |
87 | + if ( e.length ) | |
88 | + data = $.trim(e[0].innerHTML); | |
89 | + } else if ( this.getAttribute != undefined ) { | |
90 | + var attr = this.getAttribute( $.meta.name ); | |
91 | + if ( attr ) | |
92 | + data = attr; | |
93 | + } | |
94 | + | |
95 | + if ( !/^{/.test( data ) ) | |
96 | + data = "{" + data + "}"; | |
97 | + | |
98 | + eval("data = " + data); | |
99 | + | |
100 | + if ( $.meta.single ) | |
101 | + this[ $.meta.single ] = data; | |
102 | + else | |
103 | + $.extend( this, data ); | |
104 | + | |
105 | + this.metaDone = true; | |
106 | + }); | |
107 | + }; | |
108 | + | |
109 | + /** | |
110 | + * Returns the metadata object for the first member of the jQuery object. | |
111 | + * | |
112 | + * @name data | |
113 | + * @descr Returns element's metadata object | |
114 | + * @type jQuery | |
115 | + * @cat Plugins/Metadata | |
116 | + */ | |
117 | + $.fn.data = function(){ | |
118 | + return this[0][$.meta.single || "data"]; | |
119 | + }; | |
120 | +})(jQuery); | |
0 | 121 | \ No newline at end of file | ... | ... |
courses/templates/topic/file_material_view.html
... | ... | @@ -14,6 +14,14 @@ |
14 | 14 | |
15 | 15 | |
16 | 16 | {% block content %} |
17 | +<!-- Julio Toscano colocou esse codigo aqui como teste até que funcionasse e depois ele iria organizar. Obrigado --> | |
18 | +<script type="text/javascript" src="{% static 'js/jquery.media.js'%}"></script> | |
19 | +<script type="text/javascript" src="{% static 'js/jquery.metadata.js'%}"></script> | |
20 | +<script type="text/javascript"> | |
21 | + $(function() { | |
22 | + $('a.media').media({width:500, height:400}); | |
23 | + }); | |
24 | +</script> | |
17 | 25 | |
18 | 26 | <div class="col-md-12"> |
19 | 27 | <div><div class="well"> |
... | ... | @@ -22,7 +30,7 @@ |
22 | 30 | <h2 class="resource_inline"><b>Book 1</b></h2> |
23 | 31 | </div> |
24 | 32 | <div class="col-md-offset-2 col-md-8"> |
25 | - <a href="{{ file.file_url }}">{{ file.url }}</a> | |
33 | + <a class="media" href="{{ file.file_url }}">{{file}}</a> | |
26 | 34 | </div> |
27 | 35 | </div> |
28 | 36 | </div></div> | ... | ... |