From 31277701ae860c8fc5816316be128cf259ef3ac8 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Fri, 28 Nov 2025 11:39:45 +0300 Subject: [PATCH] Fix for old browsers (min version) --- vendor/array.js | 94 +++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/vendor/array.js b/vendor/array.js index f6c299e064..998ee84c80 100644 --- a/vendor/array.js +++ b/vendor/array.js @@ -205,50 +205,60 @@ if (window && window.AscCommon && window.AscCommon.AscBrowser && - window.AscCommon.AscBrowser.isChrome && - typeof Object.values === "undefined") + window.AscCommon.AscBrowser.isChrome) { - (function() { - var _sort = Array.prototype.sort; - Array.prototype.sort = function(compareFn) { - var len = this.length; + let typeOfValues = typeof Object.values; + let isOld = typeOfValues === "undefined"; + if (!isOld && typeOfValues === "function") + { + if (Object.values.toString().indexOf("[native code]") === -1) + isOld = true; + } - var cmp = compareFn || function(a, b) { - var sa = String(a); - var sb = String(b); - return sa < sb ? -1 : sa > sb ? 1 : 0; + if (isOld) + { + (function() { + var _sort = Array.prototype.sort; + Array.prototype.sort = function(compareFn) { + var len = this.length; + + var cmp = compareFn || function(a, b) { + var sa = String(a); + var sb = String(b); + return sa < sb ? -1 : sa > sb ? 1 : 0; + }; + + var indexed = []; + for (var i = 0; i < len; i++) { + indexed.push({ v: this[i], i: i }); + } + + _sort.call(indexed, function(a, b) { + var aVal = a.v; + var bVal = b.v; + + var aIsUndefined = aVal === undefined; + var bIsUndefined = bVal === undefined; + + if (aIsUndefined && bIsUndefined) return a.i - b.i; + if (aIsUndefined) return 1; + if (bIsUndefined) return -1; + + var r = cmp(aVal, bVal); + + if (typeof r !== 'number' || r !== r) + r = 0; + + return r !== 0 ? r : a.i - b.i; + }); + + for (var i = 0; i < indexed.length; i++) { + this[i] = indexed[i].v; + } + + return this; }; - - var indexed = []; - for (var i = 0; i < len; i++) { - indexed.push({ v: this[i], i: i }); - } - - _sort.call(indexed, function(a, b) { - var aVal = a.v; - var bVal = b.v; - - var aIsUndefined = aVal === undefined; - var bIsUndefined = bVal === undefined; - - if (aIsUndefined && bIsUndefined) return a.i - b.i; - if (aIsUndefined) return 1; - if (bIsUndefined) return -1; - - var r = cmp(aVal, bVal); - - if (typeof r !== 'number' || r !== r) - r = 0; - - return r !== 0 ? r : a.i - b.i; - }); - - for (var i = 0; i < indexed.length; i++) { - this[i] = indexed[i].v; - } - - return this; - }; - })(); + })(); + } } })();