PageSourceSearch

https://lifemate.ai/js/build/renderers/soundcloud.js

js lifemate.ai collected 2026-10-05 15:13:19 UTC 8,394 bytes, 307 lines download raw bytes

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.