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
){
18 load
: function load(settings
) {
20 if (typeof SC
!== 'undefined') {
21 SoundCloudApi
._createPlayer(settings
);
23 SoundCloudApi
.promise
= SoundCloudApi
.promise
|| mejs
.Utils
.loadScript('https://w.soundcloud.com/player/api.js');
24 SoundCloudApi
.promise
.then(function () {
25 SoundCloudApi
._createPlayer(settings
);
30 _createPlayer
: function _createPlayer(settings
) {
31 var player
= SC
.Widget(settings
.iframe
);
32 window
['__ready__' + settings
.id
](player
);
36 var SoundCloudIframeRenderer
= {
37 name
: 'soundcloud_iframe',
39 prefix
: 'soundcloud_iframe'
42 canPlayType
: function canPlayType(type
) {
43 return ~['video/soundcloud', 'video/x-soundcloud'].indexOf(type
.toLowerCase());
46 create
: function create(mediaElement
, options
, mediaFiles
) {
50 autoplay
= mediaElement
.originalNode
.autoplay
,
51 isVideo
= mediaElement
.originalNode
!== null && mediaElement
.originalNode
.tagName
.toLowerCase() === 'video';
64 sc
.id
= mediaElement
.id
+ '_' + options
.prefix
;
65 sc
.mediaElement
= mediaElement
;
67 var props
= mejs
.html5media
.properties
,
68 assignGettersSetters
= function assignGettersSetters(propName
) {
69 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
71 sc
['get' + capName
] = function () {
72 if (scPlayer
!== null) {
90 start
: function start() {
94 return bufferedTime
* duration
;
99 return scIframe
? scIframe
.src
: '';
109 sc
['set' + capName
] = function (value
) {
110 if (scPlayer
!== null) {
113 var url
= typeof value
=== 'string' ? value
: value
[0].src
;
120 scPlayer
.seekTo(value
* 1000);
124 scPlayer
.setVolume(0);
126 scPlayer
.setVolume(1);
128 setTimeout(function () {
129 var event
= mejs
.Utils
.createEvent('volumechange', sc
);
130 mediaElement
.dispatchEvent(event
);
134 scPlayer
.setVolume(value
);
135 setTimeout(function () {
136 var event
= mejs
.Utils
.createEvent('volumechange', sc
);
137 mediaElement
.dispatchEvent(event
);
141 var event
= mejs
.Utils
.createEvent('canplay', sc
);
142 mediaElement
.dispatchEvent(event
);
150 apiStack
.push({ type
: 'set', propName
: propName
, value
: value
});
155 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
156 assignGettersSetters(props
[i
]);
159 var methods
= mejs
.html5media
.methods
,
160 assignMethods
= function assignMethods(methodName
) {
161 sc
[methodName
] = function () {
162 if (scPlayer
!== null) {
163 switch (methodName
) {
165 return scPlayer
.play();
167 return scPlayer
.pause();
172 apiStack
.push({ type
: 'call', methodName
: methodName
});
177 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
178 assignMethods(methods
[_i
]);
181 window
['__ready__' + sc
.id
] = function (_scPlayer
) {
183 mediaElement
.scPlayer
= scPlayer
= _scPlayer
;
189 if (apiStack
.length
) {
190 for (var _i2
= 0, _total2
= apiStack
.length
; _i2
< _total2
; _i2
++) {
192 var stackItem
= apiStack
[_i2
];
194 if (stackItem
.type
=== 'set') {
195 var propName
= stackItem
.propName
,
196 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
198 sc
['set' + capName
](stackItem
.value
);
199 } else if (stackItem
.type
=== 'call') {
200 sc
[stackItem
.methodName
]();
205 scPlayer
.bind(SC
.Widget
.Events
.PLAY_PROGRESS
, function () {
208 scPlayer
.getPosition(function (_currentTime
) {
209 currentTime
= _currentTime
/ 1000;
210 var event
= mejs
.Utils
.createEvent('timeupdate', sc
);
211 mediaElement
.dispatchEvent(event
);
214 scPlayer
.bind(SC
.Widget
.Events
.PAUSE
, function () {
216 var event
= mejs
.Utils
.createEvent('pause', sc
);
217 mediaElement
.dispatchEvent(event
);
219 scPlayer
.bind(SC
.Widget
.Events
.PLAY
, function () {
222 var event
= mejs
.Utils
.createEvent('play', sc
);
223 mediaElement
.dispatchEvent(event
);
225 scPlayer
.bind(SC
.Widget
.Events
.FINISHED
, function () {
228 var event
= mejs
.Utils
.createEvent('ended', sc
);
229 mediaElement
.dispatchEvent(event
);
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
);
238 scPlayer
.bind(SC
.Widget
.Events
.LOAD_PROGRESS
, function () {
239 scPlayer
.getDuration(function (loadProgress
) {
241 bufferedTime
= duration
* loadProgress
;
242 var event
= mejs
.Utils
.createEvent('progress', sc
);
243 mediaElement
.dispatchEvent(event
);
246 scPlayer
.getDuration(function (_duration
) {
247 duration
= _duration
;
249 var event
= mejs
.Utils
.createEvent('loadedmetadata', sc
);
250 mediaElement
.dispatchEvent(event
);
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
);
261 scIframe
= document
.createElement('iframe');
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';
270 mediaElement
.appendChild(scIframe
);
271 mediaElement
.originalNode
.style
.display
= 'none';
278 SoundCloudApi
.load(scSettings
);
280 sc
.setSize = function () {};
281 sc
.hide = function () {
284 scIframe
.style
.display
= 'none';
287 sc
.show = function () {
289 scIframe
.style
.display
= '';
292 sc
.destroy = function () {
300 mejs
.Utils
.typeChecks
.push(function (url
) {
301 return (/\/\/(w\.)?soundcloud.com/i.test(url
) ? 'video/x-soundcloud' : null
305 mejs
.Renderers
.add(SoundCloudIframeRenderer
);