2 * @preserve Copyright 2012-2014 pettanR team.
\r
3 * https://sourceforge.jp/projects/pettanr/
\r
4 * BSD 3-Clause License
\r
8 * ビルトインオブジェクトに拡張したい10のメソッド
\r
9 * http://d.hatena.ne.jp/ofk/20080922/1222047483
\r
12 Function.prototype.apply || (Function.prototype.apply = function (x, y) {
\r
13 var apply = '__apply',
\r
19 // apply 内で apply を呼んだ場合に備える
\r
21 x[ apply ] = void 0;
\r
23 if( x.constructor && x.constructor.prototype[ apply ] ){
\r
24 delete x.constructor.prototype[ apply ];
\r
26 if( x[ apply ] ) delete x[ apply ];
\r
30 if (!x[ apply ]) x.constructor.prototype[ apply ] = this;
\r
33 case 0: r = x[ apply ](); break;
\r
34 case 1: r = x[ apply ](y[0]); break;
\r
35 case 2: r = x[ apply ](y[0], y[1]); break;
\r
36 case 3: r = x[ apply ](y[0], y[1], y[2]); break;
\r
37 case 4: r = x[ apply ](y[0], y[1], y[2], y[3]); break;
\r
38 case 5: r = x[ apply ](y[0], y[1], y[2], y[3], y[4]); break;
\r
39 case 6: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5]); break;
\r
40 case 7: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5], y[6]); break;
\r
41 case 8: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7]); break;
\r
42 case 9: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7], y[8]); break;
\r
45 for (i = 0; i < j; ++i)
\r
46 a[i] = 'y[' + i + ']';
\r
47 //r = eval('x.__apply(' + a.join(',') + ')');
\r
48 // closuer compiler 対策
\r
49 r = (new Function( 'x,y', 'return x.__apply(' + a.join(',') + ')' ))( x, y );
\r
54 x[ apply ] = void 0;
\r
56 //alert( typeof x );
\r
57 if( x.constructor && x.constructor.prototype[ apply ] ){
\r
58 delete x.constructor.prototype[ apply ];
\r
60 if( x[ apply ] ) delete x[ apply ];
\r
64 Function.prototype.call || (Function.prototype.call = function () {
\r
65 var a = arguments, x = a[0], y = [], i = 1, j = a.length;
\r
68 return this.apply(x, y);
\r
71 Array.prototype.pop || (Array.prototype.pop = function () {
\r
72 var r = this[this.length - 1];
\r
76 Array.prototype.push || (Array.prototype.push = function () {
\r
77 var a = arguments, i = 0, j = a.length, l = this.length;
\r
82 Array.prototype.shift || (Array.prototype.shift = function () {
\r
83 var r = this[0], i = 1, j = this.length;
\r
85 this[i - 1] = this[i];
\r
89 Array.prototype.unshift || (Array.prototype.unshift = function () {
\r
90 var a = arguments, l = a.length, j = this.length += l - 1, i = j;
\r
92 this[i] = this[i - l];
\r
93 for (i = 0; i < l; ++i)
\r
97 Array.prototype.splice || (Array.prototype.splice = function (x, y) {
\r
98 var a = arguments, s = a.length - 2 - y, r = this.slice(x, x + y),i,j;
\r
100 for (i = this.length - 1, j = x + y; i >= j; --i)
\r
101 this[i + s] = this[i];
\r
104 for (i = x + y, j = this.length; i < j; ++i)
\r
105 this[i + s] = this[i];
\r
108 for (i = 2, j = a.length; i < j; ++i)
\r
109 this[i - 2 + x] = a[i];
\r
115 * JavaScript 1.6, Array.indexOfを下位互換実装する
\r
116 * http://www.inazumatv.com/contents/archives/7965
\r
119 Array.prototype.indexOf || (Array.prototype.indexOf = function( searchElement, fromIndex ){
\r
120 var l = this.length >>> 0, i;
\r
122 if( l === 0 ) return -1;
\r
125 i = fromIndex || 0;
\r
126 i = i === -Infinity ? 0 : ( i < 0 ? -i : i ) | 0; // Math.floor
\r
127 if( l <= i ) return -1;
\r
130 for( i = 0 <= i ? i : 0 < l + i ? l + i : 0; i < l; ++i ){
\r
131 if( this[ i ] === searchElement ) return i;
\r
138 * JavaScript split Bugs: Fixed!
\r
139 * http://blog.stevenlevithan.com/archives/cross-browser-split
\r
144 * by https://web.archive.org/web/20100413085309/http://nurucom-archives.hp.infoseek.co.jp/digital/trans-uri.html
\r
146 var _builtin_skipEncodeURI = (function(){
\r
147 var encodeURIComponentTarget = '!\'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~',
\r
148 encodeURITarget = '#$&+,-/:;=?@',
\r
150 for( i = encodeURIComponentTarget.length; i; ){
\r
151 obj[ encodeURIComponentTarget.charCodeAt( --i ) ] = 2;
\r
153 for( i = encodeURITarget.length; i; ){
\r
154 obj[ encodeURITarget.charCodeAt( --i ) ] = 1;
\r
159 // /[^!#$&-;=?-Z_a-z~]/g
\r
160 window[ 'encodeURI' ] || (window[ 'encodeURI' ] = function( x ){ return _builtin_encodeURI( x, 0 ); });
\r
161 // /[^!'-*.0-9A-Z_a-z~-]/g
\r
162 window[ 'encodeURIComponent' ] || (window[ 'encodeURIComponent' ] = function( x ){ return _builtin_encodeURI( x, 1 ); });
\r
164 function _builtin_encodeURI( x, kind ){
\r
166 skip = _builtin_skipEncodeURI,
\r
172 for( l = x.length; i < l; ++i ){
\r
173 if( !( kind < skip[ c = x.charCodeAt( i ) ] ) ){
\r
175 c < 16 ? '%0' + c.toString(16) :
\r
176 c < 128 ? p + c.toString(16) :
\r
177 c < 2048 ? p + (c >> 6 | 192).toString(16) + p + (c & 63 | 128).toString(16) :
\r
178 p + (c >> 12 | 224).toString(16) + p + (c >> 6 & 63 | 128).toString(16) + p + (c & 63 | 128).toString(16)
\r
181 chr = x.charAt( i );
\r
186 return result.join( '' );
\r
190 function _builtin_decodeURI( x ){
\r
193 toChrCode = String.fromCharCode,
\r
194 n = -1, i = 0, l, chr, decode, code, memory;
\r
198 for( l = x.length; i < l; ++i ){
\r
200 code = toInt( x.substr( i, 2 ), 16 );
\r
204 memory = ( code & 15 ) << 12;
\r
205 code = toInt( x.substr( i + 2, 2 ), 16 ) & 63; // 00%00%00
\r
207 memory += code << 6;
\r
209 memory = ( code & 63 ) << 6;
\r
211 code = toInt( x.substr( i + 2, 2 ), 16 ) & 63;
\r
215 // if( code !== code ) error
\r
216 //console.log( code );
\r
217 result[ ++n ] = toChrCode( code );
\r
220 chr = x.charAt( i );
\r
221 if( !( decode = chr === '%' ) ){
\r
222 result[ ++n ] = chr;
\r
227 return result.join( '' );
\r
230 window[ 'decodeURI' ] || (window[ 'decodeURI' ] = _builtin_decodeURI);
\r
231 window[ 'decodeURIComponent' ] || (window[ 'decodeURIComponent' ] = window.decodeURI);
\r
238 // replace(RegExp, Function)対応
\r
240 if (window.ActiveXObject ? !Number.prototype.toFixed : (!navigator.taintEnabled && !document.createElement("input").setSelectionRange))
\r
242 var g = String.prototype.replace;
\r
243 String.prototype.replace = function (x, y) {
\r
244 var s = this, z = y;
\r
246 if (y instanceof Function) {
\r
248 if (x instanceof RegExp) {
\r
250 if (x.global || /^\/.*g$/.test(x)) {
\r
252 while ((m = x.exec(s)) != null) {
\r
254 r[r.length] = s.slice(0, i);
\r
255 s = s.slice(i + m[0].length);
\r
256 r[r.length] = y.apply(null, m.concat(i, this));
\r
264 z = y.apply(null, m.concat(m.index, s));
\r
267 var i = s.indexOf(x);
\r
273 return g.call(s, x, z);
\r