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
;
63 sc
.id
= mediaElement
.id
+ '_' + options
.prefix
;
64 sc
.mediaElement
= mediaElement
;
66 var props
= mejs
.html5media
.properties
,
67 assignGettersSetters
= function assignGettersSetters(propName
) {
68 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
70 sc
['get' + capName
] = function () {
71 if (scPlayer
!== null) {
89 start
: function start() {
93 return bufferedTime
* duration
;
98 return scIframe
? scIframe
.src
: '';
108 sc
['set' + capName
] = function (value
) {
109 if (scPlayer
!== null) {
112 var url
= typeof value
=== 'string' ? value
: value
[0].src
;
119 scPlayer
.seekTo(value
* 1000);
123 scPlayer
.setVolume(0);
125 scPlayer
.setVolume(1);
127 setTimeout(function () {
128 var event
= mejs
.Utils
.createEvent('volumechange', sc
);
129 mediaElement
.dispatchEvent(event
);
133 scPlayer
.setVolume(value
);
134 setTimeout(function () {
135 var event
= mejs
.Utils
.createEvent('volumechange', sc
);
136 mediaElement
.dispatchEvent(event
);
140 var event
= mejs
.Utils
.createEvent('canplay', sc
);
141 mediaElement
.dispatchEvent(event
);
149 apiStack
.push({ type
: 'set', propName
: propName
, value
: value
});
154 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
155 assignGettersSetters(props
[i
]);
158 var methods
= mejs
.html5media
.methods
,
159 assignMethods
= function assignMethods(methodName
) {
160 sc
[methodName
] = function () {
161 if (scPlayer
!== null) {
162 switch (methodName
) {
164 return scPlayer
.play();
166 return scPlayer
.pause();
171 apiStack
.push({ type
: 'call', methodName
: methodName
});
176 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
177 assignMethods(methods
[_i
]);
180 window
['__ready__' + sc
.id
] = function (_scPlayer
) {
182 mediaElement
.scPlayer
= scPlayer
= _scPlayer
;
188 if (apiStack
.length
) {
189 for (var _i2
= 0, _total2
= apiStack
.length
; _i2
< _total2
; _i2
++) {
191 var stackItem
= apiStack
[_i2
];
193 if (stackItem
.type
=== 'set') {
194 var propName
= stackItem
.propName
,
195 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
197 sc
['set' + capName
](stackItem
.value
);
198 } else if (stackItem
.type
=== 'call') {
199 sc
[stackItem
.methodName
]();
204 scPlayer
.bind(SC
.Widget
.Events
.PLAY_PROGRESS
, function () {
207 scPlayer
.getPosition(function (_currentTime
) {
208 currentTime
= _currentTime
/ 1000;
209 var event
= mejs
.Utils
.createEvent('timeupdate', sc
);
210 mediaElement
.dispatchEvent(event
);
213 scPlayer
.bind(SC
.Widget
.Events
.PAUSE
, function () {
215 var event
= mejs
.Utils
.createEvent('pause', sc
);
216 mediaElement
.dispatchEvent(event
);
218 scPlayer
.bind(SC
.Widget
.Events
.PLAY
, function () {
221 var event
= mejs
.Utils
.createEvent('play', sc
);
222 mediaElement
.dispatchEvent(event
);
224 scPlayer
.bind(SC
.Widget
.Events
.FINISHED
, function () {
227 var event
= mejs
.Utils
.createEvent('ended', sc
);
228 mediaElement
.dispatchEvent(event
);
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
);
237 scPlayer
.bind(SC
.Widget
.Events
.LOAD_PROGRESS
, function () {
238 scPlayer
.getDuration(function (loadProgress
) {
240 bufferedTime
= duration
* loadProgress
;
241 var event
= mejs
.Utils
.createEvent('progress', sc
);
242 mediaElement
.dispatchEvent(event
);
245 scPlayer
.getDuration(function (_duration
) {
246 duration
= _duration
;
248 var event
= mejs
.Utils
.createEvent('loadedmetadata', sc
);
249 mediaElement
.dispatchEvent(event
);
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
);
260 scIframe
= document
.createElement('iframe');
263 scIframe
.height
= 10;
264 scIframe
.frameBorder
= 0;
265 scIframe
.style
.visibility
= 'hidden';
266 scIframe
.src
= mediaFiles
[0].src
;
267 scIframe
.scrolling
= 'no';
269 mediaElement
.appendChild(scIframe
);
270 mediaElement
.originalNode
.style
.display
= 'none';
277 SoundCloudApi
.load(scSettings
);
279 sc
.setSize = function () {};
280 sc
.hide = function () {
283 scIframe
.style
.display
= 'none';
286 sc
.show = function () {
288 scIframe
.style
.display
= '';
291 sc
.destroy = function () {
299 mejs
.Utils
.typeChecks
.push(function (url
) {
300 return (/\/\/(w\.)?soundcloud.com/i.test(url
) ? 'video/x-soundcloud' : null
304 mejs
.Renderers
.add(SoundCloudIframeRenderer
);