From 2af2ca00d35169a7bdbd22ec83b93e157f98d4d7 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Wed, 16 Jan 2019 13:31:50 +0700 Subject: [PATCH 01/12] Linting --- index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.js b/index.js index 59f5a91..9909609 100644 --- a/index.js +++ b/index.js @@ -10,6 +10,7 @@ function select(selector, parent) { if (arguments.length === 2 && !parent) { return null; } + return (parent || document).querySelector(selector); } @@ -22,6 +23,7 @@ select.exists = function (selector, parent) { if (arguments.length === 2) { return Boolean(select(selector, parent)); } + return Boolean(select(selector)); }; @@ -51,12 +53,14 @@ select.all = function (selector, parent) { all = Array.apply(null, current); continue; } + for (ii = 0; ii < current.length; ii++) { if (all.indexOf(current[ii]) < 0) { all.push(current[ii]); } } } + return all; }; From 8df80c107cb7606bb31755140337015d2ce4b854 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Wed, 16 Jan 2019 13:37:57 +0700 Subject: [PATCH 02/12] Linting --- index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 9909609..a135121 100644 --- a/index.js +++ b/index.js @@ -10,7 +10,7 @@ function select(selector, parent) { if (arguments.length === 2 && !parent) { return null; } - + return (parent || document).querySelector(selector); } @@ -23,7 +23,7 @@ select.exists = function (selector, parent) { if (arguments.length === 2) { return Boolean(select(selector, parent)); } - + return Boolean(select(selector)); }; @@ -53,14 +53,14 @@ select.all = function (selector, parent) { all = Array.apply(null, current); continue; } - + for (ii = 0; ii < current.length; ii++) { if (all.indexOf(current[ii]) < 0) { all.push(current[ii]); } } } - + return all; }; From 9864204720c091a7810c926bd72eace55b6ee9d8 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Sat, 2 Feb 2019 04:16:52 +0800 Subject: [PATCH 03/12] Tentatively add types --- index.d.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..46254fd --- /dev/null +++ b/index.d.ts @@ -0,0 +1,13 @@ +// https://github.com/Microsoft/TypeScript/blob/9d3707d671592d030386956c9ce39e539b8d0972/src/lib/dom.generated.d.ts#L10581 + +export interface SelectDom { + (selectors: K, parent?: Element): HTMLElementTagNameMap[K] | null; + (selectors: K, parent?: Element): SVGElementTagNameMap[K] | null; + (selectors: string, parent?: Element): E | null; + exists(selectors: K, parent?: Element): boolean; + exists(selectors: K, parent?: Element): boolean; + exists(selectors: string, parent?: Element): boolean; + all(selectors: K, parents?: Element|Element[]): HTMLElementTagNameMap[K][]; + all(selectors: K, parents?: Element|Element[]): SVGElementTagNameMap[K][]; + all(selectors: string, parents?: Element|Element[]): E[]; +} From e99eeeb3aeac5470588cc450659145778591d24a Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Sat, 2 Feb 2019 23:46:57 +0800 Subject: [PATCH 04/12] Add support for NodeList and DocumentFragment --- index.d.ts | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/index.d.ts b/index.d.ts index 46254fd..9df537b 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,13 +1,42 @@ // https://github.com/Microsoft/TypeScript/blob/9d3707d671592d030386956c9ce39e539b8d0972/src/lib/dom.generated.d.ts#L10581 +type baseElements = Element | Element[] | NodeList | DocumentFragment; + export interface SelectDom { - (selectors: K, parent?: Element): HTMLElementTagNameMap[K] | null; - (selectors: K, parent?: Element): SVGElementTagNameMap[K] | null; - (selectors: string, parent?: Element): E | null; - exists(selectors: K, parent?: Element): boolean; - exists(selectors: K, parent?: Element): boolean; - exists(selectors: string, parent?: Element): boolean; - all(selectors: K, parents?: Element|Element[]): HTMLElementTagNameMap[K][]; - all(selectors: K, parents?: Element|Element[]): SVGElementTagNameMap[K][]; - all(selectors: string, parents?: Element|Element[]): E[]; + ( + selectors: K, + baseElement?: Element + ): HTMLElementTagNameMap[K] | null; + ( + selectors: K, + baseElement?: Element + ): SVGElementTagNameMap[K] | null; + ( + selectors: string, + baseElement?: Element + ): E | null; + exists( + selectors: K, + baseElement?: Element + ): boolean; + exists( + selectors: K, + baseElement?: Element + ): boolean; + exists( + selectors: string, + baseElement?: Element + ): boolean; + all( + selectors: K, + baseElements?: baseElements + ): HTMLElementTagNameMap[K][]; + all( + selectors: K, + baseElements?: baseElements + ): SVGElementTagNameMap[K][]; + all( + selectors: string, + baseElements?: baseElements + ): E[]; } From ae2d19404fd3137f609748d2e36e681aedeb240e Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Sat, 2 Feb 2019 23:47:18 +0800 Subject: [PATCH 05/12] Use standard terms: selector, baseElement --- README.md | 26 +++++++++++++------------- index.js | 42 +++++++++++++++++++++--------------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index 485565e..c6f584b 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ var select = require('select-dom') select('.foo a[href=bar]') // => -select('.foo a[href=bar]', parentElement) +select('.foo a[href=bar]', baseElement) // => ``` @@ -37,7 +37,7 @@ select('.foo a[href=bar]', parentElement) select.exists('.foo a[href=bar]') // => true/false -select.exists('.foo a[href=bar]', parentElement) +select.exists('.foo a[href=bar]', baseElement) // => true/false ``` @@ -47,35 +47,35 @@ select.exists('.foo a[href=bar]', parentElement) select.all('.foo a[href=bar]') // => [, , ] -select.all('.foo a[href=bar]', parentElement) +select.all('.foo a[href=bar]', baseElement) // => [, , ] -select.all('.foo a[href=bar]', [parentElement1, parentElement2]) +select.all('.foo a[href=bar]', [baseElement1, baseElement2]) // => [, , ] ``` ## API -**Note:** if a falsy value is passed as `parent`, you'll always get an empty result (bd578b9) +**Note:** if a falsy value is passed as `baseElement`, you'll always get an empty result (bd578b9) -### `select(selector[, parent = document])` +### `select(selector[, baseElement = document])` -Maps to `parent.querySelector(selector)` +Maps to `baseElement.querySelector(selector)` -### `select.exists(selector[, parent = document])` +### `select.exists(selector[, baseElement = document])` Tests the existence of one or more elements matching the selector. -### `select.all(selector[, parents = document])` +### `select.all(selector[, baseElements = document])` -Maps to `parents.querySelectorAll(selector)` plus: +Maps to `baseElements.querySelectorAll(selector)` plus: * it always returns an array -* parents can be an element, an array of elements, or NodeList +* baseElements can be an element, an array of elements, or NodeList This lets you search through an existing list of elements, like: ```js -const parents = select.all('.parents').filter(Math.random); -select.all('.foo a[href=bar]', parents); +const baseElements = select.all('.baseElements').filter(Math.random); +select.all('.foo a[href=bar]', baseElements); ``` diff --git a/index.js b/index.js index a135121..e7cc5d3 100644 --- a/index.js +++ b/index.js @@ -1,54 +1,54 @@ 'use strict'; /** - * @param {string} selector One or more CSS selectors separated by commas - * @param {Element} [parent] The element to look inside of + * @param {string} selectors One or more CSS selectors separated by commas + * @param {Element} [baseElement] The element to look inside of * @return {?Element} The element found, if any */ -function select(selector, parent) { - // Shortcut with specified-but-null parent - if (arguments.length === 2 && !parent) { +function select(selectors, baseElement) { + // Shortcut with specified-but-null baseElement + if (arguments.length === 2 && !baseElement) { return null; } - return (parent || document).querySelector(selector); + return (baseElement || document).querySelector(selectors); } /** - * @param {string} selector One or more CSS selectors separated by commas - * @param {Element} [parent] The element to look inside of + * @param {string} selectors One or more CSS selectors separated by commas + * @param {Element} [baseElement] The element to look inside of * @return {boolean} Whether it's been found */ -select.exists = function (selector, parent) { +select.exists = function (selectors, baseElement) { if (arguments.length === 2) { - return Boolean(select(selector, parent)); + return Boolean(select(selectors, baseElement)); } - return Boolean(select(selector)); + return Boolean(select(selectors)); }; /** - * @param {string} selector One or more CSS selectors separated by commas - * @param {Element|Element[]} [parent] The element or list of elements to look inside of + * @param {string} selectors One or more CSS selectors separated by commas + * @param {Element|Element[]} [baseElements] The element or list of elements to look inside of * @return {Element[]} An array of elements found */ -select.all = function (selector, parent) { - // Shortcut with specified-but-null parent - if (arguments.length === 2 && !parent) { +select.all = function (selectors, baseElements) { + // Shortcut with specified-but-null baseElements + if (arguments.length === 2 && !baseElements) { return []; } - // Can be: select.all('selector') or select.all('selector', singleElementOrDocument) - if (!parent || typeof parent.querySelectorAll === 'function') { - return Array.apply(null, (parent || document).querySelectorAll(selector)); + // Can be: select.all('selectors') or select.all('selectors', singleElementOrDocument) + if (!baseElements || typeof baseElements.querySelectorAll === 'function') { + return Array.apply(null, (baseElements || document).querySelectorAll(selectors)); } var current; var i; var ii; var all; - for (i = 0; i < parent.length; i++) { - current = parent[i].querySelectorAll(selector); + for (i = 0; i < baseElements.length; i++) { + current = baseElements[i].querySelectorAll(selectors); if (!all) { all = Array.apply(null, current); continue; From 6061f0194be25f3d408eff438fa31082cdc9fbf4 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Sat, 2 Feb 2019 23:48:50 +0800 Subject: [PATCH 06/12] 4.2.0-0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de33266..908bf57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "select-dom", - "version": "4.1.3", + "version": "4.2.0-0", "description": "Extra lightweight DOM selector helper", "main": "index.js", "scripts": { From 8b20b6913bde427cddf0bf3775966c54ab13cec0 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Mon, 4 Feb 2019 12:42:06 +0800 Subject: [PATCH 07/12] Fix export --- index.d.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/index.d.ts b/index.d.ts index 9df537b..39a2e32 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,8 +1,8 @@ // https://github.com/Microsoft/TypeScript/blob/9d3707d671592d030386956c9ce39e539b8d0972/src/lib/dom.generated.d.ts#L10581 -type baseElements = Element | Element[] | NodeList | DocumentFragment; +type BaseElements = Element | Element[] | NodeList | DocumentFragment; -export interface SelectDom { +export default interface SelectDom { ( selectors: K, baseElement?: Element @@ -29,14 +29,14 @@ export interface SelectDom { ): boolean; all( selectors: K, - baseElements?: baseElements + baseElements?: BaseElements ): HTMLElementTagNameMap[K][]; all( selectors: K, - baseElements?: baseElements + baseElements?: BaseElements ): SVGElementTagNameMap[K][]; all( selectors: string, - baseElements?: baseElements + baseElements?: BaseElements ): E[]; } From 1535672c717706452f5675b5014bdbd24b982f83 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Mon, 4 Feb 2019 12:43:07 +0800 Subject: [PATCH 08/12] 4.2.0-1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 908bf57..6d00213 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "select-dom", - "version": "4.2.0-0", + "version": "4.2.0-1", "description": "Extra lightweight DOM selector helper", "main": "index.js", "scripts": { From 4aa22e6aa33116497794f119cdc6be76e4e3c18f Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Tue, 5 Feb 2019 17:06:12 +0800 Subject: [PATCH 09/12] Follow suggestions by @nickytonline https://github.com/sindresorhus/refined-github/pull/1750#issuecomment-460516305 --- index.d.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 39a2e32..881f6b8 100644 --- a/index.d.ts +++ b/index.d.ts @@ -2,7 +2,7 @@ type BaseElements = Element | Element[] | NodeList | DocumentFragment; -export default interface SelectDom { +export interface SelectDom { ( selectors: K, baseElement?: Element @@ -40,3 +40,7 @@ export default interface SelectDom { baseElements?: BaseElements ): E[]; } + +declare const select: SelectDom; + +export default select From 0600203ceeb1d058c371a59c5c2e8ecd825625fd Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Tue, 5 Feb 2019 17:12:53 +0800 Subject: [PATCH 10/12] 4.2.0-2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6d00213..951590e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "select-dom", - "version": "4.2.0-1", + "version": "4.2.0-2", "description": "Extra lightweight DOM selector helper", "main": "index.js", "scripts": { From 0bc46e815dca7e824afb4e80f87b90a584a102f4 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Wed, 6 Feb 2019 09:47:35 +0800 Subject: [PATCH 11/12] Add support for DocumentFragment on `select()` --- index.d.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/index.d.ts b/index.d.ts index 881f6b8..940fffb 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,31 +1,32 @@ // https://github.com/Microsoft/TypeScript/blob/9d3707d671592d030386956c9ce39e539b8d0972/src/lib/dom.generated.d.ts#L10581 +type BaseElement = Element | DocumentFragment; type BaseElements = Element | Element[] | NodeList | DocumentFragment; export interface SelectDom { ( selectors: K, - baseElement?: Element + baseElement?: BaseElement ): HTMLElementTagNameMap[K] | null; ( selectors: K, - baseElement?: Element + baseElement?: BaseElement ): SVGElementTagNameMap[K] | null; ( selectors: string, - baseElement?: Element + baseElement?: BaseElement ): E | null; exists( selectors: K, - baseElement?: Element + baseElement?: BaseElement ): boolean; exists( selectors: K, - baseElement?: Element + baseElement?: BaseElement ): boolean; exists( selectors: string, - baseElement?: Element + baseElement?: BaseElement ): boolean; all( selectors: K, From cbeb7b0327fb139cf711ecbc002ceec9fa7bea1d Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Wed, 6 Feb 2019 09:49:02 +0800 Subject: [PATCH 12/12] 4.2.0-3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 951590e..bb091b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "select-dom", - "version": "4.2.0-2", + "version": "4.2.0-3", "description": "Extra lightweight DOM selector helper", "main": "index.js", "scripts": {