vendor: 8,199 bytes, lines 1-306
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 SoundCloudApi = { 15 16 promise: null, 17 18 load: function load(settings) { 19 20 if (typeof SC !== 'undefined') { 21 SoundCloudApi._createPlayer(settings); 22 } else { 23 SoundCloudApi.promise = SoundCloudApi.promise || mejs.Utils.loadScript('https://w.soundcloud.com/player/api.js'); 24 SoundCloudApi.promise.then(function () { 25 SoundCloudApi._createPlayer(settings); 26 }); 27 } 28 }, 29 30 _createPlayer: function _createPlayer(settings) { 31 var player = SC.Widget(settings.iframe); 32 window['__ready__' + settings.id](player); 33 } 34}; 35 36var SoundCloudIframeRenderer = { 37 name: 'soundcloud_iframe', 38 options: { 39 prefix: 'soundcloud_iframe' 40 }, 41 42 canPlayType: function canPlayType(type) { 43 return ~['video/soundcloud', 'video/x-soundcloud'].indexOf(type.toLowerCase()); 44 }, 45 46 create: function create(mediaElement, options, mediaFiles) { 47 var sc = {}, 48 apiStack = [], 49 readyState = 4, 50 autoplay = mediaElement.originalNode.autoplay; 51 52 var duration = 0, 53 currentTime = 0, 54 bufferedTime = 0, 55 volume = 1, 56 muted = false, 57 paused = true, 58 ended = false, 59 scPlayer = null, 60 scIframe = null; 61 62 sc.options = options; 63 sc.id = mediaElement.id + '_' + options.prefix; 64 sc.mediaElement = mediaElement; 65 66 var props = mejs.html5media.properties, 67 assignGettersSetters = function assignGettersSetters(propName) { 68 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); 69 70 sc['get' + capName] = function () { 71 if (scPlayer !== null) { 72 var value = null; 73 74 switch (propName) { 75 case 'currentTime': 76 return currentTime; 77 case 'duration': 78 return duration; 79 case 'volume': 80 return volume; 81 case 'paused': 82 return paused; 83 case 'ended': 84 return ended; 85 case 'muted': 86 return muted; 87 case 'buffered': 88 return { 89 start: function start() { 90 return 0; 91 }, 92 end: function end() { 93 return bufferedTime * duration; 94 }, 95 length: 1 96 }; 97 case 'src': 98 return scIframe ? scIframe.src : ''; 99 case 'readyState': 100 return readyState; 101 } 102 return value; 103 } else { 104 return null; 105 } 106 }; 107 108 sc['set' + capName] = function (value) { 109 if (scPlayer !== null) { 110 switch (propName) { 111 case 'src': 112 var url = typeof value === 'string' ? value : value[0].src; 113 scPlayer.load(url); 114 if (autoplay) { 115 scPlayer.play(); 116 } 117 break; 118 case 'currentTime': 119 scPlayer.seekTo(value * 1000); 120 break; 121 case 'muted': 122 if (value) { 123 scPlayer.setVolume(0); 124 } else { 125 scPlayer.setVolume(1); 126 } 127 setTimeout(function () { 128 var event = mejs.Utils.createEvent('volumechange', sc); 129 mediaElement.dispatchEvent(event); 130 }, 50); 131 break; 132 case 'volume': 133 scPlayer.setVolume(value); 134 setTimeout(function () { 135 var event = mejs.Utils.createEvent('volumechange', sc); 136 mediaElement.dispatchEvent(event); 137 }, 50); 138 break; 139 case 'readyState': 140 var event = mejs.Utils.createEvent('canplay', sc); 141 mediaElement.dispatchEvent(event); 142 break; 143 144 default: 145 146 break; 147 } 148 } else { 149 apiStack.push({ type: 'set', propName: propName, value: value }); 150 } 151 }; 152 }; 153 154 for (var i = 0, total = props.length; i < total; i++) { 155 assignGettersSetters(props[i]); 156 } 157 158 var methods = mejs.html5media.methods, 159 assignMethods = function assignMethods(methodName) { 160 sc[methodName] = function () { 161 if (scPlayer !== null) { 162 switch (methodName) { 163 case 'play': 164 return scPlayer.play(); 165 case 'pause': 166 return scPlayer.pause(); 167 case 'load': 168 return null; 169 } 170 } else { 171 apiStack.push({ type: 'call', methodName: methodName }); 172 } 173 }; 174 }; 175 176 for (var _i = 0, _total = methods.length; _i < _total; _i++) { 177 assignMethods(methods[_i]); 178 } 179 180 window['__ready__' + sc.id] = function (_scPlayer) { 181 182 mediaElement.scPlayer = scPlayer = _scPlayer; 183 184 if (autoplay) { 185 scPlayer.play(); 186 } 187 188 if (apiStack.length) { 189 for (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) { 190 191 var stackItem = apiStack[_i2]; 192 193 if (stackItem.type === 'set') { 194 var propName = stackItem.propName, 195 capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); 196 197 sc['set' + capName](stackItem.value); 198 } else if (stackItem.type === 'call') { 199 sc[stackItem.methodName](); 200 } 201 } 202 } 203 204 scPlayer.bind(SC.Widget.Events.PLAY_PROGRESS, function () { 205 paused = false; 206 ended = false; 207 scPlayer.getPosition(function (_currentTime) { 208 currentTime = _currentTime / 1000; 209 var event = mejs.Utils.createEvent('timeupdate', sc); 210 mediaElement.dispatchEvent(event); 211 }); 212 }); 213 scPlayer.bind(SC.Widget.Events.PAUSE, function () { 214 paused = true; 215 var event = mejs.Utils.createEvent('pause', sc); 216 mediaElement.dispatchEvent(event); 217 }); 218 scPlayer.bind(SC.Widget.Events.PLAY, function () { 219 paused = false; 220 ended = false; 221 var event = mejs.Utils.createEvent('play', sc); 222 mediaElement.dispatchEvent(event); 223 }); 224 scPlayer.bind(SC.Widget.Events.FINISHED, function () { 225 paused = false; 226 ended = true; 227 var event = mejs.Utils.createEvent('ended', sc); 228 mediaElement.dispatchEvent(event); 229 }); 230 scPlayer.bind(SC.Widget.Events.READY, function () { 231 scPlayer.getDuration(function (_duration) { 232 duration = _duration / 1000; 233 var event = mejs.Utils.createEvent('loadedmetadata', sc); 234 mediaElement.dispatchEvent(event); 235 }); 236 }); 237 scPlayer.bind(SC.Widget.Events.LOAD_PROGRESS, function () { 238 scPlayer.getDuration(function (loadProgress) { 239 if (duration > 0) { 240 bufferedTime = duration * loadProgress; 241 var event = mejs.Utils.createEvent('progress', sc); 242 mediaElement.dispatchEvent(event); 243 } 244 }); 245 scPlayer.getDuration(function (_duration) { 246 duration = _duration; 247 248 var event = mejs.Utils.createEvent('loadedmetadata', sc); 249 mediaElement.dispatchEvent(event); 250 }); 251 }); 252 253 var initEvents = ['rendererready', 'loadeddata', 'loadedmetadata', 'canplay']; 254 for (var _i3 = 0, _total3 = initEvents.length; _i3 < _total3; _i3++) { 255 var event = mejs.Utils.createEvent(initEvents[_i3], sc); 256 mediaElement.dispatchEvent(event); 257 } 258 }; 259 260 scIframe = document.createElement('iframe'); 261 scIframe.id = sc.id; 262 scIframe.width = 10; 263 scIframe.height = 10; 264 scIframe.frameBorder = 0; 265 scIframe.style.visibility = 'hidden'; 266 scIframe.src = mediaFiles[0].src; 267 scIframe.scrolling = 'no'; 268 269 mediaElement.appendChild(scIframe); 270 mediaElement.originalNode.style.display = 'none'; 271 272 var scSettings = { 273 iframe: scIframe, 274 id: sc.id 275 }; 276 277 SoundCloudApi.load(scSettings); 278 279 sc.setSize = function () {}; 280 sc.hide = function () { 281 sc.pause(); 282 if (scIframe) { 283 scIframe.style.display = 'none'; 284 } 285 }; 286 sc.show = function () { 287 if (scIframe) { 288 scIframe.style.display = ''; 289 } 290 }; 291 sc.destroy = function () { 292 scPlayer.destroy(); 293 }; 294 295 return sc; 296 } 297}; 298 299mejs.Utils.typeChecks.push(function (url) { 300 return (/\/\/(w\.)?soundcloud.com/i.test(url) ? 'video/x-soundcloud' : null 301 ); 302}); 303 304mejs.Renderers.add(SoundCloudIframeRenderer); 305 306},{}]},{},[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.