// 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);