1/*! 2 * MediaElement.js 3 * http://www.mediaelementjs.com/ 4 * 5 * Wrapper that mimics native HTML5 MediaElement (audio and video) 6 * using a variety of technologies (pure JavaScript, Flash, iframe) 7 * 8 * Copyright 2010-2017, John Dyer (http://j.hn/) 9 * License: MIT 10 * 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){ 12'use strict'; 13 14var FacebookRenderer = { 15 name: 'facebook', 16 options: { 17 prefix: 'facebook', 18 facebook: { 19 appId: '{your-app-id}', 20 xfbml: true, 21 version: 'v2.6' 22 } 23 }, 24 25 canPlayType: function canPlayType(type) { 26 return ~['video/facebook', 'video/x-facebook'].indexOf(type.toLowerCase()); 27 }, 28 29 create: function create(mediaElement, options, mediaFiles) { 30 31 var fbWrapper = {}, 32 apiStack = [], 33 eventHandler = {}, 34 readyState = 4, 35 autoplay = mediaElement.originalNode.autoplay; 36 37 var src = '', 38 paused = true, 39 ended = false, 40 hasStartedPlaying = false, 41 fbApi = null, 42 fbDiv = null; 43 44 options = Object.assign(options, mediaElement.options); 45 fbWrapper.options = options; 46 fbWrapper.id = mediaElement.id + '_' + options.prefix; 47 fbWrapper.mediaElement = mediaElement; 48 49 var props = mejs.html5media.properties, 50 assignGettersSetters = function assignGettersSetters(propName) { 51 52 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); 53 54 fbWrapper['get' + capName] = function () { 55 56 if (fbApi !== null) { 57 var value = null; 58 59 switch (propName) { 60 case 'currentTime': 61 return fbApi.getCurrentPosition(); 62 case 'duration': 63 return fbApi.getDuration(); 64 case 'volume': 65 return fbApi.getVolume(); 66 case 'paused': 67 return paused; 68 case 'ended': 69 return ended; 70 case 'muted': 71 return fbApi.isMuted(); 72 case 'buffered': 73 return { 74 start: function start() { 75 return 0; 76 }, 77 end: function end() { 78 return 0; 79 }, 80 length: 1 81 }; 82 case 'src': 83 return src; 84 case 'readyState': 85 return readyState; 86 } 87 88 return value; 89 } else { 90 return null; 91 } 92 }; 93 94 fbWrapper['set' + capName] = function (value) { 95 96 if (fbApi !== null) { 97 98 switch (propName) { 99 case 'src': 100 var url = typeof value === 'string' ? value : value[0].src; 101 102 fbDiv.remove(); 103 createFacebookEmbed(url, options.facebook); 104 105 FB.XFBML.parse(); 106 107 if (autoplay) { 108 fbApi.play(); 109 } 110 111 break; 112 case 'currentTime': 113 fbApi.seek(value); 114 break; 115 case 'muted': 116 if (value) { 117 fbApi.mute(); 118 } else { 119 fbApi.unmute(); 120 } 121 setTimeout(function () { 122 var event = mejs.Utils.createEvent('volumechange', fbWrapper); 123 mediaElement.dispatchEvent(event); 124 }, 50); 125 break; 126 case 'volume': 127 fbApi.setVolume(value); 128 setTimeout(function () { 129 var event = mejs.Utils.createEvent('volumechange', fbWrapper); 130 mediaElement.dispatchEvent(event); 131 }, 50); 132 break; 133 case 'readyState': 134 var event = mejs.Utils.createEvent('canplay', fbWrapper); 135 mediaElement.dispatchEvent(event); 136 break; 137 default: 138 139 break; 140 } 141 } else { 142 apiStack.push({ type: 'set', propName: propName, value: value }); 143 } 144 }; 145 }; 146 147 for (var i = 0, total = props.length; i < total; i++) { 148 assignGettersSetters(props[i]); 149 } 150 151 var methods = mejs.html5media.methods, 152 assignMethods = function assignMethods(methodName) { 153 fbWrapper[methodName] = function () { 154 if (fbApi !== null) { 155 switch (methodName) { 156 case 'play': 157 return fbApi.play(); 158 case 'pause': 159 return fbApi.pause(); 160 case 'load': 161 return null; 162 } 163 } else { 164 apiStack.push({ type: 'call', methodName: methodName }); 165 } 166 }; 167 }; 168 169 for (var _i = 0, _total = methods.length; _i < _total; _i++) { 170 assignMethods(methods[_i]); 171 } 172 173 function sendEvents(events) { 174 for (var _i2 = 0, _total2 = events.length; _i2 < _total2; _i2++) { 175 var event = mejs.Utils.createEvent(events[_i2], fbWrapper); 176 mediaElement.dispatchEvent(event); 177 } 178 } 179 180 function createFacebookEmbed(url, config) { 181 src = url; 182 183 fbDiv = document.createElement('div'); 184 fbDiv.id = fbWrapper.id; 185 fbDiv.className = "fb-video"; 186 fbDiv.setAttribute("data-href", url); 187 fbDiv.setAttribute("data-allowfullscreen", "true"); 188 fbDiv.setAttribute("data-controls", "false"); 189 190 mediaElement.originalNode.parentNode.insertBefore(fbDiv, mediaElement.originalNode); 191 mediaElement.originalNode.style.display = 'none'; 192 193 window.fbAsyncInit = function () { 194 195 FB.init(config); 196 197 FB.Event.subscribe('xfbml.ready', function (msg) { 198 199 if (msg.type === 'video') { 200 201 fbApi = msg.instance; 202 203 var fbIframe = fbDiv.getElementsByTagName('iframe')[0], 204 width = fbIframe.offsetWidth, 205 height = fbIframe.offsetHeight, 206 events = ['mouseover', 'mouseout'], 207 assignEvents = function assignEvents(e) { 208 var event = mejs.Utils.createEvent(e.type, fbWrapper); 209 mediaElement.dispatchEvent(event); 210 }; 211 212 fbWrapper.setSize(width, height); 213 214 if (autoplay) { 215 fbApi.play(); 216 } 217 218 for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) { 219 fbIframe.addEventListener(events[_i3], assignEvents, false); 220 } 221 222 var fbEvents = ['startedPlaying', 'paused', 'finishedPlaying', 'startedBuffering', 'finishedBuffering']; 223 for (var _i4 = 0, _total4 = fbEvents.length; _i4 < _total4; _i4++) { 224 var event = fbEvents[_i4], 225 handler = eventHandler[event]; 226 if (handler !== undefined && handler !== null && !mejs.Utils.isObjectEmpty(handler) && typeof handler.removeListener === 'function') { 227 handler.removeListener(event); 228 } 229 } 230 231 if (apiStack.length) { 232 for (var _i5 = 0, _total5 = apiStack.length; _i5 < _total5; _i5++) { 233 234 var stackItem = apiStack[_i5]; 235 236 if (stackItem.type === 'set') { 237 var propName = stackItem.propName, 238 capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); 239 240 fbWrapper['set' + capName](stackItem.value); 241 } else if (stackItem.type === 'call') { 242 fbWrapper[stackItem.methodName](); 243 } 244 } 245 } 246 247 sendEvents(['rendererready', 'loadeddata', 'canplay', 'progress', 'loadedmetadata', 'timeupdate']); 248 249 var timer = void 0; 250 251 eventHandler.startedPlaying = fbApi.subscribe('startedPlaying', function () { 252 if (!hasStartedPlaying) { 253 hasStartedPlaying = true; 254 } 255 paused = false;
256 ended = false; 257 sendEvents(['play', 'playing', 'timeupdate']); 258 259 timer = setInterval(function () { 260 fbApi.getCurrentPosition(); 261 sendEvents(['timeupdate']); 262 }, 250); 263 }); 264 eventHandler.paused = fbApi.subscribe('paused', function () { 265 paused = true; 266 ended = false; 267 sendEvents(['pause']); 268 }); 269 eventHandler.finishedPlaying = fbApi.subscribe('finishedPlaying', function () { 270 paused = true; 271 ended = true; 272 273 sendEvents(['ended']); 274 clearInterval(timer); 275 timer = null; 276 }); 277 eventHandler.startedBuffering = fbApi.subscribe('startedBuffering', function () { 278 sendEvents(['progress', 'timeupdate']); 279 }); 280 eventHandler.finishedBuffering = fbApi.subscribe('finishedBuffering', function () { 281 sendEvents(['progress', 'timeupdate']); 282 }); 283 } 284 }); 285 }; 286 287 mejs.Utils.loadScript('https://connect.facebook.net/en_US/sdk.js'); 288 } 289 290 if (mediaFiles.length > 0) { 291 createFacebookEmbed(mediaFiles[0].src, fbWrapper.options.facebook); 292 } 293 294 fbWrapper.hide = function () { 295 fbWrapper.stopInterval(); 296 fbWrapper.pause(); 297 if (fbDiv) { 298 fbDiv.style.display = 'none'; 299 } 300 }; 301 fbWrapper.show = function () { 302 if (fbDiv) { 303 fbDiv.style.display = ''; 304 } 305 }; 306 fbWrapper.setSize = function (width, height) { 307 if (fbApi !== null && !isNaN(width) && !isNaN(height)) { 308 fbDiv.style.width = width; 309 fbDiv.style.height = height; 310 } 311 }; 312 fbWrapper.destroy = function () {}; 313 fbWrapper.interval = null; 314 315 fbWrapper.startInterval = function () { 316 fbWrapper.interval = setInterval(function () { 317 var event = mejs.Utils.createEvent('timeupdate', fbWrapper); 318 mediaElement.dispatchEvent(event); 319 }, 250); 320 }; 321 fbWrapper.stopInterval = function () { 322 if (fbWrapper.interval) { 323 clearInterval(fbWrapper.interval); 324 } 325 }; 326 327 return fbWrapper; 328 } 329}; 330 331mejs.Utils.typeChecks.push(function (url) { 332 return ~url.toLowerCase().indexOf('//www.facebook') ? 'video/x-facebook' : null; 333}); 334 335mejs.Renderers.add(FacebookRenderer); 336 337},{}]},{},[1]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.