ceec0fce2a
Supported SSL. Closes #71 Added setZeroTimeout. Now downloading files when tab in background and improved performance Multiple file parts download in parallel TLDeserialization.fetchBytes returns typed array
131 lines
3.4 KiB
JavaScript
131 lines
3.4 KiB
JavaScript
// Console-polyfill. MIT license.
|
|
// https://github.com/paulmillr/console-polyfill
|
|
// Make it safe to do console.log() always.
|
|
(function (con) {
|
|
'use strict';
|
|
var prop, method;
|
|
var empty = {};
|
|
var dummy = function() {};
|
|
var properties = 'memory'.split(',');
|
|
var methods = ('assert,count,debug,dir,dirxml,error,exception,group,' +
|
|
'groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,' +
|
|
'time,timeEnd,trace,warn').split(',');
|
|
while (prop = properties.pop()) con[prop] = con[prop] || empty;
|
|
while (method = methods.pop()) con[method] = con[method] || dummy;
|
|
})(this.console = this.console || {});
|
|
|
|
|
|
/* Array.indexOf polyfill */
|
|
if (!Array.prototype.indexOf) {
|
|
Array.prototype.indexOf = function(searchElement, fromIndex) {
|
|
var k;
|
|
if (this == null) {
|
|
throw new TypeError('"this" is null or not defined');
|
|
}
|
|
|
|
var O = Object(this);
|
|
var len = O.length >>> 0;
|
|
if (len === 0) {
|
|
return -1;
|
|
}
|
|
var n = +fromIndex || 0;
|
|
|
|
if (Math.abs(n) === Infinity) {
|
|
n = 0;
|
|
}
|
|
if (n >= len) {
|
|
return -1;
|
|
}
|
|
k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
|
|
while (k < len) {
|
|
if (k in O && O[k] === searchElement) {
|
|
return k;
|
|
}
|
|
k++;
|
|
}
|
|
return -1;
|
|
};
|
|
}
|
|
|
|
/* Array.isArray polyfill */
|
|
if (!Array.isArray) {
|
|
Array.isArray = function(arg) {
|
|
return Object.prototype.toString.call(arg) === '[object Array]';
|
|
};
|
|
}
|
|
|
|
/* Object.create polyfill */
|
|
if (typeof Object.create != 'function') {
|
|
Object.create = (function() {
|
|
var Object = function() {};
|
|
return function (prototype) {
|
|
if (arguments.length > 1) {
|
|
throw Error('Second argument not supported');
|
|
}
|
|
if (typeof prototype != 'object') {
|
|
throw TypeError('Argument must be an object');
|
|
}
|
|
Object.prototype = prototype;
|
|
var result = new Object();
|
|
Object.prototype = null;
|
|
return result;
|
|
};
|
|
})();
|
|
}
|
|
|
|
/* Function.bind polyfill */
|
|
if (!Function.prototype.bind) {
|
|
Function.prototype.bind = function (oThis) {
|
|
if (typeof this !== "function") {
|
|
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
|
}
|
|
|
|
var aArgs = Array.prototype.slice.call(arguments, 1),
|
|
fToBind = this,
|
|
fNOP = function () {},
|
|
fBound = function () {
|
|
return fToBind.apply(this instanceof fNOP && oThis
|
|
? this
|
|
: oThis,
|
|
aArgs.concat(Array.prototype.slice.call(arguments)));
|
|
};
|
|
|
|
fNOP.prototype = this.prototype;
|
|
fBound.prototype = new fNOP();
|
|
|
|
return fBound;
|
|
};
|
|
}
|
|
|
|
/* setZeroTimeout polyfill, from http://dbaron.org/log/20100309-faster-timeouts */
|
|
(function(global) {
|
|
var timeouts = [];
|
|
var messageName = 'zero-timeout-message';
|
|
|
|
function setZeroTimeout(fn) {
|
|
timeouts.push(fn);
|
|
global.postMessage(messageName, '*');
|
|
}
|
|
|
|
function handleMessage(event) {
|
|
if (event.source == global && event.data == messageName) {
|
|
event.stopPropagation();
|
|
if (timeouts.length > 0) {
|
|
var fn = timeouts.shift();
|
|
fn();
|
|
}
|
|
}
|
|
}
|
|
|
|
global.addEventListener('message', handleMessage, true);
|
|
|
|
var originalSetTimeout = global.setTimeout;
|
|
global.setTimeout = function (callback, delay) {
|
|
if (!delay || delay <= 5) {
|
|
return setZeroTimeout(callback);
|
|
}
|
|
return originalSetTimeout(callback, delay);
|
|
};
|
|
|
|
global.setZeroTimeout = setZeroTimeout;
|
|
})(this); |