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
) {
113 muted
= mediaElement
.originalNode
.muted
;
115 dm
.options
= options
;
116 dm
.id
= mediaElement
.id
+ '_' + options
.prefix
;
117 dm
.mediaElement
= mediaElement
;
119 var props
= mejs
.html5media
.properties
,
120 assignGettersSetters
= function assignGettersSetters(propName
) {
122 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
124 dm
['get' + capName
] = function () {
125 if (dmPlayer
!== null) {
130 return dmPlayer
.currentTime
;
132 return isNaN(dmPlayer
.duration
) ? 0 : dmPlayer
.duration
;
134 return dmPlayer
.volume
;
136 return dmPlayer
.paused
;
138 return dmPlayer
.ended
;
140 muted
= dmPlayer
.muted
;
143 var percentLoaded
= dmPlayer
.bufferedTime
,
144 duration
= dmPlayer
.duration
;
146 start
: function start() {
149 end
: function end() {
150 return percentLoaded
/ duration
;
155 return mediaElement
.originalNode
.getAttribute('src');
166 dm
['set' + capName
] = function (value
) {
167 if (dmPlayer
!== null) {
170 var url
= typeof value
=== 'string' ? value
: value
[0].src
;
171 dmPlayer
.load(DailyMotionApi
.getDailyMotionId(url
));
174 dmPlayer
.seek(value
);
177 if (value
=== true) {
178 dmPlayer
.setVolume(0);
180 dmPlayer
.setMuted(value
);
182 setTimeout(function () {
183 var event
= mejs
.Utils
.createEvent('volumechange', dm
);
184 mediaElement
.dispatchEvent(event
);
188 dmPlayer
.setVolume(value
);
189 if (value
=== 0 && !dmPlayer
.muted
) {
190 dmPlayer
.setMuted(true);
192 } else if (value
> 0 && dmPlayer
.muted
) {
193 dmPlayer
.setMuted(false);
197 setTimeout(function () {
198 var event
= mejs
.Utils
.createEvent('volumechange', dm
);
199 mediaElement
.dispatchEvent(event
);
203 var event
= mejs
.Utils
.createEvent('canplay', dm
);
204 mediaElement
.dispatchEvent(event
);
211 apiStack
.push({ type
: 'set', propName
: propName
, value
: value
});
216 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
217 assignGettersSetters(props
[i
]);
220 var methods
= mejs
.html5media
.methods
,
221 assignMethods
= function assignMethods(methodName
) {
222 dm
[methodName
] = function () {
223 if (dmPlayer
!== null) {
224 switch (methodName
) {
226 return dmPlayer
.play();
228 return dmPlayer
.pause();
233 apiStack
.push({ type
: 'call', methodName
: methodName
});
238 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
239 assignMethods(methods
[_i
]);
242 window
['__ready__' + dm
.id
] = function (_dmPlayer
) {
244 mediaElement
.dmPlayer
= dmPlayer
= _dmPlayer
;
246 if (apiStack
.length
) {
247 for (var _i2
= 0, _total2
= apiStack
.length
; _i2
< _total2
; _i2
++) {
249 var stackItem
= apiStack
[_i2
];
251 if (stackItem
.type
=== 'set') {
252 var propName
= stackItem
.propName
,
253 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
255 dm
['set' + capName
](stackItem
.value
);
256 } else if (stackItem
.type
=== 'call') {
257 dm
[stackItem
.methodName
]();
262 dmIframe
= document
.getElementById(dm
.id
);
264 events
= ['mouseover', 'mouseout'];
265 var assignEvents
= function assignEvents(e
) {
266 var event
= mejs
.Utils
.createEvent(e
.type
, dm
);
267 mediaElement
.dispatchEvent(event
);
270 for (var _i3
= 0, _total3
= events
.length
; _i3
< _total3
; _i3
++) {
271 dmIframe
.addEventListener(events
[_i3
], assignEvents
, false);
274 if (mediaElement
.originalNode
.muted
) {
275 dmPlayer
.setVolume(0);
276 dmPlayer
.setMuted(true);
278 dmPlayer
.setVolume(dmPlayer
.volume
);
279 dmPlayer
.setMuted(false);
282 events
= mejs
.html5media
.events
;
283 events
= events
.concat(['click', 'mouseover', 'mouseout']);
284 var assignNativeEvents
= function assignNativeEvents(eventName
) {
285 if (eventName
!== 'ended') {
286 dmPlayer
.addEventListener(eventName
, function (e
) {
287 var event
= mejs
.Utils
.createEvent(e
.type
, dm
);
288 mediaElement
.dispatchEvent(event
);
293 for (var _i4
= 0, _total4
= events
.length
; _i4
< _total4
; _i4
++) {
294 assignNativeEvents(events
[_i4
]);
297 dmPlayer
.addEventListener('ad_start', function () {
298 var event
= mejs
.Utils
.createEvent('play', dm
);
299 mediaElement
.dispatchEvent(event
);
301 event
= mejs
.Utils
.createEvent('progress', dm
);
302 mediaElement
.dispatchEvent(event
);
304 event
= mejs
.Utils
.createEvent('timeupdate', dm
);
305 mediaElement
.dispatchEvent(event
);
307 dmPlayer
.addEventListener('ad_timeupdate', function () {
308 var event
= mejs
.Utils
.createEvent('timeupdate', dm
);
309 mediaElement
.dispatchEvent(event
);
311 dmPlayer
.addEventListener('ad_pause', function () {
312 var event
= mejs
.Utils
.createEvent('pause', dm
);
313 mediaElement
.dispatchEvent(event
);
315 dmPlayer
.addEventListener('start', function () {
316 if (dmPlayer
.muted
) {
317 var event
= mejs
.Utils
.createEvent('volumechange', dm
);
318 mediaElement
.dispatchEvent(event
);
321 dmPlayer
.addEventListener('video_start', function () {
322 var event
= mejs
.Utils
.createEvent('play', dm
);
323 mediaElement
.dispatchEvent(event
);
325 var playingEvent
= mejs
.Utils
.createEvent('playing', dm
);
326 mediaElement
.dispatchEvent(playingEvent
);
328 dmPlayer
.addEventListener('ad_timeupdate', function () {
329 var event
= mejs
.Utils
.createEvent('timeupdate', dm
);
330 mediaElement
.dispatchEvent(event
);
332 dmPlayer
.addEventListener('video_end', function () {
333 var event
= mejs
.Utils
.createEvent('ended', dm
);
334 mediaElement
.dispatchEvent(event
);
336 if (mediaElement
.originalNode
.getAttribute('loop')) {
341 var initEvents
= ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
343 for (var _i5
= 0, _total5
= initEvents
.length
; _i5
< _total5
; _i5
++) {
344 var event
= mejs
.Utils
.createEvent(initEvents
[_i5
], dm
);
345 mediaElement
.dispatchEvent(event
);
349 var dmContainer
= document
.createElement('div');
350 dmContainer
.id
= dm
.id
;
351 mediaElement
.appendChild(dmContainer
);
352 if (mediaElement
.originalNode
) {
353 dmContainer
.style
.width
= mediaElement
.originalNode
.style
.width
;
354 dmContainer
.style
.height
= mediaElement
.originalNode
.style
.height
;
356 mediaElement
.originalNode
.style
.display
= 'none';
358 var videoId
= DailyMotionApi
.getDailyMotionId(mediaFiles
[0].src
),
361 container
: dmContainer
,
365 dmSettings
.params
= Object
.assign({}, dm
.options
.dailymotion
);
367 dmSettings
.params
.controls
= !!mediaElement
.originalNode
.controls
;
369 if (mediaElement
.originalNode
.autoplay
) {
370 dmSettings
.params
.autoplay
= true;
372 if (mediaElement
.originalNode
.muted
) {
373 dmSettings
.params
.mute
= true;
375 dmSettings
.params
.api
= '1';
377 DailyMotionApi
.enqueueIframe(dmSettings
);
379 dm
.hide = function () {
382 dmIframe
.style
.display
= 'none';
385 dm
.show = function () {
387 dmIframe
.style
.display
= '';
390 dm
.setSize = function (width
, height
) {
392 dmIframe
.width
= width
;
393 dmIframe
.height
= height
;
396 dm
.destroy = function () {
404 mejs
.Utils
.typeChecks
.push(function (url
) {
405 return (/\/\/((www\.)?dailymotion\.com|dai\.ly)/i.test(url
) ? 'video/x-dailymotion' : null
409 window
.dmAsyncInit = function () {
410 DailyMotionApi
.apiReady();
413 mejs
.Renderers
.add(DailyMotionIframeRenderer
);