github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/themes/wind/static/libs/sockjs-client-1.1.0/lib/shims.js (about)

     1  /* eslint-disable */
     2  /* jscs: disable */
     3  'use strict';
     4  
     5  // pulled specific shims from https://github.com/es-shims/es5-shim
     6  
     7  var ArrayPrototype = Array.prototype;
     8  var ObjectPrototype = Object.prototype;
     9  var FunctionPrototype = Function.prototype;
    10  var StringPrototype = String.prototype;
    11  var array_slice = ArrayPrototype.slice;
    12  
    13  var _toString = ObjectPrototype.toString;
    14  var isFunction = function (val) {
    15      return ObjectPrototype.toString.call(val) === '[object Function]';
    16  };
    17  var isArray = function isArray(obj) {
    18      return _toString.call(obj) === '[object Array]';
    19  };
    20  var isString = function isString(obj) {
    21      return _toString.call(obj) === '[object String]';
    22  };
    23  
    24  var supportsDescriptors = Object.defineProperty && (function () {
    25      try {
    26          Object.defineProperty({}, 'x', {});
    27          return true;
    28      } catch (e) { /* this is ES3 */
    29          return false;
    30      }
    31  }());
    32  
    33  // Define configurable, writable and non-enumerable props
    34  // if they don't exist.
    35  var defineProperty;
    36  if (supportsDescriptors) {
    37      defineProperty = function (object, name, method, forceAssign) {
    38          if (!forceAssign && (name in object)) { return; }
    39          Object.defineProperty(object, name, {
    40              configurable: true,
    41              enumerable: false,
    42              writable: true,
    43              value: method
    44          });
    45      };
    46  } else {
    47      defineProperty = function (object, name, method, forceAssign) {
    48          if (!forceAssign && (name in object)) { return; }
    49          object[name] = method;
    50      };
    51  }
    52  var defineProperties = function (object, map, forceAssign) {
    53      for (var name in map) {
    54          if (ObjectPrototype.hasOwnProperty.call(map, name)) {
    55            defineProperty(object, name, map[name], forceAssign);
    56          }
    57      }
    58  };
    59  
    60  var toObject = function (o) {
    61      if (o == null) { // this matches both null and undefined
    62          throw new TypeError("can't convert " + o + ' to object');
    63      }
    64      return Object(o);
    65  };
    66  
    67  //
    68  // Util
    69  // ======
    70  //
    71  
    72  // ES5 9.4
    73  // http://es5.github.com/#x9.4
    74  // http://jsperf.com/to-integer
    75  
    76  function toInteger(num) {
    77      var n = +num;
    78      if (n !== n) { // isNaN
    79          n = 0;
    80      } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
    81          n = (n > 0 || -1) * Math.floor(Math.abs(n));
    82      }
    83      return n;
    84  }
    85  
    86  function ToUint32(x) {
    87      return x >>> 0;
    88  }
    89  
    90  //
    91  // Function
    92  // ========
    93  //
    94  
    95  // ES-5 15.3.4.5
    96  // http://es5.github.com/#x15.3.4.5
    97  
    98  function Empty() {}
    99  
   100  defineProperties(FunctionPrototype, {
   101      bind: function bind(that) { // .length is 1
   102          // 1. Let Target be the this value.
   103          var target = this;
   104          // 2. If IsCallable(Target) is false, throw a TypeError exception.
   105          if (!isFunction(target)) {
   106              throw new TypeError('Function.prototype.bind called on incompatible ' + target);
   107          }
   108          // 3. Let A be a new (possibly empty) internal list of all of the
   109          //   argument values provided after thisArg (arg1, arg2 etc), in order.
   110          // XXX slicedArgs will stand in for "A" if used
   111          var args = array_slice.call(arguments, 1); // for normal call
   112          // 4. Let F be a new native ECMAScript object.
   113          // 11. Set the [[Prototype]] internal property of F to the standard
   114          //   built-in Function prototype object as specified in 15.3.3.1.
   115          // 12. Set the [[Call]] internal property of F as described in
   116          //   15.3.4.5.1.
   117          // 13. Set the [[Construct]] internal property of F as described in
   118          //   15.3.4.5.2.
   119          // 14. Set the [[HasInstance]] internal property of F as described in
   120          //   15.3.4.5.3.
   121          var binder = function () {
   122  
   123              if (this instanceof bound) {
   124                  // 15.3.4.5.2 [[Construct]]
   125                  // When the [[Construct]] internal method of a function object,
   126                  // F that was created using the bind function is called with a
   127                  // list of arguments ExtraArgs, the following steps are taken:
   128                  // 1. Let target be the value of F's [[TargetFunction]]
   129                  //   internal property.
   130                  // 2. If target has no [[Construct]] internal method, a
   131                  //   TypeError exception is thrown.
   132                  // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
   133                  //   property.
   134                  // 4. Let args be a new list containing the same values as the
   135                  //   list boundArgs in the same order followed by the same
   136                  //   values as the list ExtraArgs in the same order.
   137                  // 5. Return the result of calling the [[Construct]] internal
   138                  //   method of target providing args as the arguments.
   139  
   140                  var result = target.apply(
   141                      this,
   142                      args.concat(array_slice.call(arguments))
   143                  );
   144                  if (Object(result) === result) {
   145                      return result;
   146                  }
   147                  return this;
   148  
   149              } else {
   150                  // 15.3.4.5.1 [[Call]]
   151                  // When the [[Call]] internal method of a function object, F,
   152                  // which was created using the bind function is called with a
   153                  // this value and a list of arguments ExtraArgs, the following
   154                  // steps are taken:
   155                  // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
   156                  //   property.
   157                  // 2. Let boundThis be the value of F's [[BoundThis]] internal
   158                  //   property.
   159                  // 3. Let target be the value of F's [[TargetFunction]] internal
   160                  //   property.
   161                  // 4. Let args be a new list containing the same values as the
   162                  //   list boundArgs in the same order followed by the same
   163                  //   values as the list ExtraArgs in the same order.
   164                  // 5. Return the result of calling the [[Call]] internal method
   165                  //   of target providing boundThis as the this value and
   166                  //   providing args as the arguments.
   167  
   168                  // equiv: target.call(this, ...boundArgs, ...args)
   169                  return target.apply(
   170                      that,
   171                      args.concat(array_slice.call(arguments))
   172                  );
   173  
   174              }
   175  
   176          };
   177  
   178          // 15. If the [[Class]] internal property of Target is "Function", then
   179          //     a. Let L be the length property of Target minus the length of A.
   180          //     b. Set the length own property of F to either 0 or L, whichever is
   181          //       larger.
   182          // 16. Else set the length own property of F to 0.
   183  
   184          var boundLength = Math.max(0, target.length - args.length);
   185  
   186          // 17. Set the attributes of the length own property of F to the values
   187          //   specified in 15.3.5.1.
   188          var boundArgs = [];
   189          for (var i = 0; i < boundLength; i++) {
   190              boundArgs.push('$' + i);
   191          }
   192  
   193          // XXX Build a dynamic function with desired amount of arguments is the only
   194          // way to set the length property of a function.
   195          // In environments where Content Security Policies enabled (Chrome extensions,
   196          // for ex.) all use of eval or Function costructor throws an exception.
   197          // However in all of these environments Function.prototype.bind exists
   198          // and so this code will never be executed.
   199          var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);
   200  
   201          if (target.prototype) {
   202              Empty.prototype = target.prototype;
   203              bound.prototype = new Empty();
   204              // Clean up dangling references.
   205              Empty.prototype = null;
   206          }
   207  
   208          // TODO
   209          // 18. Set the [[Extensible]] internal property of F to true.
   210  
   211          // TODO
   212          // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
   213          // 20. Call the [[DefineOwnProperty]] internal method of F with
   214          //   arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
   215          //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
   216          //   false.
   217          // 21. Call the [[DefineOwnProperty]] internal method of F with
   218          //   arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
   219          //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
   220          //   and false.
   221  
   222          // TODO
   223          // NOTE Function objects created using Function.prototype.bind do not
   224          // have a prototype property or the [[Code]], [[FormalParameters]], and
   225          // [[Scope]] internal properties.
   226          // XXX can't delete prototype in pure-js.
   227  
   228          // 22. Return F.
   229          return bound;
   230      }
   231  });
   232  
   233  //
   234  // Array
   235  // =====
   236  //
   237  
   238  // ES5 15.4.3.2
   239  // http://es5.github.com/#x15.4.3.2
   240  // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
   241  defineProperties(Array, { isArray: isArray });
   242  
   243  
   244  var boxedString = Object('a');
   245  var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
   246  
   247  var properlyBoxesContext = function properlyBoxed(method) {
   248      // Check node 0.6.21 bug where third parameter is not boxed
   249      var properlyBoxesNonStrict = true;
   250      var properlyBoxesStrict = true;
   251      if (method) {
   252          method.call('foo', function (_, __, context) {
   253              if (typeof context !== 'object') { properlyBoxesNonStrict = false; }
   254          });
   255  
   256          method.call([1], function () {
   257              'use strict';
   258              properlyBoxesStrict = typeof this === 'string';
   259          }, 'x');
   260      }
   261      return !!method && properlyBoxesNonStrict && properlyBoxesStrict;
   262  };
   263  
   264  defineProperties(ArrayPrototype, {
   265      forEach: function forEach(fun /*, thisp*/) {
   266          var object = toObject(this),
   267              self = splitString && isString(this) ? this.split('') : object,
   268              thisp = arguments[1],
   269              i = -1,
   270              length = self.length >>> 0;
   271  
   272          // If no callback function or if callback is not a callable function
   273          if (!isFunction(fun)) {
   274              throw new TypeError(); // TODO message
   275          }
   276  
   277          while (++i < length) {
   278              if (i in self) {
   279                  // Invoke the callback function with call, passing arguments:
   280                  // context, property value, property key, thisArg object
   281                  // context
   282                  fun.call(thisp, self[i], i, object);
   283              }
   284          }
   285      }
   286  }, !properlyBoxesContext(ArrayPrototype.forEach));
   287  
   288  // ES5 15.4.4.14
   289  // http://es5.github.com/#x15.4.4.14
   290  // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
   291  var hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
   292  defineProperties(ArrayPrototype, {
   293      indexOf: function indexOf(sought /*, fromIndex */ ) {
   294          var self = splitString && isString(this) ? this.split('') : toObject(this),
   295              length = self.length >>> 0;
   296  
   297          if (!length) {
   298              return -1;
   299          }
   300  
   301          var i = 0;
   302          if (arguments.length > 1) {
   303              i = toInteger(arguments[1]);
   304          }
   305  
   306          // handle negative indices
   307          i = i >= 0 ? i : Math.max(0, length + i);
   308          for (; i < length; i++) {
   309              if (i in self && self[i] === sought) {
   310                  return i;
   311              }
   312          }
   313          return -1;
   314      }
   315  }, hasFirefox2IndexOfBug);
   316  
   317  //
   318  // String
   319  // ======
   320  //
   321  
   322  // ES5 15.5.4.14
   323  // http://es5.github.com/#x15.5.4.14
   324  
   325  // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
   326  // Many browsers do not split properly with regular expressions or they
   327  // do not perform the split correctly under obscure conditions.
   328  // See http://blog.stevenlevithan.com/archives/cross-browser-split
   329  // I've tested in many browsers and this seems to cover the deviant ones:
   330  //    'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
   331  //    '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
   332  //    'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
   333  //       [undefined, "t", undefined, "e", ...]
   334  //    ''.split(/.?/) should be [], not [""]
   335  //    '.'.split(/()()/) should be ["."], not ["", "", "."]
   336  
   337  var string_split = StringPrototype.split;
   338  if (
   339      'ab'.split(/(?:ab)*/).length !== 2 ||
   340      '.'.split(/(.?)(.?)/).length !== 4 ||
   341      'tesst'.split(/(s)*/)[1] === 't' ||
   342      'test'.split(/(?:)/, -1).length !== 4 ||
   343      ''.split(/.?/).length ||
   344      '.'.split(/()()/).length > 1
   345  ) {
   346      (function () {
   347          var compliantExecNpcg = /()??/.exec('')[1] === void 0; // NPCG: nonparticipating capturing group
   348  
   349          StringPrototype.split = function (separator, limit) {
   350              var string = this;
   351              if (separator === void 0 && limit === 0) {
   352                  return [];
   353              }
   354  
   355              // If `separator` is not a regex, use native split
   356              if (_toString.call(separator) !== '[object RegExp]') {
   357                  return string_split.call(this, separator, limit);
   358              }
   359  
   360              var output = [],
   361                  flags = (separator.ignoreCase ? 'i' : '') +
   362                          (separator.multiline  ? 'm' : '') +
   363                          (separator.extended   ? 'x' : '') + // Proposed for ES6
   364                          (separator.sticky     ? 'y' : ''), // Firefox 3+
   365                  lastLastIndex = 0,
   366                  // Make `global` and avoid `lastIndex` issues by working with a copy
   367                  separator2, match, lastIndex, lastLength;
   368              separator = new RegExp(separator.source, flags + 'g');
   369              string += ''; // Type-convert
   370              if (!compliantExecNpcg) {
   371                  // Doesn't need flags gy, but they don't hurt
   372                  separator2 = new RegExp('^' + separator.source + '$(?!\\s)', flags);
   373              }
   374              /* Values for `limit`, per the spec:
   375               * If undefined: 4294967295 // Math.pow(2, 32) - 1
   376               * If 0, Infinity, or NaN: 0
   377               * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
   378               * If negative number: 4294967296 - Math.floor(Math.abs(limit))
   379               * If other: Type-convert, then use the above rules
   380               */
   381              limit = limit === void 0 ?
   382                  -1 >>> 0 : // Math.pow(2, 32) - 1
   383                  ToUint32(limit);
   384              while (match = separator.exec(string)) {
   385                  // `separator.lastIndex` is not reliable cross-browser
   386                  lastIndex = match.index + match[0].length;
   387                  if (lastIndex > lastLastIndex) {
   388                      output.push(string.slice(lastLastIndex, match.index));
   389                      // Fix browsers whose `exec` methods don't consistently return `undefined` for
   390                      // nonparticipating capturing groups
   391                      if (!compliantExecNpcg && match.length > 1) {
   392                          match[0].replace(separator2, function () {
   393                              for (var i = 1; i < arguments.length - 2; i++) {
   394                                  if (arguments[i] === void 0) {
   395                                      match[i] = void 0;
   396                                  }
   397                              }
   398                          });
   399                      }
   400                      if (match.length > 1 && match.index < string.length) {
   401                          ArrayPrototype.push.apply(output, match.slice(1));
   402                      }
   403                      lastLength = match[0].length;
   404                      lastLastIndex = lastIndex;
   405                      if (output.length >= limit) {
   406                          break;
   407                      }
   408                  }
   409                  if (separator.lastIndex === match.index) {
   410                      separator.lastIndex++; // Avoid an infinite loop
   411                  }
   412              }
   413              if (lastLastIndex === string.length) {
   414                  if (lastLength || !separator.test('')) {
   415                      output.push('');
   416                  }
   417              } else {
   418                  output.push(string.slice(lastLastIndex));
   419              }
   420              return output.length > limit ? output.slice(0, limit) : output;
   421          };
   422      }());
   423  
   424  // [bugfix, chrome]
   425  // If separator is undefined, then the result array contains just one String,
   426  // which is the this value (converted to a String). If limit is not undefined,
   427  // then the output array is truncated so that it contains no more than limit
   428  // elements.
   429  // "0".split(undefined, 0) -> []
   430  } else if ('0'.split(void 0, 0).length) {
   431      StringPrototype.split = function split(separator, limit) {
   432          if (separator === void 0 && limit === 0) { return []; }
   433          return string_split.call(this, separator, limit);
   434      };
   435  }
   436  
   437  // ES5 15.5.4.20
   438  // whitespace from: http://es5.github.io/#x15.5.4.20
   439  var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
   440      '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
   441      '\u2029\uFEFF';
   442  var zeroWidth = '\u200b';
   443  var wsRegexChars = '[' + ws + ']';
   444  var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
   445  var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
   446  var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
   447  defineProperties(StringPrototype, {
   448      // http://blog.stevenlevithan.com/archives/faster-trim-javascript
   449      // http://perfectionkills.com/whitespace-deviations/
   450      trim: function trim() {
   451          if (this === void 0 || this === null) {
   452              throw new TypeError("can't convert " + this + ' to object');
   453          }
   454          return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
   455      }
   456  }, hasTrimWhitespaceBug);
   457  
   458  // ECMA-262, 3rd B.2.3
   459  // Not an ECMAScript standard, although ECMAScript 3rd Edition has a
   460  // non-normative section suggesting uniform semantics and it should be
   461  // normalized across all browsers
   462  // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
   463  var string_substr = StringPrototype.substr;
   464  var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
   465  defineProperties(StringPrototype, {
   466      substr: function substr(start, length) {
   467          return string_substr.call(
   468              this,
   469              start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,
   470              length
   471          );
   472      }
   473  }, hasNegativeSubstrBug);