c3901f8265a6112f5ddf8ad542fb3e4ce3cf3ed9
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 FacebookRenderer
= {
25 canPlayType
: function canPlayType(type
) {
26 return ~['video/facebook', 'video/x-facebook'].indexOf(type
.toLowerCase());
29 create
: function create(mediaElement
, options
, mediaFiles
) {
35 autoplay
= mediaElement
.originalNode
.autoplay
;
41 hasStartedPlaying
= false,
45 if (mejs
.Features
.isiPhone
&& mediaElement
.originalNode
.getAttribute('poster')) {
46 poster
= mediaElement
.originalNode
.getAttribute('poster');
47 mediaElement
.originalNode
.removeAttribute('poster');
50 options
= Object
.assign(options
, mediaElement
.options
);
51 fbWrapper
.options
= options
;
52 fbWrapper
.id
= mediaElement
.id
+ '_' + options
.prefix
;
53 fbWrapper
.mediaElement
= mediaElement
;
55 var props
= mejs
.html5media
.properties
,
56 assignGettersSetters
= function assignGettersSetters(propName
) {
58 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
60 fbWrapper
['get' + capName
] = function () {
67 return fbApi
.getCurrentPosition();
69 return fbApi
.getDuration();
71 return fbApi
.getVolume();
77 return fbApi
.isMuted();
80 start
: function start() {
100 fbWrapper
['set' + capName
] = function (value
) {
102 if (fbApi
!== null) {
106 var url
= typeof value
=== 'string' ? value
: value
[0].src
;
109 createFacebookEmbed(url
, options
.facebook
);
127 setTimeout(function () {
128 var event
= mejs
.Utils
.createEvent('volumechange', fbWrapper
);
129 mediaElement
.dispatchEvent(event
);
133 fbApi
.setVolume(value
);
134 setTimeout(function () {
135 var event
= mejs
.Utils
.createEvent('volumechange', fbWrapper
);
136 mediaElement
.dispatchEvent(event
);
140 var event
= mejs
.Utils
.createEvent('canplay', fbWrapper
);
141 mediaElement
.dispatchEvent(event
);
148 apiStack
.push({ type
: 'set', propName
: propName
, value
: value
});
153 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
154 assignGettersSetters(props
[i
]);
157 var methods
= mejs
.html5media
.methods
,
158 assignMethods
= function assignMethods(methodName
) {
159 fbWrapper
[methodName
] = function () {
160 if (fbApi
!== null) {
161 switch (methodName
) {
165 return fbApi
.pause();
170 apiStack
.push({ type
: 'call', methodName
: methodName
});
175 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
176 assignMethods(methods
[_i
]);
179 function sendEvents(events
) {
180 for (var _i2
= 0, _total2
= events
.length
; _i2
< _total2
; _i2
++) {
181 var event
= mejs
.Utils
.createEvent(events
[_i2
], fbWrapper
);
182 mediaElement
.dispatchEvent(event
);
186 function createFacebookEmbed(url
, config
) {
189 fbDiv
= document
.createElement('div');
190 fbDiv
.id
= fbWrapper
.id
;
191 fbDiv
.className
= "fb-video";
192 fbDiv
.setAttribute("data-href", url
);
193 fbDiv
.setAttribute("data-allowfullscreen", "true");
194 fbDiv
.setAttribute("data-controls", "false");
196 mediaElement
.originalNode
.parentNode
.insertBefore(fbDiv
, mediaElement
.originalNode
);
197 mediaElement
.originalNode
.style
.display
= 'none';
199 window
.fbAsyncInit = function () {
203 FB
.Event
.subscribe('xfbml.ready', function (msg
) {
205 if (msg
.type
=== 'video') {
207 fbApi
= msg
.instance
;
209 var fbIframe
= fbDiv
.getElementsByTagName('iframe')[0],
210 width
= fbIframe
.offsetWidth
,
211 height
= fbIframe
.offsetHeight
,
212 events
= ['mouseover', 'mouseout'],
213 assignEvents
= function assignEvents(e
) {
214 var event
= mejs
.Utils
.createEvent(e
.type
, fbWrapper
);
215 mediaElement
.dispatchEvent(event
);
218 fbWrapper
.setSize(width
, height
);
224 for (var _i3
= 0, _total3
= events
.length
; _i3
< _total3
; _i3
++) {
225 fbIframe
.addEventListener(events
[_i3
], assignEvents
, false);
228 var fbEvents
= ['startedPlaying', 'paused', 'finishedPlaying', 'startedBuffering', 'finishedBuffering'];
229 for (var _i4
= 0, _total4
= fbEvents
.length
; _i4
< _total4
; _i4
++) {
230 var event
= fbEvents
[_i4
],
231 handler
= eventHandler
[event
];
232 if (handler
!== undefined && handler
!== null && !mejs
.Utils
.isObjectEmpty(handler
) && typeof handler
.removeListener
=== 'function') {
233 handler
.removeListener(event
);
237 if (apiStack
.length
) {
238 for (var _i5
= 0, _total5
= apiStack
.length
; _i5
< _total5
; _i5
++) {
240 var stackItem
= apiStack
[_i5
];
242 if (stackItem
.type
=== 'set') {
243 var propName
= stackItem
.propName
,
244 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
246 fbWrapper
['set' + capName
](stackItem
.value
);
247 } else if (stackItem
.type
=== 'call') {
248 fbWrapper
[stackItem
.methodName
]();
253 sendEvents(['rendererready', 'loadeddata', 'canplay', 'progress', 'loadedmetadata', 'timeupdate']);
257 eventHandler
.startedPlaying
= fbApi
.subscribe('startedPlaying', function () {
258 if (!hasStartedPlaying
) {
259 hasStartedPlaying
= true;
263 sendEvents(['play', 'playing', 'timeupdate']);
265 timer
= setInterval(function () {
266 fbApi
.getCurrentPosition();
267 sendEvents(['timeupdate']);
270 eventHandler
.paused
= fbApi
.subscribe('paused', function () {
273 sendEvents(['pause']);
275 eventHandler
.finishedPlaying
= fbApi
.subscribe('finishedPlaying', function () {
279 sendEvents(['ended']);
280 clearInterval(timer
);
283 eventHandler
.startedBuffering
= fbApi
.subscribe('startedBuffering', function () {
284 sendEvents(['progress', 'timeupdate']);
286 eventHandler
.finishedBuffering
= fbApi
.subscribe('finishedBuffering', function () {
287 sendEvents(['progress', 'timeupdate']);
293 mejs
.Utils
.loadScript('https://connect.facebook.net/en_US/sdk.js');
296 if (mediaFiles
.length
> 0) {
297 createFacebookEmbed(mediaFiles
[0].src
, fbWrapper
.options
.facebook
);
300 fbWrapper
.hide = function () {
301 fbWrapper
.stopInterval();
304 fbDiv
.style
.display
= 'none';
307 fbWrapper
.show = function () {
309 fbDiv
.style
.display
= '';
312 fbWrapper
.setSize = function (width
) {
313 if (fbApi
!== null && !isNaN(width
)) {
314 fbDiv
.style
.width
= width
;
317 fbWrapper
.destroy = function () {
319 mediaElement
.originalNode
.setAttribute('poster', poster
);
323 fbWrapper
.interval
= null;
325 fbWrapper
.startInterval = function () {
326 fbWrapper
.interval
= setInterval(function () {
327 var event
= mejs
.Utils
.createEvent('timeupdate', fbWrapper
);
328 mediaElement
.dispatchEvent(event
);
331 fbWrapper
.stopInterval = function () {
332 if (fbWrapper
.interval
) {
333 clearInterval(fbWrapper
.interval
);
341 mejs
.Utils
.typeChecks
.push(function (url
) {
342 return ~url
.toLowerCase().indexOf('//www.facebook') ? 'video/x-facebook' : null;
345 mejs
.Renderers
.add(FacebookRenderer
);