Telegram Web, preconfigured for usage in I2P.
http://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.7 KiB
135 lines
3.7 KiB
// Console-polyfill. MIT license. |
|
// https://github.com/paulmillr/console-polyfill |
|
// Make it safe to do console.log() always. |
|
(function(global) { |
|
'use strict'; |
|
global.console = global.console || {}; |
|
var con = global.console; |
|
var prop, method; |
|
var empty = {}; |
|
var dummy = function() {}; |
|
var properties = 'memory'.split(','); |
|
var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + |
|
'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + |
|
'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(','); |
|
while (prop = properties.pop()) if (!con[prop]) con[prop] = empty; |
|
while (method = methods.pop()) if (!con[method]) con[method] = dummy; |
|
})(typeof window === 'undefined' ? this : window); |
|
// Using `this` for web workers while maintaining compatibility with browser |
|
// targeted script loaders such as Browserify or Webpack where the only way to |
|
// get to the global object is via `window`. |
|
|
|
/* 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);
|
|
|