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