mirror of
https://github.com/keymanapp/keyman.git
synced 2026-10-09 23:47:27 +00:00
55 lines
2 KiB
JavaScript
55 lines
2 KiB
JavaScript
/*! https://mths.be/startswith v0.2.0 by @mathias */
|
|
if (!String.prototype.startsWith) {
|
|
(function() {
|
|
'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
|
|
var defineProperty = (function() {
|
|
// IE 8 only supports `Object.defineProperty` on DOM elements
|
|
try {
|
|
var object = {};
|
|
var $defineProperty = Object.defineProperty;
|
|
var result = $defineProperty(object, object, object) && $defineProperty;
|
|
} catch(error) {}
|
|
return result;
|
|
}());
|
|
var toString = {}.toString;
|
|
var startsWith = function(search) {
|
|
if (this == null) {
|
|
throw TypeError();
|
|
}
|
|
var string = String(this);
|
|
if (search && toString.call(search) == '[object RegExp]') {
|
|
throw TypeError();
|
|
}
|
|
var stringLength = string.length;
|
|
var searchString = String(search);
|
|
var searchLength = searchString.length;
|
|
var position = arguments.length > 1 ? arguments[1] : undefined;
|
|
// `ToInteger`
|
|
var pos = position ? Number(position) : 0;
|
|
if (pos != pos) { // better `isNaN`
|
|
pos = 0;
|
|
}
|
|
var start = Math.min(Math.max(pos, 0), stringLength);
|
|
// Avoid the `indexOf` call if no match is possible
|
|
if (searchLength + start > stringLength) {
|
|
return false;
|
|
}
|
|
var index = -1;
|
|
while (++index < searchLength) {
|
|
if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
if (defineProperty) {
|
|
defineProperty(String.prototype, 'startsWith', {
|
|
'value': startsWith,
|
|
'configurable': true,
|
|
'writable': true
|
|
});
|
|
} else {
|
|
String.prototype.startsWith = startsWith;
|
|
}
|
|
}());
|
|
}
|