soundmanager2-rails 2.97.20140901 → 2.97.20150601

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,7 +8,7 @@
8
8
  * Code provided under the BSD License:
9
9
  * http://schillmania.com/projects/soundmanager2/license.txt
10
10
  *
11
- * V2.97a.20140901
11
+ * V2.97a.20150601
12
12
  */
13
13
 
14
14
  /*global window, SM2_DEFER, sm2Debugger, console, document, navigator, setTimeout, setInterval, clearInterval, Audio, opera, module, define */
@@ -38,6 +38,8 @@ function SoundManager(smURL, smID) {
38
38
  'allowScriptAccess': 'always',
39
39
  'useFlashBlock': false,
40
40
  'useHTML5Audio': true,
41
+ 'forceUseGlobalHTML5Audio': false,
42
+ 'ignoreMobileRestrictions': false,
41
43
  'html5Test': /^(probably|maybe)$/i,
42
44
  'preferFlash': false,
43
45
  'noSWFCache': false,
@@ -110,7 +112,7 @@ function SoundManager(smURL, smID) {
110
112
  this.id = (smID || 'sm2movie');
111
113
  this.debugID = 'soundmanager-debug';
112
114
  this.debugURLParam = /([#?&])debug=1/i;
113
- this.versionNumber = 'V2.97a.20140901';
115
+ this.versionNumber = 'V2.97a.20150601';
114
116
  this.version = null;
115
117
  this.movieURL = null;
116
118
  this.altURL = null;
@@ -142,15 +144,22 @@ function SoundManager(smURL, smID) {
142
144
  this.html5Only = false;
143
145
  this.ignoreFlash = false;
144
146
  var SMSound,
145
- sm2 = this, globalHTML5Audio = null, flash = null, sm = 'soundManager', smc = sm + ': ', h5 = 'HTML5::', id, ua = navigator.userAgent, wl = window.location.href.toString(), doc = document, doNothing, setProperties, init, fV, on_queue = [], debugOpen = true, debugTS, didAppend = false, appendSuccess = false, didInit = false, disabled = false, windowLoaded = false, _wDS, wdCount = 0, initComplete, mixin, assign, extraOptions, addOnEvent, processOnEvents, initUserOnload, delayWaitForEI, waitForEI, rebootIntoHTML5, setVersionInfo, handleFocus, strings, initMovie, preInit, domContentLoaded, winOnLoad, didDCLoaded, getDocument, createMovie, catchError, setPolling, initDebug, debugLevels = ['log', 'info', 'warn', 'error'], defaultFlashVersion = 8, disableObject, failSafely, normalizeMovieURL, oRemoved = null, oRemovedHTML = null, str, flashBlockHandler, getSWFCSS, swfCSS, toggleDebug, loopFix, policyFix, complain, idCheck, waitingForEI = false, initPending = false, startTimer, stopTimer, timerExecute, h5TimerCount = 0, h5IntervalTimer = null, parseURL, messages = [],
146
- canIgnoreFlash, needsFlash = null, featureCheck, html5OK, html5CanPlay, html5Ext, html5Unload, domContentLoadedIE, testHTML5, event, slice = Array.prototype.slice, useGlobalHTML5Audio = false, lastGlobalHTML5URL, hasFlash, detectFlash, badSafariFix, html5_events, showSupport, flushMessages, wrapCallback, idCounter = 0,
147
- is_iDevice = ua.match(/(ipad|iphone|ipod)/i), isAndroid = ua.match(/android/i), isIE = ua.match(/msie/i), isWebkit = ua.match(/webkit/i), isSafari = (ua.match(/safari/i) && !ua.match(/chrome/i)), isOpera = (ua.match(/opera/i)),
147
+ sm2 = this, globalHTML5Audio = null, flash = null, sm = 'soundManager', smc = sm + ': ', h5 = 'HTML5::', id, ua = navigator.userAgent, wl = window.location.href.toString(), doc = document, doNothing, setProperties, init, fV, on_queue = [], debugOpen = true, debugTS, didAppend = false, appendSuccess = false, didInit = false, disabled = false, windowLoaded = false, _wDS, wdCount = 0, initComplete, mixin, assign, extraOptions, addOnEvent, processOnEvents, initUserOnload, delayWaitForEI, waitForEI, rebootIntoHTML5, setVersionInfo, handleFocus, strings, initMovie, domContentLoaded, winOnLoad, didDCLoaded, getDocument, createMovie, catchError, setPolling, initDebug, debugLevels = ['log', 'info', 'warn', 'error'], defaultFlashVersion = 8, disableObject, failSafely, normalizeMovieURL, oRemoved = null, oRemovedHTML = null, str, flashBlockHandler, getSWFCSS, swfCSS, toggleDebug, loopFix, policyFix, complain, idCheck, waitingForEI = false, initPending = false, startTimer, stopTimer, timerExecute, h5TimerCount = 0, h5IntervalTimer = null, parseURL, messages = [],
148
+ canIgnoreFlash, needsFlash = null, featureCheck, html5OK, html5CanPlay, html5Ext, html5Unload, domContentLoadedIE, testHTML5, event, slice = Array.prototype.slice, useGlobalHTML5Audio = false, lastGlobalHTML5URL, hasFlash, detectFlash, badSafariFix, html5_events, showSupport, flushMessages, wrapCallback, idCounter = 0, didSetup, msecScale = 1000,
149
+ is_iDevice = ua.match(/(ipad|iphone|ipod)/i), isAndroid = ua.match(/android/i), isIE = ua.match(/msie/i),
150
+ isWebkit = ua.match(/webkit/i),
151
+ isSafari = (ua.match(/safari/i) && !ua.match(/chrome/i)),
152
+ isOpera = (ua.match(/opera/i)),
148
153
  mobileHTML5 = (ua.match(/(mobile|pre\/|xoom)/i) || is_iDevice || isAndroid),
149
154
  isBadSafari = (!wl.match(/usehtml5audio/i) && !wl.match(/sm2\-ignorebadua/i) && isSafari && !ua.match(/silk/i) && ua.match(/OS X 10_6_([3-7])/i)),
150
- hasConsole = (window.console !== _undefined && console.log !== _undefined), isFocused = (doc.hasFocus !== _undefined?doc.hasFocus():null), tryInitOnFocus = (isSafari && (doc.hasFocus === _undefined || !doc.hasFocus())), okToDisable = !tryInitOnFocus, flashMIME = /(mp3|mp4|mpa|m4a|m4b)/i, msecScale = 1000,
155
+ hasConsole = (window.console !== _undefined && console.log !== _undefined),
156
+ isFocused = (doc.hasFocus !== _undefined ? doc.hasFocus() : null),
157
+ tryInitOnFocus = (isSafari && (doc.hasFocus === _undefined || !doc.hasFocus())),
158
+ okToDisable = !tryInitOnFocus,
159
+ flashMIME = /(mp3|mp4|mpa|m4a|m4b)/i,
151
160
  emptyURL = 'about:blank',
152
161
  emptyWAV = 'data:audio/wave;base64,/UklGRiYAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQIAAAD//w==',
153
- overHTTP = (doc.location?doc.location.protocol.match(/http/i):null),
162
+ overHTTP = (doc.location ? doc.location.protocol.match(/http/i) : null),
154
163
  http = (!overHTTP ? 'http:/'+'/' : ''),
155
164
  netStreamMimeTypes = /^\s*audio\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4||m4v|m4a|m4b|mp4v|3gp|3g2)\s*(?:$|;)/i,
156
165
  netStreamTypes = ['mpeg4', 'aac', 'flv', 'mov', 'mp4', 'm4v', 'f4v', 'm4a', 'm4b', 'mp4v', '3gp', '3g2'],
@@ -180,6 +189,32 @@ function SoundManager(smURL, smID) {
180
189
  if (options !== _undefined && didInit && needsFlash && sm2.ok() && (options.flashVersion !== _undefined || options.url !== _undefined || options.html5Test !== _undefined)) {
181
190
  }
182
191
  assign(options);
192
+ if (!useGlobalHTML5Audio) {
193
+ if (mobileHTML5) {
194
+ if (!sm2.setupOptions.ignoreMobileRestrictions || sm2.setupOptions.forceUseGlobalHTML5Audio) {
195
+ messages.push(strings.globalHTML5);
196
+ useGlobalHTML5Audio = true;
197
+ }
198
+ } else {
199
+ if (sm2.setupOptions.forceUseGlobalHTML5Audio) {
200
+ messages.push(strings.globalHTML5);
201
+ useGlobalHTML5Audio = true;
202
+ }
203
+ }
204
+ }
205
+ if (!didSetup && mobileHTML5) {
206
+ if (sm2.setupOptions.ignoreMobileRestrictions) {
207
+ messages.push(strings.ignoreMobile);
208
+ } else {
209
+ sm2.setupOptions.useHTML5Audio = true;
210
+ sm2.setupOptions.preferFlash = false;
211
+ if (is_iDevice) {
212
+ sm2.ignoreFlash = true;
213
+ } else if ((isAndroid && !ua.match(/android\s2\.3/i)) || !isAndroid) {
214
+ useGlobalHTML5Audio = true;
215
+ }
216
+ }
217
+ }
183
218
  if (options) {
184
219
  if (noURL && didDCLoaded && options.url !== _undefined) {
185
220
  sm2.beginDelayedInit();
@@ -188,6 +223,7 @@ function SoundManager(smURL, smID) {
188
223
  setTimeout(domContentLoaded, 1);
189
224
  }
190
225
  }
226
+ didSetup = true;
191
227
  return sm2;
192
228
  };
193
229
  this.ok = function() {
@@ -210,7 +246,7 @@ function SoundManager(smURL, smID) {
210
246
  }
211
247
  options = mixin(oOptions);
212
248
  options.url = parseURL(options.url);
213
- if (options.id === undefined) {
249
+ if (options.id === _undefined) {
214
250
  options.id = sm2.setupOptions.idPrefix + (idCounter++);
215
251
  }
216
252
  if (idCheck(options.id, true)) {
@@ -240,9 +276,9 @@ function SoundManager(smURL, smID) {
240
276
  options = policyFix(options, cs);
241
277
  oSound = make();
242
278
  if (fV === 8) {
243
- flash._createSound(options.id, options.loops||1, options.usePolicyFile);
279
+ flash._createSound(options.id, options.loops || 1, options.usePolicyFile);
244
280
  } else {
245
- flash._createSound(options.id, options.url, options.usePeakData, options.useWaveformData, options.useEQData, options.isMovieStar, (options.isMovieStar?options.bufferTime:false), options.loops||1, options.serverURL, options.duration||null, options.autoPlay, true, options.autoLoad, options.usePolicyFile);
281
+ flash._createSound(options.id, options.url, options.usePeakData, options.useWaveformData, options.useEQData, options.isMovieStar, (options.isMovieStar ? options.bufferTime : false), options.loops || 1, options.serverURL, options.duration || null, options.autoPlay, true, options.autoLoad, options.usePolicyFile);
246
282
  if (!options.serverURL) {
247
283
  oSound.connected = true;
248
284
  if (options.onconnect) {
@@ -264,8 +300,8 @@ function SoundManager(smURL, smID) {
264
300
  return false;
265
301
  }
266
302
  var oS = sm2.sounds[sID], i;
267
- oS._iO = {};
268
303
  oS.stop();
304
+ oS._iO = {};
269
305
  oS.unload();
270
306
  for (i = 0; i < sm2.soundIDs.length; i++) {
271
307
  if (sm2.soundIDs[i] === sID) {
@@ -363,7 +399,7 @@ function SoundManager(smURL, smID) {
363
399
  };
364
400
  this.pauseAll = function() {
365
401
  var i;
366
- for (i = sm2.soundIDs.length-1; i >= 0; i--) {
402
+ for (i = sm2.soundIDs.length - 1; i >= 0; i--) {
367
403
  sm2.sounds[sm2.soundIDs[i]].pause();
368
404
  }
369
405
  };
@@ -375,7 +411,7 @@ function SoundManager(smURL, smID) {
375
411
  };
376
412
  this.resumeAll = function() {
377
413
  var i;
378
- for (i = sm2.soundIDs.length-1; i >= 0; i--) {
414
+ for (i = sm2.soundIDs.length- 1 ; i >= 0; i--) {
379
415
  sm2.sounds[sm2.soundIDs[i]].resume();
380
416
  }
381
417
  };
@@ -392,6 +428,13 @@ function SoundManager(smURL, smID) {
392
428
  return sm2.sounds[sID].setPan(nPan);
393
429
  };
394
430
  this.setVolume = function(sID, nVol) {
431
+ var i, j;
432
+ if (sID !== _undefined && !isNaN(sID) && nVol === _undefined) {
433
+ for (i = 0, j = sm2.soundIDs.length; i < j; i++) {
434
+ sm2.sounds[sm2.soundIDs[i]].setVolume(sID);
435
+ }
436
+ return;
437
+ }
395
438
  if (!idCheck(sID)) {
396
439
  return false;
397
440
  }
@@ -403,7 +446,7 @@ function SoundManager(smURL, smID) {
403
446
  sID = null;
404
447
  }
405
448
  if (!sID) {
406
- for (i = sm2.soundIDs.length-1; i >= 0; i--) {
449
+ for (i = sm2.soundIDs.length - 1; i >= 0; i--) {
407
450
  sm2.sounds[sm2.soundIDs[i]].mute();
408
451
  }
409
452
  sm2.muted = true;
@@ -424,7 +467,7 @@ function SoundManager(smURL, smID) {
424
467
  sID = null;
425
468
  }
426
469
  if (!sID) {
427
- for (i = sm2.soundIDs.length-1; i >= 0; i--) {
470
+ for (i = sm2.soundIDs.length - 1; i >= 0; i--) {
428
471
  sm2.sounds[sm2.soundIDs[i]].unmute();
429
472
  }
430
473
  sm2.muted = false;
@@ -461,7 +504,7 @@ function SoundManager(smURL, smID) {
461
504
  return false;
462
505
  }
463
506
  disabled = true;
464
- for (i = sm2.soundIDs.length-1; i >= 0; i--) {
507
+ for (i = sm2.soundIDs.length - 1; i >= 0; i--) {
465
508
  disableObject(sm2.sounds[sm2.soundIDs[i]]);
466
509
  }
467
510
  initComplete(bNoDisable);
@@ -471,7 +514,9 @@ function SoundManager(smURL, smID) {
471
514
  this.canPlayMIME = function(sMIME) {
472
515
  var result;
473
516
  if (sm2.hasHTML5) {
474
- result = html5CanPlay({type:sMIME});
517
+ result = html5CanPlay({
518
+ type: sMIME
519
+ });
475
520
  }
476
521
  if (!result && needsFlash) {
477
522
  result = (sMIME && sm2.ok() ? !!((fV > 8 ? sMIME.match(netStreamMimeTypes) : null) || sMIME.match(sm2.mimePattern)) : null);
@@ -481,7 +526,9 @@ function SoundManager(smURL, smID) {
481
526
  this.canPlayURL = function(sURL) {
482
527
  var result;
483
528
  if (sm2.hasHTML5) {
484
- result = html5CanPlay({url: sURL});
529
+ result = html5CanPlay({
530
+ url: sURL
531
+ });
485
532
  }
486
533
  if (!result && needsFlash) {
487
534
  result = (sURL && sm2.ok() ? !!(sURL.match(sm2.filePattern)) : null);
@@ -541,7 +588,7 @@ function SoundManager(smURL, smID) {
541
588
  };
542
589
  this.reboot = function(resetEvents, excludeInit) {
543
590
  var i, j, k;
544
- for (i = sm2.soundIDs.length-1; i >= 0; i--) {
591
+ for (i = sm2.soundIDs.length- 1 ; i >= 0; i--) {
545
592
  sm2.sounds[sm2.soundIDs[i]].destruct();
546
593
  }
547
594
  if (flash) {
@@ -558,6 +605,7 @@ function SoundManager(smURL, smID) {
558
605
  sm2.soundIDs = [];
559
606
  sm2.sounds = {};
560
607
  idCounter = 0;
608
+ didSetup = false;
561
609
  if (!resetEvents) {
562
610
  for (i in on_queue) {
563
611
  if (on_queue.hasOwnProperty(i)) {
@@ -576,7 +624,6 @@ function SoundManager(smURL, smID) {
576
624
  sm2.html5Only = false;
577
625
  sm2.ignoreFlash = false;
578
626
  window.setTimeout(function() {
579
- preInit();
580
627
  if (!excludeInit) {
581
628
  sm2.beginDelayedInit();
582
629
  }
@@ -689,10 +736,13 @@ function SoundManager(smURL, smID) {
689
736
  if (fV === 8) {
690
737
  flash._load(s.id, instanceOptions.url, instanceOptions.stream, instanceOptions.autoPlay, instanceOptions.usePolicyFile);
691
738
  } else {
692
- flash._load(s.id, instanceOptions.url, !!(instanceOptions.stream), !!(instanceOptions.autoPlay), instanceOptions.loops||1, !!(instanceOptions.autoLoad), instanceOptions.usePolicyFile);
739
+ flash._load(s.id, instanceOptions.url, !!(instanceOptions.stream), !!(instanceOptions.autoPlay), instanceOptions.loops || 1, !!(instanceOptions.autoLoad), instanceOptions.usePolicyFile);
693
740
  }
694
741
  } catch(e) {
695
- catchError({type:'SMSOUND_LOAD_JS_EXCEPTION', fatal:true});
742
+ catchError({
743
+ type: 'SMSOUND_LOAD_JS_EXCEPTION',
744
+ fatal: true
745
+ });
696
746
  }
697
747
  }
698
748
  s.url = instanceOptions.url;
@@ -879,7 +929,7 @@ function SoundManager(smURL, smID) {
879
929
  audioClone.play();
880
930
  };
881
931
  event.add(audioClone, 'ended', onended);
882
- if (s._iO.volume !== undefined) {
932
+ if (s._iO.volume !== _undefined) {
883
933
  audioClone.volume = Math.max(0, Math.min(1, s._iO.volume/100));
884
934
  }
885
935
  if (s.muted) {
@@ -1064,7 +1114,7 @@ function SoundManager(smURL, smID) {
1064
1114
  _bInstanceOnly = false;
1065
1115
  }
1066
1116
  if (!s.isHTML5) {
1067
- flash._setVolume(s.id, (sm2.muted && !s.muted) || s.muted?0:nVol);
1117
+ flash._setVolume(s.id, (sm2.muted && !s.muted) || s.muted ? 0 : nVol);
1068
1118
  } else if (s._a) {
1069
1119
  if (sm2.muted && !s.muted) {
1070
1120
  s.muted = true;
@@ -1092,14 +1142,14 @@ function SoundManager(smURL, smID) {
1092
1142
  s.muted = false;
1093
1143
  var hasIO = (s._iO.volume !== _undefined);
1094
1144
  if (!s.isHTML5) {
1095
- flash._setVolume(s.id, hasIO?s._iO.volume:s.options.volume);
1145
+ flash._setVolume(s.id, hasIO ? s._iO.volume : s.options.volume);
1096
1146
  } else if (s._a) {
1097
1147
  s._a.muted = false;
1098
1148
  }
1099
1149
  return s;
1100
1150
  };
1101
1151
  this.toggleMute = function() {
1102
- return (s.muted?s.unmute():s.mute());
1152
+ return (s.muted ? s.unmute() : s.mute());
1103
1153
  };
1104
1154
  this.onPosition = function(nPosition, oMethod, oScope) {
1105
1155
  onPositionItems.push({
@@ -1133,13 +1183,13 @@ function SoundManager(smURL, smID) {
1133
1183
  if (!j || !s.playState || onPositionFired >= j) {
1134
1184
  return false;
1135
1185
  }
1136
- for (i=j-1; i >= 0; i--) {
1186
+ for (i = j - 1; i >= 0; i--) {
1137
1187
  item = onPositionItems[i];
1138
1188
  if (!item.fired && s.position >= item.position) {
1139
1189
  item.fired = true;
1140
1190
  onPositionFired++;
1141
1191
  item.method.apply(item.scope, [item.position]);
1142
- j = onPositionItems.length;
1192
+ j = onPositionItems.length;
1143
1193
  }
1144
1194
  }
1145
1195
  return true;
@@ -1149,7 +1199,7 @@ function SoundManager(smURL, smID) {
1149
1199
  if (!j) {
1150
1200
  return false;
1151
1201
  }
1152
- for (i=j-1; i >= 0; i--) {
1202
+ for (i = j - 1; i >= 0; i--) {
1153
1203
  item = onPositionItems[i];
1154
1204
  if (item.fired && nPosition <= item.position) {
1155
1205
  item.fired = false;
@@ -1267,7 +1317,7 @@ function SoundManager(smURL, smID) {
1267
1317
  isNew = true;
1268
1318
  }
1269
1319
  if (isNew || bForce) {
1270
- s._whileplaying(time,x,x,x,x);
1320
+ s._whileplaying(time, x, x, x, x);
1271
1321
  }
1272
1322
  }
1273
1323
  return isNew;
@@ -1275,7 +1325,7 @@ function SoundManager(smURL, smID) {
1275
1325
  };
1276
1326
  this._get_html5_duration = function() {
1277
1327
  var instanceOptions = s._iO,
1278
- d = (s._a && s._a.duration ? s._a.duration*msecScale : (instanceOptions && instanceOptions.duration ? instanceOptions.duration : null)),
1328
+ d = (s._a && s._a.duration ? s._a.duration * msecScale : (instanceOptions && instanceOptions.duration ? instanceOptions.duration : null)),
1279
1329
  result = (d && !isNaN(d) && d !== Infinity ? d : null);
1280
1330
  return result;
1281
1331
  };
@@ -1347,7 +1397,7 @@ function SoundManager(smURL, smID) {
1347
1397
  }
1348
1398
  var f;
1349
1399
  function add(oEvt, oFn, bCapture) {
1350
- return s._a ? s._a.addEventListener(oEvt, oFn, bCapture||false) : null;
1400
+ return s._a ? s._a.addEventListener(oEvt, oFn, bCapture || false) : null;
1351
1401
  }
1352
1402
  s._a._added_events = true;
1353
1403
  for (f in html5_events) {
@@ -1360,7 +1410,7 @@ function SoundManager(smURL, smID) {
1360
1410
  remove_html5_events = function() {
1361
1411
  var f;
1362
1412
  function remove(oEvt, oFn, bCapture) {
1363
- return (s._a ? s._a.removeEventListener(oEvt, oFn, bCapture||false) : null);
1413
+ return (s._a ? s._a.removeEventListener(oEvt, oFn, bCapture || false) : null);
1364
1414
  }
1365
1415
  s._a._added_events = false;
1366
1416
  for (f in html5_events) {
@@ -1373,7 +1423,7 @@ function SoundManager(smURL, smID) {
1373
1423
  var fN,
1374
1424
  loadOK = !!nSuccess || (!s.isHTML5 && fV === 8 && s.duration);
1375
1425
  s.loaded = loadOK;
1376
- s.readyState = loadOK?3:2;
1426
+ s.readyState = (loadOK ? 3 : 2);
1377
1427
  s._onbufferchange(0);
1378
1428
  if (s._iO.onload) {
1379
1429
  wrapCallback(s, function() {
@@ -1519,7 +1569,6 @@ function SoundManager(smURL, smID) {
1519
1569
  oData[oMDProps[i]] = oMDData[i];
1520
1570
  }
1521
1571
  s.metadata = oData;
1522
- console.log('updated metadata', s.metadata);
1523
1572
  if (s._iO.onmetadata) {
1524
1573
  s._iO.onmetadata.call(s, s.metadata);
1525
1574
  }
@@ -1611,7 +1660,7 @@ console.log('updated metadata', s.metadata);
1611
1660
  result = false;
1612
1661
  } else {
1613
1662
  if (sm2[i] instanceof Function) {
1614
- sm2[i].apply(sm2, (o[i] instanceof Array? o[i] : [o[i]]));
1663
+ sm2[i].apply(sm2, (o[i] instanceof Array ? o[i] : [o[i]]));
1615
1664
  } else {
1616
1665
  sm2[i] = o[i];
1617
1666
  }
@@ -1633,8 +1682,8 @@ console.log('updated metadata', s.metadata);
1633
1682
  event = (function() {
1634
1683
  var old = (window.attachEvent),
1635
1684
  evt = {
1636
- add: (old?'attachEvent':'addEventListener'),
1637
- remove: (old?'detachEvent':'removeEventListener')
1685
+ add: (old ? 'attachEvent' : 'addEventListener'),
1686
+ remove: (old ? 'detachEvent' : 'removeEventListener')
1638
1687
  };
1639
1688
  function getArgs(oArgs) {
1640
1689
  var args = slice.call(oArgs),
@@ -1748,18 +1797,18 @@ console.log('updated metadata', s.metadata);
1748
1797
  i, j, progStr, buffered = 0,
1749
1798
  isProgress = (e.type === 'progress'),
1750
1799
  ranges = e.target.buffered,
1751
- loaded = (e.loaded||0),
1752
- total = (e.total||1);
1800
+ loaded = (e.loaded || 0),
1801
+ total = (e.total || 1);
1753
1802
  s.buffered = [];
1754
1803
  if (ranges && ranges.length) {
1755
- for (i=0, j=ranges.length; i<j; i++) {
1804
+ for (i = 0, j = ranges.length; i < j; i++) {
1756
1805
  s.buffered.push({
1757
1806
  'start': ranges.start(i) * msecScale,
1758
1807
  'end': ranges.end(i) * msecScale
1759
1808
  });
1760
1809
  }
1761
1810
  buffered = (ranges.end(0) - ranges.start(0)) * msecScale;
1762
- loaded = Math.min(1, buffered/(e.target.duration*msecScale));
1811
+ loaded = Math.min(1, buffered / (e.target.duration * msecScale));
1763
1812
  }
1764
1813
  if (!isNaN(loaded)) {
1765
1814
  s._whileloading(loaded, total, s._get_html5_duration());
@@ -1801,7 +1850,7 @@ console.log('updated metadata', s.metadata);
1801
1850
  if (oAudio) {
1802
1851
  url = (isSafari ? emptyURL : (sm2.html5.canPlayType('audio/wav') ? emptyWAV : emptyURL));
1803
1852
  oAudio.src = url;
1804
- if (oAudio._called_unload !== undefined) {
1853
+ if (oAudio._called_unload !== _undefined) {
1805
1854
  oAudio._called_load = false;
1806
1855
  }
1807
1856
  }
@@ -1842,7 +1891,7 @@ console.log('updated metadata', s.metadata);
1842
1891
  result = false;
1843
1892
  } else {
1844
1893
  offset = mime.indexOf(';');
1845
- fileExt = (offset !== -1?mime.substr(0,offset):mime).substr(6);
1894
+ fileExt = (offset !== -1 ? mime.substr(0,offset) : mime).substr(6);
1846
1895
  }
1847
1896
  } else {
1848
1897
  fileExt = fileExt[1];
@@ -1850,7 +1899,7 @@ console.log('updated metadata', s.metadata);
1850
1899
  if (fileExt && sm2.html5[fileExt] !== _undefined) {
1851
1900
  result = (sm2.html5[fileExt] && !preferFlashCheck(fileExt));
1852
1901
  } else {
1853
- mime = 'audio/'+fileExt;
1902
+ mime = 'audio/' + fileExt;
1854
1903
  result = sm2.html5.canPlayType({type:mime});
1855
1904
  sm2.html5[fileExt] = result;
1856
1905
  result = (result && sm2.html5[mime] && !preferFlashCheck(mime));
@@ -1873,7 +1922,7 @@ console.log('updated metadata', s.metadata);
1873
1922
  return result;
1874
1923
  }
1875
1924
  if (m instanceof Array) {
1876
- for (i=0, j=m.length; i<j; i++) {
1925
+ for (i = 0, j = m.length; i < j; i++) {
1877
1926
  if (sm2.html5[m[i]] || a.canPlayType(m[i]).match(sm2.html5Test)) {
1878
1927
  isOK = true;
1879
1928
  sm2.html5[m[i]] = true;
@@ -1901,15 +1950,15 @@ console.log('updated metadata', s.metadata);
1901
1950
  sm2.flash[lookup] = false;
1902
1951
  }
1903
1952
  if (aF[item] && aF[item].related) {
1904
- for (i=aF[item].related.length-1; i >= 0; i--) {
1905
- support['audio/'+aF[item].related[i]] = support[item];
1953
+ for (i = aF[item].related.length - 1; i >= 0; i--) {
1954
+ support['audio/' + aF[item].related[i]] = support[item];
1906
1955
  sm2.html5[aF[item].related[i]] = support[item];
1907
1956
  sm2.flash[aF[item].related[i]] = support[item];
1908
1957
  }
1909
1958
  }
1910
1959
  }
1911
1960
  }
1912
- support.canPlayType = (a?cp:null);
1961
+ support.canPlayType = (a ? cp : null);
1913
1962
  sm2.html5 = mixin(sm2.html5, support);
1914
1963
  sm2.html5.usingFlash = featureCheck();
1915
1964
  needsFlash = sm2.html5.usingFlash;
@@ -1976,11 +2025,11 @@ console.log('updated metadata', s.metadata);
1976
2025
  if (fV !== 8 && fV !== 9) {
1977
2026
  sm2.flashVersion = fV = defaultFlashVersion;
1978
2027
  }
1979
- var isDebug = (sm2.debugMode || sm2.debugFlash?'_debug.swf':'.swf');
2028
+ var isDebug = (sm2.debugMode || sm2.debugFlash ? '_debug.swf' : '.swf');
1980
2029
  if (sm2.useHTML5Audio && !sm2.html5Only && sm2.audioFormats.mp4.required && fV < 9) {
1981
2030
  sm2.flashVersion = fV = 9;
1982
2031
  }
1983
- sm2.version = sm2.versionNumber + (sm2.html5Only?' (HTML5-only mode)':(fV === 9?' (AS3/Flash 9)':' (AS2/Flash 8)'));
2032
+ sm2.version = sm2.versionNumber + (sm2.html5Only ? ' (HTML5-only mode)' : (fV === 9 ? ' (AS3/Flash 9)' : ' (AS2/Flash 8)'));
1984
2033
  if (fV > 8) {
1985
2034
  sm2.defaultOptions = mixin(sm2.defaultOptions, sm2.flash9Options);
1986
2035
  sm2.features.buffering = true;
@@ -1990,8 +2039,8 @@ console.log('updated metadata', s.metadata);
1990
2039
  } else {
1991
2040
  sm2.features.movieStar = false;
1992
2041
  }
1993
- sm2.filePattern = sm2.filePatterns[(fV !== 8?'flash9':'flash8')];
1994
- sm2.movieURL = (fV === 8?'soundmanager2.swf':'soundmanager2_flash9.swf').replace('.swf', isDebug);
2042
+ sm2.filePattern = sm2.filePatterns[(fV !== 8 ? 'flash9' : 'flash8')];
2043
+ sm2.movieURL = (fV === 8 ? 'soundmanager2.swf' : 'soundmanager2_flash9.swf').replace('.swf', isDebug);
1995
2044
  sm2.features.peakData = sm2.features.waveformData = sm2.features.eqData = (fV > 8);
1996
2045
  };
1997
2046
  setPolling = function(bPolling, bHighPerformance) {
@@ -2020,20 +2069,26 @@ console.log('updated metadata', s.metadata);
2020
2069
  var name = str('fbHandler'),
2021
2070
  p = sm2.getMoviePercent(),
2022
2071
  css = swfCSS,
2023
- error = {type:'FLASHBLOCK'};
2072
+ error = {
2073
+ type:'FLASHBLOCK'
2074
+ };
2024
2075
  if (sm2.html5Only) {
2025
2076
  return false;
2026
2077
  }
2027
2078
  if (!sm2.ok()) {
2028
2079
  if (needsFlash) {
2029
- sm2.oMC.className = getSWFCSS() + ' ' + css.swfDefault + ' ' + (p === null?css.swfTimedout:css.swfError);
2080
+ sm2.oMC.className = getSWFCSS() + ' ' + css.swfDefault + ' ' + (p === null ? css.swfTimedout : css.swfError);
2030
2081
  }
2031
2082
  sm2.didFlashBlock = true;
2032
- processOnEvents({type:'ontimeout', ignoreInit:true, error:error});
2083
+ processOnEvents({
2084
+ type: 'ontimeout',
2085
+ ignoreInit: true,
2086
+ error: error
2087
+ });
2033
2088
  catchError(error);
2034
2089
  } else {
2035
2090
  if (sm2.oMC) {
2036
- sm2.oMC.className = [getSWFCSS(), css.swfDefault, css.swfLoaded + (sm2.didFlashBlock?' '+css.swfUnblocked:'')].join(' ');
2091
+ sm2.oMC.className = [getSWFCSS(), css.swfDefault, css.swfLoaded + (sm2.didFlashBlock ? ' ' + css.swfUnblocked : '')].join(' ');
2037
2092
  }
2038
2093
  }
2039
2094
  };
@@ -2060,9 +2115,9 @@ console.log('updated metadata', s.metadata);
2060
2115
  return false;
2061
2116
  }
2062
2117
  var status = {
2063
- success: (oOptions && oOptions.ignoreInit?sm2.ok():!disabled)
2118
+ success: (oOptions && oOptions.ignoreInit ? sm2.ok() : !disabled)
2064
2119
  },
2065
- srcQueue = (oOptions && oOptions.type?on_queue[oOptions.type]||[]:[]),
2120
+ srcQueue = (oOptions && oOptions.type ? on_queue[oOptions.type] || [] : []),
2066
2121
  queue = [], i, j,
2067
2122
  args = [status],
2068
2123
  canRetry = (needsFlash && !sm2.ok());
@@ -2100,7 +2155,7 @@ console.log('updated metadata', s.metadata);
2100
2155
  if (sm2.waitForWindowLoad) {
2101
2156
  event.add(window, 'load', initUserOnload);
2102
2157
  }
2103
- },1);
2158
+ }, 1);
2104
2159
  };
2105
2160
  detectFlash = function() {
2106
2161
  if (hasFlash !== _undefined) {
@@ -2168,7 +2223,7 @@ featureCheck = function() {
2168
2223
  parseURL = function(url) {
2169
2224
  var i, j, urlResult = 0, result;
2170
2225
  if (url instanceof Array) {
2171
- for (i=0, j=url.length; i<j; i++) {
2226
+ for (i = 0, j = url.length; i < j; i++) {
2172
2227
  if (url[i] instanceof Object) {
2173
2228
  if (sm2.canPlayMIME(url[i].type)) {
2174
2229
  urlResult = i;
@@ -2214,7 +2269,7 @@ featureCheck = function() {
2214
2269
  h5IntervalTimer = null;
2215
2270
  return false;
2216
2271
  }
2217
- for (i = sm2.soundIDs.length-1; i >= 0; i--) {
2272
+ for (i = sm2.soundIDs.length - 1; i >= 0; i--) {
2218
2273
  if (sm2.sounds[sm2.soundIDs[i]].isHTML5 && sm2.sounds[sm2.soundIDs[i]]._hasTimer) {
2219
2274
  sm2.sounds[sm2.soundIDs[i]]._onTimer();
2220
2275
  }
@@ -2223,7 +2278,9 @@ featureCheck = function() {
2223
2278
  catchError = function(options) {
2224
2279
  options = (options !== _undefined ? options : {});
2225
2280
  if (typeof sm2.onerror === 'function') {
2226
- sm2.onerror.apply(window, [{type:(options.type !== _undefined ? options.type : null)}]);
2281
+ sm2.onerror.apply(window, [{
2282
+ type: (options.type !== _undefined ? options.type : null)
2283
+ }]);
2227
2284
  }
2228
2285
  if (options.fatal !== _undefined && options.fatal) {
2229
2286
  sm2.disable();
@@ -2239,7 +2296,7 @@ featureCheck = function() {
2239
2296
  if (item === 'mp3' || item === 'mp4') {
2240
2297
  sm2.html5[item] = false;
2241
2298
  if (aF[item] && aF[item].related) {
2242
- for (i = aF[item].related.length-1; i >= 0; i--) {
2299
+ for (i = aF[item].related.length - 1; i >= 0; i--) {
2243
2300
  sm2.html5[aF[item].related[i]] = false;
2244
2301
  }
2245
2302
  }
@@ -2285,12 +2342,12 @@ featureCheck = function() {
2285
2342
  html = doc.getElementsByTagName('html')[0],
2286
2343
  oEmbed, oMovie, tmp, movieHTML, oEl, s, x, sClass;
2287
2344
  isRTL = (html && html.dir && html.dir.match(/rtl/i));
2288
- smID = (smID === _undefined?sm2.id:smID);
2345
+ smID = (smID === _undefined ? sm2.id : smID);
2289
2346
  function param(name, value) {
2290
- return '<param name="'+name+'" value="'+value+'" />';
2347
+ return '<param name="' + name + '" value="' + value + '" />';
2291
2348
  }
2292
2349
  setVersionInfo();
2293
- sm2.url = normalizeMovieURL(overHTTP?remoteURL:localURL);
2350
+ sm2.url = normalizeMovieURL(overHTTP ? remoteURL : localURL);
2294
2351
  smURL = sm2.url;
2295
2352
  sm2.wmode = (!sm2.wmode && sm2.useHighPerformance ? 'transparent' : sm2.wmode);
2296
2353
  if (sm2.wmode !== null && (ua.match(/msie 8/i) || (!isIE && !sm2.useHighPerformance)) && navigator.platform.match(/win32|win64/i)) {
@@ -2304,7 +2361,7 @@ featureCheck = function() {
2304
2361
  'quality': 'high',
2305
2362
  'allowScriptAccess': sm2.allowScriptAccess,
2306
2363
  'bgcolor': sm2.bgColor,
2307
- 'pluginspage': http+'www.macromedia.com/go/getflashplayer',
2364
+ 'pluginspage': http + 'www.macromedia.com/go/getflashplayer',
2308
2365
  'title': swfTitle,
2309
2366
  'type': 'application/x-shockwave-flash',
2310
2367
  'wmode': sm2.wmode,
@@ -2319,7 +2376,7 @@ featureCheck = function() {
2319
2376
  if (isIE) {
2320
2377
  oMovie = doc.createElement('div');
2321
2378
  movieHTML = [
2322
- '<object id="' + smID + '" data="' + smURL + '" type="' + oEmbed.type + '" title="' + oEmbed.title +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="' + http+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">',
2379
+ '<object id="' + smID + '" data="' + smURL + '" type="' + oEmbed.type + '" title="' + oEmbed.title +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">',
2323
2380
  param('movie', smURL),
2324
2381
  param('AllowScriptAccess', sm2.allowScriptAccess),
2325
2382
  param('quality', oEmbed.quality),
@@ -2366,7 +2423,7 @@ featureCheck = function() {
2366
2423
  'left': '-9999px'
2367
2424
  };
2368
2425
  if (isRTL) {
2369
- s.left = Math.abs(parseInt(s.left,10))+'px';
2426
+ s.left = Math.abs(parseInt(s.left, 10)) + 'px';
2370
2427
  }
2371
2428
  }
2372
2429
  }
@@ -2392,11 +2449,11 @@ featureCheck = function() {
2392
2449
  }
2393
2450
  appendSuccess = true;
2394
2451
  } catch(e) {
2395
- throw new Error(str('domError')+' \n'+e.toString());
2452
+ throw new Error(str('domError') + ' \n' + e.toString());
2396
2453
  }
2397
2454
  } else {
2398
2455
  sClass = sm2.oMC.className;
2399
- sm2.oMC.className = (sClass?sClass+' ':swfCSS.swfDefault) + (extraClass?' '+extraClass:'');
2456
+ sm2.oMC.className = (sClass ? sClass + ' ' : swfCSS.swfDefault) + (extraClass ? ' ' + extraClass : '');
2400
2457
  sm2.oMC.appendChild(oMovie);
2401
2458
  if (isIE) {
2402
2459
  oEl = sm2.oMC.appendChild(doc.createElement('div'));
@@ -2490,7 +2547,13 @@ featureCheck = function() {
2490
2547
  if (!sm2.useFlashBlock && canIgnoreFlash) {
2491
2548
  rebootIntoHTML5();
2492
2549
  } else {
2493
- processOnEvents({type:'ontimeout', ignoreInit: true, error: {type: 'INIT_FLASHBLOCK'}});
2550
+ processOnEvents({
2551
+ type: 'ontimeout',
2552
+ ignoreInit: true,
2553
+ error: {
2554
+ type: 'INIT_FLASHBLOCK'
2555
+ }
2556
+ });
2494
2557
  }
2495
2558
  }
2496
2559
  } else {
@@ -2540,12 +2603,18 @@ featureCheck = function() {
2540
2603
  if (!wasTimeout) {
2541
2604
  didInit = true;
2542
2605
  }
2543
- error = {type: (!hasFlash && needsFlash ? 'NO_FLASH' : 'INIT_TIMEOUT')};
2606
+ error = {
2607
+ type: (!hasFlash && needsFlash ? 'NO_FLASH' : 'INIT_TIMEOUT')
2608
+ };
2544
2609
  if (disabled || bNoDisable) {
2545
2610
  if (sm2.useFlashBlock && sm2.oMC) {
2546
- sm2.oMC.className = getSWFCSS() + ' ' + (sm2.getMoviePercent() === null?swfCSS.swfTimedout:swfCSS.swfError);
2611
+ sm2.oMC.className = getSWFCSS() + ' ' + (sm2.getMoviePercent() === null ? swfCSS.swfTimedout : swfCSS.swfError);
2547
2612
  }
2548
- processOnEvents({type:'ontimeout', error:error, ignoreInit: true});
2613
+ processOnEvents({
2614
+ type: 'ontimeout',
2615
+ error: error,
2616
+ ignoreInit: true
2617
+ });
2549
2618
  catchError(error);
2550
2619
  result = false;
2551
2620
  } else {
@@ -2599,7 +2668,10 @@ featureCheck = function() {
2599
2668
  event.add(window, 'unload', doNothing);
2600
2669
  }
2601
2670
  } catch(e) {
2602
- catchError({type:'JS_TO_FLASH_EXCEPTION', fatal:true});
2671
+ catchError({
2672
+ type: 'JS_TO_FLASH_EXCEPTION',
2673
+ fatal: true
2674
+ });
2603
2675
  failSafely(true);
2604
2676
  initComplete();
2605
2677
  return false;
@@ -2646,19 +2718,6 @@ featureCheck = function() {
2646
2718
  domContentLoaded();
2647
2719
  event.remove(window, 'load', winOnLoad);
2648
2720
  };
2649
- preInit = function() {
2650
- if (mobileHTML5) {
2651
- sm2.setupOptions.useHTML5Audio = true;
2652
- sm2.setupOptions.preferFlash = false;
2653
- if (is_iDevice || (isAndroid && !ua.match(/android\s2\.3/i))) {
2654
- if (is_iDevice) {
2655
- sm2.ignoreFlash = true;
2656
- }
2657
- useGlobalHTML5Audio = true;
2658
- }
2659
- }
2660
- };
2661
- preInit();
2662
2721
  detectFlash();
2663
2722
  event.add(window, 'focus', handleFocus);
2664
2723
  event.add(window, 'load', delayWaitForEI);
@@ -2668,26 +2727,39 @@ featureCheck = function() {
2668
2727
  } else if (doc.attachEvent) {
2669
2728
  doc.attachEvent('onreadystatechange', domContentLoadedIE);
2670
2729
  } else {
2671
- catchError({type:'NO_DOM2_EVENTS', fatal:true});
2730
+ catchError({
2731
+ type: 'NO_DOM2_EVENTS',
2732
+ fatal: true
2733
+ });
2672
2734
  }
2673
2735
  }
2674
2736
  // SM2_DEFER details: http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loading
2675
- if (window.SM2_DEFER === undefined || !SM2_DEFER) {
2737
+ if (window.SM2_DEFER === _undefined || !SM2_DEFER) {
2676
2738
  soundManager = new SoundManager();
2677
2739
  }
2678
2740
  if (typeof module === 'object' && module && typeof module.exports === 'object') {
2679
- window.soundManager = soundManager;
2680
2741
  module.exports.SoundManager = SoundManager;
2681
2742
  module.exports.soundManager = soundManager;
2682
2743
  } else if (typeof define === 'function' && define.amd) {
2683
- define('SoundManager', [], function() {
2744
+ define(function() {
2745
+ function getInstance(smBuilder) {
2746
+ if (!window.soundManager && smBuilder instanceof Function) {
2747
+ var instance = smBuilder(SoundManager);
2748
+ if (instance instanceof SoundManager) {
2749
+ window.soundManager = instance;
2750
+ }
2751
+ }
2752
+ return window.soundManager;
2753
+ }
2684
2754
  return {
2685
- SoundManager: SoundManager,
2686
- soundManager: soundManager
2687
- };
2755
+ constructor: SoundManager,
2756
+ getInstance: getInstance
2757
+ }
2688
2758
  });
2689
- } else {
2690
- window.SoundManager = SoundManager;
2691
- window.soundManager = soundManager;
2692
2759
  }
2760
+ // standard browser case
2761
+ // constructor
2762
+ window.SoundManager = SoundManager;
2763
+ // public API, flash callbacks etc.
2764
+ window.soundManager = soundManager;
2693
2765
  }(window));