@asamuzakjp/dom-selector 2.0.3-a.1 → 2.0.3-a.2

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/src/index.js CHANGED
@@ -6,13 +6,13 @@
6
6
  */
7
7
 
8
8
  /* import */
9
- import { Matcher } from './js/matcher.js';
9
+ import { Finder } from './js/finder.js';
10
10
 
11
11
  /* export for test */
12
- export { Matcher };
12
+ export { Finder };
13
13
 
14
14
  /* instance, export for test */
15
- export let matcher = new Matcher();
15
+ export let finder = new Finder();
16
16
 
17
17
  /**
18
18
  * matches
@@ -25,13 +25,13 @@ export let matcher = new Matcher();
25
25
  export const matches = (selector, node, opt) => {
26
26
  let res;
27
27
  try {
28
- if (!matcher) {
29
- matcher = new Matcher();
28
+ if (!finder) {
29
+ finder = new Finder();
30
30
  }
31
- res = matcher.matches(node, selector, opt);
31
+ res = finder.matches(node, selector, opt);
32
32
  } catch (e) {
33
33
  if (e instanceof Error) {
34
- matcher = null;
34
+ finder = null;
35
35
  }
36
36
  throw e;
37
37
  }
@@ -49,13 +49,13 @@ export const matches = (selector, node, opt) => {
49
49
  export const closest = (selector, node, opt) => {
50
50
  let res;
51
51
  try {
52
- if (!matcher) {
53
- matcher = new Matcher();
52
+ if (!finder) {
53
+ finder = new Finder();
54
54
  }
55
- res = matcher.closest(node, selector, opt);
55
+ res = finder.closest(node, selector, opt);
56
56
  } catch (e) {
57
57
  if (e instanceof globalThis[e.name]) {
58
- matcher = null;
58
+ finder = null;
59
59
  }
60
60
  throw e;
61
61
  }
@@ -73,13 +73,13 @@ export const closest = (selector, node, opt) => {
73
73
  export const querySelector = (selector, node, opt) => {
74
74
  let res;
75
75
  try {
76
- if (!matcher) {
77
- matcher = new Matcher();
76
+ if (!finder) {
77
+ finder = new Finder();
78
78
  }
79
- res = matcher.querySelector(node, selector, opt);
79
+ res = finder.querySelector(node, selector, opt);
80
80
  } catch (e) {
81
81
  if (e instanceof globalThis[e.name]) {
82
- matcher = null;
82
+ finder = null;
83
83
  }
84
84
  throw e;
85
85
  }
@@ -98,13 +98,13 @@ export const querySelector = (selector, node, opt) => {
98
98
  export const querySelectorAll = (selector, node, opt) => {
99
99
  let res;
100
100
  try {
101
- if (!matcher) {
102
- matcher = new Matcher();
101
+ if (!finder) {
102
+ finder = new Finder();
103
103
  }
104
- res = matcher.querySelectorAll(node, selector, opt);
104
+ res = finder.querySelectorAll(node, selector, opt);
105
105
  } catch (e) {
106
106
  if (e instanceof globalThis[e.name]) {
107
- matcher = null;
107
+ finder = null;
108
108
  }
109
109
  throw e;
110
110
  }
@@ -29,10 +29,10 @@ export const BIT_04 = 4;
29
29
  export const BIT_08 = 8;
30
30
  export const BIT_16 = 0x10;
31
31
  export const BIT_32 = 0x20;
32
+ export const BIT_FFFF = 0xFFFF;
32
33
  export const BIT_HYPHEN = 0x2D;
33
34
  export const DUO = 2;
34
35
  export const HEX = 16;
35
- export const MAX_BIT_16 = 0xFFFF;
36
36
  export const TYPE_FROM = 8;
37
37
  export const TYPE_TO = -1;
38
38
 
@@ -9,9 +9,63 @@ import bidiFactory from 'bidi-js';
9
9
  import {
10
10
  DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINS,
11
11
  DOCUMENT_POSITION_CONTAINED_BY, DOCUMENT_POSITION_PRECEDING, ELEMENT_NODE,
12
- REG_SHADOW_MODE, SYNTAX_ERR, TEXT_NODE
12
+ REG_SHADOW_MODE, TEXT_NODE, TYPE_FROM, TYPE_TO
13
13
  } from './constant.js';
14
14
 
15
+ /**
16
+ * prepare window, document, root node
17
+ * @param {object} node - Document, DocumentFragment, Element node
18
+ * @returns {Array.<object>} - array of window, document, root node
19
+ */
20
+ export const prepareDOMObjects = node => {
21
+ if (!node || !node.nodeType || !node.nodeName) {
22
+ const type =
23
+ Object.prototype.toString.call(node).slice(TYPE_FROM, TYPE_TO);
24
+ const msg = `Unexpected type ${type}`;
25
+ throw new TypeError(msg);
26
+ } else if (node.nodeType !== DOCUMENT_NODE &&
27
+ node.nodeType !== DOCUMENT_FRAGMENT_NODE &&
28
+ node.nodeType !== ELEMENT_NODE) {
29
+ const msg = `Unexpected node ${node.nodeName}`;
30
+ throw new TypeError(msg);
31
+ }
32
+ let document;
33
+ let root;
34
+ switch (node.nodeType) {
35
+ case DOCUMENT_NODE: {
36
+ document = node;
37
+ root = node;
38
+ break;
39
+ }
40
+ case DOCUMENT_FRAGMENT_NODE: {
41
+ document = node.ownerDocument;
42
+ root = node;
43
+ break;
44
+ }
45
+ case ELEMENT_NODE:
46
+ default: {
47
+ document = node.ownerDocument;
48
+ let parent = node;
49
+ while (parent) {
50
+ if (parent.parentNode) {
51
+ parent = parent.parentNode;
52
+ } else {
53
+ break;
54
+ }
55
+ }
56
+ root = parent;
57
+ break;
58
+ }
59
+ }
60
+ // NOTE: nullable
61
+ const window = document.defaultView;
62
+ return [
63
+ window,
64
+ document,
65
+ root
66
+ ];
67
+ };
68
+
15
69
  /**
16
70
  * is in shadow tree
17
71
  * @param {object} node - node
@@ -269,26 +323,22 @@ export const isPreceding = (nodeA = {}, nodeB = {}) => {
269
323
  };
270
324
 
271
325
  /**
272
- * selector to node properties - e.g. ns|E -> { prefix: ns, tagName: E }
273
- * @param {string} selector - type selector
274
- * @param {object} [node] - Element node
275
- * @returns {object} - node properties
326
+ * sort nodes
327
+ * @param {Array.<object>|Set.<object>} nodes - collection of nodes
328
+ * @returns {Array.<object|undefined>} - collection of sorted nodes
276
329
  */
277
- export const selectorToNodeProps = (selector, node) => {
278
- let prefix;
279
- let tagName;
280
- if (selector && typeof selector === 'string') {
281
- if (selector.indexOf('|') > -1) {
282
- [prefix, tagName] = selector.split('|');
283
- } else {
284
- prefix = '*';
285
- tagName = selector;
286
- }
287
- } else {
288
- throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);
330
+ export const sortNodes = (nodes = []) => {
331
+ const arr = [...nodes];
332
+ if (arr.length > 1) {
333
+ arr.sort((a, b) => {
334
+ let res;
335
+ if (isPreceding(b, a)) {
336
+ res = 1;
337
+ } else {
338
+ res = -1;
339
+ }
340
+ return res;
341
+ });
289
342
  }
290
- return {
291
- prefix,
292
- tagName
293
- };
343
+ return arr;
294
344
  };