/*! npm.im/iphone-inline-video 2.0.2 */ var enableInlineVideo = (function () { 'use strict'; /*! npm.im/intervalometer */ function intervalometer(cb, request, cancel, requestParameter) { var requestId; var previousLoopTime; function loop(now) { // must be requested before cb() because that might call .stop() requestId = request(loop, requestParameter); // called with "ms since last call". 0 on start() cb(now - (previousLoopTime || now)); previousLoopTime = now; } return { start: function start() { if (!requestId) { // prevent double starts loop(0); } }, stop: function stop() { cancel(requestId); requestId = null; previousLoopTime = 0; } }; } function frameIntervalometer(cb) { return intervalometer(cb, requestAnimationFrame, cancelAnimationFrame); } function preventEvent(element, eventName, toggleProperty, preventWithProperty) { function handler(e) { if (Boolean(element[toggleProperty]) === Boolean(preventWithProperty)) { e.stopImmediatePropagation(); // console.log(eventName, 'prevented on', element); } delete element[toggleProperty]; } element.addEventListener(eventName, handler, false); // Return handler to allow to disable the prevention. Usage: // const preventionHandler = preventEvent(el, 'click'); // el.removeEventHandler('click', preventionHandler); return handler; } function proxyProperty(object, propertyName, sourceObject, copyFirst) { function get() { return sourceObject[propertyName]; } function set(value) { sourceObject[propertyName] = value; } if (copyFirst) { set(object[propertyName]); } Object.defineProperty(object, propertyName, {get: get, set: set}); } function proxyEvent(object, eventName, sourceObject) { sourceObject.addEventListener(eventName, function () { return object.dispatchEvent(new Event(eventName)); }); } function dispatchEventAsync(element, type) { Promise.resolve().then(function () { element.dispatchEvent(new Event(type)); }); } var iOS8or9 = typeof document === 'object' && 'object-fit' in document.head.style && !matchMedia('(-webkit-video-playable-inline)').matches; var ಠ = 'bfred-it:iphone-inline-video'; var ಠevent = 'bfred-it:iphone-inline-video:event'; var ಠplay = 'bfred-it:iphone-inline-video:nativeplay'; var ಠpause = 'bfred-it:iphone-inline-video:nativepause'; /** * UTILS */ function getAudioFromVideo(video) { var audio = new Audio(); proxyEvent(video, 'play', audio); proxyEvent(video, 'playing', audio); proxyEvent(video, 'pause', audio); audio.crossOrigin = video.crossOrigin; // 'data:' causes audio.networkState > 0 // which then allows to keep