3 * http://www.mediaelementjs.com/
5 * Wrapper that mimics native HTML5 MediaElement (audio and video)
6 * using a variety of technologies (pure JavaScript, Flash, iframe)
8 * Copyright 2010-2017, John Dyer (http://j.hn/)
11 */(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(_dereq_
,module
,exports
){
14 var DailyMotionApi
= {
21 enqueueIframe
: function enqueueIframe(settings
) {
23 if (DailyMotionApi
.isLoaded
) {
24 DailyMotionApi
.createIframe(settings
);
26 DailyMotionApi
.loadIframeApi();
27 DailyMotionApi
.iframeQueue
.push(settings
);
31 loadIframeApi
: function loadIframeApi() {
32 if (!DailyMotionApi
.isSDKStarted
) {
33 mejs
.Utils
.loadScript('https://api.dmcdn.net/all.js');
34 DailyMotionApi
.isSDKStarted
= true;
38 apiReady
: function apiReady() {
40 DailyMotionApi
.isLoaded
= true;
41 DailyMotionApi
.isSDKLoaded
= true;
43 while (DailyMotionApi
.iframeQueue
.length
> 0) {
44 var settings
= DailyMotionApi
.iframeQueue
.pop();
47 apiKey
: settings
.apiKey
,
48 status
: settings
.status
,
49 cookie
: settings
.cookie
52 DailyMotionApi
.createIframe(settings
);
56 createIframe
: function createIframe(settings
) {
58 var player
= DM
.player(settings
.container
, {
59 height
: settings
.height
|| '100%',
60 width
: settings
.width
|| '100%',
61 video
: settings
.videoId
,
62 params
: Object
.assign({ api
: true }, settings
.params
),
66 player
.addEventListener('apiready', function () {
67 window
['__ready__' + settings
.id
](player
, { paused
: true, ended
: false });
71 getDailyMotionId
: function getDailyMotionId(url
) {
72 var parts
= url
.split('/'),
73 lastPart
= parts
[parts
.length
- 1],
74 dashParts
= lastPart
.split('_');
80 var DailyMotionIframeRenderer
= {
81 name
: 'dailymotion_iframe',
83 prefix
: 'dailymotion_iframe',
100 canPlayType
: function canPlayType(type
) {
101 return ~['video/dailymotion', 'video/x-dailymotion'].indexOf(type
.toLowerCase());
104 create
: function create(mediaElement
, options
, mediaFiles
) {
114 dm
.options
= options
;
115 dm
.id
= mediaElement
.id
+ '_' + options
.prefix
;
116 dm
.mediaElement
= mediaElement
;
118 var props
= mejs
.html5media
.properties
,
119 assignGettersSetters
= function assignGettersSetters(propName
) {
121 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
123 dm
['get' + capName
] = function () {
124 if (dmPlayer
!== null) {
129 return dmPlayer
.currentTime
;
131 return isNaN(dmPlayer
.duration
) ? 0 : dmPlayer
.duration
;
133 return dmPlayer
.volume
;
135 return dmPlayer
.paused
;
137 return dmPlayer
.ended
;
139 return dmPlayer
.muted
;
141 var percentLoaded
= dmPlayer
.bufferedTime
,
142 duration
= dmPlayer
.duration
;
144 start
: function start() {
147 end
: function end() {
148 return percentLoaded
/ duration
;
153 return mediaElement
.originalNode
.getAttribute('src');
164 dm
['set' + capName
] = function (value
) {
165 if (dmPlayer
!== null) {
168 var url
= typeof value
=== 'string' ? value
: value
[0].src
;
169 dmPlayer
.load(DailyMotionApi
.getDailyMotionId(url
));
172 dmPlayer
.seek(value
);
175 dmPlayer
.setMuted(value
);
176 setTimeout(function () {
177 var event
= mejs
.Utils
.createEvent('volumechange', dm
);
178 mediaElement
.dispatchEvent(event
);
182 dmPlayer
.setVolume(value
);
183 setTimeout(function () {
184 var event
= mejs
.Utils
.createEvent('volumechange', dm
);
185 mediaElement
.dispatchEvent(event
);
189 var event
= mejs
.Utils
.createEvent('canplay', dm
);
190 mediaElement
.dispatchEvent(event
);
197 apiStack
.push({ type
: 'set', propName
: propName
, value
: value
});
202 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
203 assignGettersSetters(props
[i
]);
206 var methods
= mejs
.html5media
.methods
,
207 assignMethods
= function assignMethods(methodName
) {
208 dm
[methodName
] = function () {
209 if (dmPlayer
!== null) {
210 switch (methodName
) {
212 return dmPlayer
.play();
214 return dmPlayer
.pause();
219 apiStack
.push({ type
: 'call', methodName
: methodName
});
224 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
225 assignMethods(methods
[_i
]);
228 window
['__ready__' + dm
.id
] = function (_dmPlayer
) {
230 mediaElement
.dmPlayer
= dmPlayer
= _dmPlayer
;
232 if (apiStack
.length
) {
233 for (var _i2
= 0, _total2
= apiStack
.length
; _i2
< _total2
; _i2
++) {
235 var stackItem
= apiStack
[_i2
];
237 if (stackItem
.type
=== 'set') {
238 var propName
= stackItem
.propName
,
239 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
241 dm
['set' + capName
](stackItem
.value
);
242 } else if (stackItem
.type
=== 'call') {
243 dm
[stackItem
.methodName
]();
248 dmIframe
= document
.getElementById(dm
.id
);
250 events
= ['mouseover', 'mouseout'];
251 var assignEvents
= function assignEvents(e
) {
252 var event
= mejs
.Utils
.createEvent(e
.type
, dm
);
253 mediaElement
.dispatchEvent(event
);
256 for (var _i3
= 0, _total3
= events
.length
; _i3
< _total3
; _i3
++) {
257 dmIframe
.addEventListener(events
[_i3
], assignEvents
, false);
260 if (mediaElement
.originalNode
.muted
) {
261 dmPlayer
.setMuted(true);
262 dmPlayer
.setVolume(0);
265 events
= mejs
.html5media
.events
;
266 events
= events
.concat(['click', 'mouseover', 'mouseout']);
267 var assignNativeEvents
= function assignNativeEvents(eventName
) {
268 if (eventName
!== 'ended') {
269 dmPlayer
.addEventListener(eventName
, function (e
) {
270 var event
= mejs
.Utils
.createEvent(e
.type
, dmPlayer
);
271 mediaElement
.dispatchEvent(event
);
276 for (var _i4
= 0, _total4
= events
.length
; _i4
< _total4
; _i4
++) {
277 assignNativeEvents(events
[_i4
]);
280 dmPlayer
.addEventListener('ad_start', function () {
281 var event
= mejs
.Utils
.createEvent('play', dmPlayer
);
282 mediaElement
.dispatchEvent(event
);
284 event
= mejs
.Utils
.createEvent('progress', dmPlayer
);
285 mediaElement
.dispatchEvent(event
);
287 event
= mejs
.Utils
.createEvent('timeupdate', dmPlayer
);
288 mediaElement
.dispatchEvent(event
);
290 dmPlayer
.addEventListener('ad_timeupdate', function () {
291 var event
= mejs
.Utils
.createEvent('timeupdate', dmPlayer
);
292 mediaElement
.dispatchEvent(event
);
294 dmPlayer
.addEventListener('ad_pause', function () {
295 var event
= mejs
.Utils
.createEvent('pause', dmPlayer
);
296 mediaElement
.dispatchEvent(event
);
298 dmPlayer
.addEventListener('ad_end', function () {
299 var event
= mejs
.Utils
.createEvent('ended', dmPlayer
);
300 mediaElement
.dispatchEvent(event
);
302 dmPlayer
.addEventListener('start', function () {
303 if (mediaElement
.originalNode
.muted
) {
304 dmPlayer
.setMuted(true);
307 dmPlayer
.addEventListener('video_start', function () {
308 var event
= mejs
.Utils
.createEvent('play', dmPlayer
);
309 mediaElement
.dispatchEvent(event
);
311 dmPlayer
.addEventListener('ad_timeupdate', function () {
312 var event
= mejs
.Utils
.createEvent('timeupdate', dmPlayer
);
313 mediaElement
.dispatchEvent(event
);
315 dmPlayer
.addEventListener('video_end', function () {
316 var event
= mejs
.Utils
.createEvent('ended', dmPlayer
);
317 mediaElement
.dispatchEvent(event
);
319 if (mediaElement
.originalNode
.getAttribute('loop')) {
324 var initEvents
= ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
326 for (var _i5
= 0, _total5
= initEvents
.length
; _i5
< _total5
; _i5
++) {
327 var event
= mejs
.Utils
.createEvent(initEvents
[_i5
], dm
);
328 mediaElement
.dispatchEvent(event
);
332 var dmContainer
= document
.createElement('div');
333 dmContainer
.id
= dm
.id
;
334 mediaElement
.appendChild(dmContainer
);
335 if (mediaElement
.originalNode
) {
336 dmContainer
.style
.width
= mediaElement
.originalNode
.style
.width
;
337 dmContainer
.style
.height
= mediaElement
.originalNode
.style
.height
;
339 mediaElement
.originalNode
.style
.display
= 'none';
341 var videoId
= DailyMotionApi
.getDailyMotionId(mediaFiles
[0].src
),
342 dmSettings
= Object
.assign({
344 container
: dmContainer
,
346 }, dm
.options
.dailymotion
);
348 if (mediaElement
.originalNode
.autoplay
) {
349 dmSettings
.params
.autoplay
= true;
351 if (mediaElement
.originalNode
.muted
) {
352 dmSettings
.params
.mute
= true;
355 DailyMotionApi
.enqueueIframe(dmSettings
);
357 dm
.hide = function () {
360 dmIframe
.style
.display
= 'none';
363 dm
.show = function () {
365 dmIframe
.style
.display
= '';
368 dm
.setSize = function (width
, height
) {
370 dmIframe
.width
= width
;
371 dmIframe
.height
= height
;
374 dm
.destroy = function () {
382 mejs
.Utils
.typeChecks
.push(function (url
) {
383 return (/\/\/((www\.)?dailymotion\.com|dai\.ly)/i.test(url
) ? 'video/x-dailymotion' : null
387 window
.dmAsyncInit = function () {
388 DailyMotionApi
.apiReady();
391 mejs
.Renderers
.add(DailyMotionIframeRenderer
);