mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-27 10:47:41 +00:00
chore(web): drops a worker polyfill, makes another conditional
This commit is contained in:
parent
cc24571e63
commit
6887ca3053
8 changed files with 18 additions and 96 deletions
|
|
@ -46,7 +46,7 @@ export default class PriorityQueue<Type> {
|
|||
// https://en.wikipedia.org/wiki/Min-max_heap
|
||||
this.comparator = comparator;
|
||||
|
||||
this.heap = Array.from(initialEntries ?? []);
|
||||
this.heap = (initialEntries ?? []).slice(0);
|
||||
this.heapify();
|
||||
}
|
||||
|
||||
|
|
@ -228,6 +228,6 @@ export default class PriorityQueue<Type> {
|
|||
* they will almost certainly be unsorted.
|
||||
*/
|
||||
toArray(): Type[] {
|
||||
return Array.from(this.heap);
|
||||
return this.heap.slice(0);
|
||||
}
|
||||
}
|
||||
|
|
@ -24,7 +24,7 @@ describe('Priority queue', function() {
|
|||
|
||||
it('initializes well from pre-existing values', function() {
|
||||
let input = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6];
|
||||
let originalInput = Array.from(input);
|
||||
let originalInput = input.slice(0);
|
||||
let queue = new PriorityQueue((a, b) => a - b, input);
|
||||
|
||||
assert.deepEqual(input, originalInput);
|
||||
|
|
|
|||
|
|
@ -81,8 +81,6 @@ let sourceFileSet = [
|
|||
loadPolyfill('src/polyfills/array.fill.js', 'src/polyfills/array.fill.js'),
|
||||
// Needed for Android / Chromium browser pre-45.
|
||||
loadPolyfill('src/polyfills/array.findIndex.js', 'src/polyfills/array.findIndex.js'),
|
||||
// Needed for Android / Chromium browser pre-45.
|
||||
loadPolyfill('src/polyfills/array.from.js', 'src/polyfills/array.from.js'),
|
||||
// Needed for Android / Chromium browser pre-47.
|
||||
loadPolyfill('src/polyfills/array.includes.js', 'src/polyfills/array.includes.js'),
|
||||
// For Object.values, for iteration over object-based associate arrays.
|
||||
|
|
|
|||
|
|
@ -69,11 +69,11 @@ export class ClassicalDistanceCalculation<TUnit = string, TInput extends EditTok
|
|||
this.resolvedDistances = Array(rowCount);
|
||||
|
||||
for(let r = 0; r < rowCount; r++) {
|
||||
this.resolvedDistances[r] = Array.from(other.resolvedDistances[r]);
|
||||
this.resolvedDistances[r] = other.resolvedDistances[r].slice(0);
|
||||
}
|
||||
|
||||
this.inputSequence = Array.from(other.inputSequence);
|
||||
this.matchSequence = Array.from(other.matchSequence);
|
||||
this.inputSequence = other.inputSequence.slice(0);
|
||||
this.matchSequence = other.matchSequence.slice(0);
|
||||
this.diagonalWidth = other.diagonalWidth;
|
||||
} else {
|
||||
this.resolvedDistances = [];
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ export class SearchNode {
|
|||
|
||||
// TODO: transform.deleteRight currently not supported.
|
||||
|
||||
let inputPath = Array.from(this.priorInput);
|
||||
let inputPath = this.priorInput.slice(0);
|
||||
inputPath.push(probMass);
|
||||
// Tokenize and iterate over input chars, adding them into the calc.
|
||||
for(let i=0; i < transform.insert.length; i++) {
|
||||
|
|
|
|||
|
|
@ -1,81 +0,0 @@
|
|||
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
|
||||
// Any npm-based ones require use of `require`, which won't work for us.
|
||||
|
||||
// Production steps of ECMA-262, Edition 6, 22.1.2.1
|
||||
if (!Array.from) {
|
||||
Array.from = (function () {
|
||||
var toStr = Object.prototype.toString;
|
||||
var isCallable = function (fn) {
|
||||
return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
|
||||
};
|
||||
var toInteger = function (value) {
|
||||
var number = Number(value);
|
||||
if (isNaN(number)) { return 0; }
|
||||
if (number === 0 || !isFinite(number)) { return number; }
|
||||
return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
|
||||
};
|
||||
var maxSafeInteger = Math.pow(2, 53) - 1;
|
||||
var toLength = function (value) {
|
||||
var len = toInteger(value);
|
||||
return Math.min(Math.max(len, 0), maxSafeInteger);
|
||||
};
|
||||
|
||||
// The length property of the from method is 1.
|
||||
return function from(arrayLike/*, mapFn, thisArg */) {
|
||||
// 1. Let C be the this value.
|
||||
var C = this;
|
||||
|
||||
// 2. Let items be ToObject(arrayLike).
|
||||
var items = Object(arrayLike);
|
||||
|
||||
// 3. ReturnIfAbrupt(items).
|
||||
if (arrayLike == null) {
|
||||
throw new TypeError('Array.from requires an array-like object - not null or undefined');
|
||||
}
|
||||
|
||||
// 4. If mapfn is undefined, then let mapping be false.
|
||||
var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
|
||||
var T;
|
||||
if (typeof mapFn !== 'undefined') {
|
||||
// 5. else
|
||||
// 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
|
||||
if (!isCallable(mapFn)) {
|
||||
throw new TypeError('Array.from: when provided, the second argument must be a function');
|
||||
}
|
||||
|
||||
// 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
||||
if (arguments.length > 2) {
|
||||
T = arguments[2];
|
||||
}
|
||||
}
|
||||
|
||||
// 10. Let lenValue be Get(items, "length").
|
||||
// 11. Let len be ToLength(lenValue).
|
||||
var len = toLength(items.length);
|
||||
|
||||
// 13. If IsConstructor(C) is true, then
|
||||
// 13. a. Let A be the result of calling the [[Construct]] internal method
|
||||
// of C with an argument list containing the single item len.
|
||||
// 14. a. Else, Let A be ArrayCreate(len).
|
||||
var A = isCallable(C) ? Object(new C(len)) : new Array(len);
|
||||
|
||||
// 16. Let k be 0.
|
||||
var k = 0;
|
||||
// 17. Repeat, while k < len… (also steps a - h)
|
||||
var kValue;
|
||||
while (k < len) {
|
||||
kValue = items[k];
|
||||
if (mapFn) {
|
||||
A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
|
||||
} else {
|
||||
A[k] = kValue;
|
||||
}
|
||||
k += 1;
|
||||
}
|
||||
// 18. Let putStatus be Put(A, "length", len, true).
|
||||
A.length = len;
|
||||
// 20. Return A.
|
||||
return A;
|
||||
};
|
||||
}());
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -21,7 +21,7 @@ describe('ContextTracker', function() {
|
|||
insert: '',
|
||||
deleteLeft: 0
|
||||
}
|
||||
let newContext = Array.from(existingContext);
|
||||
let newContext = existingContext.slice(0);
|
||||
newContext.splice(0, 1);
|
||||
let rawTokens = ["apple", null, "a", null, "day", null, "keeps", null, "the", null, "doctor"];
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ describe('ContextTracker', function() {
|
|||
insert: 'r',
|
||||
deleteLeft: 0
|
||||
}
|
||||
let newContext = Array.from(existingContext);
|
||||
let newContext = existingContext.slice(0);
|
||||
newContext[newContext.length - 1] = 'doctor';
|
||||
let rawTokens = ["an", null, "apple", null, "a", null, "day", null, "keeps", null, "the", null, "doctor"];
|
||||
|
||||
|
|
@ -53,7 +53,7 @@ describe('ContextTracker', function() {
|
|||
insert: ' ',
|
||||
deleteLeft: 0
|
||||
}
|
||||
let newContext = Array.from(existingContext);
|
||||
let newContext = existingContext.slice(0);
|
||||
newContext.push('');
|
||||
let rawTokens = ["an", null, "apple", null, "a", null, "day", null, "keeps", null, "the", null, "doctor", null, ""];
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ describe('ContextTracker', function() {
|
|||
insert: 'a',
|
||||
deleteLeft: 0
|
||||
}
|
||||
let newContext = Array.from(existingContext);
|
||||
let newContext = existingContext.slice(0);
|
||||
newContext.push('a'); // The incoming transform should produce a new token WITH TEXT.
|
||||
let rawTokens = ["'", null, "a"];
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ describe('ContextTracker', function() {
|
|||
insert: ' ',
|
||||
deleteLeft: 0
|
||||
}
|
||||
let newContext = Array.from(existingContext);
|
||||
let newContext = existingContext.slice(0);
|
||||
newContext.splice(0, 1);
|
||||
newContext.push('');
|
||||
let rawTokens = ["apple", null, "a", null, "day", null, "keeps", null, "the", null, "doctor", null, ""];
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue