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.
98 lines
2.6 KiB
98 lines
2.6 KiB
10 years ago
|
// 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;
|
||
|
};
|
||
|
}
|