Blame view

sources/core/js/compatibility.js 3.48 KB
31b7f2792   Kload   Upgrade to ownclo...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  /**
   * implement Object.create for browsers without native support
   */
  if (typeof Object.create !== 'function') {
  	Object.create = function (o) {
  		function F() {}
  		F.prototype = o;
  		return new F();
  	};
  }
  
  /**
   * implement Object.keys for browsers without native support
   */
  if (typeof Object.keys !== 'function') {
  	Object.keys = function(o) {
  		if (o !== Object(o)) {
  			throw new TypeError('Object.keys called on a non-object');
  		}
  		var k=[],p;
  		for (p in o) {
  			if (Object.prototype.hasOwnProperty.call(o,p)) {
  				k.push(p);
  			}
  		}
  		return k;
  	};
  }
  
  /**
   * implement Array.filter for browsers without native support
   */
  if (!Array.prototype.filter) {
  	Array.prototype.filter = function(fun /*, thisp*/) {
  		var len = this.length >>> 0;
  		if (typeof fun !== "function"){
  			throw new TypeError();
  		}
  
  		var res = [];
  		var thisp = arguments[1];
  		for (var i = 0; i < len; i++) {
  			if (i in this) {
  				var val = this[i]; // in case fun mutates this
6d9380f96   Cédric Dupont   Update sources OC...
45
  				if (fun.call(thisp, val, i, this)) {
31b7f2792   Kload   Upgrade to ownclo...
46
  					res.push(val);
6d9380f96   Cédric Dupont   Update sources OC...
47
  				}
31b7f2792   Kload   Upgrade to ownclo...
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
  			}
  		}
  		return res;
  	};
  }
  
  /**
   * implement Array.indexOf for browsers without native support
   */
  if (!Array.prototype.indexOf){
  	Array.prototype.indexOf = function(elt /*, from*/)
  	{
  		var len = this.length;
  
  		var from = Number(arguments[1]) || 0;
  		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
  		if (from < 0){
  			from += len;
  		}
  
  		for (; from < len; from++)
  		{
  			if (from in this && this[from] === elt){
  				return from;
  			}
  		}
  		return -1;
  	};
  }
  
  /**
   * implement Array.map for browsers without native support
   */
  if (!Array.prototype.map){
  	Array.prototype.map = function(fun /*, thisp */){
  		"use strict";
  
  		if (this === void 0 || this === null){
  			throw new TypeError();
  		}
  
  		var t = Object(this);
  		var len = t.length >>> 0;
  		if (typeof fun !== "function"){
  			throw new TypeError();
  		}
  
  		var res = new Array(len);
  		var thisp = arguments[1];
  		for (var i = 0; i < len; i++){
  			if (i in t){
  				res[i] = fun.call(thisp, t[i], i, t);
  			}
  		}
  
  		return res;
  	};
  }
03e52840d   Kload   Init
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  
  //https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
  if (!Function.prototype.bind) {
  	Function.prototype.bind = function (oThis) {
  		if (typeof this !== "function") {
  			// closest thing possible to the ECMAScript 5 internal IsCallable 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;
  	};
  }
  
  //https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim
  if(!String.prototype.trim) {
  	String.prototype.trim = function () {
  		return this.replace(/^\s+|\s+$/g,'');
  	};
31b7f2792   Kload   Upgrade to ownclo...
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
  }
  
  // Older Firefoxes doesn't support outerHTML
  // From http://stackoverflow.com/questions/1700870/how-do-i-do-outerhtml-in-firefox#answer-3819589
  function outerHTML(node){
  	// In newer browsers use the internal property otherwise build a wrapper.
  	return node.outerHTML || (
  	function(n){
  		var div = document.createElement('div'), h;
  		div.appendChild( n.cloneNode(true) );
  		h = div.innerHTML;
  		div = null;
  		return h;
  	})(node);
  }
6d9380f96   Cédric Dupont   Update sources OC...
152
153
154
155
  
  // devicePixelRatio for IE10
  window.devicePixelRatio = window.devicePixelRatio ||
  	window.screen.deviceXDPI / window.screen.logicalXDPI || 1;