mirror of
https://github.com/Cacti/cacti.git
synced 2026-10-23 03:27:02 +09:00
fix(deps): track legacy browser assets and remove patch-package (#8330)
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
This commit is contained in:
1 parent
ac50e0e0d0
commit
49c95bef63
21 files changed
+247
-20423
No files matched your search
@@ -148,6 +148,12 @@ verify_task*.php
|
||||
/include/js/jquery.validate/additional-methods.js
|
||||
/include/js/jquery.validate/additional-methods.min.js
|
||||
/include/js/jquery-ui.js
|
||||
/include/js/jquery.ui.touch.punch.js
|
||||
/include/js/Chart.js
|
||||
/include/js/vendor/moment/
|
||||
/include/js/vendor/daterangepicker/
|
||||
/include/js/vendor/mark/
|
||||
/include/js/vendor/hotkeys/
|
||||
/include/js/pace.js
|
||||
/include/js/jquery.tablesorter.widgets.js
|
||||
/include/js/jquery.tablesorter.pager.js
|
||||
|
||||
@@ -96,12 +96,12 @@ Windows users may need:
|
||||
composer install --ignore-platform-req=ext-pcntl --ignore-platform-req=ext-posix
|
||||
```
|
||||
|
||||
Run nmp install within Cacti installation directory so that to install the required cacti-frontend-assets:
|
||||
For a source checkout, install the locked browser dependencies before configuring
|
||||
the web server. Node.js is required for this build; release archives already
|
||||
contain the generated assets. Run this command as the owner of the Cacti files:
|
||||
|
||||
```bash
|
||||
sudo -u <cacti user> npm install
|
||||
e.g.
|
||||
sudo -u www-data npm install
|
||||
npm ci
|
||||
```
|
||||
|
||||
|
||||
|
||||
+16
-8
@@ -15,14 +15,22 @@ npm run build:js # or run the sync explicitly
|
||||
|
||||
## What is managed here
|
||||
|
||||
The managed third-party JavaScript libraries are npm-sourced (generated,
|
||||
git-ignored): jquery, jquery-ui, jstree, billboard.js, DOMPurify, pace-js,
|
||||
select2, the tablesorter files (core, widgets, pager) and the
|
||||
jquery-validation files.
|
||||
`assetMap` in `build/sync-js.mjs` lists the npm-sourced, generated files. It
|
||||
includes the main UI libraries, Chart.js, Touch Punch, Moment, daterangepicker,
|
||||
mark.js, and hotkeys-js. The latter libraries retain their existing public
|
||||
paths under `include/js/vendor/`. Moment is pinned to a patched release;
|
||||
mark.js uses the published 8.11.1 release rather than the old copy marked 9.0.0.
|
||||
|
||||
`pace-js` carries a one-line local fix (a stray regex alternation removed) applied
|
||||
through `patch-package` from `patches/pace-js+1.2.4.patch`. The fix should also be
|
||||
sent upstream so the patch can eventually be dropped.
|
||||
The copy transforms preserve Pace's prototype-key rejection and body-class
|
||||
fix, rewrite screenfull's ESM export, and replace removed jQuery APIs in
|
||||
tablesorter's core, widgets, and minified pager. No npm package source is
|
||||
modified. Unexpected Pace or screenfull source formats fail the build so an
|
||||
update cannot silently discard the fixes.
|
||||
|
||||
`build/legacy-js.json` lists the remaining Cacti-maintained adapters and their
|
||||
compatibility requirements. They are not interchangeable with upstream
|
||||
distributions. The inventory test covers every root browser script and every
|
||||
static JavaScript dependency in the shared header.
|
||||
|
||||
Only Cacti's own themed CSS for jquery-ui and jstree remains committed; those are
|
||||
Cacti theme assets, not upstream library files.
|
||||
@@ -35,6 +43,6 @@ each theme's `main.css` instead.
|
||||
|
||||
## Release and source-tree checkouts
|
||||
|
||||
Because the generated files are no longer committed, `npm ci` must run before a
|
||||
Because generated files may be absent or stale in a source checkout, `npm ci` must run before a
|
||||
release tarball is assembled and after a fresh `git clone`. The release pipeline
|
||||
must invoke `npm ci` (which runs the build via `postinstall`).
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"description": "Cacti-maintained browser adapters and compatibility forks. These files must not be overwritten with an upstream distribution without reviewing their Cacti-specific behavior.",
|
||||
"files": {
|
||||
"include/js/jquery.colorpicker.js": {"upstream": "https://github.com/evoluteur/colorpicker", "reason": "Cacti field handling and text rendering"},
|
||||
"include/js/jquery.contextMenu.js": {"upstream": "https://github.com/swisnl/jQuery-contextMenu", "version": "2.9.2", "reason": "Cacti menu integration"},
|
||||
"include/js/jquery.cookie.js": {"upstream": "https://github.com/carhartl/jquery-cookie", "reason": "Legacy $.cookie(name, null) deletion contract"},
|
||||
"include/js/jquery.dropdown.js": {"reason": "Cacti dropdown implementation"},
|
||||
"include/js/jquery.hotkeys.js": {"upstream": "https://github.com/tzuryby/jquery.hotkeys", "version": "0.2.0", "reason": "Existing jQuery keyboard binding contract"},
|
||||
"include/js/jquery.multiselect.js": {"upstream": "https://github.com/ehynds/jquery-ui-multiselect-widget", "version": "3.0.0", "reason": "Cacti widget and rendering integration"},
|
||||
"include/js/jquery.multiselect.filter.js": {"upstream": "https://github.com/ehynds/jquery-ui-multiselect-widget", "version": "3.0.0", "reason": "Companion to the retained multiselect adapter"},
|
||||
"include/js/jquery.tablednd.js": {"upstream": "https://github.com/isocra/TableDnD", "reason": "Cacti row handling and reordering callbacks"},
|
||||
"include/js/jquery.timepicker.js": {"upstream": "https://github.com/trentrichardson/jQuery-Timepicker-Addon", "version": "1.6.3", "reason": "Existing datetimepicker options and callback contract"},
|
||||
"include/js/jquery.toast.js": {"upstream": "https://github.com/kamranahmedse/jquery-toast-plugin", "reason": "Existing Cacti notification API"},
|
||||
"include/js/jquery.zoom.js": {"reason": "Cacti graph zoom implementation"},
|
||||
"include/js/js.storage.js": {"upstream": "https://github.com/julien-maurel/js-storage", "version": "1.1.0", "reason": "Existing Storages API and stored-value format"}
|
||||
},
|
||||
"applicationFiles": ["include/js/cacti-rendering.js", "include/js/csrf.js", "include/js/navigationBox.js", "include/js/navigationBox.tableFilter.js", "include/js/navigationBox.tableLayout.js", "include/js/navigationBox.tree.js", "include/js/ui-notices.js"]
|
||||
}
|
||||
+29
-5
@@ -1,10 +1,8 @@
|
||||
// Copies the npm-managed JavaScript libraries into include/js/ so the tree
|
||||
// ships with prebuilt assets. Run `npm ci && npm run build:js` after any change
|
||||
// to the pinned versions in package.json. pace-js and tablesorter each carry a
|
||||
// local fix applied via patch-package (patches/pace-js+1.2.4.patch,
|
||||
// patches/tablesorter+2.32.0.patch) before this runs. screenfull ships ESM-only
|
||||
// since v6, so its copy is rewritten below (see postCopyTransforms) instead of
|
||||
// via patch-package, since node_modules/screenfull/index.js is itself valid.
|
||||
// to the pinned versions in package.json. Local compatibility and security
|
||||
// fixes are applied to generated assets below, leaving npm sources unchanged.
|
||||
// screenfull ships ESM-only since v6, so its copy is rewritten below.
|
||||
// tablesorter is also rewritten below to drop jQuery-4-incompatible utility
|
||||
// calls ($.isFunction, $.trim, $.isArray, ...) that its latest release still ships.
|
||||
import { copyFileSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
||||
@@ -21,6 +19,15 @@ export const assetMap = Object.freeze({
|
||||
'node_modules/dompurify/dist/purify.js': 'include/js/purify.js',
|
||||
'node_modules/dompurify/dist/purify.js.map': 'include/js/purify.js.map',
|
||||
'node_modules/jquery-ui/dist/jquery-ui.js': 'include/js/jquery-ui.js',
|
||||
'node_modules/jquery-ui-touch-punch/jquery.ui.touch-punch.js': 'include/js/jquery.ui.touch.punch.js',
|
||||
'node_modules/chart.js/dist/Chart.js': 'include/js/Chart.js',
|
||||
'node_modules/moment/min/moment.min.js': 'include/js/vendor/moment/moment.min.js',
|
||||
'node_modules/moment/LICENSE': 'include/js/vendor/moment/LICENSE',
|
||||
'node_modules/daterangepicker/daterangepicker.js': 'include/js/vendor/daterangepicker/daterangepicker.js',
|
||||
'node_modules/hotkeys-js/dist/hotkeys.js': 'include/js/vendor/hotkeys/hotkeys.js',
|
||||
'node_modules/hotkeys-js/dist/hotkeys.min.js': 'include/js/vendor/hotkeys/hotkeys.min.js',
|
||||
'node_modules/hotkeys-js/LICENSE': 'include/js/vendor/hotkeys/LICENSE',
|
||||
'node_modules/mark.js/dist/jquery.mark.js': 'include/js/vendor/mark/jquery.mark.js',
|
||||
'node_modules/jstree/dist/jstree.js': 'include/js/jstree.js',
|
||||
'node_modules/billboard.js/dist/billboard.js': 'include/js/billboard.js',
|
||||
'node_modules/pace-js/pace.js': 'include/js/pace.js',
|
||||
@@ -59,6 +66,15 @@ const tablesorterJquery4 = content => content
|
||||
.replace(/\( str && table\.config\.ignoreCase \?/g, '( table.config.ignoreCase ?');
|
||||
|
||||
const postCopyTransforms = Object.freeze({
|
||||
'include/js/pace.js': content => {
|
||||
const ownProperty = 'if (!__hasProp.call(source, key)) continue;';
|
||||
const bodyClass = "replace(/(pace-done )|/, 'pace-running ')";
|
||||
if (!content.includes(ownProperty) || !content.includes(bodyClass)) {
|
||||
throw new Error('sync-js: pace source changed; review the prototype and body-class fixes');
|
||||
}
|
||||
return content.replace(ownProperty, ownProperty + "\n\t\t\t\t\tif (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;")
|
||||
.replace(bodyClass, "replace(/(pace-done )/, 'pace-running ')");
|
||||
},
|
||||
'include/js/screenfull.js': content => {
|
||||
const transformed = content.replace(/\nexport default screenfull;\s*$/, '\nwindow.screenfull = screenfull;\n');
|
||||
|
||||
@@ -70,6 +86,14 @@ const postCopyTransforms = Object.freeze({
|
||||
},
|
||||
'include/js/jquery.tablesorter.js': tablesorterJquery4,
|
||||
'include/js/jquery.tablesorter.widgets.js': tablesorterJquery4,
|
||||
'include/js/jquery.tablesorter.pager.js': content => {
|
||||
const transformed = content.replace(/\bE\.isArray\(/g, 'Array.isArray(')
|
||||
.replace(/\bE\.trim\(([^()]*)\)/g, "String(($1) ?? '').trim()");
|
||||
if (/\bE\.(?:isArray|trim|isFunction|type|isWindow|parseJSON)\s*\(/.test(transformed)) {
|
||||
throw new Error('sync-js: tablesorter pager uses an unsupported jQuery API');
|
||||
}
|
||||
return transformed;
|
||||
},
|
||||
});
|
||||
|
||||
export function syncAssets(root = process.cwd(), log = console.log) {
|
||||
|
||||
Vendored
-16172
File diff suppressed because it is too large.
Load diff
@@ -1,11 +0,0 @@
|
||||
/*!
|
||||
* jQuery UI Touch Punch 0.2.3
|
||||
*
|
||||
* Copyright 2011–2014, Dave Furfero
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
*
|
||||
* Depends:
|
||||
* jquery.ui.widget.js
|
||||
* jquery.ui.mouse.js
|
||||
*/
|
||||
!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);
|
||||
-1578
File diff suppressed because it is too large.
Load diff
Vendored
-23
@@ -1,23 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2015-present, Kenny Wong.
|
||||
|
||||
Copyright (c) 2011-2013 Thomas Fuchs (https://github.com/madrobby/keymaster)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Vendored
-629
@@ -1,629 +0,0 @@
|
||||
/**!
|
||||
* hotkeys-js v3.10.1
|
||||
* A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
|
||||
*
|
||||
* Copyright (c) 2022 kenny wong <wowohoo@qq.com>
|
||||
* http://jaywcjlove.github.io/hotkeys
|
||||
* Licensed under the MIT license
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.hotkeys = factory());
|
||||
})(this, (function () { 'use strict';
|
||||
|
||||
var isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false; // 绑定事件
|
||||
|
||||
function addEvent(object, event, method, useCapture) {
|
||||
if (object.addEventListener) {
|
||||
object.addEventListener(event, method, useCapture);
|
||||
} else if (object.attachEvent) {
|
||||
object.attachEvent("on".concat(event), function () {
|
||||
method(window.event);
|
||||
});
|
||||
}
|
||||
} // 修饰键转换成对应的键码
|
||||
|
||||
|
||||
function getMods(modifier, key) {
|
||||
var mods = key.slice(0, key.length - 1);
|
||||
|
||||
for (var i = 0; i < mods.length; i++) {
|
||||
mods[i] = modifier[mods[i].toLowerCase()];
|
||||
}
|
||||
|
||||
return mods;
|
||||
} // 处理传的key字符串转换成数组
|
||||
|
||||
|
||||
function getKeys(key) {
|
||||
if (typeof key !== 'string') key = '';
|
||||
key = key.replace(/\s/g, ''); // 匹配任何空白字符,包括空格、制表符、换页符等等
|
||||
|
||||
var keys = key.split(','); // 同时设置多个快捷键,以','分割
|
||||
|
||||
var index = keys.lastIndexOf(''); // 快捷键可能包含',',需特殊处理
|
||||
|
||||
for (; index >= 0;) {
|
||||
keys[index - 1] += ',';
|
||||
keys.splice(index, 1);
|
||||
index = keys.lastIndexOf('');
|
||||
}
|
||||
|
||||
return keys;
|
||||
} // 比较修饰键的数组
|
||||
|
||||
|
||||
function compareArray(a1, a2) {
|
||||
var arr1 = a1.length >= a2.length ? a1 : a2;
|
||||
var arr2 = a1.length >= a2.length ? a2 : a1;
|
||||
var isIndex = true;
|
||||
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
if (arr2.indexOf(arr1[i]) === -1) isIndex = false;
|
||||
}
|
||||
|
||||
return isIndex;
|
||||
}
|
||||
|
||||
var _keyMap = {
|
||||
backspace: 8,
|
||||
'⌫': 8,
|
||||
tab: 9,
|
||||
clear: 12,
|
||||
enter: 13,
|
||||
'↩': 13,
|
||||
return: 13,
|
||||
esc: 27,
|
||||
escape: 27,
|
||||
space: 32,
|
||||
left: 37,
|
||||
up: 38,
|
||||
right: 39,
|
||||
down: 40,
|
||||
del: 46,
|
||||
delete: 46,
|
||||
ins: 45,
|
||||
insert: 45,
|
||||
home: 36,
|
||||
end: 35,
|
||||
pageup: 33,
|
||||
pagedown: 34,
|
||||
capslock: 20,
|
||||
num_0: 96,
|
||||
num_1: 97,
|
||||
num_2: 98,
|
||||
num_3: 99,
|
||||
num_4: 100,
|
||||
num_5: 101,
|
||||
num_6: 102,
|
||||
num_7: 103,
|
||||
num_8: 104,
|
||||
num_9: 105,
|
||||
num_multiply: 106,
|
||||
num_add: 107,
|
||||
num_enter: 108,
|
||||
num_subtract: 109,
|
||||
num_decimal: 110,
|
||||
num_divide: 111,
|
||||
'⇪': 20,
|
||||
',': 188,
|
||||
'.': 190,
|
||||
'/': 191,
|
||||
'`': 192,
|
||||
'-': isff ? 173 : 189,
|
||||
'=': isff ? 61 : 187,
|
||||
';': isff ? 59 : 186,
|
||||
'\'': 222,
|
||||
'[': 219,
|
||||
']': 221,
|
||||
'\\': 220
|
||||
}; // Modifier Keys
|
||||
|
||||
var _modifier = {
|
||||
// shiftKey
|
||||
'⇧': 16,
|
||||
shift: 16,
|
||||
// altKey
|
||||
'⌥': 18,
|
||||
alt: 18,
|
||||
option: 18,
|
||||
// ctrlKey
|
||||
'⌃': 17,
|
||||
ctrl: 17,
|
||||
control: 17,
|
||||
// metaKey
|
||||
'⌘': 91,
|
||||
cmd: 91,
|
||||
command: 91
|
||||
};
|
||||
var modifierMap = {
|
||||
16: 'shiftKey',
|
||||
18: 'altKey',
|
||||
17: 'ctrlKey',
|
||||
91: 'metaKey',
|
||||
shiftKey: 16,
|
||||
ctrlKey: 17,
|
||||
altKey: 18,
|
||||
metaKey: 91
|
||||
};
|
||||
var _mods = {
|
||||
16: false,
|
||||
18: false,
|
||||
17: false,
|
||||
91: false
|
||||
};
|
||||
var _handlers = {}; // F1~F12 special key
|
||||
|
||||
for (var k = 1; k < 20; k++) {
|
||||
_keyMap["f".concat(k)] = 111 + k;
|
||||
}
|
||||
|
||||
var _downKeys = []; // 记录摁下的绑定键
|
||||
|
||||
var winListendFocus = false; // window是否已经监听了focus事件
|
||||
|
||||
var _scope = 'all'; // 默认热键范围
|
||||
|
||||
var elementHasBindEvent = []; // 已绑定事件的节点记录
|
||||
// 返回键码
|
||||
|
||||
var code = function code(x) {
|
||||
return _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);
|
||||
};
|
||||
|
||||
var getKey = function getKey(x) {
|
||||
return Object.keys(_keyMap).find(function (k) {
|
||||
return _keyMap[k] === x;
|
||||
});
|
||||
};
|
||||
|
||||
var getModifier = function getModifier(x) {
|
||||
return Object.keys(_modifier).find(function (k) {
|
||||
return _modifier[k] === x;
|
||||
});
|
||||
}; // 设置获取当前范围(默认为'所有')
|
||||
|
||||
|
||||
function setScope(scope) {
|
||||
_scope = scope || 'all';
|
||||
} // 获取当前范围
|
||||
|
||||
|
||||
function getScope() {
|
||||
return _scope || 'all';
|
||||
} // 获取摁下绑定键的键值
|
||||
|
||||
|
||||
function getPressedKeyCodes() {
|
||||
return _downKeys.slice(0);
|
||||
}
|
||||
|
||||
function getPressedKeyString() {
|
||||
return _downKeys.map(function (c) {
|
||||
return getKey(c) || getModifier(c) || String.fromCharCode(c);
|
||||
});
|
||||
} // 表单控件控件判断 返回 Boolean
|
||||
// hotkey is effective only when filter return true
|
||||
|
||||
|
||||
function filter(event) {
|
||||
var target = event.target || event.srcElement;
|
||||
var tagName = target.tagName;
|
||||
var flag = true; // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>
|
||||
|
||||
if (target.isContentEditable || (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {
|
||||
flag = false;
|
||||
}
|
||||
|
||||
return flag;
|
||||
} // 判断摁下的键是否为某个键,返回true或者false
|
||||
|
||||
|
||||
function isPressed(keyCode) {
|
||||
if (typeof keyCode === 'string') {
|
||||
keyCode = code(keyCode); // 转换成键码
|
||||
}
|
||||
|
||||
return _downKeys.indexOf(keyCode) !== -1;
|
||||
} // 循环删除handlers中的所有 scope(范围)
|
||||
|
||||
|
||||
function deleteScope(scope, newScope) {
|
||||
var handlers;
|
||||
var i; // 没有指定scope,获取scope
|
||||
|
||||
if (!scope) scope = getScope();
|
||||
|
||||
for (var key in _handlers) {
|
||||
if (Object.prototype.hasOwnProperty.call(_handlers, key)) {
|
||||
handlers = _handlers[key];
|
||||
|
||||
for (i = 0; i < handlers.length;) {
|
||||
if (handlers[i].scope === scope) handlers.splice(i, 1);else i++;
|
||||
}
|
||||
}
|
||||
} // 如果scope被删除,将scope重置为all
|
||||
|
||||
|
||||
if (getScope() === scope) setScope(newScope || 'all');
|
||||
} // 清除修饰键
|
||||
|
||||
|
||||
function clearModifier(event) {
|
||||
var key = event.keyCode || event.which || event.charCode;
|
||||
|
||||
var i = _downKeys.indexOf(key); // 从列表中清除按压过的键
|
||||
|
||||
|
||||
if (i >= 0) {
|
||||
_downKeys.splice(i, 1);
|
||||
} // 特殊处理 cmmand 键,在 cmmand 组合快捷键 keyup 只执行一次的问题
|
||||
|
||||
|
||||
if (event.key && event.key.toLowerCase() === 'meta') {
|
||||
_downKeys.splice(0, _downKeys.length);
|
||||
} // 修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除
|
||||
|
||||
|
||||
if (key === 93 || key === 224) key = 91;
|
||||
|
||||
if (key in _mods) {
|
||||
_mods[key] = false; // 将修饰键重置为false
|
||||
|
||||
for (var k in _modifier) {
|
||||
if (_modifier[k] === key) hotkeys[k] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function unbind(keysInfo) {
|
||||
// unbind(), unbind all keys
|
||||
if (typeof keysInfo === 'undefined') {
|
||||
Object.keys(_handlers).forEach(function (key) {
|
||||
return delete _handlers[key];
|
||||
});
|
||||
} else if (Array.isArray(keysInfo)) {
|
||||
// support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])
|
||||
keysInfo.forEach(function (info) {
|
||||
if (info.key) eachUnbind(info);
|
||||
});
|
||||
} else if (typeof keysInfo === 'object') {
|
||||
// support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})
|
||||
if (keysInfo.key) eachUnbind(keysInfo);
|
||||
} else if (typeof keysInfo === 'string') {
|
||||
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||
args[_key - 1] = arguments[_key];
|
||||
}
|
||||
|
||||
// support old method
|
||||
// eslint-disable-line
|
||||
var scope = args[0],
|
||||
method = args[1];
|
||||
|
||||
if (typeof scope === 'function') {
|
||||
method = scope;
|
||||
scope = '';
|
||||
}
|
||||
|
||||
eachUnbind({
|
||||
key: keysInfo,
|
||||
scope: scope,
|
||||
method: method,
|
||||
splitKey: '+'
|
||||
});
|
||||
}
|
||||
} // 解除绑定某个范围的快捷键
|
||||
|
||||
|
||||
var eachUnbind = function eachUnbind(_ref) {
|
||||
var key = _ref.key,
|
||||
scope = _ref.scope,
|
||||
method = _ref.method,
|
||||
_ref$splitKey = _ref.splitKey,
|
||||
splitKey = _ref$splitKey === void 0 ? '+' : _ref$splitKey;
|
||||
var multipleKeys = getKeys(key);
|
||||
multipleKeys.forEach(function (originKey) {
|
||||
var unbindKeys = originKey.split(splitKey);
|
||||
var len = unbindKeys.length;
|
||||
var lastKey = unbindKeys[len - 1];
|
||||
var keyCode = lastKey === '*' ? '*' : code(lastKey);
|
||||
if (!_handlers[keyCode]) return; // 判断是否传入范围,没有就获取范围
|
||||
|
||||
if (!scope) scope = getScope();
|
||||
var mods = len > 1 ? getMods(_modifier, unbindKeys) : [];
|
||||
_handlers[keyCode] = _handlers[keyCode].filter(function (record) {
|
||||
// 通过函数判断,是否解除绑定,函数相等直接返回
|
||||
var isMatchingMethod = method ? record.method === method : true;
|
||||
return !(isMatchingMethod && record.scope === scope && compareArray(record.mods, mods));
|
||||
});
|
||||
});
|
||||
}; // 对监听对应快捷键的回调函数进行处理
|
||||
|
||||
|
||||
function eventHandler(event, handler, scope, element) {
|
||||
if (handler.element !== element) {
|
||||
return;
|
||||
}
|
||||
|
||||
var modifiersMatch; // 看它是否在当前范围
|
||||
|
||||
if (handler.scope === scope || handler.scope === 'all') {
|
||||
// 检查是否匹配修饰符(如果有返回true)
|
||||
modifiersMatch = handler.mods.length > 0;
|
||||
|
||||
for (var y in _mods) {
|
||||
if (Object.prototype.hasOwnProperty.call(_mods, y)) {
|
||||
if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {
|
||||
modifiersMatch = false;
|
||||
}
|
||||
}
|
||||
} // 调用处理程序,如果是修饰键不做处理
|
||||
|
||||
|
||||
if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {
|
||||
if (handler.method(event, handler) === false) {
|
||||
if (event.preventDefault) event.preventDefault();else event.returnValue = false;
|
||||
if (event.stopPropagation) event.stopPropagation();
|
||||
if (event.cancelBubble) event.cancelBubble = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} // 处理keydown事件
|
||||
|
||||
|
||||
function dispatch(event, element) {
|
||||
var asterisk = _handlers['*'];
|
||||
var key = event.keyCode || event.which || event.charCode; // 表单控件过滤 默认表单控件不触发快捷键
|
||||
|
||||
if (!hotkeys.filter.call(this, event)) return; // Gecko(Firefox)的command键值224,在Webkit(Chrome)中保持一致
|
||||
// Webkit左右 command 键值不一样
|
||||
|
||||
if (key === 93 || key === 224) key = 91;
|
||||
/**
|
||||
* Collect bound keys
|
||||
* If an Input Method Editor is processing key input and the event is keydown, return 229.
|
||||
* https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229
|
||||
* http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html
|
||||
*/
|
||||
|
||||
if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);
|
||||
/**
|
||||
* Jest test cases are required.
|
||||
* ===============================
|
||||
*/
|
||||
|
||||
['ctrlKey', 'altKey', 'shiftKey', 'metaKey'].forEach(function (keyName) {
|
||||
var keyNum = modifierMap[keyName];
|
||||
|
||||
if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {
|
||||
_downKeys.push(keyNum);
|
||||
} else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {
|
||||
_downKeys.splice(_downKeys.indexOf(keyNum), 1);
|
||||
} else if (keyName === 'metaKey' && event[keyName] && _downKeys.length === 3) {
|
||||
/**
|
||||
* Fix if Command is pressed:
|
||||
* ===============================
|
||||
*/
|
||||
if (!(event.ctrlKey || event.shiftKey || event.altKey)) {
|
||||
_downKeys = _downKeys.slice(_downKeys.indexOf(keyNum));
|
||||
}
|
||||
}
|
||||
});
|
||||
/**
|
||||
* -------------------------------
|
||||
*/
|
||||
|
||||
if (key in _mods) {
|
||||
_mods[key] = true; // 将特殊字符的key注册到 hotkeys 上
|
||||
|
||||
for (var k in _modifier) {
|
||||
if (_modifier[k] === key) hotkeys[k] = true;
|
||||
}
|
||||
|
||||
if (!asterisk) return;
|
||||
} // 将 modifierMap 里面的修饰键绑定到 event 中
|
||||
|
||||
|
||||
for (var e in _mods) {
|
||||
if (Object.prototype.hasOwnProperty.call(_mods, e)) {
|
||||
_mods[e] = event[modifierMap[e]];
|
||||
}
|
||||
}
|
||||
/**
|
||||
* https://github.com/jaywcjlove/hotkeys/pull/129
|
||||
* This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.
|
||||
* An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.
|
||||
* Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate
|
||||
*/
|
||||
|
||||
|
||||
if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {
|
||||
if (_downKeys.indexOf(17) === -1) {
|
||||
_downKeys.push(17);
|
||||
}
|
||||
|
||||
if (_downKeys.indexOf(18) === -1) {
|
||||
_downKeys.push(18);
|
||||
}
|
||||
|
||||
_mods[17] = true;
|
||||
_mods[18] = true;
|
||||
} // 获取范围 默认为 `all`
|
||||
|
||||
|
||||
var scope = getScope(); // 对任何快捷键都需要做的处理
|
||||
|
||||
if (asterisk) {
|
||||
for (var i = 0; i < asterisk.length; i++) {
|
||||
if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {
|
||||
eventHandler(event, asterisk[i], scope, element);
|
||||
}
|
||||
}
|
||||
} // key 不在 _handlers 中返回
|
||||
|
||||
|
||||
if (!(key in _handlers)) return;
|
||||
|
||||
for (var _i = 0; _i < _handlers[key].length; _i++) {
|
||||
if (event.type === 'keydown' && _handlers[key][_i].keydown || event.type === 'keyup' && _handlers[key][_i].keyup) {
|
||||
if (_handlers[key][_i].key) {
|
||||
var record = _handlers[key][_i];
|
||||
var splitKey = record.splitKey;
|
||||
var keyShortcut = record.key.split(splitKey);
|
||||
var _downKeysCurrent = []; // 记录当前按键键值
|
||||
|
||||
for (var a = 0; a < keyShortcut.length; a++) {
|
||||
_downKeysCurrent.push(code(keyShortcut[a]));
|
||||
}
|
||||
|
||||
if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {
|
||||
// 找到处理内容
|
||||
eventHandler(event, record, scope, element);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} // 判断 element 是否已经绑定事件
|
||||
|
||||
|
||||
function isElementBind(element) {
|
||||
return elementHasBindEvent.indexOf(element) > -1;
|
||||
}
|
||||
|
||||
function hotkeys(key, option, method) {
|
||||
_downKeys = [];
|
||||
var keys = getKeys(key); // 需要处理的快捷键列表
|
||||
|
||||
var mods = [];
|
||||
var scope = 'all'; // scope默认为all,所有范围都有效
|
||||
|
||||
var element = document; // 快捷键事件绑定节点
|
||||
|
||||
var i = 0;
|
||||
var keyup = false;
|
||||
var keydown = true;
|
||||
var splitKey = '+';
|
||||
var capture = false; // 对为设定范围的判断
|
||||
|
||||
if (method === undefined && typeof option === 'function') {
|
||||
method = option;
|
||||
}
|
||||
|
||||
if (Object.prototype.toString.call(option) === '[object Object]') {
|
||||
if (option.scope) scope = option.scope; // eslint-disable-line
|
||||
|
||||
if (option.element) element = option.element; // eslint-disable-line
|
||||
|
||||
if (option.keyup) keyup = option.keyup; // eslint-disable-line
|
||||
|
||||
if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line
|
||||
|
||||
if (option.capture !== undefined) capture = option.capture; // eslint-disable-line
|
||||
|
||||
if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line
|
||||
}
|
||||
|
||||
if (typeof option === 'string') scope = option; // 对于每个快捷键进行处理
|
||||
|
||||
for (; i < keys.length; i++) {
|
||||
key = keys[i].split(splitKey); // 按键列表
|
||||
|
||||
mods = []; // 如果是组合快捷键取得组合快捷键
|
||||
|
||||
if (key.length > 1) mods = getMods(_modifier, key); // 将非修饰键转化为键码
|
||||
|
||||
key = key[key.length - 1];
|
||||
key = key === '*' ? '*' : code(key); // *表示匹配所有快捷键
|
||||
// 判断key是否在_handlers中,不在就赋一个空数组
|
||||
|
||||
if (!(key in _handlers)) _handlers[key] = [];
|
||||
|
||||
_handlers[key].push({
|
||||
keyup: keyup,
|
||||
keydown: keydown,
|
||||
scope: scope,
|
||||
mods: mods,
|
||||
shortcut: keys[i],
|
||||
method: method,
|
||||
key: keys[i],
|
||||
splitKey: splitKey,
|
||||
element: element
|
||||
});
|
||||
} // 在全局document上设置快捷键
|
||||
|
||||
|
||||
if (typeof element !== 'undefined' && !isElementBind(element) && window) {
|
||||
elementHasBindEvent.push(element);
|
||||
addEvent(element, 'keydown', function (e) {
|
||||
dispatch(e, element);
|
||||
}, capture);
|
||||
|
||||
if (!winListendFocus) {
|
||||
winListendFocus = true;
|
||||
addEvent(window, 'focus', function () {
|
||||
_downKeys = [];
|
||||
}, capture);
|
||||
}
|
||||
|
||||
addEvent(element, 'keyup', function (e) {
|
||||
dispatch(e, element);
|
||||
clearModifier(e);
|
||||
}, capture);
|
||||
}
|
||||
}
|
||||
|
||||
function trigger(shortcut) {
|
||||
var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';
|
||||
Object.keys(_handlers).forEach(function (key) {
|
||||
var dataList = _handlers[key].filter(function (item) {
|
||||
return item.scope === scope && item.shortcut === shortcut;
|
||||
});
|
||||
|
||||
dataList.forEach(function (data) {
|
||||
if (data && data.method) {
|
||||
data.method();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
var _api = {
|
||||
getPressedKeyString: getPressedKeyString,
|
||||
setScope: setScope,
|
||||
getScope: getScope,
|
||||
deleteScope: deleteScope,
|
||||
getPressedKeyCodes: getPressedKeyCodes,
|
||||
isPressed: isPressed,
|
||||
filter: filter,
|
||||
trigger: trigger,
|
||||
unbind: unbind,
|
||||
keyMap: _keyMap,
|
||||
modifier: _modifier,
|
||||
modifierMap: modifierMap
|
||||
};
|
||||
|
||||
for (var a in _api) {
|
||||
if (Object.prototype.hasOwnProperty.call(_api, a)) {
|
||||
hotkeys[a] = _api[a];
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
var _hotkeys = window.hotkeys;
|
||||
|
||||
hotkeys.noConflict = function (deep) {
|
||||
if (deep && window.hotkeys === hotkeys) {
|
||||
window.hotkeys = _hotkeys;
|
||||
}
|
||||
|
||||
return hotkeys;
|
||||
};
|
||||
|
||||
window.hotkeys = hotkeys;
|
||||
}
|
||||
|
||||
return hotkeys;
|
||||
|
||||
}));
|
||||
-2
@@ -1,2 +0,0 @@
|
||||
/*! hotkeys-js v3.10.1 | MIT © 2022 kenny wong <wowohoo@qq.com> http://jaywcjlove.github.io/hotkeys */
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).hotkeys=t()}(this,function(){"use strict";var e="undefined"!=typeof navigator&&0<navigator.userAgent.toLowerCase().indexOf("firefox");function d(e,t,n,o){e.addEventListener?e.addEventListener(t,n,o):e.attachEvent&&e.attachEvent("on".concat(t),function(){n(window.event)})}function p(e,t){for(var n=t.slice(0,t.length-1),o=0;o<n.length;o++)n[o]=e[n[o].toLowerCase()];return n}function y(e){for(var t=(e=(e="string"!=typeof e?"":e).replace(/\s/g,"")).split(","),n=t.lastIndexOf("");0<=n;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var o={backspace:8,"\u232b":8,tab:9,clear:12,enter:13,"\u21a9":13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"\u21ea":20,",":188,".":190,"/":191,"`":192,"-":e?173:189,"=":e?61:187,";":e?59:186,"'":222,"[":219,"]":221,"\\":220},h={"\u21e7":16,shift:16,"\u2325":18,alt:18,option:18,"\u2303":17,ctrl:17,control:17,"\u2318":91,cmd:91,command:91},m={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},g={16:!1,18:!1,17:!1,91:!1},v={},t=1;t<20;t++)o["f".concat(t)]=111+t;var k=[],w=!1,n="all",O=[],K=function(e){return o[e.toLowerCase()]||h[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function i(e){n=e||"all"}function b(){return n||"all"}function f(e){var r=e.scope,i=e.method,t=e.splitKey,f=void 0===t?"+":t;y(e.key).forEach(function(e){var t,e=e.split(f),n=e.length,o=e[n-1],o="*"===o?"*":K(o);v[o]&&(r=r||b(),t=1<n?p(h,e):[],v[o]=v[o].filter(function(e){return!((!i||e.method===i)&&e.scope===r&&function(e,t){for(var n=e.length<t.length?t:e,o=e.length<t.length?e:t,r=!0,i=0;i<n.length;i++)~o.indexOf(n[i])||(r=!1);return r}(e.mods,t))}))})}function x(e,t,n,o){var r;if(t.element===o&&(t.scope===n||"all"===t.scope)){for(var i in r=0<t.mods.length,g)Object.prototype.hasOwnProperty.call(g,i)&&(!g[i]&&~t.mods.indexOf(+i)||g[i]&&!~t.mods.indexOf(+i))&&(r=!1);(0!==t.mods.length||g[16]||g[18]||g[17]||g[91])&&!r&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function C(n,e){var t=v["*"],o=n.keyCode||n.which||n.charCode;if(E.filter.call(this,n)){if(~k.indexOf(o=93!==o&&224!==o?o:91)||229===o||k.push(o),["ctrlKey","altKey","shiftKey","metaKey"].forEach(function(e){var t=m[e];n[e]&&!~k.indexOf(t)?k.push(t):!n[e]&&~k.indexOf(t)?k.splice(k.indexOf(t),1):"metaKey"!==e||!n[e]||3!==k.length||n.ctrlKey||n.shiftKey||n.altKey||(k=k.slice(k.indexOf(t)))}),o in g){for(var r in g[o]=!0,h)h[r]===o&&(E[r]=!0);if(!t)return}for(var i in g)Object.prototype.hasOwnProperty.call(g,i)&&(g[i]=n[m[i]]);n.getModifierState&&(!n.altKey||n.ctrlKey)&&n.getModifierState("AltGraph")&&(~k.indexOf(17)||k.push(17),~k.indexOf(18)||k.push(18),g[17]=!0,g[18]=!0);var f=b();if(t)for(var c=0;c<t.length;c++)t[c].scope===f&&("keydown"===n.type&&t[c].keydown||"keyup"===n.type&&t[c].keyup)&&x(n,t[c],f,e);if(o in v)for(var a=0;a<v[o].length;a++)if(("keydown"===n.type&&v[o][a].keydown||"keyup"===n.type&&v[o][a].keyup)&&v[o][a].key){for(var l=v[o][a],s=l.key.split(l.splitKey),u=[],d=0;d<s.length;d++)u.push(K(s[d]));u.sort().join("")===k.sort().join("")&&x(n,l,f,e)}}}function E(e,t,n){k=[];var o=y(e),r=[],i="all",f=document,c=0,a=!1,l=!0,s="+",u=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(i=t.scope),t.element&&(f=t.element),t.keyup&&(a=t.keyup),void 0!==t.keydown&&(l=t.keydown),void 0!==t.capture&&(u=t.capture),"string"==typeof t.splitKey&&(s=t.splitKey)),"string"==typeof t&&(i=t);c<o.length;c++)r=[],1<(e=o[c].split(s)).length&&(r=p(h,e)),(e="*"===(e=e[e.length-1])?"*":K(e))in v||(v[e]=[]),v[e].push({keyup:a,keydown:l,scope:i,mods:r,shortcut:o[c],method:n,key:o[c],splitKey:s,element:f});void 0!==f&&(t=f,!~O.indexOf(t))&&window&&(O.push(f),d(f,"keydown",function(e){C(e,f)},u),w||(w=!0,d(window,"focus",function(){k=[]},u)),d(f,"keyup",function(e){C(e,f);var t=e.keyCode||e.which||e.charCode,n=k.indexOf(t);if(n<0||k.splice(n,1),e.key&&"meta"==e.key.toLowerCase()&&k.splice(0,k.length),(t=93!==t&&224!==t?t:91)in g)for(var o in g[t]=!1,h)h[o]===t&&(E[o]=!1)},u))}var r,c,a={getPressedKeyString:function(){return k.map(function(e){return n=e,Object.keys(o).find(function(e){return o[e]===n})||(t=e,Object.keys(h).find(function(e){return h[e]===t}))||String.fromCharCode(e);var t,n})},setScope:i,getScope:b,deleteScope:function(e,t){var n,o,r;for(r in e=e||b(),v)if(Object.prototype.hasOwnProperty.call(v,r))for(n=v[r],o=0;o<n.length;)n[o].scope===e?nLine truncated
|
||||
-1228
File diff suppressed because it is too large.
Load diff
Vendored
-22
@@ -1,22 +0,0 @@
|
||||
Copyright (c) JS Foundation and other contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
-1
@@ -1 +0,0 @@
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function _(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function y(e,t,n,s){return Tt(e,t,n,s,!0).utc()}function g(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function v(e){if(null==e._isValid){var t=g(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function p(e){var t=y(NaN);return null!=e?_(g(t),e):g(t).userInvalidated=!0,t}i=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var r=c.momentProperties=[];function w(e,t){var n,s,i;if(l(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),l(t._i)||(e._i=t._i),l(t._f)||(e._f=t._f),l(t._l)||(e._l=t._l),l(t._strict)||(e._strict=t._strict),l(t._tzm)||(e._tzm=t._tzm),l(t._isUTC)||(e._isUTC=t._isUTC),l(t._offset)||(e._offset=t._offset),l(t._pf)||(e._pf=g(t)),l(t._locale)||(e._locale=t._locale),0<r.length)for(n=0;n<r.length;n++)l(i=t[s=r[n]])||(e[s]=i);return e}var t=!1;function M(e){w(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,c.updateOffset(this),t=!1)}function k(e){return e instanceof M||null!=e&&null!=e._isAMomentObject}function S(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function D(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=S(t)),n}function a(e,t,n){var s,i=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),a=0;for(s=0;s<i;s++)(n&&e[s]!==t[s]||!n&&D(e[s])!==D(t[s]))&&a++;return a+r}function Y(e){!1===c.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function n(i,r){var a=!0;return _(function(){if(null!=c.deprecationHandler&&c.deprecationHandler(null,i),a){for(var e,t=[],n=0;n<arguments.length;n++){if(e="","object"==typeof arguments[n]){for(var s in e+="\n["+n+"] ",arguments[0])e+=s+": "+arguments[0][s]+", ";e=e.slice(0,-2)}else e=arguments[n];t.push(e)}Y(i+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),a=!1}return r.apply(this,arguments)},r)}var s,O={};function T(e,t){null!=c.deprecationHandler&&c.deprecationHandler(e,t),O[e]||(Y(t),O[e]=!0)}function b(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function x(e,t){var n,s=_({},e);for(n in t)m(t,n)&&(u(e[n])&&u(t[n])?(s[n]={},_(s[n],e[n]),_(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)m(e,n)&&!m(t,n)&&u(e[n])&&(s[n]=_({},s[n]));return s}function P(e){null!=e&&this.set(e)}c.suppressDeprecationWarnings=!1,c.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)m(e,t)&&n.push(t);return n};var W={};function C(e,t){var n=e.toLowerCase();W[n]=W[n+"s"]=W[t]=e}function H(e){return"string"==typeof e?W[e]||W[e.toLowerCase()]:void 0}function R(e){var t,n,s={};for(n in e)m(e,n)&&(t=H(n))&&(s[t]=e[n]);return s}var U={};function F(e,t){U[e]=t}function L(e,t,n){var s=""+Math.abs(e),i=t-s.length;return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,G=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,V={},E={};function I(e,t,n,s){var i=s;"string"==typeof s&&(i=function(){return this[s]()}),e&&(E[e]=i),t&&(E[t[0]]=function(){return L(i.apply(this,arguments),t[1],t[2])}),n&&(E[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function A(e,t){return e.isValid()?(t=j(t,e.localeData()),V[t]=V[t]||function(s){var e,i,t,r=s.match(N);for(e=0,i=r.lengtLine truncated
|
||||
Generated
+61
-709
@@ -12,21 +12,24 @@
|
||||
"dependencies": {
|
||||
"big.js": "7.0.1",
|
||||
"billboard.js": "4.1.1",
|
||||
"chart.js": "2.9.4",
|
||||
"d3": "7.9.0",
|
||||
"daterangepicker": "3.1.0",
|
||||
"dompurify": "3.4.16",
|
||||
"hotkeys-js": "3.10.1",
|
||||
"htmx.org": "2.0.11",
|
||||
"jquery": "4.0.0",
|
||||
"jquery-ui": "1.14.2",
|
||||
"jquery-ui-touch-punch": "0.2.3",
|
||||
"jquery-validation": "1.22.1",
|
||||
"jstree": "3.3.17",
|
||||
"lzjs": "1.3.1",
|
||||
"mark.js": "8.11.1",
|
||||
"moment": "2.31.0",
|
||||
"pace-js": "1.2.4",
|
||||
"screenfull": "6.0.2",
|
||||
"select2": "4.1.0",
|
||||
"tablesorter": "2.32.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"patch-package": "8.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/d3-selection": {
|
||||
@@ -51,29 +54,6 @@
|
||||
"license": "MIT",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/@yarnpkg/lockfile": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
|
||||
"integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/big.js": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/big.js/-/big.js-7.0.1.tgz",
|
||||
@@ -116,120 +96,54 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/braces": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||
"dev": true,
|
||||
"node_modules/chart.js": {
|
||||
"version": "2.9.4",
|
||||
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz",
|
||||
"integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fill-range": "^7.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
"chartjs-color": "^2.1.0",
|
||||
"moment": "^2.10.2"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind": {
|
||||
"version": "1.0.9",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
|
||||
"integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
|
||||
"dev": true,
|
||||
"node_modules/chartjs-color": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
|
||||
"integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"es-define-property": "^1.0.1",
|
||||
"get-intrinsic": "^1.3.0",
|
||||
"set-function-length": "^1.2.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
"chartjs-color-string": "^0.6.0",
|
||||
"color-convert": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind-apply-helpers": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
||||
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||
"dev": true,
|
||||
"node_modules/chartjs-color-string": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
|
||||
"integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
"color-name": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bound": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
|
||||
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
|
||||
"dev": true,
|
||||
"node_modules/chartjs-color/node_modules/color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"get-intrinsic": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/ci-info": {
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
|
||||
"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/sibiraj-s"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
"node_modules/chartjs-color/node_modules/color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/commander": {
|
||||
@@ -241,21 +155,6 @@
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"path-key": "^3.1.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
"which": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/d3": {
|
||||
"version": "7.9.0",
|
||||
"resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
|
||||
@@ -657,22 +556,14 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/define-data-property": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
|
||||
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
|
||||
"dev": true,
|
||||
"node_modules/daterangepicker": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/daterangepicker/-/daterangepicker-3.1.0.tgz",
|
||||
"integrity": "sha512-DxWXvvPq4srWLCqFugqSV+6CBt/CvQ0dnpXhQ3gl0autcIDAruG1PuGG3gC7yPRNytAD1oU1AcUOzaYhOawhTw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
"jquery": ">=1.10",
|
||||
"moment": "^2.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/delaunator": {
|
||||
@@ -693,209 +584,11 @@
|
||||
"@types/trusted-types": "^2.0.7"
|
||||
}
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-errors": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-object-atoms": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
|
||||
"integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/fill-range": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/find-yarn-workspace-root": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
|
||||
"integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"micromatch": "^4.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/fs-extra": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"es-define-property": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"es-object-atoms": "^1.1.1",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-proto": "^1.0.1",
|
||||
"gopd": "^1.2.0",
|
||||
"has-symbols": "^1.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"math-intrinsics": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dunder-proto": "^1.0.1",
|
||||
"es-object-atoms": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/gopd": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/has-property-descriptors": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
|
||||
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/hasown": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
|
||||
"integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
"node_modules/hotkeys-js": {
|
||||
"version": "3.10.1",
|
||||
"resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.10.1.tgz",
|
||||
"integrity": "sha512-mshqjgTqx8ee0qryHvRgZaZDxTwxam/2yTQmQlqAWS3+twnq1jsY9Yng9zB7lWq6WRrjTbTOc7knNwccXQiAjQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/htmx.org": {
|
||||
"version": "2.0.11",
|
||||
@@ -924,59 +617,6 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/is-docker": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
|
||||
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"is-docker": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-wsl": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
||||
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"is-docker": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/isarray": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
|
||||
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/jquery": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jquery/-/jquery-4.0.0.tgz",
|
||||
@@ -992,6 +632,12 @@
|
||||
"jquery": ">=1.12.0 <5.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jquery-ui-touch-punch": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/jquery-ui-touch-punch/-/jquery-ui-touch-punch-0.2.3.tgz",
|
||||
"integrity": "sha512-Q/7aAd+SjbV0SspHO7Kuk96NJIbLwJAS0lD81U1PKcU2T5ZKayXMORH+Y5qvYLuy41xqVQbWimsRKDn1v3oI2Q==",
|
||||
"license": "Dual licensed under the MIT or GPL Version 2 licenses."
|
||||
},
|
||||
"node_modules/jquery-validation": {
|
||||
"version": "1.22.1",
|
||||
"resolved": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.22.1.tgz",
|
||||
@@ -1001,49 +647,6 @@
|
||||
"jquery": "^1.7 || ^2.0 || ^3.1 || ^4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/json-stable-stringify": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
|
||||
"integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind": "^1.0.8",
|
||||
"call-bound": "^1.0.4",
|
||||
"isarray": "^2.0.5",
|
||||
"jsonify": "^0.0.1",
|
||||
"object-keys": "^1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/jsonfile": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz",
|
||||
"integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
},
|
||||
"node_modules/jsonify": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
|
||||
"integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
|
||||
"dev": true,
|
||||
"license": "Public Domain",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/jstree": {
|
||||
"version": "3.3.17",
|
||||
"resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.17.tgz",
|
||||
@@ -1059,16 +662,6 @@
|
||||
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/klaw-sync": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
|
||||
"integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.1.11"
|
||||
}
|
||||
},
|
||||
"node_modules/lzjs": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/lzjs/-/lzjs-1.3.1.tgz",
|
||||
@@ -1081,65 +674,19 @@
|
||||
"node": ">=14.15.0"
|
||||
}
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||
"dev": true,
|
||||
"node_modules/mark.js": {
|
||||
"version": "8.11.1",
|
||||
"resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
|
||||
"integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/moment": {
|
||||
"version": "2.31.0",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.31.0.tgz",
|
||||
"integrity": "sha512-0acOTfMiWOheYS4eoWb80yYMb/JLvVv9SHbs2PehaDzfUG0Bw855SKyk0IKTnPGa5+U2bmi3W68l1+sGLX/pvw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/micromatch": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
||||
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"braces": "^3.0.3",
|
||||
"picomatch": "^2.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.6"
|
||||
}
|
||||
},
|
||||
"node_modules/minimist": {
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
||||
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/object-keys": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
||||
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/open": {
|
||||
"version": "7.4.2",
|
||||
"resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
|
||||
"integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"is-docker": "^2.0.0",
|
||||
"is-wsl": "^2.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/pace-js": {
|
||||
@@ -1148,59 +695,6 @@
|
||||
"integrity": "sha512-qnCxtvUoY9yHId0AwMQCVmWltb698GiuVArmDbQzonTu9QCo0SgWUVnX9jB9mi+/FUSWvQULBPxUAAo/kLrh1A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/patch-package": {
|
||||
"version": "8.0.1",
|
||||
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz",
|
||||
"integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@yarnpkg/lockfile": "^1.1.0",
|
||||
"chalk": "^4.1.2",
|
||||
"ci-info": "^3.7.0",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"find-yarn-workspace-root": "^2.0.0",
|
||||
"fs-extra": "^10.0.0",
|
||||
"json-stable-stringify": "^1.0.2",
|
||||
"klaw-sync": "^6.0.0",
|
||||
"minimist": "^1.2.6",
|
||||
"open": "^7.4.2",
|
||||
"semver": "^7.5.3",
|
||||
"slash": "^2.0.0",
|
||||
"tmp": "^0.2.4",
|
||||
"yaml": "^2.2.2"
|
||||
},
|
||||
"bin": {
|
||||
"patch-package": "index.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14",
|
||||
"npm": ">5"
|
||||
}
|
||||
},
|
||||
"node_modules/path-key": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
||||
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8.6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/robust-predicates": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",
|
||||
@@ -1237,83 +731,6 @@
|
||||
"integrity": "sha512-i9KalWOP4/LRRGc8+rj2krNm0ZqP14cV+j1TRCEBSsOhCPkKH8rYZ2MCRXcgvqIqN+llqGci0hj9aVkCMvL0+g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.8.5",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
|
||||
"integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/set-function-length": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
|
||||
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"define-data-property": "^1.1.4",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"gopd": "^1.0.1",
|
||||
"has-property-descriptors": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/shebang-command": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"shebang-regex": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/shebang-regex": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
||||
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/slash": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
|
||||
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"has-flag": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/tablesorter": {
|
||||
"version": "2.32.0",
|
||||
"resolved": "https://registry.npmjs.org/tablesorter/-/tablesorter-2.32.0.tgz",
|
||||
@@ -1322,71 +739,6 @@
|
||||
"dependencies": {
|
||||
"jquery": ">=1.2.6"
|
||||
}
|
||||
},
|
||||
"node_modules/tmp": {
|
||||
"version": "0.2.7",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz",
|
||||
"integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.14"
|
||||
}
|
||||
},
|
||||
"node_modules/to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"is-number": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
||||
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"isexe": "^2.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"node-which": "bin/node-which"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.9.0",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
|
||||
"integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"yaml": "bin.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/eemeli"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
-4
@@ -6,27 +6,30 @@
|
||||
"license": "GPL-2.0-or-later",
|
||||
"scripts": {
|
||||
"build:js": "node build/sync-js.mjs",
|
||||
"postinstall": "patch-package && node build/sync-js.mjs && node build/clean-node-modules.mjs",
|
||||
"postinstall": "node build/sync-js.mjs && node build/clean-node-modules.mjs",
|
||||
"test": "node --test tests/js/*.test.js tests/js/*.test.mjs",
|
||||
"test:coverage": "node --test --experimental-test-coverage --test-coverage-lines=100 --test-coverage-branches=100 --test-coverage-functions=100 tests/js/sync_js.test.mjs"
|
||||
},
|
||||
"dependencies": {
|
||||
"big.js": "7.0.1",
|
||||
"billboard.js": "4.1.1",
|
||||
"chart.js": "2.9.4",
|
||||
"d3": "7.9.0",
|
||||
"daterangepicker": "3.1.0",
|
||||
"dompurify": "3.4.16",
|
||||
"htmx.org": "2.0.11",
|
||||
"hotkeys-js": "3.10.1",
|
||||
"jquery": "4.0.0",
|
||||
"jquery-ui": "1.14.2",
|
||||
"jquery-ui-touch-punch": "0.2.3",
|
||||
"jquery-validation": "1.22.1",
|
||||
"jstree": "3.3.17",
|
||||
"lzjs": "1.3.1",
|
||||
"mark.js": "8.11.1",
|
||||
"moment": "2.31.0",
|
||||
"pace-js": "1.2.4",
|
||||
"screenfull": "6.0.2",
|
||||
"select2": "4.1.0",
|
||||
"tablesorter": "2.32.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"patch-package": "8.0.1"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
diff --git a/node_modules/pace-js/pace.js b/node_modules/pace-js/pace.js
|
||||
index 0831a47..092b731 100644
|
||||
--- a/node_modules/pace-js/pace.js
|
||||
+++ b/node_modules/pace-js/pace.js
|
||||
@@ -118,1 +118,2 @@
|
||||
- if (!__hasProp.call(source, key)) continue;
|
||||
+ if (!__hasProp.call(source, key)) continue;
|
||||
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;
|
||||
@@ -273,7 +273,7 @@
|
||||
}
|
||||
this.el = document.createElement('div');
|
||||
this.el.className = "pace pace-active";
|
||||
- document.body.className = document.body.className.replace(/(pace-done )|/, 'pace-running ');
|
||||
+ document.body.className = document.body.className.replace(/(pace-done )/, 'pace-running ');
|
||||
var _custom_class_name = (options.className !== '') ? ' '+options.className : '';
|
||||
this.el.innerHTML = '<div class="pace-progress'+_custom_class_name+'">\n <div class="pace-progress-inner"></div>\n</div>\n<div class="pace-activity"></div>';
|
||||
if (targetElement.firstChild != null) {
|
||||
@@ -1,10 +0,0 @@
|
||||
diff --git a/node_modules/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js b/node_modules/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js
|
||||
index 0000000..0000000 100644
|
||||
--- a/node_modules/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js
|
||||
+++ b/node_modules/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js
|
||||
@@ -3,4 +3,4 @@
|
||||
* tablesorter (FORK) pager plugin
|
||||
* updated 2020-03-03 (v2.31.3)
|
||||
*/
|
||||
-!function(E){"use strict";var L=E.tablesorter;E.extend({tablesorterPager:new function(){this.defaults={container:null,ajaxUrl:null,customAjaxUrl:function(e,t){return t},ajaxError:null,ajaxObject:{dataType:"json"},processAjaxOnInit:!0,ajaxProcessing:function(e){return e},output:"{startRow} to {endRow} of {totalRows} rows",updateArrows:!0,page:0,pageReset:0,size:10,maxOptionSize:20,savePages:!0,storageKey:"tablesorter-pager",fixedHeight:!1,countChildRows:!1,removeRows:!1,cssFirst:".first",cssPrev:".prev",cssNext:".next",cssLast:".last",cssGoto:".gotoPage",cssPageDisplay:".pagedisplay",cssPageSize:".pagesize",cssErrorRow:"tablesorter-errorRow",cssDisabled:"disabled",totalRows:0,totalPages:0,filteredRows:0,filteredPages:0,ajaxCounter:0,currentFilters:[],startRow:0,endRow:0,$size:null,last:{}};function l(e,t,a,i,s,r){if("function"==typeof a.ajaxProcessing){t.config.$tbodies.eq(0).empty();var o,n,l,g,c,d,p,f,u,h,w,b,R=t.config,z=R.$table,x="",e=a.ajaxProcessing(e,t,i)||[0,[]];if(L.showError(t),r)L.debug(R,"pager")&&console.error("Pager >> Ajax Error",i,s,r),L.showError(t,i,s,r),R.$tbodies.eq(0).children("tr").detach(),a.totalRows=0;else{if(E.isArray(e)?(s=e[(i=isNaN(e[0])&&!isNaN(e[1]))?1:0],a.totalRows=isNaN(s)?a.totalRows||0:s,R.totalRows=R.filteredRows=a.filteredRows=a.totalRows,h=0!==a.totalRows&&e[i?0:1]||[],u=e[2]):(a.ajaxData=e,R.totalRows=a.totalRows=e.total,R.filteredRows=a.filteredRows=void 0!==e.filteredRows?e.filteredRows:e.total,u=e.headers,h=e.rows||[]),w=h&&h.length,h instanceof E)a.processAjaxOnInit&&(R.$tbodies.eq(0).empty(),R.$tbodies.eq(0).append(h));else if(w){for(o=0;o<w;o++){for(x+="<tr>",n=0;n<h[o].length;n++)x+=/^\s*<td/.test(h[o][n])?E.trim(h[o][n]):"<td>"+h[o][n]+"</td>";x+="</tr>"}a.processAjaxOnInit&&R.$tbodies.eq(0).html(x)}if(a.processAjaxOnInit=!0,u)for(c=(l=z.hasClass("hasStickyHeaders"))?R.widgetOptions.$sticky.children("thead:first").children("tr:not(."+R.cssIgnoreRow+")").children():"",g=z.find("tfoot tr:first").children(),b=(d=R.$headers.filter("th ")).length,n=0;n<b;n++)(p=d.eq(n)).find("."+L.css.icon).length?(f=p.find("."+L.css.icon).clone(!0),p.find("."+L.css.headerIn).html(u[n]).append(f),l&&c.length&&(f=c.eq(n).find("."+L.css.icon).clone(!0),c.eq(n).find("."+L.css.headerIn).html(u[n]).append(f))):(p.find("."+L.css.headerIn).html(u[n]),l&&c.length&&(a.$container=a.$container.add(R.widgetOptions.$sticky),c.eq(n).find("."+L.css.headerIn).html(u[n]))),g.eq(n).html(u[n])}R.showProcessing&&L.isProcessing(t),r=N(a,a.size,"get"),a.totalPages="all"===r?1:Math.ceil(a.totalRows/r),a.last.totalRows=a.totalRows,a.last.currentFilters=a.currentFilters,a.last.sortList=(R.sortList||[]).join(","),j(t,a,!1),L.updateCache(R,function(){a.initialized&&setTimeout(function(){L.debug(R,"pager")&&console.log("Pager >> Triggering pagerChange"),z.triggerHandler("pagerChange",a),L.applyWidget(t),j(t,a,!0)},0)})}a.initialized||F(t,a)}function d(e,t){t.page=0,S(e,t)}function u(e,t){t.page=$(e,t)-1,S(e,t)}function p(e,t){t.page++;var a=$(e,t)-1;t.page>=a&&(t.page=a),S(e,t)}function f(e,t){t.page--,t.page<=0&&(t.page=0),S(e,t)}function h(e,t,a){var i,s,r=e.config;t.$container.find(t.cssGoto+","+t.cssPageSize+",.ts-startRow, .ts-page").removeClass(t.cssDisabled).removeAttr("disabled").each(function(){this.ariaDisabled=!1}),t.isDisabled=!1,t.page=E.data(e,"pagerLastPage")||t.page||0,i=(s=t.$container.find(t.cssPageSize)).find("option[selected]").val(),t.size=E.data(e,"pagerLastSize")||N(t,i,"get"),t.totalPages="all"===t.size?1:Math.ceil($(e,t)/t.size),A(e,t.size,t),e.id&&!r.$table.attr("aria-describedby")&&((i=(s=t.$container.find(t.cssPageDisplay)).attr("id"))||(i=e.id+"_pager_info",s.attr("id",i)),r.$table.attr("aria-describedby",i)),P(e,t),a&&(L.update(r),A(e,t.size,t),S(e,t),m(e,t),L.debug(r,"pager"))&&console.log("Pager >> Enabled")}var w=this,b=function(e,t,a){var i="addClass",s="removeClass",r=t.cssDisabled,a=!!a,o=a||0===t.page,e=$(e,t),n=a||t.page===e-1||0===e;t.updateArrows&&((a=t.$container.find(t.cssFirst+","+t.cssPrev))[o?i:s](r),a.each(function(){this.ariaDisabled=o}),(a=t.$container.find(t.cssNext+","+t.cssLast))[n?i:s](r),a.each(function(){this.ariaDisabled=n}))},R=function(e,t){var a,i,s,r=e.config,e=r.$table.hasClass("hasFilters");if(e&&!t.ajax)if(L.isEmptyObject(r.cache))t.filteredRows=t.totalRows=r.$tbodies.eq(0).children("tr").not(t.countChildRows?"":"."+r.cssChildRow).length;else for(t.filteredRows=0,s=(a=r.cache[0].normalized).length,i=0;i<s;i++)t.filteredRows+=t.regexRows.test(a[i][r.columns].$row[0].className)?0:1;else e||(t.filteredRows=t.totalRows)},j=function(e,o,t){if(!o.initializing){var a,i,s,r,n,l,g,c=e.config,d=c.namespace+"pager",p=N(o,o.size,"get");if("all"===p&&(p=o.totalRows),o.countChildRows&&(a[a.length]=c.cssChildRow),o.totalPages=Math.ceil(o.totalRows/p),c.totalRows=o.totalRows,I(e,o),R(e,o),c.filteredRows=o.filteredRows,o.filteredPages=Math.ceil(o.filteredRows/p)||0,0<=$(e,o)){if(a=p*o.page>o.filteredRows&&t,o.page=a?o.pageReset||0:o.page,o.startRow=!a&&0===o.filt
Line truncated
|
||||
+!function(E){"use strict";var L=E.tablesorter;E.extend({tablesorterPager:new function(){this.defaults={container:null,ajaxUrl:null,customAjaxUrl:function(e,t){return t},ajaxError:null,ajaxObject:{dataType:"json"},processAjaxOnInit:!0,ajaxProcessing:function(e){return e},output:"{startRow} to {endRow} of {totalRows} rows",updateArrows:!0,page:0,pageReset:0,size:10,maxOptionSize:20,savePages:!0,storageKey:"tablesorter-pager",fixedHeight:!1,countChildRows:!1,removeRows:!1,cssFirst:".first",cssPrev:".prev",cssNext:".next",cssLast:".last",cssGoto:".gotoPage",cssPageDisplay:".pagedisplay",cssPageSize:".pagesize",cssErrorRow:"tablesorter-errorRow",cssDisabled:"disabled",totalRows:0,totalPages:0,filteredRows:0,filteredPages:0,ajaxCounter:0,currentFilters:[],startRow:0,endRow:0,$size:null,last:{}};function l(e,t,a,i,s,r){if("function"==typeof a.ajaxProcessing){t.config.$tbodies.eq(0).empty();var o,n,l,g,c,d,p,f,u,h,w,b,R=t.config,z=R.$table,x="",e=a.ajaxProcessing(e,t,i)||[0,[]];if(L.showError(t),r)L.debug(R,"pager")&&console.error("Pager >> Ajax Error",i,s,r),L.showError(t,i,s,r),R.$tbodies.eq(0).children("tr").detach(),a.totalRows=0;else{if(Array.isArray(e)?(s=e[(i=isNaN(e[0])&&!isNaN(e[1]))?1:0],a.totalRows=isNaN(s)?a.totalRows||0:s,R.totalRows=R.filteredRows=a.filteredRows=a.totalRows,h=0!==a.totalRows&&e[i?0:1]||[],u=e[2]):(a.ajaxData=e,R.totalRows=a.totalRows=e.total,R.filteredRows=a.filteredRows=void 0!==e.filteredRows?e.filteredRows:e.total,u=e.headers,h=e.rows||[]),w=h&&h.length,h instanceof E)a.processAjaxOnInit&&(R.$tbodies.eq(0).empty(),R.$tbodies.eq(0).append(h));else if(w){for(o=0;o<w;o++){for(x+="<tr>",n=0;n<h[o].length;n++)x+=/^\s*<td/.test(h[o][n])?String(h[o][n]).trim():"<td>"+h[o][n]+"</td>";x+="</tr>"}a.processAjaxOnInit&&R.$tbodies.eq(0).html(x)}if(a.processAjaxOnInit=!0,u)for(c=(l=z.hasClass("hasStickyHeaders"))?R.widgetOptions.$sticky.children("thead:first").children("tr:not(."+R.cssIgnoreRow+")").children():"",g=z.find("tfoot tr:first").children(),b=(d=R.$headers.filter("th ")).length,n=0;n<b;n++)(p=d.eq(n)).find("."+L.css.icon).length?(f=p.find("."+L.css.icon).clone(!0),p.find("."+L.css.headerIn).html(u[n]).append(f),l&&c.length&&(f=c.eq(n).find("."+L.css.icon).clone(!0),c.eq(n).find("."+L.css.headerIn).html(u[n]).append(f))):(p.find("."+L.css.headerIn).html(u[n]),l&&c.length&&(a.$container=a.$container.add(R.widgetOptions.$sticky),c.eq(n).find("."+L.css.headerIn).html(u[n]))),g.eq(n).html(u[n])}R.showProcessing&&L.isProcessing(t),r=N(a,a.size,"get"),a.totalPages="all"===r?1:Math.ceil(a.totalRows/r),a.last.totalRows=a.totalRows,a.last.currentFilters=a.currentFilters,a.last.sortList=(R.sortList||[]).join(","),j(t,a,!1),L.updateCache(R,function(){a.initialized&&setTimeout(function(){L.debug(R,"pager")&&console.log("Pager >> Triggering pagerChange"),z.triggerHandler("pagerChange",a),L.applyWidget(t),j(t,a,!0)},0)})}a.initialized||F(t,a)}function d(e,t){t.page=0,S(e,t)}function u(e,t){t.page=$(e,t)-1,S(e,t)}function p(e,t){t.page++;var a=$(e,t)-1;t.page>=a&&(t.page=a),S(e,t)}function f(e,t){t.page--,t.page<=0&&(t.page=0),S(e,t)}function h(e,t,a){var i,s,r=e.config;t.$container.find(t.cssGoto+","+t.cssPageSize+",.ts-startRow, .ts-page").removeClass(t.cssDisabled).removeAttr("disabled").each(function(){this.ariaDisabled=!1}),t.isDisabled=!1,t.page=E.data(e,"pagerLastPage")||t.page||0,i=(s=t.$container.find(t.cssPageSize)).find("option[selected]").val(),t.size=E.data(e,"pagerLastSize")||N(t,i,"get"),t.totalPages="all"===t.size?1:Math.ceil($(e,t)/t.size),A(e,t.size,t),e.id&&!r.$table.attr("aria-describedby")&&((i=(s=t.$container.find(t.cssPageDisplay)).attr("id"))||(i=e.id+"_pager_info",s.attr("id",i)),r.$table.attr("aria-describedby",i)),P(e,t),a&&(L.update(r),A(e,t.size,t),S(e,t),m(e,t),L.debug(r,"pager"))&&console.log("Pager >> Enabled")}var w=this,b=function(e,t,a){var i="addClass",s="removeClass",r=t.cssDisabled,a=!!a,o=a||0===t.page,e=$(e,t),n=a||t.page===e-1||0===e;t.updateArrows&&((a=t.$container.find(t.cssFirst+","+t.cssPrev))[o?i:s](r),a.each(function(){this.ariaDisabled=o}),(a=t.$container.find(t.cssNext+","+t.cssLast))[n?i:s](r),a.each(function(){this.ariaDisabled=n}))},R=function(e,t){var a,i,s,r=e.config,e=r.$table.hasClass("hasFilters");if(e&&!t.ajax)if(L.isEmptyObject(r.cache))t.filteredRows=t.totalRows=r.$tbodies.eq(0).children("tr").not(t.countChildRows?"":"."+r.cssChildRow).length;else for(t.filteredRows=0,s=(a=r.cache[0].normalized).length,i=0;i<s;i++)t.filteredRows+=t.regexRows.test(a[i][r.columns].$row[0].className)?0:1;else e||(t.filteredRows=t.totalRows)},j=function(e,o,t){if(!o.initializing){var a=[],i,s,r,n,l,g,c=e.config,d=c.namespace+"pager",p=N(o,o.size,"get");if("all"===p&&(p=o.totalRows),o.countChildRows&&(a[a.length]=c.cssChildRow),o.totalPages=Math.ceil(o.totalRows/p),c.totalRows=o.totalRows,I(e,o),R(e,o),c.filteredRows=o.filteredRows,o.filteredPages=Math.ceil(o.filteredRows/p)||0,0<=$(e,o)){if(a=p*o.page>o.filteredRows&&t,o.page=a?o.pageReset||0:o.page,o.startRow=
Line truncated
|
||||
@@ -564,3 +564,54 @@ test('Billboard ignores prototype keys while preserving valid chart options (Cod
|
||||
expect(result.polluted).toBeUndefined();
|
||||
expect(result.id).toBe('safe');
|
||||
});
|
||||
|
||||
async function managedLibraryFixture(page: import('@playwright/test').Page, assets: string[]) {
|
||||
await page.route('http://frontend.fixture/**', route => route.fulfill({contentType:'text/html', body:'<!doctype html><html><body></body></html>'}));
|
||||
await page.goto('http://frontend.fixture/');
|
||||
for (const asset of assets) {
|
||||
await page.addScriptTag({content:readFileSync(resolve(__dirname, '../../../include/js', asset), 'utf8')});
|
||||
}
|
||||
}
|
||||
|
||||
test('managed legacy libraries preserve date, highlighting and keyboard APIs', async ({page}) => {
|
||||
await managedLibraryFixture(page, ['jquery.js', 'vendor/moment/moment.min.js', 'vendor/daterangepicker/daterangepicker.js', 'vendor/mark/jquery.mark.js', 'vendor/hotkeys/hotkeys.js']);
|
||||
const result = await page.evaluate(() => {
|
||||
const $ = Reflect.get(window, 'jQuery');
|
||||
const moment = Reflect.get(window, 'moment');
|
||||
const hotkeys = Reflect.get(window, 'hotkeys');
|
||||
const input = document.createElement('input'); document.body.append(input);
|
||||
$(input).daterangepicker({startDate:'10/01/2026', endDate:'10/11/2026'});
|
||||
const range = $(input).data('daterangepicker');
|
||||
const dates = [range.startDate.format('YYYY-MM-DD'), range.endDate.format('YYYY-MM-DD')];
|
||||
range.remove();
|
||||
const label = document.createElement('p'); label.textContent = 'Fixture'; document.body.append(label);
|
||||
$(label).markRegExp(/Fixture/);
|
||||
let pressed = 0; hotkeys('ctrl+x', () => pressed++);
|
||||
document.dispatchEvent(new KeyboardEvent('keydown', {key:'x', keyCode:88, ctrlKey:true, bubbles:true}));
|
||||
hotkeys.unbind('ctrl+x');
|
||||
return {version:moment.version, dates, marks:label.querySelectorAll('mark').length, pressed};
|
||||
});
|
||||
expect(result).toEqual({version:'2.31.0', dates:['2026-10-01','2026-10-11'], marks:1, pressed:1});
|
||||
});
|
||||
|
||||
test('generated tablesorter filters work with jQuery 4', async ({page}) => {
|
||||
await managedLibraryFixture(page, ['jquery.js','jquery.tablesorter.js','jquery.tablesorter.widgets.js']);
|
||||
const result = await page.evaluate(() => {
|
||||
const $ = Reflect.get(window, 'jQuery');
|
||||
const table = document.createElement('table');
|
||||
table.innerHTML = '<thead><tr><th>Name</th></tr></thead><tbody><tr><td>Two</td></tr><tr><td>One</td></tr></tbody>';
|
||||
document.body.append(table);
|
||||
$(table).tablesorter({widgets:['filter'], sortList:[[0,0]]});
|
||||
$.tablesorter.setFilters(table, ['One'], true);
|
||||
return table.tBodies[0].rows[0].textContent;
|
||||
});
|
||||
expect(result).toBe('One');
|
||||
});
|
||||
|
||||
test('generated Pace retains prototype-key filtering', async ({page}) => {
|
||||
await page.route('http://frontend.fixture/**', route => route.fulfill({contentType:'text/html', body:'<!doctype html><html><body></body></html>'}));
|
||||
await page.goto('http://frontend.fixture/');
|
||||
await page.evaluate(() => Reflect.set(window, 'paceOptions', JSON.parse('{"__proto__":{"fixturePollution":true},"constructor":{"prototype":{"fixturePollution":true}},"startOnPageLoad":false}')));
|
||||
await page.addScriptTag({content:readFileSync(resolve(__dirname, '../../../include/js/pace.js'), 'utf8')});
|
||||
expect(await page.evaluate(() => Reflect.get(Object.prototype, 'fixturePollution'))).toBeUndefined();
|
||||
});
|
||||
@@ -0,0 +1,29 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import {readFileSync, readdirSync} from 'node:fs';
|
||||
import {test} from 'node:test';
|
||||
import {assetMap} from '../../build/sync-js.mjs';
|
||||
|
||||
const inventory = JSON.parse(readFileSync(new URL('../../build/legacy-js.json', import.meta.url), 'utf8'));
|
||||
const managed = new Set(Object.values(assetMap));
|
||||
const known = new Set([...managed, ...Object.keys(inventory.files), ...inventory.applicationFiles]);
|
||||
|
||||
test('every root browser script is generated or has an explicit maintenance owner', () => {
|
||||
for (const file of readdirSync('include/js').filter(name => name.endsWith('.js'))) {
|
||||
assert.ok(known.has('include/js/' + file), 'Unclassified browser script: ' + file);
|
||||
}
|
||||
});
|
||||
|
||||
test('the shared header loads only inventoried assets', () => {
|
||||
const header = readFileSync('lib/html.php', 'utf8');
|
||||
for (const match of header.matchAll(/get_md5_include_js\('(include\/js\/[^']+\.js)'/g)) {
|
||||
assert.ok(known.has(match[1]), 'Unclassified header dependency: ' + match[1]);
|
||||
}
|
||||
});
|
||||
|
||||
test('retained adapters do not overlap generated libraries and explain their compatibility requirement', () => {
|
||||
for (const [file, details] of Object.entries(inventory.files)) {
|
||||
assert.equal(managed.has(file), false, file);
|
||||
assert.ok(details.reason.length > 0, file);
|
||||
readFileSync(file);
|
||||
}
|
||||
});
|
||||
@@ -22,6 +22,9 @@ function fixtureContent(source) {
|
||||
if (source === 'node_modules/screenfull/index.js') {
|
||||
return `// fixture:${source}\nlet screenfull = {};\nexport default screenfull;\n`;
|
||||
}
|
||||
if (source === 'node_modules/pace-js/pace.js') {
|
||||
return "if (!__hasProp.call(source, key)) continue;\ndocument.body.className.replace(/(pace-done )|/, 'pace-running ');\n";
|
||||
}
|
||||
|
||||
return `fixture:${source}\n`;
|
||||
}
|
||||
@@ -32,6 +35,10 @@ function assertSynced(root) {
|
||||
|
||||
if (source === 'node_modules/screenfull/index.js') {
|
||||
assert.equal(actual, `// fixture:${source}\nlet screenfull = {};\nwindow.screenfull = screenfull;\n`);
|
||||
} else if (source === 'node_modules/pace-js/pace.js') {
|
||||
assert.match(actual, /key === '__proto__'.*key === 'constructor'.*key === 'prototype'/);
|
||||
assert.match(actual, /replace\(\/\(pace-done \)\//);
|
||||
assert.doesNotMatch(actual, /pace-done \)\|/);
|
||||
} else {
|
||||
assert.equal(actual, fixtureContent(source));
|
||||
}
|
||||
@@ -51,6 +58,25 @@ test('syncAssets copies every managed asset and reports each destination', () =>
|
||||
);
|
||||
});
|
||||
|
||||
test('pace source changes fail the build instead of silently losing security fixes', () => {
|
||||
const root = fixture();
|
||||
writeFileSync(join(root, 'node_modules/pace-js/pace.js'), 'changed upstream source');
|
||||
assert.throws(() => syncAssets(root, () => {}), /pace source changed/);
|
||||
});
|
||||
|
||||
test('the pager transform handles minified jQuery utilities', () => {
|
||||
const root = fixture();
|
||||
writeFileSync(join(root, 'node_modules/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js'), 'E.isArray(a); E.trim(h[o][n]);');
|
||||
syncAssets(root, () => {});
|
||||
assert.equal(readFileSync(join(root, 'include/js/jquery.tablesorter.pager.js'), 'utf8'), "Array.isArray(a); String((h[o][n]) ?? '').trim();");
|
||||
});
|
||||
|
||||
test('unsupported pager utilities fail before shipping a broken asset', () => {
|
||||
const root = fixture();
|
||||
writeFileSync(join(root, 'node_modules/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js'), 'E.isFunction(fn);');
|
||||
assert.throws(() => syncAssets(root, () => {}), /unsupported jQuery API/);
|
||||
});
|
||||
|
||||
test('the command-line entry point builds a release-tree checkout', () => {
|
||||
const root = fixture();
|
||||
const script = resolve('build/sync-js.mjs');
|
||||
|
||||
Reference in new issue
Block a user