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 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){ 12'use strict'; 13 14mejs.i18n.en['mejs.speed-rate'] = 'Speed Rate'; 15 16Object.assign(mejs.MepDefaults, { 17 speeds: ['2.00', '1.50', '1.25', '1.00', '0.75'], 18 19 defaultSpeed: '1.00', 20 21 speedChar: 'x', 22 23 speedText: null 24}); 25 26Object.assign(MediaElementPlayer.prototype, { 27 buildspeed: function buildspeed(player, controls, layers, media) { 28 var t = this, 29 isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName); 30 31 if (!isNative) { 32 return; 33 } 34 35 var speeds = [], 36 speedTitle = mejs.Utils.isString(t.options.speedText) ? t.options.speedText : mejs.i18n.t('mejs.speed-rate'), 37 getSpeedNameFromValue = function getSpeedNameFromValue(value) { 38 for (var i = 0, total = speeds.length; i < total; i++) { 39 if (speeds[i].value === value) { 40 return speeds[i].name; 41 } 42 } 43 }; 44 45 var playbackSpeed = void 0, 46 defaultInArray = false; 47 48 for (var i = 0, total = t.options.speeds.length; i < total; i++) { 49 var s = t.options.speeds[i]; 50 51 if (typeof s === 'string') { 52 speeds.push({ 53 name: '' + s + t.options.speedChar, 54 value: s 55 }); 56 57 if (s === t.options.defaultSpeed) { 58 defaultInArray = true; 59 } 60 } else { 61 speeds.push(s); 62 if (s.value === t.options.defaultSpeed) { 63 defaultInArray = true; 64 } 65 } 66 } 67 68 if (!defaultInArray) { 69 speeds.push({ 70 name: t.options.defaultSpeed + t.options.speedChar, 71 value: t.options.defaultSpeed 72 }); 73 } 74 75 speeds.sort(function (a, b) { 76 return parseFloat(b.value) - parseFloat(a.value); 77 }); 78 79 t.cleanspeed(player); 80 81 player.speedButton = document.createElement('div'); 82 player.speedButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'speed-button'; 83 player.speedButton.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + speedTitle + '" ' + ('aria-label="' + speedTitle + '" tabindex="0">' + getSpeedNameFromValue(t.options.defaultSpeed) + '</button>') + ('<div class="' + t.options.classPrefix + 'speed-selector ' + t.options.classPrefix + 'offscreen">') + ('<ul class="' + t.options.classPrefix + 'speed-selector-list"></ul>') + '</div>'; 84 85 t.addControlElement(player.speedButton, 'speed'); 86 87 for (var _i = 0, _total = speeds.length; _i < _total; _i++) { 88 89 var inputId = t.id + '-speed-' + speeds[_i].value; 90 91 player.speedButton.querySelector('ul').innerHTML += '<li class="' + t.options.classPrefix + 'speed-selector-list-item">' + ('<input class="' + t.options.classPrefix + 'speed-selector-input" type="radio" name="' + t.id + '_speed"') + ('disabled="disabled" value="' + speeds[_i].value + '" id="' + inputId + '" ') + ((speeds[_i].value === t.options.defaultSpeed ? ' checked="checked"' : '') + '/>') + ('<label for="' + inputId + '" class="' + t.options.classPrefix + 'speed-selector-label') + ((speeds[_i].value === t.options.defaultSpeed ? ' ' + t.options.classPrefix + 'speed-selected' : '') + '">') + (speeds[_i].name + '</label>') + '</li>'; 92 } 93 94 playbackSpeed = t.options.defaultSpeed; 95 96 player.speedSelector = player.speedButton.querySelector('.' + t.options.classPrefix + 'speed-selector'); 97 98 var inEvents = ['mouseenter', 'focusin'], 99 outEvents = ['mouseleave', 'focusout'], 100 radios = player.speedButton.querySelectorAll('input[type="radio"]'), 101 labels = player.speedButton.querySelectorAll('.' + t.options.classPrefix + 'speed-selector-label'); 102 103 for (var _i2 = 0, _total2 = inEvents.length; _i2 < _total2; _i2++) { 104 player.speedButton.addEventListener(inEvents[_i2], function () { 105 mejs.Utils.removeClass(player.speedSelector, t.options.classPrefix + 'offscreen'); 106 player.speedSelector.style.height = player.speedSelector.querySelector('ul').offsetHeight; 107 player.speedSelector.style.top = -1 * parseFloat(player.speedSelector.offsetHeight) + 'px'; 108 }); 109 } 110 111 for (var _i3 = 0, _total3 = outEvents.length; _i3 < _total3; _i3++) { 112 player.speedSelector.addEventListener(outEvents[_i3], function () { 113 mejs.Utils.addClass(this, t.options.classPrefix + 'offscreen'); 114 }); 115 } 116 117 for (var _i4 = 0, _total4 = radios.length; _i4 < _total4; _i4++) { 118 var radio = radios[_i4]; 119 radio.disabled = false;
120 radio.addEventListener('click', function () { 121 var self = this, 122 newSpeed = self.value; 123 124 playbackSpeed = newSpeed; 125 media.playbackRate = parseFloat(newSpeed); 126 player.speedButton.querySelector('button').innerHTML = getSpeedNameFromValue(newSpeed); 127 var selected = player.speedButton.querySelectorAll('.' + t.options.classPrefix + 'speed-selected'); 128 for (var _i5 = 0, _total5 = selected.length; _i5 < _total5; _i5++) { 129 mejs.Utils.removeClass(selected[_i5], t.options.classPrefix + 'speed-selected'); 130 } 131 132 self.checked = true; 133 var siblings = mejs.Utils.siblings(self, function (el) { 134 return mejs.Utils.hasClass(el, t.options.classPrefix + 'speed-selector-label'); 135 }); 136 for (var j = 0, _total6 = siblings.length; j < _total6; j++) { 137 mejs.Utils.addClass(siblings[j], t.options.classPrefix + 'speed-selected'); 138 } 139 }); 140 } 141 142 for (var _i6 = 0, _total7 = labels.length; _i6 < _total7; _i6++) { 143 labels[_i6].addEventListener('click', function () { 144 var radio = mejs.Utils.siblings(this, function (el) { 145 return el.tagName === 'INPUT'; 146 })[0], 147 event = mejs.Utils.createEvent('click', radio); 148 radio.dispatchEvent(event); 149 }); 150 } 151 152 player.speedSelector.addEventListener('keydown', function (e) { 153 e.stopPropagation(); 154 }); 155 156 media.addEventListener('loadedmetadata', function () { 157 if (playbackSpeed) { 158 media.playbackRate = parseFloat(playbackSpeed); 159 } 160 }); 161 }, 162 cleanspeed: function cleanspeed(player) { 163 if (player) { 164 if (player.speedButton) { 165 player.speedButton.parentNode.removeChild(player.speedButton); 166 } 167 if (player.speedSelector) { 168 player.speedSelector.parentNode.removeChild(player.speedSelector); 169 } 170 } 171 } 172}); 173 174},{}]},{},[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.