@webalternatif/js-core 1.5.4 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -2
- package/dist/cjs/Mouse.js +27 -10
- package/dist/cjs/Translator.js +5 -9
- package/dist/cjs/array.js +42 -7
- package/dist/cjs/dom.js +41 -262
- package/dist/cjs/index.js +64 -6
- package/dist/cjs/is.js +78 -5
- package/dist/cjs/onOff.js +308 -0
- package/dist/esm/Mouse.js +27 -10
- package/dist/esm/Translator.js +5 -9
- package/dist/esm/array.js +42 -7
- package/dist/esm/dom.js +42 -262
- package/dist/esm/index.js +69 -4
- package/dist/esm/is.js +79 -5
- package/dist/esm/onOff.js +299 -0
- package/package.json +11 -7
- package/types/Mouse.d.ts +20 -5
- package/types/Translator.d.ts +3 -3
- package/types/array.d.ts +2 -1
- package/types/dom.d.ts +63 -67
- package/types/index.d.ts +13 -63
- package/types/is.d.ts +3 -3
- package/types/onOff.d.ts +19 -0
package/README.md
CHANGED
|
@@ -1,7 +1,59 @@
|
|
|
1
|
+
[](LICENSE)
|
|
2
|
+

|
|
3
|
+
[](https://codecov.io/github/webalternatif/js-core)
|
|
4
|
+

|
|
5
|
+
|
|
1
6
|
# js-core
|
|
2
|
-
A set of Javascript utility functions.
|
|
3
7
|
|
|
4
|
-
|
|
8
|
+
Modular JavaScript utilities for modern applications.
|
|
9
|
+
|
|
10
|
+
Lightweight, framework-agnostic helpers for data manipulation, DOM handling, events and internationalization.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @webalternatif/js-core
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
yarn add @webalternatif/js-core
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Basic Usage
|
|
25
|
+
|
|
26
|
+
The default export provides pure JavaScript utilities only.
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
import webf from '@webalternatif/js-core'
|
|
30
|
+
|
|
31
|
+
webf.unique([1, 2, 2]) // [1, 2]
|
|
32
|
+
webf.numberFormat(12345.6789, 2, true, '.', ',') // 12.345,68
|
|
33
|
+
webf.isTouchDevice() // true or false
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Documentation
|
|
37
|
+
|
|
38
|
+
### Core modules
|
|
39
|
+
- [String utilities](docs/string.md)
|
|
40
|
+
- [Array utilities](docs/array.md)
|
|
41
|
+
- [Type checking](docs/is.md)
|
|
42
|
+
- [Random utilities](docs/random.md)
|
|
43
|
+
- [Traversal utilities](docs/traversal.md)
|
|
44
|
+
- [Math utilities](docs/math.md)
|
|
45
|
+
- [General utilities](docs/utils.md)
|
|
46
|
+
|
|
47
|
+
### Additional modules
|
|
48
|
+
- [DOM utilities](docs/dom.md)
|
|
49
|
+
- [Event Dispatcher](docs/eventDispatcher.md)
|
|
50
|
+
- [Translator (i18n)](docs/translator.md)
|
|
51
|
+
- [Mouse utilities](docs/mouse.md)
|
|
5
52
|
|
|
6
53
|
## Tests
|
|
7
54
|
|
|
55
|
+
This project uses Jest for unit testing.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
yarn test
|
|
59
|
+
```
|
package/dist/cjs/Mouse.js
CHANGED
|
@@ -18,7 +18,13 @@ var Mouse = /*#__PURE__*/function () {
|
|
|
18
18
|
}
|
|
19
19
|
return _createClass(Mouse, null, [{
|
|
20
20
|
key: "getPosition",
|
|
21
|
-
value:
|
|
21
|
+
value:
|
|
22
|
+
/**
|
|
23
|
+
* @param {Event} ev
|
|
24
|
+
* @param {Element} element
|
|
25
|
+
* @returns {{x: number, y: number}}
|
|
26
|
+
*/
|
|
27
|
+
function getPosition(ev, element) {
|
|
22
28
|
ev = _assertClassBrand(Mouse, this, _getEvent).call(this, ev);
|
|
23
29
|
var rect = {
|
|
24
30
|
left: 0,
|
|
@@ -32,10 +38,15 @@ var Mouse = /*#__PURE__*/function () {
|
|
|
32
38
|
};
|
|
33
39
|
}
|
|
34
40
|
return {
|
|
35
|
-
x: ev.pageX
|
|
36
|
-
y: ev.pageY
|
|
41
|
+
x: ev.pageX - rect.left,
|
|
42
|
+
y: ev.pageY - rect.top
|
|
37
43
|
};
|
|
38
44
|
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @param {Event} ev
|
|
48
|
+
* @returns {{x: number, y: number}}
|
|
49
|
+
*/
|
|
39
50
|
}, {
|
|
40
51
|
key: "getViewportPosition",
|
|
41
52
|
value: function getViewportPosition(ev) {
|
|
@@ -51,18 +62,24 @@ var Mouse = /*#__PURE__*/function () {
|
|
|
51
62
|
ev = _assertClassBrand(Mouse, this, _getEvent).call(this, ev);
|
|
52
63
|
return window.document.elementFromPoint(ev.clientX, ev.clientY);
|
|
53
64
|
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @param {Event|{originalEvent?: Event}} ev
|
|
68
|
+
* @returns {Event}
|
|
69
|
+
*/
|
|
54
70
|
}]);
|
|
55
71
|
}();
|
|
56
72
|
function _getEvent(ev) {
|
|
57
73
|
var _ev$originalEvent;
|
|
74
|
+
ev = (_ev$originalEvent = ev.originalEvent) !== null && _ev$originalEvent !== void 0 ? _ev$originalEvent : ev;
|
|
58
75
|
if ((0, _is.isTouchDevice)()) {
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
var _ev$changedTouches, _ev$touches;
|
|
77
|
+
var touch = ((_ev$changedTouches = ev.changedTouches) === null || _ev$changedTouches === void 0 ? void 0 : _ev$changedTouches[0]) || ((_ev$touches = ev.touches) === null || _ev$touches === void 0 ? void 0 : _ev$touches[0]);
|
|
78
|
+
ev.clientX = touch.clientX;
|
|
79
|
+
ev.clientY = touch.clientY;
|
|
80
|
+
ev.pageX = touch.pageX;
|
|
81
|
+
ev.pageY = touch.pageY;
|
|
65
82
|
}
|
|
66
|
-
return
|
|
83
|
+
return ev;
|
|
67
84
|
}
|
|
68
85
|
var _default = exports["default"] = Mouse;
|
package/dist/cjs/Translator.js
CHANGED
|
@@ -19,13 +19,13 @@ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
|
|
19
19
|
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
|
20
20
|
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
|
21
21
|
/**
|
|
22
|
-
* @typedef {string
|
|
22
|
+
* @typedef {string|(()=>string)} TranslatorValue
|
|
23
23
|
*/
|
|
24
24
|
/**
|
|
25
|
-
* @typedef {Record<string,
|
|
25
|
+
* @typedef {Record<string,Record<string,Record<string,TranslatorValue>>>} TranslatorNsMapping
|
|
26
26
|
*/
|
|
27
27
|
/**
|
|
28
|
-
* @typedef {Record<string,
|
|
28
|
+
* @typedef {Record<string,Record<string,TranslatorValue>>} TranslatorCoreMapping
|
|
29
29
|
*/
|
|
30
30
|
/**
|
|
31
31
|
* @typedef {TranslatorNsMapping | TranslatorCoreMapping} TranslatorMapping
|
|
@@ -65,7 +65,7 @@ var Translator = exports["default"] = /*#__PURE__*/function () {
|
|
|
65
65
|
var entry = _classPrivateFieldGet(_mapping, this)[namespace][lang][label];
|
|
66
66
|
return _assertClassBrand(_Translator_brand, this, _resolve).call(this, entry);
|
|
67
67
|
}
|
|
68
|
-
return 'en' !== lang ? this.translate(label,
|
|
68
|
+
return 'en' !== lang ? this.translate(label, 'en', namespace) : label;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
@@ -142,11 +142,7 @@ function _findKeyByValue(entries, label) {
|
|
|
142
142
|
}
|
|
143
143
|
function _resolve(entry) {
|
|
144
144
|
if ((0, _is.isFunction)(entry)) {
|
|
145
|
-
|
|
146
|
-
return entry();
|
|
147
|
-
} catch (e) {
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
145
|
+
return entry();
|
|
150
146
|
}
|
|
151
147
|
return entry;
|
|
152
148
|
}
|
package/dist/cjs/array.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.range = exports.indexOf = exports.inArray = exports.compareArray = exports.array_unique = exports.array_diff = exports.arrayUnique = exports.arrayDiff = void 0;
|
|
6
|
+
exports.range = exports.lastIndexOf = exports.indexOf = exports.inArray = exports.compareArray = exports.array_unique = exports.array_diff = exports.arrayUnique = exports.arrayDiff = void 0;
|
|
7
7
|
var _traversal = require("./traversal.js");
|
|
8
8
|
var _is = require("./is.js");
|
|
9
9
|
var _math = require("./math.js");
|
|
@@ -11,7 +11,7 @@ var _utils = require("./utils.js");
|
|
|
11
11
|
/**
|
|
12
12
|
* Checks if a value exists in an array or an object
|
|
13
13
|
*
|
|
14
|
-
* @param {
|
|
14
|
+
* @param {any} value the searched value
|
|
15
15
|
* @param {Object|Array} arr the array
|
|
16
16
|
* @param {number} [index=0] if provided, search from this index
|
|
17
17
|
* @param {boolean} [strict=false] if true, search is done with strict equality
|
|
@@ -26,8 +26,7 @@ var _utils = require("./utils.js");
|
|
|
26
26
|
* // → true
|
|
27
27
|
*
|
|
28
28
|
* @example
|
|
29
|
-
* inArray(5, [1, 2, 3])
|
|
30
|
-
* // → false
|
|
29
|
+
* inArray(5, [1, 2, 3]) // → false
|
|
31
30
|
*/
|
|
32
31
|
var inArray = exports.inArray = function inArray(value, arr) {
|
|
33
32
|
var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
@@ -56,11 +55,47 @@ var inArray = exports.inArray = function inArray(value, arr) {
|
|
|
56
55
|
});
|
|
57
56
|
return ret;
|
|
58
57
|
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns the first index at which a given element can be found in an array or a string.
|
|
61
|
+
* or -1 if it is not present.
|
|
62
|
+
*
|
|
63
|
+
* @param {Array<any>|string} arr - The array to search in
|
|
64
|
+
* @param {any} elt - The element to search for
|
|
65
|
+
* @param {number} [from] - The index to start the search from. Can be negative.
|
|
66
|
+
* @returns {number} - The index of the element, or -1 if not found
|
|
67
|
+
*/
|
|
59
68
|
var indexOf = exports.indexOf = function indexOf(arr, elt) {
|
|
60
69
|
var from = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
70
|
+
var a = (0, _is.isString)(arr) ? (0, _traversal.map)(arr, function (_, a) {
|
|
71
|
+
return a;
|
|
72
|
+
}) : arr;
|
|
73
|
+
from = from < 0 ? Math.ceil(from) + a.length : Math.floor(from);
|
|
74
|
+
for (; from < a.length; from++) {
|
|
75
|
+
if (from in a && a[from] === elt) {
|
|
76
|
+
return from;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return -1;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Returns the last index at which a given element can be found in an array or a string.
|
|
84
|
+
* or -1 if it is not present.
|
|
85
|
+
*
|
|
86
|
+
* @param {Array<any>|string} arr - The array to search in
|
|
87
|
+
* @param {any} elt - The element to search for
|
|
88
|
+
* @param {number} [from] - The index to start the search from. Can be negative.
|
|
89
|
+
* @returns {number} - The index of the element, or -1 if not found
|
|
90
|
+
*/
|
|
91
|
+
var lastIndexOf = exports.lastIndexOf = function lastIndexOf(arr, elt) {
|
|
92
|
+
var from = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
|
|
93
|
+
var a = (0, _is.isString)(arr) ? (0, _traversal.map)(arr, function (_, a) {
|
|
94
|
+
return a;
|
|
95
|
+
}) : arr;
|
|
96
|
+
from = from < 0 ? a.length + Math.ceil(from) : Math.floor(from);
|
|
97
|
+
for (; from >= 0; from--) {
|
|
98
|
+
if (from in a && a[from] === elt) {
|
|
64
99
|
return from;
|
|
65
100
|
}
|
|
66
101
|
}
|
package/dist/cjs/dom.js
CHANGED
|
@@ -8,12 +8,7 @@ var _is = require("./is.js");
|
|
|
8
8
|
var _string = require("./string.js");
|
|
9
9
|
var _traversal = require("./traversal.js");
|
|
10
10
|
var _array = require("./array.js");
|
|
11
|
-
var
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
13
|
-
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
14
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
15
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
16
|
-
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
11
|
+
var _onOff = require("./onOff.js");
|
|
17
12
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
18
13
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
19
14
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
@@ -21,116 +16,6 @@ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Sym
|
|
|
21
16
|
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
22
17
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
23
18
|
var cssNumber = ['animationIterationCount', 'aspectRatio', 'borderImageSlice', 'columnCount', 'flexGrow', 'flexShrink', 'fontWeight', 'gridArea', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'lineHeight', 'opacity', 'order', 'orphans', 'scale', 'widows', 'zIndex', 'zoom', 'fillOpacity', 'floodOpacity', 'stopOpacity', 'strokeMiterlimit', 'strokeOpacity'];
|
|
24
|
-
var LISTENERS = new Map();
|
|
25
|
-
var CUSTOM_EVENTS = ['longtap', 'dbltap'];
|
|
26
|
-
var ENABLED_EVENTS = new Set();
|
|
27
|
-
var _teardownLongTap = null;
|
|
28
|
-
var _teardownDblTap = null;
|
|
29
|
-
var supplyEvent = function supplyEvent(event) {
|
|
30
|
-
if (ENABLED_EVENTS !== null && ENABLED_EVENTS !== void 0 && ENABLED_EVENTS.has(event)) return;
|
|
31
|
-
if (event === 'longtap') enableLongTap();
|
|
32
|
-
if (event === 'dbltap') enableDblTap();
|
|
33
|
-
ENABLED_EVENTS.add(event);
|
|
34
|
-
};
|
|
35
|
-
var enableLongTap = function enableLongTap() {
|
|
36
|
-
var LONGPRESS_DELAY = 800;
|
|
37
|
-
var MOVE_TOLERANCE = 8;
|
|
38
|
-
var timer = null;
|
|
39
|
-
var startX = 0;
|
|
40
|
-
var startY = 0;
|
|
41
|
-
var target = null;
|
|
42
|
-
var start = function start(ev) {
|
|
43
|
-
target = ev.target;
|
|
44
|
-
var pos = _Mouse["default"].getViewportPosition(ev);
|
|
45
|
-
startX = pos.x;
|
|
46
|
-
startY = pos.y;
|
|
47
|
-
timer = setTimeout(function () {
|
|
48
|
-
target.dispatchEvent(new CustomEvent('longtap', {
|
|
49
|
-
bubbles: true,
|
|
50
|
-
cancelable: true,
|
|
51
|
-
detail: {
|
|
52
|
-
originalEvent: ev
|
|
53
|
-
}
|
|
54
|
-
}));
|
|
55
|
-
timer = null;
|
|
56
|
-
}, LONGPRESS_DELAY);
|
|
57
|
-
};
|
|
58
|
-
var move = function move(ev) {
|
|
59
|
-
if (!timer) return;
|
|
60
|
-
var pos = _Mouse["default"].getViewportPosition(ev);
|
|
61
|
-
if (Math.hypot(pos.x - startX, pos.y - startY) > MOVE_TOLERANCE) {
|
|
62
|
-
clearTimeout(timer);
|
|
63
|
-
timer = null;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
var end = function end() {
|
|
67
|
-
if (timer) clearTimeout(timer);
|
|
68
|
-
timer = null;
|
|
69
|
-
};
|
|
70
|
-
document.addEventListener('touchstart', start, {
|
|
71
|
-
passive: true
|
|
72
|
-
});
|
|
73
|
-
document.addEventListener('touchmove', move, {
|
|
74
|
-
passive: true
|
|
75
|
-
});
|
|
76
|
-
document.addEventListener('touchend', end);
|
|
77
|
-
document.addEventListener('touchcancel', end);
|
|
78
|
-
_teardownLongTap = function teardownLongTap() {
|
|
79
|
-
document.removeEventListener('touchstart', start, {
|
|
80
|
-
passive: true
|
|
81
|
-
});
|
|
82
|
-
document.removeEventListener('touchmove', move, {
|
|
83
|
-
passive: true
|
|
84
|
-
});
|
|
85
|
-
document.removeEventListener('touchend', end);
|
|
86
|
-
document.removeEventListener('touchcancel', end);
|
|
87
|
-
_teardownLongTap = null;
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
var enableDblTap = function enableDblTap() {
|
|
91
|
-
var DBLTAP_DELAY = 300;
|
|
92
|
-
var MOVE_TOLERANCE = 40;
|
|
93
|
-
var lastTapTime = 0;
|
|
94
|
-
var lastPos = null;
|
|
95
|
-
if ((0, _is.isTouchDevice)()) {
|
|
96
|
-
document.addEventListener('dblclick', function (ev) {
|
|
97
|
-
ev.preventDefault();
|
|
98
|
-
ev.stopPropagation();
|
|
99
|
-
ev.stopImmediatePropagation();
|
|
100
|
-
}, {
|
|
101
|
-
capture: true
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
var start = function start(ev) {
|
|
105
|
-
var target = ev.target;
|
|
106
|
-
if (Date.now() - lastTapTime > DBLTAP_DELAY) {
|
|
107
|
-
lastTapTime = Date.now();
|
|
108
|
-
lastPos = _Mouse["default"].getViewportPosition(ev);
|
|
109
|
-
} else {
|
|
110
|
-
var pos = _Mouse["default"].getViewportPosition(ev);
|
|
111
|
-
if (Math.hypot(pos.x - lastPos.x, pos.y - lastPos.y) <= MOVE_TOLERANCE) {
|
|
112
|
-
target.dispatchEvent(new CustomEvent('dbltap', {
|
|
113
|
-
bubbles: true,
|
|
114
|
-
cancelable: true,
|
|
115
|
-
detail: {
|
|
116
|
-
originalEvent: ev
|
|
117
|
-
}
|
|
118
|
-
}));
|
|
119
|
-
}
|
|
120
|
-
lastTapTime = Date.now();
|
|
121
|
-
lastPos = pos;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
document.addEventListener('touchstart', start, {
|
|
125
|
-
passive: true
|
|
126
|
-
});
|
|
127
|
-
_teardownDblTap = function teardownDblTap() {
|
|
128
|
-
document.removeEventListener('touchstart', start, {
|
|
129
|
-
passive: true
|
|
130
|
-
});
|
|
131
|
-
_teardownDblTap = null;
|
|
132
|
-
};
|
|
133
|
-
};
|
|
134
19
|
|
|
135
20
|
/**
|
|
136
21
|
* @param {any} o
|
|
@@ -379,9 +264,7 @@ var dom = {
|
|
|
379
264
|
*/
|
|
380
265
|
closest: function closest(el, selector) {
|
|
381
266
|
if (selector instanceof Element) {
|
|
382
|
-
if (el === selector)
|
|
383
|
-
return el;
|
|
384
|
-
}
|
|
267
|
+
if (el === selector) return el;
|
|
385
268
|
var parentEl = el.parentElement;
|
|
386
269
|
while (parentEl) {
|
|
387
270
|
if (parentEl === selector) {
|
|
@@ -539,7 +422,7 @@ var dom = {
|
|
|
539
422
|
/**
|
|
540
423
|
* @param {Element} el
|
|
541
424
|
* @param {string} [html]
|
|
542
|
-
* @returns {Element
|
|
425
|
+
* @returns {Element|string}
|
|
543
426
|
*/
|
|
544
427
|
html: function html(el, _html) {
|
|
545
428
|
if (undefined === _html) return el.innerHTML;
|
|
@@ -549,7 +432,7 @@ var dom = {
|
|
|
549
432
|
/**
|
|
550
433
|
* @param {Element} el
|
|
551
434
|
* @param {string} [text]
|
|
552
|
-
* @returns {Element
|
|
435
|
+
* @returns {Element|string}
|
|
553
436
|
*/
|
|
554
437
|
text: function text(el, _text) {
|
|
555
438
|
if (undefined === _text) return el.innerText;
|
|
@@ -626,128 +509,6 @@ var dom = {
|
|
|
626
509
|
delete el.dataset[key];
|
|
627
510
|
return el;
|
|
628
511
|
},
|
|
629
|
-
/**
|
|
630
|
-
* @param {Element|Document|Window} el
|
|
631
|
-
* @param {string} events
|
|
632
|
-
* @param {string|Element|function} selector
|
|
633
|
-
* @param {function|AddEventListenerOptions|boolean} [handler]
|
|
634
|
-
* @param {AddEventListenerOptions|boolean} [options]
|
|
635
|
-
* @returns {Element}
|
|
636
|
-
*/
|
|
637
|
-
on: function on(el, events, selector, handler, options) {
|
|
638
|
-
var _this5 = this;
|
|
639
|
-
if ((0, _is.isFunction)(selector)) {
|
|
640
|
-
options = handler;
|
|
641
|
-
handler = selector;
|
|
642
|
-
selector = null;
|
|
643
|
-
}
|
|
644
|
-
(0, _traversal.foreach)(events.split(' '), function (rawEvent) {
|
|
645
|
-
var _rawEvent$split = rawEvent.split('.'),
|
|
646
|
-
_rawEvent$split2 = _slicedToArray(_rawEvent$split, 2),
|
|
647
|
-
event = _rawEvent$split2[0],
|
|
648
|
-
namespace = _rawEvent$split2[1];
|
|
649
|
-
var listener = function listener(ev) {
|
|
650
|
-
if (!selector) {
|
|
651
|
-
handler.call(el, ev);
|
|
652
|
-
return;
|
|
653
|
-
}
|
|
654
|
-
var currentTarget = ev.target;
|
|
655
|
-
var _loop = function _loop() {
|
|
656
|
-
if (_this5.matches(currentTarget, selector)) {
|
|
657
|
-
var wrappedEv = {
|
|
658
|
-
_immediateStopped: false,
|
|
659
|
-
originalEvent: ev,
|
|
660
|
-
type: ev.type,
|
|
661
|
-
target: ev.target,
|
|
662
|
-
currentTarget: currentTarget,
|
|
663
|
-
relatedTarget: ev.relatedTarget,
|
|
664
|
-
button: ev.button,
|
|
665
|
-
pageX: ev.pageX,
|
|
666
|
-
pageY: ev.pageY,
|
|
667
|
-
preventDefault: function preventDefault() {
|
|
668
|
-
return ev.preventDefault.apply(ev, arguments);
|
|
669
|
-
},
|
|
670
|
-
stopPropagation: function stopPropagation() {
|
|
671
|
-
return ev.stopPropagation.apply(ev, arguments);
|
|
672
|
-
},
|
|
673
|
-
stopImmediatePropagation: function stopImmediatePropagation() {
|
|
674
|
-
wrappedEv._immediateStopped = true;
|
|
675
|
-
ev.stopImmediatePropagation.apply(ev, arguments);
|
|
676
|
-
}
|
|
677
|
-
};
|
|
678
|
-
handler.call(currentTarget, wrappedEv);
|
|
679
|
-
if (wrappedEv._immediateStopped) {
|
|
680
|
-
return {
|
|
681
|
-
v: void 0
|
|
682
|
-
};
|
|
683
|
-
}
|
|
684
|
-
return 0; // break
|
|
685
|
-
}
|
|
686
|
-
currentTarget = currentTarget.parentElement;
|
|
687
|
-
},
|
|
688
|
-
_ret;
|
|
689
|
-
while (currentTarget && currentTarget !== el) {
|
|
690
|
-
_ret = _loop();
|
|
691
|
-
if (_ret === 0) break;
|
|
692
|
-
if (_ret) return _ret.v;
|
|
693
|
-
}
|
|
694
|
-
};
|
|
695
|
-
var store = LISTENERS.get(el);
|
|
696
|
-
if (!store) {
|
|
697
|
-
store = [];
|
|
698
|
-
LISTENERS.set(el, store);
|
|
699
|
-
}
|
|
700
|
-
store.push({
|
|
701
|
-
event: event,
|
|
702
|
-
handler: handler,
|
|
703
|
-
selector: selector,
|
|
704
|
-
listener: listener,
|
|
705
|
-
namespace: namespace,
|
|
706
|
-
options: options
|
|
707
|
-
});
|
|
708
|
-
if ((0, _array.inArray)(event, CUSTOM_EVENTS)) {
|
|
709
|
-
supplyEvent(event);
|
|
710
|
-
}
|
|
711
|
-
el.addEventListener(event, listener, options);
|
|
712
|
-
});
|
|
713
|
-
return el;
|
|
714
|
-
},
|
|
715
|
-
/**
|
|
716
|
-
* @param {Element|Document|Window} el
|
|
717
|
-
* @param {string} [events]
|
|
718
|
-
* @param {string|Element|function} [selector]
|
|
719
|
-
* @param {function|AddEventListenerOptions|boolean} [handler]
|
|
720
|
-
* @param {AddEventListenerOptions|boolean} [options]
|
|
721
|
-
* @returns {Element}
|
|
722
|
-
*/
|
|
723
|
-
off: function off(el, events, selector, handler, options) {
|
|
724
|
-
if ((0, _is.isFunction)(selector)) {
|
|
725
|
-
options = handler;
|
|
726
|
-
handler = selector;
|
|
727
|
-
selector = null;
|
|
728
|
-
}
|
|
729
|
-
var store = LISTENERS.get(el);
|
|
730
|
-
if (!store) return el;
|
|
731
|
-
var evts = events ? events.split(' ') : [undefined];
|
|
732
|
-
(0, _traversal.foreach)(evts, function (rawEvent) {
|
|
733
|
-
var _ref = undefined === rawEvent ? [undefined, undefined] : rawEvent.split('.'),
|
|
734
|
-
_ref2 = _slicedToArray(_ref, 2),
|
|
735
|
-
event = _ref2[0],
|
|
736
|
-
namespace = _ref2[1];
|
|
737
|
-
event = !event ? undefined : event;
|
|
738
|
-
var hasEvent = undefined !== event;
|
|
739
|
-
var hasNs = undefined !== namespace;
|
|
740
|
-
(0, _traversal.foreach)(_toConsumableArray(store).reverse(), function (l) {
|
|
741
|
-
var match = !hasEvent && !hasNs || hasEvent && !hasNs && l.event === event || !hasEvent && hasNs && l.namespace === namespace || hasEvent && hasNs && l.event === event && l.namespace === namespace;
|
|
742
|
-
if (match && (undefined === event || l.event === event) && (undefined === handler || l.handler === handler) && (undefined === selector || l.selector === selector) && (undefined === namespace || l.namespace === namespace) && (undefined === options || l.options === options)) {
|
|
743
|
-
el.removeEventListener(l.event, l.listener, l.options);
|
|
744
|
-
var index = store.indexOf(l);
|
|
745
|
-
index !== -1 && store.splice(index, 1);
|
|
746
|
-
}
|
|
747
|
-
});
|
|
748
|
-
});
|
|
749
|
-
return el;
|
|
750
|
-
},
|
|
751
512
|
/**
|
|
752
513
|
* @param {HTMLElement} el
|
|
753
514
|
* @param {Object<string, string>|string} style
|
|
@@ -755,7 +516,7 @@ var dom = {
|
|
|
755
516
|
* @returns {Element}
|
|
756
517
|
*/
|
|
757
518
|
css: function css(el, style, value) {
|
|
758
|
-
var
|
|
519
|
+
var _this5 = this;
|
|
759
520
|
if ((0, _is.isString)(style)) {
|
|
760
521
|
var prop = style.startsWith('--') ? style : (0, _string.camelCase)(style);
|
|
761
522
|
if (undefined === value) {
|
|
@@ -769,7 +530,7 @@ var dom = {
|
|
|
769
530
|
}
|
|
770
531
|
} else {
|
|
771
532
|
(0, _traversal.each)(style, function (name, v) {
|
|
772
|
-
|
|
533
|
+
_this5.css(el, name, v);
|
|
773
534
|
});
|
|
774
535
|
}
|
|
775
536
|
return el;
|
|
@@ -824,7 +585,7 @@ var dom = {
|
|
|
824
585
|
* @returns {Element|DocumentFragment|null}
|
|
825
586
|
*/
|
|
826
587
|
create: function create(html) {
|
|
827
|
-
html
|
|
588
|
+
if (!(0, _is.isString)(html)) return null;
|
|
828
589
|
var isTagName = function isTagName(s) {
|
|
829
590
|
return /^[A-Za-z][A-Za-z0-9-]*$/.test(s);
|
|
830
591
|
};
|
|
@@ -837,7 +598,6 @@ var dom = {
|
|
|
837
598
|
if (frag.childElementCount === 1 && frag.children.length === 1) {
|
|
838
599
|
return frag.firstElementChild;
|
|
839
600
|
}
|
|
840
|
-
if (!frag.firstChild) return null;
|
|
841
601
|
return frag.cloneNode(true);
|
|
842
602
|
},
|
|
843
603
|
/**
|
|
@@ -846,14 +606,13 @@ var dom = {
|
|
|
846
606
|
* @returns {Element|null}
|
|
847
607
|
*/
|
|
848
608
|
eq: function eq(nodeList) {
|
|
849
|
-
var _nodeList$index;
|
|
850
609
|
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
851
610
|
nodeList = Array.from(nodeList);
|
|
852
611
|
if (Math.abs(index) >= nodeList.length) return null;
|
|
853
612
|
if (index < 0) {
|
|
854
613
|
index = nodeList.length + index;
|
|
855
614
|
}
|
|
856
|
-
return
|
|
615
|
+
return nodeList[index];
|
|
857
616
|
},
|
|
858
617
|
/**
|
|
859
618
|
* @param {Element} el
|
|
@@ -880,13 +639,10 @@ var dom = {
|
|
|
880
639
|
return el.parentElement.insertBefore(newEl, el);
|
|
881
640
|
},
|
|
882
641
|
/**
|
|
883
|
-
* @param {Element
|
|
642
|
+
* @param {Element} el
|
|
884
643
|
* @returns {Element}
|
|
885
644
|
*/
|
|
886
645
|
empty: function empty(el) {
|
|
887
|
-
if ((0, _is.isString)(el)) {
|
|
888
|
-
el = this.findOne(el);
|
|
889
|
-
}
|
|
890
646
|
while (el.firstChild) {
|
|
891
647
|
el.removeChild(el.firstChild);
|
|
892
648
|
}
|
|
@@ -901,7 +657,8 @@ var dom = {
|
|
|
901
657
|
var elements = el instanceof Element ? [el] : Array.from(el);
|
|
902
658
|
var selectorIsString = (0, _is.isString)(selector);
|
|
903
659
|
return elements.filter(function (e) {
|
|
904
|
-
if (!(e instanceof Element)) return false
|
|
660
|
+
// if (!(e instanceof Element)) return false
|
|
661
|
+
|
|
905
662
|
return selectorIsString ? !e.matches(selector) : e !== selector;
|
|
906
663
|
});
|
|
907
664
|
},
|
|
@@ -937,16 +694,16 @@ var dom = {
|
|
|
937
694
|
* @returns {Element}
|
|
938
695
|
*/
|
|
939
696
|
replaceChildren: function replaceChildren(el) {
|
|
940
|
-
var
|
|
697
|
+
var _this6 = this;
|
|
941
698
|
var nodes = [];
|
|
942
699
|
for (var _len4 = arguments.length, children = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
|
943
700
|
children[_key4 - 1] = arguments[_key4];
|
|
944
701
|
}
|
|
945
702
|
(0, _traversal.foreach)(children, function (child) {
|
|
946
703
|
if ((0, _is.isString)(child)) {
|
|
947
|
-
child =
|
|
704
|
+
child = _this6.create(child);
|
|
948
705
|
}
|
|
949
|
-
|
|
706
|
+
nodes.push(child);
|
|
950
707
|
});
|
|
951
708
|
el.replaceChildren.apply(el, nodes);
|
|
952
709
|
return el;
|
|
@@ -973,14 +730,36 @@ var dom = {
|
|
|
973
730
|
top: rect.top + wOffset.top,
|
|
974
731
|
left: rect.left + wOffset.left
|
|
975
732
|
};
|
|
976
|
-
}
|
|
733
|
+
},
|
|
734
|
+
/**
|
|
735
|
+
* @param {Node} el
|
|
736
|
+
* @returns {boolean}
|
|
737
|
+
*/
|
|
738
|
+
isEditable: function isEditable(el) {
|
|
739
|
+
var _el;
|
|
740
|
+
if (((_el = el) === null || _el === void 0 ? void 0 : _el.nodeType) === 3) el = el.parentElement;
|
|
741
|
+
if (!(el instanceof HTMLElement)) return false;
|
|
742
|
+
return (0, _array.inArray)(el.tagName, ['INPUT', 'TEXTAREA', 'SELECT']) || el.isContentEditable || !!this.closest(el, '[contenteditable="true"]');
|
|
743
|
+
},
|
|
744
|
+
/**
|
|
745
|
+
* @param {Node} node
|
|
746
|
+
* @returns {boolean}
|
|
747
|
+
*/
|
|
748
|
+
isInDOM: function isInDOM(node) {
|
|
749
|
+
if (!(node instanceof Node)) return false;
|
|
750
|
+
var root = node.getRootNode({
|
|
751
|
+
composed: true
|
|
752
|
+
});
|
|
753
|
+
return root === document;
|
|
754
|
+
},
|
|
755
|
+
on: _onOff.on,
|
|
756
|
+
off: _onOff.off
|
|
977
757
|
};
|
|
758
|
+
|
|
759
|
+
/* istanbul ignore next */
|
|
978
760
|
if ('test' === process.env.NODE_ENV) {
|
|
979
761
|
dom.__resetCustomEventsForTests = function () {
|
|
980
|
-
|
|
981
|
-
ENABLED_EVENTS.clear();
|
|
982
|
-
(_teardownLongTap2 = _teardownLongTap) === null || _teardownLongTap2 === void 0 || _teardownLongTap2();
|
|
983
|
-
(_teardownDblTap2 = _teardownDblTap) === null || _teardownDblTap2 === void 0 || _teardownDblTap2();
|
|
762
|
+
(0, _onOff.__resetCustomEventsForTests)();
|
|
984
763
|
};
|
|
985
764
|
}
|
|
986
765
|
var _default = exports["default"] = dom;
|