@nanoporetech-digital/components 6.8.3 → 6.8.5
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/CHANGELOG.md +22 -0
- package/dist/cjs/{component-store-7427cb36.js → component-store-c2e19934.js} +16 -3
- package/dist/cjs/component-store-c2e19934.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-algolia-filter.cjs.entry.js +1 -1
- package/dist/cjs/nano-algolia.cjs.entry.js +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-dialog.cjs.entry.js +1 -1
- package/dist/cjs/nano-drawer.cjs.entry.js +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +1 -1
- package/dist/cjs/nano-global-search-results.cjs.entry.js +1 -1
- package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-more-less.cjs.entry.js +6 -15
- package/dist/cjs/nano-more-less.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
- package/dist/cjs/{nano-table-649ed668.js → nano-table-0f34020f.js} +2 -2
- package/dist/cjs/{nano-table-649ed668.js.map → nano-table-0f34020f.js.map} +1 -1
- package/dist/cjs/nano-table.cjs.entry.js +1 -1
- package/dist/cjs/{table.worker-ddc8bca9.js → table.worker-5cba101f.js} +2 -2
- package/dist/cjs/table.worker-5cba101f.js.map +1 -0
- package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js +4 -4
- package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js.map +1 -1
- package/dist/collection/components/global-search-results/global-search-results.js +1 -1
- package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
- package/dist/collection/components/more-less/more-less.js +6 -22
- package/dist/collection/components/more-less/more-less.js.map +1 -1
- package/dist/collection/utils/store/get-set.js +15 -2
- package/dist/collection/utils/store/get-set.js.map +1 -1
- package/dist/components/component-store.js +15 -2
- package/dist/components/component-store.js.map +1 -1
- package/dist/components/nano-global-search-results.js +1 -1
- package/dist/components/nano-global-search-results.js.map +1 -1
- package/dist/components/nano-more-less.js +7 -17
- package/dist/components/nano-more-less.js.map +1 -1
- package/dist/esm/{component-store-486d9d7a.js → component-store-64043183.js} +16 -3
- package/dist/esm/component-store-64043183.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-algolia-filter.entry.js +1 -1
- package/dist/esm/nano-algolia.entry.js +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-dialog.entry.js +1 -1
- package/dist/esm/nano-drawer.entry.js +1 -1
- package/dist/esm/nano-global-nav.entry.js +1 -1
- package/dist/esm/nano-global-search-results.entry.js +1 -1
- package/dist/esm/nano-global-search-results.entry.js.map +1 -1
- package/dist/esm/nano-more-less.entry.js +6 -15
- package/dist/esm/nano-more-less.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +1 -1
- package/dist/esm/{nano-table-cdb05d5f.js → nano-table-fc25f277.js} +2 -2
- package/dist/esm/{nano-table-cdb05d5f.js.map → nano-table-fc25f277.js.map} +1 -1
- package/dist/esm/nano-table.entry.js +1 -1
- package/dist/esm/{table.worker-81dca716.js → table.worker-55afec8e.js} +2 -2
- package/dist/esm/table.worker-55afec8e.js.map +1 -0
- package/dist/nano-components/component-store-64043183.js +5 -0
- package/dist/nano-components/component-store-64043183.js.map +1 -0
- package/dist/nano-components/nano-algolia-filter.entry.js +1 -1
- package/dist/nano-components/nano-algolia.entry.js +1 -1
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-components.esm.js.map +1 -1
- package/dist/nano-components/nano-dialog.entry.js +1 -1
- package/dist/nano-components/nano-drawer.entry.js +1 -1
- package/dist/nano-components/nano-global-nav.entry.js +1 -1
- package/dist/nano-components/nano-global-search-results.entry.js +1 -1
- package/dist/nano-components/nano-global-search-results.entry.js.map +1 -1
- package/dist/nano-components/nano-more-less.entry.js +1 -1
- package/dist/nano-components/nano-more-less.entry.js.map +1 -1
- package/dist/nano-components/nano-tab-group.entry.js +1 -1
- package/dist/nano-components/{nano-table-cdb05d5f.js → nano-table-fc25f277.js} +2 -2
- package/dist/nano-components/nano-table.entry.js +1 -1
- package/dist/nano-components/{table.worker-81dca716.js → table.worker-55afec8e.js} +2 -2
- package/dist/types/components/more-less/more-less.d.ts +0 -2
- package/docs-json.json +1 -1
- package/hydrate/index.js +23 -20
- package/package.json +2 -2
- package/dist/cjs/component-store-7427cb36.js.map +0 -1
- package/dist/cjs/table.worker-ddc8bca9.js.map +0 -1
- package/dist/esm/component-store-486d9d7a.js.map +0 -1
- package/dist/esm/table.worker-81dca716.js.map +0 -1
- package/dist/nano-components/component-store-486d9d7a.js +0 -5
- package/dist/nano-components/component-store-486d9d7a.js.map +0 -1
- /package/dist/nano-components/{nano-table-cdb05d5f.js.map → nano-table-fc25f277.js.map} +0 -0
- /package/dist/nano-components/{table.worker-81dca716.js.map → table.worker-55afec8e.js.map} +0 -0
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Object.defineProperty(exports, '__esModule', { value: true });
|
7
7
|
|
8
|
-
const nanoTable_entry = require('./nano-table-
|
8
|
+
const nanoTable_entry = require('./nano-table-0f34020f.js');
|
9
9
|
require('./index-14451c95.js');
|
10
10
|
require('./math-a8123703.js');
|
11
11
|
require('./throttle-dfa64b9e.js');
|
@@ -3,7 +3,7 @@
|
|
3
3
|
*/
|
4
4
|
'use strict';
|
5
5
|
|
6
|
-
const nanoTable_entry = require('./nano-table-
|
6
|
+
const nanoTable_entry = require('./nano-table-0f34020f.js');
|
7
7
|
require('./index-14451c95.js');
|
8
8
|
require('./math-a8123703.js');
|
9
9
|
require('./throttle-dfa64b9e.js');
|
@@ -23,4 +23,4 @@ exports.workerMsgId = workerMsgId;
|
|
23
23
|
exports.workerName = workerName;
|
24
24
|
exports.workerPath = workerPath;
|
25
25
|
|
26
|
-
//# sourceMappingURL=table.worker-
|
26
|
+
//# sourceMappingURL=table.worker-5cba101f.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"file":"table.worker-5cba101f.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
|
@@ -99,10 +99,10 @@ export const templates = {
|
|
99
99
|
</div>
|
100
100
|
<div class="segment">
|
101
101
|
<nano-checkbox-group>
|
102
|
-
<nano-checkbox checked label="Checked" name="pill" type="segment-pill"></nano-checkbox>
|
103
|
-
<nano-checkbox label="Unchecked" name="pill" type="segment-pill"></nano-checkbox>
|
104
|
-
<nano-checkbox label="Unchecked 2" name="pill" type="segment-pill"></nano-checkbox>
|
105
|
-
<nano-checkbox disabled label="Disabled" name="pill" type="segment-pill"></nano-checkbox>
|
102
|
+
<nano-checkbox checked label="Checked" name="pill" type="segment-pill" value="checked"></nano-checkbox>
|
103
|
+
<nano-checkbox label="Unchecked" name="pill" type="segment-pill" value="unchecked"></nano-checkbox>
|
104
|
+
<nano-checkbox label="Unchecked 2" name="pill" type="segment-pill" value="unchecked 2"></nano-checkbox>
|
105
|
+
<nano-checkbox disabled label="Disabled" name="pill" type="segment-pill" value="disabled"></nano-checkbox>
|
106
106
|
</nano-checkbox-group>
|
107
107
|
</div>
|
108
108
|
`,
|
package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"checkbox-templates.js","sourceRoot":"","sources":["../../../../../src/components/checkbox/__tests__/__fixtures__/checkbox-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG;EACvB,OAAO,EAAE;;;;;;;;MAQL,oBAAoB;GACvB;EACD,QAAQ,EAAE;;;;;;;;;;GAUT;EACD,KAAK,EAAE;;;;;;;;;GASN;EACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDL;EACD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;GAmBR;EACD,KAAK,EAAE;;;;;;;;;GASN;CACF,CAAC","sourcesContent":["import { stringifyFormSnippet } from '../../../../utils/testing';\n\nexport const templates = {\n default: `\n <form>\n <nano-checkbox {{ attrs }} value=\"Value 1\"><strong>Slotted Label</strong></nano-checkbox>\n <nano-checkbox {{ attrs }} value=\"Value 2\"><strong>Slotted Label</strong></nano-checkbox>\n <br>\n <button class=\"button button--primary\" type=\"submit\">Submit</button>\n <button class=\"button\" type=\"reset\">Reset</button>\n </form>\n ${stringifyFormSnippet}\n `,\n checkbox: `\n <style>\n .cb {\n display: block; margin: 1rem;\n }\n </style>\n <nano-checkbox class=\"cb\" label=\"Unchecked\"></nano-checkbox>\n <nano-checkbox class=\"cb\" checked label=\"Checked\"></nano-checkbox>\n <nano-checkbox indeterminate class=\"cb\" label=\"Indeterminate\"></nano-checkbox>\n <nano-checkbox class=\"cb\" disabled label=\"Disabled\"></nano-checkbox>\n `,\n radio: `\n <style>\n .rd {\n display: block; margin: 1rem;\n }\n </style>\n <nano-checkbox class=\"rd\" label=\"Checked\" checked name=\"radio\" type=\"radio\"></nano-checkbox>\n <nano-checkbox class=\"rd\" label=\"Unchecked\" name=\"radio\" type=\"radio\"></nano-checkbox>\n <nano-checkbox class=\"rd\" label=\"Disabled\" disabled name=\"radio\" type=\"radio\"></nano-checkbox>\n `,\n tags: `\n <style>\n .tags {\n margin: 4px 0;\n }\n </style>\n <div class=\"tags\">\n <nano-checkbox checked label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"primary\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"primary\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"primary\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"tertiary\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"tertiary\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"tertiary\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"warning\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"warning\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"warning\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"danger\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"danger\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"danger\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"success\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"success\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"success\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"light\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"light\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"light\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"medium\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"medium\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"medium\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"dark\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"dark\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"dark\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n `,\n segment: `\n <style>\n .segment {\n margin: 1rem 0;\n }\n </style>\n <div class=\"segment\">\n <nano-checkbox checked label=\"Checked\" type=\"segment\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked\" type=\"segment\"></nano-checkbox>\n <nano-checkbox disabled label=\"Disabled\" type=\"segment\"></nano-checkbox>\n </div>\n <div class=\"segment\">\n <nano-checkbox-group>\n <nano-checkbox checked label=\"Checked\" name=\"pill\" type=\"segment-pill\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked\" name=\"pill\" type=\"segment-pill\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked 2\" name=\"pill\" type=\"segment-pill\"></nano-checkbox>\n <nano-checkbox disabled label=\"Disabled\" name=\"pill\" type=\"segment-pill\"></nano-checkbox>\n </nano-checkbox-group>\n </div>\n `,\n group: `\n <form>\n <nano-checkbox-group {{ attrs }}>\n <nano-checkbox name=\"checkbox-1\" value=\"1\" label=\"CB 1\"></nano-checkbox>\n <nano-checkbox name=\"checkbox-1\" value=\"2\" label=\"CB 2\"></nano-checkbox>\n <nano-checkbox name=\"checkbox-3\" value=\"3\" required label=\"CB 3\"></nano-checkbox>\n </nano-checkbox-group>\n <button class=\"button\" type=\"submit\">Native Button</button>\n </form>\n `,\n};\n"]}
|
1
|
+
{"version":3,"file":"checkbox-templates.js","sourceRoot":"","sources":["../../../../../src/components/checkbox/__tests__/__fixtures__/checkbox-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG;EACvB,OAAO,EAAE;;;;;;;;MAQL,oBAAoB;GACvB;EACD,QAAQ,EAAE;;;;;;;;;;GAUT;EACD,KAAK,EAAE;;;;;;;;;GASN;EACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDL;EACD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;GAmBR;EACD,KAAK,EAAE;;;;;;;;;GASN;CACF,CAAC","sourcesContent":["import { stringifyFormSnippet } from '../../../../utils/testing';\n\nexport const templates = {\n default: `\n <form>\n <nano-checkbox {{ attrs }} value=\"Value 1\"><strong>Slotted Label</strong></nano-checkbox>\n <nano-checkbox {{ attrs }} value=\"Value 2\"><strong>Slotted Label</strong></nano-checkbox>\n <br>\n <button class=\"button button--primary\" type=\"submit\">Submit</button>\n <button class=\"button\" type=\"reset\">Reset</button>\n </form>\n ${stringifyFormSnippet}\n `,\n checkbox: `\n <style>\n .cb {\n display: block; margin: 1rem;\n }\n </style>\n <nano-checkbox class=\"cb\" label=\"Unchecked\"></nano-checkbox>\n <nano-checkbox class=\"cb\" checked label=\"Checked\"></nano-checkbox>\n <nano-checkbox indeterminate class=\"cb\" label=\"Indeterminate\"></nano-checkbox>\n <nano-checkbox class=\"cb\" disabled label=\"Disabled\"></nano-checkbox>\n `,\n radio: `\n <style>\n .rd {\n display: block; margin: 1rem;\n }\n </style>\n <nano-checkbox class=\"rd\" label=\"Checked\" checked name=\"radio\" type=\"radio\"></nano-checkbox>\n <nano-checkbox class=\"rd\" label=\"Unchecked\" name=\"radio\" type=\"radio\"></nano-checkbox>\n <nano-checkbox class=\"rd\" label=\"Disabled\" disabled name=\"radio\" type=\"radio\"></nano-checkbox>\n `,\n tags: `\n <style>\n .tags {\n margin: 4px 0;\n }\n </style>\n <div class=\"tags\">\n <nano-checkbox checked label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"primary\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"primary\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"primary\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"tertiary\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"tertiary\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"tertiary\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"warning\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"warning\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"warning\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"danger\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"danger\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"danger\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"success\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"success\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"success\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"light\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"light\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"light\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"medium\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"medium\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"medium\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n <div class=\"tags\">\n <nano-checkbox checked color=\"dark\" label=\"Checked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"dark\" label=\"Unchecked\" type=\"tag\"></nano-checkbox>\n <nano-checkbox color=\"dark\" label=\"Disabled\" type=\"tag\" disabled></nano-checkbox>\n </div>\n `,\n segment: `\n <style>\n .segment {\n margin: 1rem 0;\n }\n </style>\n <div class=\"segment\">\n <nano-checkbox checked label=\"Checked\" type=\"segment\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked\" type=\"segment\"></nano-checkbox>\n <nano-checkbox disabled label=\"Disabled\" type=\"segment\"></nano-checkbox>\n </div>\n <div class=\"segment\">\n <nano-checkbox-group>\n <nano-checkbox checked label=\"Checked\" name=\"pill\" type=\"segment-pill\" value=\"checked\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked\" name=\"pill\" type=\"segment-pill\" value=\"unchecked\"></nano-checkbox>\n <nano-checkbox label=\"Unchecked 2\" name=\"pill\" type=\"segment-pill\" value=\"unchecked 2\"></nano-checkbox>\n <nano-checkbox disabled label=\"Disabled\" name=\"pill\" type=\"segment-pill\" value=\"disabled\"></nano-checkbox>\n </nano-checkbox-group>\n </div>\n `,\n group: `\n <form>\n <nano-checkbox-group {{ attrs }}>\n <nano-checkbox name=\"checkbox-1\" value=\"1\" label=\"CB 1\"></nano-checkbox>\n <nano-checkbox name=\"checkbox-1\" value=\"2\" label=\"CB 2\"></nano-checkbox>\n <nano-checkbox name=\"checkbox-3\" value=\"3\" required label=\"CB 3\"></nano-checkbox>\n </nano-checkbox-group>\n <button class=\"button\" type=\"submit\">Native Button</button>\n </form>\n `,\n};\n"]}
|
@@ -50,7 +50,7 @@ export class GlobalSearchResults {
|
|
50
50
|
if (goBackEvent.defaultPrevented)
|
51
51
|
return;
|
52
52
|
this.removeAllFilters();
|
53
|
-
this.algoliaEle.query =
|
53
|
+
this.algoliaEle.query = undefined;
|
54
54
|
this.algoliaEle.showResults = false;
|
55
55
|
};
|
56
56
|
this.algoliaResults = undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"global-search-results.js","sourceRoot":"","sources":["../../../src/components/global-search-results/global-search-results.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,CAAC,EACD,IAAI,EACJ,OAAO,EACP,KAAK,EAEL,KAAK,EACL,MAAM,EACN,KAAK,EAEL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,aAAa,MAAM,6BAA6B,CAAC;AAQxD,MAAM,cAAc,GAClB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;AAE/D;;;;;;GAMG;AAMH,MAAM,OAAO,mBAAmB;;IA+LtB,gBAAW,GAAG,CAAC,CAAuC,EAAE,EAAE;MAChE,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAgB,CAAC;MACvD,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,GAAG,IAAI,GAAG,EAAE;QACnC,aAAa,CAAC,SAAS,CAAC;UACtB,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;UAChC,SAAS,EAAE,gDAAgD;UAC3D,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;UACpC,SAAS,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;UAC9B,SAAS,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC9C,CAAC,CAAC;OACJ;IACH,CAAC,CAAC;IAEM,qBAAgB,GAAG,GAAG,EAAE;MAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;MAC9B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;MACtC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;MACtD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;MACxC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IAEM,sBAAiB,GAAG,CAAC,CAAuC,EAAE,EAAE;MACtE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC,CAAC;IAEM,aAAQ,GAAG,CAAC,CAAuC,EAAE,EAAE;MAC7D,CAAC,CAAC,cAAc,EAAE,CAAC;MACnB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;MACpC,MAAM,GAAG,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;MAC5D,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;MAE9B,MAAM,MAAM,GAAiC,IAAI,CAAC,UAAU,CAAC,aAAa,CACxE,yCAAyC,CAC1C,CAAC;MACF,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;QACvC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;OACpE;IACH,CAAC,CAAC;IAMM,WAAM,GAAG,GAAG,EAAE;MACpB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;MACjD,IAAI,WAAW,CAAC,gBAAgB;QAAE,OAAO;MAEzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;MACxB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;MAC3B,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC;IACtC,CAAC,CAAC;;;;;;;;EA1NF,wBAAwB;IACtB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;MAAE,OAAO;IAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;EACrC,CAAC;EAID,wBAAwB;IACtB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;MAAE,OAAO;IAC5C,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;EAC3C,CAAC;EAID,sBAAsB;IACpB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc;MAAE,OAAO;IACrD,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,KAAK,WAAW,EAAE;MACjD,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,wBAAwB;KACrE;EACH,CAAC;EAGD,oBAAoB,CAAC,CAAwC;IAC3D,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,iBAAiB;MAAE,OAAO;IACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;EAChB,CAAC;EAGD,qBAAqB,CAAC,CAAwC;IAC5D,MAAM,EACJ,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GACzB,GAAG,CAAyC,CAAC;IAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAE1B,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,iBAAiB;MAAE,OAAO;IAEnD,IAAI,CAAC,KAAK,GAAG;MACX,IAAI,EAAE,IAAI,CAAC,UAAU;MACrB,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;EACrC,CAAC;EAGD,aAAa,CAAC,CAAkD;IAC9D,IACE,CAAC;OACE,YAAY,EAAE;OACd,IAAI,CACH,CAAC,GAAgB,EAAE,EAAE,CACnB,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CACzD;MACH,CAAC,CAAC,IAAI,CAAC,iBAAiB,EACxB;MACA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KACrB;EACH,CAAC;EAGD,eAAe,CACb,CAGE;IAEF,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAElE,IACE,CAAC,CAAC;OACC,YAAY,EAAE;OACd,IAAI,CAAC,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,aAAa,CAAC;MAEjE,OAAO;IAET,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CACpD,sBAAsB,CACvB,CAAC;IACF,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IAEpC,wBAAwB;IACxB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAE7B,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;MAClE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;MAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;MAClE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,YAAY,EAAE,CAAC;MACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAClE,IAAI,UAAU,EAAE;MACd,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACzC,CAAC,CAAC,eAAe,EAAE,CAAC;MACtB,CAAC,CAAC,CAAC;KACJ;IAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAExE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,UAAU,EAAE;MACd,UAAU,CAAC,gBAAgB,CACzB,QAAQ,EACR,CAAC,CAAuC,EAAE,EAAE;QAC1C,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;MAC1C,CAAC,CACF,CAAC;KACH;EACH,CAAC;EAGD,qBAAqB,CAAC,CAA8C;IAClE,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE;MAC/D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CACpD,sBAAsB,CACvB,CAAC;KACH;IACD,IAAI,CAAC,IAAI,CAAC,iBAAiB;MAAE,OAAO;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;IAEzC,2CAA2C;IAC3C,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACtE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAEnE,uCAAuC;IACvC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;MAC5D,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;MAC1D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,yCAAyC;IACzC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;MACvD,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;MAC/C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,SAAS,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;MACnE,IAAI,CAAC,aAAa,GAAG,IAAyB,CAAC;MAC/C,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;MACzD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;MACnB,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;MAChD,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;EACL,CAAC;EAED,sCAAsC;EAEtC,KAAK,CAAC,WAAW;IACf,IAAI,CAAC,MAAM,EAAE,CAAC;EAChB,CAAC;EAyCO,WAAW,CAAC,EAAE;IACpB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;EACjD,CAAC;EAWO,YAAY,CAAC,KAAK,EAAE,MAAM;IAChC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;EAC/C,CAAC;EAEO,gBAAgB;IACtB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;EAClC,CAAC;EAEO,YAAY;IAClB,IAAI,CAAC,IAAI,CAAC,UAAU;MAAE,OAAO;IAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;EACnD,CAAC;EAEO,gBAAgB,CAAC,IAAa;IACpC,IAAI,IAAI;MACN,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CACnC,CAAC;;MACC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;EAC9E,CAAC;EAED,iBAAiB;IACf,IAAI,CAAC,sBAAsB,EAAE,CAAC;EAChC,CAAC;EAED,gBAAgB;IACd,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;MAAE,OAAO;IAEtC,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;MACvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK;UAAE,OAAO;QACrC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;OAC7C;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC3B,CAAC;EAED,MAAM;IACJ,OAAO,CACL,EAAC,IAAI,IACH,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,EACzC,GAAG,EACA,IAAI,CAAC,EAAE,CAAC,aAA0B,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;MAGvE,gCACW,SAAS,kBACL,eAAe,EAC5B,KAAK,EAAC,iDAAiD,EACvD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,EAClE,EAAE,EAAC,aAAa;QAEhB,gBAAU,IAAI,EAAC,UAAU;QAErB,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAgYN,CAEE;QACX,WAAK,IAAI,EAAC,QAAQ,GAAO;QACzB,eAAQ,CACK,CACV,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n h,\n Host,\n Element,\n State,\n ComponentInterface,\n Watch,\n Listen,\n Event,\n EventEmitter,\n Method,\n} from '@stencil/core';\nimport searchInsight from '../../utils/search-insights';\nimport type {\n AloliaSearchResultDetail,\n IndexResult,\n NanoAlgoliaResultsCustomEvent,\n SearchIndex,\n} from '../../interface';\n\nconst filterOldPosts =\n 'created > ' + Math.floor((Date.now() - 63115200000) / 1000);\n\n/**\n * Nanopore Global Search results component\n * to be used in conjunction with [Globla-Nav](/story/nano-compounds-global-nav).\n * A shortcut / helper which combines algolia components.\n * There should only be one <nano-global-search-results> per page\n * and should be a direct child of <nano-global-nav>\n */\n@Component({\n tag: 'nano-global-search-results',\n styleUrl: 'global-search-results.scss',\n shadow: true,\n})\nexport class GlobalSearchResults implements ComponentInterface {\n private algoliaResultsEle: HTMLNanoAlgoliaResultsElement;\n private filtersDiv: HTMLElement;\n private openFilterBtn: HTMLButtonElement;\n private ro: ResizeObserver;\n\n @State() algoliaResults: IndexResult;\n @State() algoliaEle: HTMLNanoAlgoliaElement;\n @State() currentWidth: number;\n @State() apiKey: string;\n @State() appId: string;\n @State() index: SearchIndex;\n\n @Element() private el: HTMLNanoGlobalSearchResultsElement;\n\n /** Fired when the user clicks the 'back' button / closes the search panel\n * Calling `event.preventDefault()` will prevent it from being closed.\n */\n @Event() nanoSearchGoBack: EventEmitter;\n\n @Watch('algoliaEle')\n @Watch('apiKey')\n @Watch('appId')\n handleAlgoliaCredsChange() {\n if (!this.apiKey || !this.appId || !this.algoliaEle) return;\n this.algoliaEle.apiKey = this.apiKey;\n this.algoliaEle.appId = this.appId;\n }\n\n @Watch('algoliaEle')\n @Watch('index')\n handleAlgoliaIndexChange() {\n if (!this.index || !this.algoliaEle) return;\n this.algoliaEle.searchIndex = this.index;\n }\n\n @Watch('algoliaResults')\n @Watch('algoliaEle')\n handleAlgoliaEleChange() {\n if (!this.algoliaEle || !this.algoliaResults) return;\n if (this.algoliaResults.indexName === 'Community') {\n this.algoliaEle.filters = [filterOldPosts]; // only get last 2 years\n }\n }\n\n @Listen('nanoSearchReset', { target: 'body' })\n handleGlobalNavReset(e: CustomEvent & { target: HTMLElement }) {\n if (e.target.tagName !== 'NANO-GLOBAL-NAV') return;\n this.algoliaResultsEle = null;\n this.goback();\n }\n\n @Listen('nanoSearchResult', { target: 'body' })\n handleGlobalNavSearch(e: CustomEvent & { target: HTMLElement }) {\n const {\n detail: { meta, client },\n } = e as { detail: AloliaSearchResultDetail };\n\n this.apiKey = client.apiKey;\n this.appId = client.appId;\n\n if (e.target.tagName !== 'NANO-GLOBAL-NAV') return;\n\n this.index = {\n name: meta.indexTitle,\n index: meta.index,\n domain: meta.domain,\n filters: meta.filters,\n replicas: meta.replicas,\n };\n this.algoliaEle.query = meta.query;\n }\n\n @Listen('nanoChange')\n handleReorder(e: CustomEvent & { target: HTMLNanoSelectElement }) {\n if (\n e\n .composedPath()\n .find(\n (ele: HTMLElement) =>\n ele.classList && ele.classList.contains('indexchange')\n ) &&\n !!this.algoliaResultsEle\n ) {\n this.changeOrder(e);\n }\n }\n\n @Listen('nanoResultsShown')\n attachListeners(\n e: NanoAlgoliaResultsCustomEvent<{\n meta: IndexResult;\n client: { apiKey: string; appId: string };\n }>\n ) {\n searchInsight.init(e.detail.client.appId, e.detail.client.apiKey);\n\n if (\n !e\n .composedPath()\n .find((ele: HTMLElement) => ele.id && ele.id === 'main-search')\n )\n return;\n\n this.algoliaResultsEle = this.algoliaEle.querySelector(\n '#main-search-results'\n );\n this.algoliaResults = e.detail.meta;\n\n // add results listeners\n this.attachResultListeners();\n\n this.algoliaEle.querySelectorAll('.filters-reset').forEach((item) => {\n item.addEventListener('click', () => {\n this.removeAllFilters();\n });\n });\n\n this.algoliaEle.querySelectorAll('.close-filters').forEach((item) => {\n item.addEventListener('click', () => {\n this.closefilters();\n });\n });\n\n const filterWrap = this.algoliaEle.querySelector('.filters-wrap');\n if (filterWrap) {\n filterWrap.addEventListener('click', (e) => {\n e.stopPropagation();\n });\n }\n\n this.filtersDiv = this.algoliaEle.querySelector('#main-search-filters');\n\n const oldResults = this.algoliaEle.querySelector('.old-posts');\n if (oldResults) {\n oldResults.addEventListener(\n 'change',\n (e: Event & { target: HTMLInputElement }) => {\n this.toggleOldResults(e.target.checked);\n }\n );\n }\n }\n\n @Listen('nanoNewResults', { target: 'body' })\n attachResultListeners(e?: NanoAlgoliaResultsCustomEvent<IndexResult>) {\n if (e && e.composedPath()?.find((el) => el === this.algoliaEle)) {\n this.algoliaResultsEle = this.algoliaEle.querySelector(\n 'nano-algolia-results'\n );\n }\n if (!this.algoliaResultsEle) return;\n const resultEle = this.algoliaResultsEle;\n\n // wire up hit event listener for analytics\n this.algoliaResultsEle.removeEventListener('click', this.resultClick);\n this.algoliaResultsEle.addEventListener('click', this.resultClick);\n\n // wire up remove filter event listener\n resultEle.querySelectorAll('.remove-filter').forEach((item) => {\n item.removeEventListener('click', this.removeFilterClick);\n item.addEventListener('click', this.removeFilterClick);\n });\n\n // wire up the back button event listener\n resultEle.querySelectorAll('.back-btn').forEach((item) => {\n item.removeEventListener('click', this.goback);\n item.addEventListener('click', this.goback);\n });\n\n // wire up mobile filter list panel event listener\n resultEle.querySelectorAll('.topbar__show-filters').forEach((item) => {\n this.openFilterBtn = item as HTMLButtonElement;\n item.removeEventListener('click', this.showFiltersClick);\n item.addEventListener('click', this.showFiltersClick);\n });\n\n // wire up tags event listeners\n const tags = Array.from(resultEle.querySelectorAll('.result__tags-tag'));\n tags.forEach((tag) => {\n tag.removeEventListener('click', this.tagClick);\n tag.addEventListener('click', this.tagClick);\n });\n }\n\n /** Manually close the search panel */\n @Method()\n async closeSearch() {\n this.goback();\n }\n\n private resultClick = (e: MouseEvent & { target: HTMLElement }) => {\n const hit = e.target.closest('.result') as HTMLElement;\n if (e.target.tagName === 'A' && hit) {\n searchInsight.sendClick({\n index: this.algoliaResults.index,\n eventName: 'Global nav full search - search result clicked',\n queryID: this.algoliaResults.queryID,\n objectIDs: [hit.dataset.hitId],\n positions: [Number(hit.dataset.hitCount) + 1],\n });\n }\n };\n\n private showFiltersClick = () => {\n this.filtersDiv.tabIndex = -1;\n this.filtersDiv.classList.add('show');\n this.filtersDiv.setAttribute('aria-expanded', 'true');\n document.body.style.overflow = 'hidden';\n setTimeout(() => this.filtersDiv.focus(), 20);\n };\n\n private removeFilterClick = (e: MouseEvent & { target: HTMLElement }) => {\n this.removeFilter(e.target.dataset.filter, e.target.dataset.filterVal);\n };\n\n private tagClick = (e: MouseEvent & { target: HTMLElement }) => {\n e.preventDefault();\n let tagVal = e.target.dataset.value;\n tagVal = tagVal === 'publication' ? 'publications' : tagVal;\n tagVal = tagVal.toLowerCase();\n\n const filter: HTMLNanoAlgoliaFilterElement = this.algoliaEle.querySelector(\n 'nano-algolia-filter[filter-name=\"tags\"]'\n );\n if (filter.value.indexOf(tagVal) === -1) {\n filter.value = filter.value ? [...filter.value, tagVal] : [tagVal];\n }\n };\n\n private changeOrder(ev) {\n this.algoliaEle.replicaIndex = ev.detail.value;\n }\n\n private goback = () => {\n const goBackEvent = this.nanoSearchGoBack.emit();\n if (goBackEvent.defaultPrevented) return;\n\n this.removeAllFilters();\n this.algoliaEle.query = '';\n this.algoliaEle.showResults = false;\n };\n\n private removeFilter(facet, filter) {\n this.algoliaEle.removeFilters(facet, filter);\n }\n\n private removeAllFilters() {\n this.algoliaEle.removeFilters();\n }\n\n private closefilters() {\n if (!this.filtersDiv) return;\n this.filtersDiv.tabIndex = null;\n this.filtersDiv.classList.remove('show');\n this.filtersDiv.setAttribute('aria-expanded', 'false');\n document.body.style.overflow = '';\n setTimeout(() => this.openFilterBtn.focus(), 20);\n }\n\n private toggleOldResults(show: boolean) {\n if (show)\n this.algoliaEle.filters = this.algoliaEle.filters.filter(\n (f) => !f.startsWith('created > ')\n );\n else this.algoliaEle.filters = [...this.algoliaEle.filters, filterOldPosts];\n }\n\n connectedCallback(): void {\n this.handleAlgoliaEleChange();\n }\n\n componentDidLoad() {\n if (!window['ResizeObserver']) return;\n\n this.ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (!entry.contentRect.width) return;\n this.currentWidth = entry.contentRect.width;\n }\n });\n this.ro.observe(this.el);\n }\n\n render() {\n return (\n <Host\n class={{ small: this.currentWidth < 677 }}\n dir={\n (this.el.ownerDocument as Document).dir === 'rtl' ? 'rtl' : undefined\n }\n >\n <nano-algolia\n store-id=\"searchq\"\n store-method=\"url-hash-push\"\n class=\"main-search__wrap sc-nano-global-search-results\"\n ref={(ele) => requestAnimationFrame(() => (this.algoliaEle = ele))}\n id=\"main-search\"\n >\n <template slot=\"template\">\n {\n /* html */ `<div class=\"main-search sc-nano-global-search-results\">\n <nano-algolia-results id=\"main-search-results\" class=\"main-search__results sc-nano-global-search-results\" infinite-scroll>\n <script type=\"text/template\" slot=\"start-template\">\n <div class=\"sc-nano-global-search-results main-search__topbar topbar\">\n <button class=\"sc-nano-global-search-results topbar__bkbtn back-btn icon-button\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/chevron-left\" size=\"small\"></nano-icon>\n </button>\n <div>\n <em class=\"sc-nano-global-search-results topbar__query\">'{{ it.query }}' - </em> <strong>{{ it.totalHitsWithFilters }}</strong> Results\n </div>\n\n <div class=\"sc-nano-global-search-results topbar__filtering\">\n {{ @if (it.results.length) }}\n {{ @if (it.searchIndex && it.searchIndex.replicas) }}\n <nano-select class=\"sc-nano-global-search-results topbar__order indexchange\" value=\"{{ it.index }}\" hide-label=\"true\" label=\"Sort order\" show-inline-error=\"false\">\n {{ @each(it.searchIndex.replicas) => replica }}\n <nano-option value=\"{{ replica.index }}\">{{ replica.name }}</nano-option>\n {{ /each }}\n </nano-select>\n {{ /if }}\n {{ /if }}\n\n <button class=\"sc-nano-global-search-results topbar__show-filters filters-title\" aria-controls=\"main-search-filters\">\n {{ @if (it.appliedFilters && it.appliedFilters.length > 0) }}\n <span class=\"sc-nano-global-search-results topbar__filter-count\">\n {{ (it.appliedFilters.reduce(function(a, b) { return a + (b.values ? b.values.length : 0) }, 0)) }}\n </span>\n {{ /if }}\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/filter\"></nano-icon>\n </button>\n </div>\n </div>\n\n {{ @if (it.results.length) }}\n <div class=\"sc-nano-global-search-results main-search__applied-filters\">\n {{ @if (it.appliedFilters) }}\n {{ @each(it.appliedFilters) => filterObj }}\n {{ @each(filterObj.values) => filterVal }}\n <span class=\"sc-nano-global-search-results main-search__applied-filter\">\n {{ filterVal | public_name }}\n <button class=\"sc-nano-global-search-results icon-button remove-filter\" data-filter=\"{{ filterObj.name }}\" data-filter-val=\"{{ filterVal }}\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/times\"></nano-icon>\n </button>\n </span>\n {{ /each }}\n {{ /each }}\n {{ #else }}\n <span class=\"sc-nano-global-search-results main-search__applied-nofilter\"> </span>\n {{ /if }}\n </div>\n {{ /if }}\n </script>\n\n <script type=\"text/template\" slot=\"result-template\">\n <!-- START NO CONTENT -->\n {{ @if ((!it.results || !it.results.length)) }}\n <div class=\"search-empty\">\n <nano-icon name=\"light/search\" class=\"search-empty-icon\"></nano-icon>\n <h2>No matches found...</h2>\n <p>Please try a different search query.</p>\n </div>\n {{ /if }}\n <!-- END NO CONTENT -->\n\n {{ @if (it.totalHitsWithFilters > 0) }}\n {{ @each(it.results) => result, resultIndex }}\n {{ contentType = result.content_type ? result.content_type : result.type }}\n <li class=\"sc-nano-global-search-results\">\n <div class=\"sc-nano-global-search-results result\" data-hit-id=\"{{ result.objectID }}\" data-hit-count=\"{{ resultIndex }}\">\n <h4 class=\"sc-nano-global-search-results result__title\" data-icon-set=\"{{(iconSet = false)}}\">\n <a href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @if (result._snippetResult) }}\n {{ result._snippetResult.title.value | safe }}\n {{ #else }}\n {{ result.title | safe }}\n {{ /if }}\n {{ @if (contentType === 'technical_document' || contentType === 'literature' || contentType === 'white_paper' || contentType === 'protocol') }}\n <span class=\"sc-nano-global-search-results result__pdf\">PDF</span>\n {{ /if }}\n </a>\n </h4>\n {{ @if (result.authors) }}\n {{ @if (typeof result.authors === 'string') }}\n <a class=\"sc-nano-global-search-results result__authors\" href=\"{{ result.url | abs_url(it, result) }}\">Authors: {{ result.authors | trim_to(50) }}</a>\n {{ #else }}\n <a class=\"sc-nano-global-search-results result__authors\" href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @each(result.authors) => author, index }}\n <!-- {{ @if(index == 0)}} -->\n Authors: {{ author | trim_to(60) }}\n <!-- {{ /if }} -->\n {{ /each }}\n </a>\n {{ /if }}\n {{ /if }}\n {{ @if (contentType === 'video' || contentType === 'lc_lightning_talk' ) }}\n {{ @if (result.name) }}\n <a class=\"sc-nano-global-search-results result__authors\" href=\"{{ result.url | abs_url(it, result) }}\">Speaker: {{ result.name | trim_to(50) }}</a>\n {{ /if }}\n <a class=\"sc-nano-global-search-results result__video-body\" href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @if (result.image) }}\n <div class=\"sc-nano-global-search-results result__image\" style=\"background-image: url('{{ result.image | abs_url(it, result) }}')\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"duotone/play-circle\"></nano-icon>\n </div>\n {{ /if }}\n <div class=\"sc-nano-global-search-results result__body\">\n <div class=\"sc-nano-global-search-results result__description\">\n {{ @if (result.description) }}\n {{ result._snippetResult.description.value | safe }}\n {{ /if }}\n </div>\n </div>\n <div class=\"sc-nano-global-search-results result__meta\">\n {{ @if (result.type || result.content_type) }}\n <div class=\"sc-nano-global-search-results result__type\">\n {{ @if (contentType === 'lc_lightning_talk') }}\n Presentation\n {{ #else }}\n {{ contentType }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (result.tags) }}\n <div class=\"sc-nano-global-search-results result__tags\">\n {{ @if (typeof result.tags === 'string') }}\n <button data-value=\"{{ result.tags | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ result.tags }}</button>\n {{ #else }}\n {{ @each(result.tags) => tag, index }}\n {{ @if(index < 5)}}\n {{ @if (tag !== \"No video\" && tag !== \"Resources\" && tag !== \"Video\") }}\n <button data-value=\"{{ tag | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ tag }}</button>\n {{ /if }}\n {{ /if }}\n {{ /each }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (result.source) }}\n <div class=\"sc-nano-global-search-results result__source\">Source: {{ result.source }}</div>\n {{ /if }}\n </div>\n </a>\n {{ /if }}\n {{ @if (result.body) }}\n <a class=\"sc-nano-global-search-results result__body\" href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @if (result._snippetResult) }}\n {{ result._snippetResult.body.value | safe }}\n {{ /if }}\n </a>\n {{ /if }}\n {{ @if (contentType === 'product' }}\n <div class=\"sc-nano-global-search-results result__buttons\">\n <a class=\"sc-nano-global-search-results result__buttons-button\" href=\"{{ result.url | abs_url(it, result) }}\">View product</a>\n </div>\n {{ /if }}\n {{ @if (contentType === 'event') }}\n <a class=\"sc-nano-global-search-results result__promo\" href=\"{{ result.url | abs_url(it, result) }}\">\n <div class=\"sc-nano-global-search-results result__promo-box\">\n <div class=\"sc-nano-global-search-results result__promo-bigdate\">\n {{ result.start_date | date_long({year: undefined, month: 'short', day: undefined}) }}\n <span>{{ result.start_date | date_long({year: undefined, month: undefined, day: 'numeric'}) }}</span>\n </div>\n <div>\n <div class=\"sc-nano-global-search-results result__promo-date\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/calendar-alt\"></nano-icon>\n {{ @if (result.end_date) }}\n {{ @if (result.end_date !== result.start_date) }}\n {{ result.start_date | date_long({weekday: 'short', day: 'numeric', month: 'short'}) }} - {{ result.end_date | date_long({weekday: 'short', day: 'numeric', year: 'numeric', month: 'short'}) }}\n {{ #else }}\n {{ result.start_date | date_long({weekday: 'short', day: 'numeric', year: 'numeric', month: 'short'}) }}\n {{ /if }}\n {{ #else }}\n {{ @if (result.start_date) }}\n {{ result.start_date | date_long({weekday: 'short', day: 'numeric', year: 'numeric', month: 'short'}) }}\n {{ /if }}\n {{ /if }}\n </div>\n <div class=\"sc-nano-global-search-results result__promo-venue\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/map-marker-alt\"></nano-icon>\n Venue\n </div>\n </div>\n </div>\n </a>\n {{ /if }}\n {{ @if (contentType !== 'lc_lightning_talk' && contentType !== 'video') }}\n <div class=\"sc-nano-global-search-results result__meta\">\n {{ @if (result.type || result.content_type) }}\n <div class=\"sc-nano-global-search-results result__type\">\n {{ @if (contentType === 'news_item') }}\n News\n {{ #elif (contentType === 'static_page' || contentType === 'bespoke') }}\n Page\n {{ #elif (contentType === 'case_study') }}\n Case study\n {{ #elif (contentType === 'lc_poster') }}\n Poster\n {{ #elif (contentType === 'nanopore_live') }}\n Live stream\n {{ #elif (contentType === 'data_release') }}\n Data release\n {{ #elif (contentType === 'research_area') }}\n Research area\n {{ #elif (contentType === 'white_paper') }}\n White paper\n {{ #elif (contentType === 'technical_document') }}\n Technical document\n {{ #elif (contentType === 'info_sheet') }}\n Info sheet\n {{ #elif (contentType === 'lc_home' || contentType === 'lc_venue') }}\n London Calling\n {{ #else }}\n {{ contentType }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (contentType !== 'event') }}\n {{ @if (result.updated) }}\n <div class=\"sc-nano-global-search-results result__date\">{{ result.updated | date_long({year: 'numeric', month: 'short', day: 'numeric'}) }}</div>\n {{ #else }}\n {{ @if (result.created) }}\n <div class=\"sc-nano-global-search-results result__date\">{{ result.created | date_long({year: 'numeric', month: 'short', day: 'numeric'}) }}</div>\n {{ /if }}\n {{ /if }}\n {{ /if }}\n {{ @if (result.tags) }}\n <div class=\"sc-nano-global-search-results result__tags\">\n {{ @if (typeof result.tags === 'string') }}\n {{ @if (result.tags !== \"Resources\" && result.tags !== \"Tools\" && result.tags !== \"Publications\" && result.tags !== \"Case studies\") }}\n <button data-value=\"{{ result.tags | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ result.tags }}</button>\n {{ /if }}\n {{ #else }}\n {{ @each(result.tags) => tag, index }}\n {{ @if(index < 5)}}\n {{ @if (tag !== \"Resources\" && tag !== \"Tools\" && tag !== \"Publications\" && tag !== \"Case studies\") }}\n <button data-value=\"{{ tag | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ tag }}</button>\n {{ /if }}\n {{ /if }}\n {{ /each }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (result.source) }}\n <div class=\"sc-nano-global-search-results result__source\">Source: {{ result.source }}</div>\n {{ /if }}\n </div>\n {{ /if }}\n </div>\n </li>\n {{ /each }}\n {{ /if }}\n </script>\n\n <div slot=\"start-output\"></div>\n <ul slot=\"result-output\" class=\"sc-nano-global-search-results\"></ul>\n </nano-algolia-results>\n\n {{ @if(Object.keys(it.origFilters).length) }}\n <div class=\"sc-nano-global-search-results main-search__filters filters close-filters\" id=\"main-search-filters\">\n <div class=\"sc-nano-global-search-results filters-wrap\">\n {{ @if(it.totalHits) }}\n <div class=\"sc-nano-global-search-results filters-header\">\n <strong class=\"sc-nano-global-search-results filters-title\">Filters</strong>\n <button class=\"sc-nano-global-search-results filters-reset\">Reset</button>\n <button class=\"sc-nano-global-search-results filters__close-filters close-filters icon-button\" aria-controls=\"main-search-filters\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/times\"></nano-icon>\n </button>\n </div>\n {{ /if }}\n\n <div>\n <input class=\"sc-nano-global-search-results filter-cb old-posts filters__old-posts\" type=\"checkbox\" name=\"old-posts\" id=\"old-posts\" value=\"nice\" />\n <label class=\"sc-nano-global-search-results filter-label\" for=\"old-posts\">\n <span>Include posts older than 2 years</span>\n </label>\n {{ @if(it.origFilters['type']) }}\n <nano-details class=\"sc-nano-global-search-results\" open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Type</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf1\" store-method=\"url-hash-push\" filter-name=\"type\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"sc-nano-global-search-results filter-cb\" type=\"checkbox\" value=\"{{ filter }}\" id=\"type-{{ filter }}-{{x}}\" />\n <label class=\"sc-nano-global-search-results filter-label\" for=\"type-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['channel']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Channels</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf2\" store-method=\"url-hash-push\" filter-name=\"channel\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"filter-cb sc-nano-global-search-results\" type=\"checkbox\" value=\"{{ filter }}\" id=\"channel-{{ filter }}-{{x}}\" />\n <label class=\"filter-label sc-nano-global-search-results\" for=\"channel-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['authors']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Authors</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf3\" store-method=\"url-hash-push\" filter-name=\"authors\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"filter-cb sc-nano-global-search-results\" type=\"checkbox\" value=\"{{ filter }}\" id=\"authors-{{ filter }}-{{x}}\" />\n <label class=\"filter-label sc-nano-global-search-results\" for=\"authors-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['categories_without_path']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Category</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf4\" store-method=\"url-hash-push\" filter-name=\"categories_without_path\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n {{ @if(!filter.match(/publication/)) }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"sc-nano-global-search-results filter-cb\" type=\"checkbox\" value=\"{{ filter }}\" id=\"cwp-{{ filter }}-{{x}}\" />\n <label class=\"sc-nano-global-search-results filter-label\" for=\"cwp-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /if }}\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['tags']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Tags</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf5\" store-method=\"url-hash-push\" filter-name=\"tags\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"filter-cb sc-nano-global-search-results\" type=\"checkbox\" value=\"{{ filter | lowercase }}\" id=\"tags-{{ filter }}-{{x}}\" />\n <label class=\"filter-label sc-nano-global-search-results\" for=\"tags-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n </div>\n </div>\n </div>\n {{ /if }}\n </div>`\n }\n </template>\n <div slot=\"output\"></div>\n <slot />\n </nano-algolia>\n </Host>\n );\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"global-search-results.js","sourceRoot":"","sources":["../../../src/components/global-search-results/global-search-results.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Host,\n Element,\n State,\n ComponentInterface,\n Watch,\n Listen,\n Event,\n EventEmitter,\n Method,\n} from '@stencil/core';\nimport searchInsight from '../../utils/search-insights';\nimport type {\n AloliaSearchResultDetail,\n IndexResult,\n NanoAlgoliaResultsCustomEvent,\n SearchIndex,\n} from '../../interface';\n\nconst filterOldPosts =\n 'created > ' + Math.floor((Date.now() - 63115200000) / 1000);\n\n/**\n * Nanopore Global Search results component\n * to be used in conjunction with [Globla-Nav](/story/nano-compounds-global-nav).\n * A shortcut / helper which combines algolia components.\n * There should only be one <nano-global-search-results> per page\n * and should be a direct child of <nano-global-nav>\n */\n@Component({\n tag: 'nano-global-search-results',\n styleUrl: 'global-search-results.scss',\n shadow: true,\n})\nexport class GlobalSearchResults implements ComponentInterface {\n private algoliaResultsEle: HTMLNanoAlgoliaResultsElement;\n private filtersDiv: HTMLElement;\n private openFilterBtn: HTMLButtonElement;\n private ro: ResizeObserver;\n\n @State() algoliaResults: IndexResult;\n @State() algoliaEle: HTMLNanoAlgoliaElement;\n @State() currentWidth: number;\n @State() apiKey: string;\n @State() appId: string;\n @State() index: SearchIndex;\n\n @Element() private el: HTMLNanoGlobalSearchResultsElement;\n\n /** Fired when the user clicks the 'back' button / closes the search panel\n * Calling `event.preventDefault()` will prevent it from being closed.\n */\n @Event() nanoSearchGoBack: EventEmitter;\n\n @Watch('algoliaEle')\n @Watch('apiKey')\n @Watch('appId')\n handleAlgoliaCredsChange() {\n if (!this.apiKey || !this.appId || !this.algoliaEle) return;\n this.algoliaEle.apiKey = this.apiKey;\n this.algoliaEle.appId = this.appId;\n }\n\n @Watch('algoliaEle')\n @Watch('index')\n handleAlgoliaIndexChange() {\n if (!this.index || !this.algoliaEle) return;\n this.algoliaEle.searchIndex = this.index;\n }\n\n @Watch('algoliaResults')\n @Watch('algoliaEle')\n handleAlgoliaEleChange() {\n if (!this.algoliaEle || !this.algoliaResults) return;\n if (this.algoliaResults.indexName === 'Community') {\n this.algoliaEle.filters = [filterOldPosts]; // only get last 2 years\n }\n }\n\n @Listen('nanoSearchReset', { target: 'body' })\n handleGlobalNavReset(e: CustomEvent & { target: HTMLElement }) {\n if (e.target.tagName !== 'NANO-GLOBAL-NAV') return;\n this.algoliaResultsEle = null;\n this.goback();\n }\n\n @Listen('nanoSearchResult', { target: 'body' })\n handleGlobalNavSearch(e: CustomEvent & { target: HTMLElement }) {\n const {\n detail: { meta, client },\n } = e as { detail: AloliaSearchResultDetail };\n\n this.apiKey = client.apiKey;\n this.appId = client.appId;\n\n if (e.target.tagName !== 'NANO-GLOBAL-NAV') return;\n\n this.index = {\n name: meta.indexTitle,\n index: meta.index,\n domain: meta.domain,\n filters: meta.filters,\n replicas: meta.replicas,\n };\n this.algoliaEle.query = meta.query;\n }\n\n @Listen('nanoChange')\n handleReorder(e: CustomEvent & { target: HTMLNanoSelectElement }) {\n if (\n e\n .composedPath()\n .find(\n (ele: HTMLElement) =>\n ele.classList && ele.classList.contains('indexchange')\n ) &&\n !!this.algoliaResultsEle\n ) {\n this.changeOrder(e);\n }\n }\n\n @Listen('nanoResultsShown')\n attachListeners(\n e: NanoAlgoliaResultsCustomEvent<{\n meta: IndexResult;\n client: { apiKey: string; appId: string };\n }>\n ) {\n searchInsight.init(e.detail.client.appId, e.detail.client.apiKey);\n\n if (\n !e\n .composedPath()\n .find((ele: HTMLElement) => ele.id && ele.id === 'main-search')\n )\n return;\n\n this.algoliaResultsEle = this.algoliaEle.querySelector(\n '#main-search-results'\n );\n this.algoliaResults = e.detail.meta;\n\n // add results listeners\n this.attachResultListeners();\n\n this.algoliaEle.querySelectorAll('.filters-reset').forEach((item) => {\n item.addEventListener('click', () => {\n this.removeAllFilters();\n });\n });\n\n this.algoliaEle.querySelectorAll('.close-filters').forEach((item) => {\n item.addEventListener('click', () => {\n this.closefilters();\n });\n });\n\n const filterWrap = this.algoliaEle.querySelector('.filters-wrap');\n if (filterWrap) {\n filterWrap.addEventListener('click', (e) => {\n e.stopPropagation();\n });\n }\n\n this.filtersDiv = this.algoliaEle.querySelector('#main-search-filters');\n\n const oldResults = this.algoliaEle.querySelector('.old-posts');\n if (oldResults) {\n oldResults.addEventListener(\n 'change',\n (e: Event & { target: HTMLInputElement }) => {\n this.toggleOldResults(e.target.checked);\n }\n );\n }\n }\n\n @Listen('nanoNewResults', { target: 'body' })\n attachResultListeners(e?: NanoAlgoliaResultsCustomEvent<IndexResult>) {\n if (e && e.composedPath()?.find((el) => el === this.algoliaEle)) {\n this.algoliaResultsEle = this.algoliaEle.querySelector(\n 'nano-algolia-results'\n );\n }\n if (!this.algoliaResultsEle) return;\n const resultEle = this.algoliaResultsEle;\n\n // wire up hit event listener for analytics\n this.algoliaResultsEle.removeEventListener('click', this.resultClick);\n this.algoliaResultsEle.addEventListener('click', this.resultClick);\n\n // wire up remove filter event listener\n resultEle.querySelectorAll('.remove-filter').forEach((item) => {\n item.removeEventListener('click', this.removeFilterClick);\n item.addEventListener('click', this.removeFilterClick);\n });\n\n // wire up the back button event listener\n resultEle.querySelectorAll('.back-btn').forEach((item) => {\n item.removeEventListener('click', this.goback);\n item.addEventListener('click', this.goback);\n });\n\n // wire up mobile filter list panel event listener\n resultEle.querySelectorAll('.topbar__show-filters').forEach((item) => {\n this.openFilterBtn = item as HTMLButtonElement;\n item.removeEventListener('click', this.showFiltersClick);\n item.addEventListener('click', this.showFiltersClick);\n });\n\n // wire up tags event listeners\n const tags = Array.from(resultEle.querySelectorAll('.result__tags-tag'));\n tags.forEach((tag) => {\n tag.removeEventListener('click', this.tagClick);\n tag.addEventListener('click', this.tagClick);\n });\n }\n\n /** Manually close the search panel */\n @Method()\n async closeSearch() {\n this.goback();\n }\n\n private resultClick = (e: MouseEvent & { target: HTMLElement }) => {\n const hit = e.target.closest('.result') as HTMLElement;\n if (e.target.tagName === 'A' && hit) {\n searchInsight.sendClick({\n index: this.algoliaResults.index,\n eventName: 'Global nav full search - search result clicked',\n queryID: this.algoliaResults.queryID,\n objectIDs: [hit.dataset.hitId],\n positions: [Number(hit.dataset.hitCount) + 1],\n });\n }\n };\n\n private showFiltersClick = () => {\n this.filtersDiv.tabIndex = -1;\n this.filtersDiv.classList.add('show');\n this.filtersDiv.setAttribute('aria-expanded', 'true');\n document.body.style.overflow = 'hidden';\n setTimeout(() => this.filtersDiv.focus(), 20);\n };\n\n private removeFilterClick = (e: MouseEvent & { target: HTMLElement }) => {\n this.removeFilter(e.target.dataset.filter, e.target.dataset.filterVal);\n };\n\n private tagClick = (e: MouseEvent & { target: HTMLElement }) => {\n e.preventDefault();\n let tagVal = e.target.dataset.value;\n tagVal = tagVal === 'publication' ? 'publications' : tagVal;\n tagVal = tagVal.toLowerCase();\n\n const filter: HTMLNanoAlgoliaFilterElement = this.algoliaEle.querySelector(\n 'nano-algolia-filter[filter-name=\"tags\"]'\n );\n if (filter.value.indexOf(tagVal) === -1) {\n filter.value = filter.value ? [...filter.value, tagVal] : [tagVal];\n }\n };\n\n private changeOrder(ev) {\n this.algoliaEle.replicaIndex = ev.detail.value;\n }\n\n private goback = () => {\n const goBackEvent = this.nanoSearchGoBack.emit();\n if (goBackEvent.defaultPrevented) return;\n\n this.removeAllFilters();\n this.algoliaEle.query = undefined;\n this.algoliaEle.showResults = false;\n };\n\n private removeFilter(facet, filter) {\n this.algoliaEle.removeFilters(facet, filter);\n }\n\n private removeAllFilters() {\n this.algoliaEle.removeFilters();\n }\n\n private closefilters() {\n if (!this.filtersDiv) return;\n this.filtersDiv.tabIndex = null;\n this.filtersDiv.classList.remove('show');\n this.filtersDiv.setAttribute('aria-expanded', 'false');\n document.body.style.overflow = '';\n setTimeout(() => this.openFilterBtn.focus(), 20);\n }\n\n private toggleOldResults(show: boolean) {\n if (show)\n this.algoliaEle.filters = this.algoliaEle.filters.filter(\n (f) => !f.startsWith('created > ')\n );\n else this.algoliaEle.filters = [...this.algoliaEle.filters, filterOldPosts];\n }\n\n connectedCallback(): void {\n this.handleAlgoliaEleChange();\n }\n\n componentDidLoad() {\n if (!window['ResizeObserver']) return;\n\n this.ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (!entry.contentRect.width) return;\n this.currentWidth = entry.contentRect.width;\n }\n });\n this.ro.observe(this.el);\n }\n\n render() {\n return (\n <Host\n class={{ small: this.currentWidth < 677 }}\n dir={\n (this.el.ownerDocument as Document).dir === 'rtl' ? 'rtl' : undefined\n }\n >\n <nano-algolia\n store-id=\"searchq\"\n store-method=\"url-hash-push\"\n class=\"main-search__wrap sc-nano-global-search-results\"\n ref={(ele) => requestAnimationFrame(() => (this.algoliaEle = ele))}\n id=\"main-search\"\n >\n <template slot=\"template\">\n {\n /* html */ `<div class=\"main-search sc-nano-global-search-results\">\n <nano-algolia-results id=\"main-search-results\" class=\"main-search__results sc-nano-global-search-results\" infinite-scroll>\n <script type=\"text/template\" slot=\"start-template\">\n <div class=\"sc-nano-global-search-results main-search__topbar topbar\">\n <button class=\"sc-nano-global-search-results topbar__bkbtn back-btn icon-button\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/chevron-left\" size=\"small\"></nano-icon>\n </button>\n <div>\n <em class=\"sc-nano-global-search-results topbar__query\">'{{ it.query }}' - </em> <strong>{{ it.totalHitsWithFilters }}</strong> Results\n </div>\n\n <div class=\"sc-nano-global-search-results topbar__filtering\">\n {{ @if (it.results.length) }}\n {{ @if (it.searchIndex && it.searchIndex.replicas) }}\n <nano-select class=\"sc-nano-global-search-results topbar__order indexchange\" value=\"{{ it.index }}\" hide-label=\"true\" label=\"Sort order\" show-inline-error=\"false\">\n {{ @each(it.searchIndex.replicas) => replica }}\n <nano-option value=\"{{ replica.index }}\">{{ replica.name }}</nano-option>\n {{ /each }}\n </nano-select>\n {{ /if }}\n {{ /if }}\n\n <button class=\"sc-nano-global-search-results topbar__show-filters filters-title\" aria-controls=\"main-search-filters\">\n {{ @if (it.appliedFilters && it.appliedFilters.length > 0) }}\n <span class=\"sc-nano-global-search-results topbar__filter-count\">\n {{ (it.appliedFilters.reduce(function(a, b) { return a + (b.values ? b.values.length : 0) }, 0)) }}\n </span>\n {{ /if }}\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/filter\"></nano-icon>\n </button>\n </div>\n </div>\n\n {{ @if (it.results.length) }}\n <div class=\"sc-nano-global-search-results main-search__applied-filters\">\n {{ @if (it.appliedFilters) }}\n {{ @each(it.appliedFilters) => filterObj }}\n {{ @each(filterObj.values) => filterVal }}\n <span class=\"sc-nano-global-search-results main-search__applied-filter\">\n {{ filterVal | public_name }}\n <button class=\"sc-nano-global-search-results icon-button remove-filter\" data-filter=\"{{ filterObj.name }}\" data-filter-val=\"{{ filterVal }}\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/times\"></nano-icon>\n </button>\n </span>\n {{ /each }}\n {{ /each }}\n {{ #else }}\n <span class=\"sc-nano-global-search-results main-search__applied-nofilter\"> </span>\n {{ /if }}\n </div>\n {{ /if }}\n </script>\n\n <script type=\"text/template\" slot=\"result-template\">\n <!-- START NO CONTENT -->\n {{ @if ((!it.results || !it.results.length)) }}\n <div class=\"search-empty\">\n <nano-icon name=\"light/search\" class=\"search-empty-icon\"></nano-icon>\n <h2>No matches found...</h2>\n <p>Please try a different search query.</p>\n </div>\n {{ /if }}\n <!-- END NO CONTENT -->\n\n {{ @if (it.totalHitsWithFilters > 0) }}\n {{ @each(it.results) => result, resultIndex }}\n {{ contentType = result.content_type ? result.content_type : result.type }}\n <li class=\"sc-nano-global-search-results\">\n <div class=\"sc-nano-global-search-results result\" data-hit-id=\"{{ result.objectID }}\" data-hit-count=\"{{ resultIndex }}\">\n <h4 class=\"sc-nano-global-search-results result__title\" data-icon-set=\"{{(iconSet = false)}}\">\n <a href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @if (result._snippetResult) }}\n {{ result._snippetResult.title.value | safe }}\n {{ #else }}\n {{ result.title | safe }}\n {{ /if }}\n {{ @if (contentType === 'technical_document' || contentType === 'literature' || contentType === 'white_paper' || contentType === 'protocol') }}\n <span class=\"sc-nano-global-search-results result__pdf\">PDF</span>\n {{ /if }}\n </a>\n </h4>\n {{ @if (result.authors) }}\n {{ @if (typeof result.authors === 'string') }}\n <a class=\"sc-nano-global-search-results result__authors\" href=\"{{ result.url | abs_url(it, result) }}\">Authors: {{ result.authors | trim_to(50) }}</a>\n {{ #else }}\n <a class=\"sc-nano-global-search-results result__authors\" href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @each(result.authors) => author, index }}\n <!-- {{ @if(index == 0)}} -->\n Authors: {{ author | trim_to(60) }}\n <!-- {{ /if }} -->\n {{ /each }}\n </a>\n {{ /if }}\n {{ /if }}\n {{ @if (contentType === 'video' || contentType === 'lc_lightning_talk' ) }}\n {{ @if (result.name) }}\n <a class=\"sc-nano-global-search-results result__authors\" href=\"{{ result.url | abs_url(it, result) }}\">Speaker: {{ result.name | trim_to(50) }}</a>\n {{ /if }}\n <a class=\"sc-nano-global-search-results result__video-body\" href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @if (result.image) }}\n <div class=\"sc-nano-global-search-results result__image\" style=\"background-image: url('{{ result.image | abs_url(it, result) }}')\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"duotone/play-circle\"></nano-icon>\n </div>\n {{ /if }}\n <div class=\"sc-nano-global-search-results result__body\">\n <div class=\"sc-nano-global-search-results result__description\">\n {{ @if (result.description) }}\n {{ result._snippetResult.description.value | safe }}\n {{ /if }}\n </div>\n </div>\n <div class=\"sc-nano-global-search-results result__meta\">\n {{ @if (result.type || result.content_type) }}\n <div class=\"sc-nano-global-search-results result__type\">\n {{ @if (contentType === 'lc_lightning_talk') }}\n Presentation\n {{ #else }}\n {{ contentType }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (result.tags) }}\n <div class=\"sc-nano-global-search-results result__tags\">\n {{ @if (typeof result.tags === 'string') }}\n <button data-value=\"{{ result.tags | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ result.tags }}</button>\n {{ #else }}\n {{ @each(result.tags) => tag, index }}\n {{ @if(index < 5)}}\n {{ @if (tag !== \"No video\" && tag !== \"Resources\" && tag !== \"Video\") }}\n <button data-value=\"{{ tag | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ tag }}</button>\n {{ /if }}\n {{ /if }}\n {{ /each }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (result.source) }}\n <div class=\"sc-nano-global-search-results result__source\">Source: {{ result.source }}</div>\n {{ /if }}\n </div>\n </a>\n {{ /if }}\n {{ @if (result.body) }}\n <a class=\"sc-nano-global-search-results result__body\" href=\"{{ result.url | abs_url(it, result) }}\">\n {{ @if (result._snippetResult) }}\n {{ result._snippetResult.body.value | safe }}\n {{ /if }}\n </a>\n {{ /if }}\n {{ @if (contentType === 'product' }}\n <div class=\"sc-nano-global-search-results result__buttons\">\n <a class=\"sc-nano-global-search-results result__buttons-button\" href=\"{{ result.url | abs_url(it, result) }}\">View product</a>\n </div>\n {{ /if }}\n {{ @if (contentType === 'event') }}\n <a class=\"sc-nano-global-search-results result__promo\" href=\"{{ result.url | abs_url(it, result) }}\">\n <div class=\"sc-nano-global-search-results result__promo-box\">\n <div class=\"sc-nano-global-search-results result__promo-bigdate\">\n {{ result.start_date | date_long({year: undefined, month: 'short', day: undefined}) }}\n <span>{{ result.start_date | date_long({year: undefined, month: undefined, day: 'numeric'}) }}</span>\n </div>\n <div>\n <div class=\"sc-nano-global-search-results result__promo-date\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/calendar-alt\"></nano-icon>\n {{ @if (result.end_date) }}\n {{ @if (result.end_date !== result.start_date) }}\n {{ result.start_date | date_long({weekday: 'short', day: 'numeric', month: 'short'}) }} - {{ result.end_date | date_long({weekday: 'short', day: 'numeric', year: 'numeric', month: 'short'}) }}\n {{ #else }}\n {{ result.start_date | date_long({weekday: 'short', day: 'numeric', year: 'numeric', month: 'short'}) }}\n {{ /if }}\n {{ #else }}\n {{ @if (result.start_date) }}\n {{ result.start_date | date_long({weekday: 'short', day: 'numeric', year: 'numeric', month: 'short'}) }}\n {{ /if }}\n {{ /if }}\n </div>\n <div class=\"sc-nano-global-search-results result__promo-venue\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/map-marker-alt\"></nano-icon>\n Venue\n </div>\n </div>\n </div>\n </a>\n {{ /if }}\n {{ @if (contentType !== 'lc_lightning_talk' && contentType !== 'video') }}\n <div class=\"sc-nano-global-search-results result__meta\">\n {{ @if (result.type || result.content_type) }}\n <div class=\"sc-nano-global-search-results result__type\">\n {{ @if (contentType === 'news_item') }}\n News\n {{ #elif (contentType === 'static_page' || contentType === 'bespoke') }}\n Page\n {{ #elif (contentType === 'case_study') }}\n Case study\n {{ #elif (contentType === 'lc_poster') }}\n Poster\n {{ #elif (contentType === 'nanopore_live') }}\n Live stream\n {{ #elif (contentType === 'data_release') }}\n Data release\n {{ #elif (contentType === 'research_area') }}\n Research area\n {{ #elif (contentType === 'white_paper') }}\n White paper\n {{ #elif (contentType === 'technical_document') }}\n Technical document\n {{ #elif (contentType === 'info_sheet') }}\n Info sheet\n {{ #elif (contentType === 'lc_home' || contentType === 'lc_venue') }}\n London Calling\n {{ #else }}\n {{ contentType }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (contentType !== 'event') }}\n {{ @if (result.updated) }}\n <div class=\"sc-nano-global-search-results result__date\">{{ result.updated | date_long({year: 'numeric', month: 'short', day: 'numeric'}) }}</div>\n {{ #else }}\n {{ @if (result.created) }}\n <div class=\"sc-nano-global-search-results result__date\">{{ result.created | date_long({year: 'numeric', month: 'short', day: 'numeric'}) }}</div>\n {{ /if }}\n {{ /if }}\n {{ /if }}\n {{ @if (result.tags) }}\n <div class=\"sc-nano-global-search-results result__tags\">\n {{ @if (typeof result.tags === 'string') }}\n {{ @if (result.tags !== \"Resources\" && result.tags !== \"Tools\" && result.tags !== \"Publications\" && result.tags !== \"Case studies\") }}\n <button data-value=\"{{ result.tags | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ result.tags }}</button>\n {{ /if }}\n {{ #else }}\n {{ @each(result.tags) => tag, index }}\n {{ @if(index < 5)}}\n {{ @if (tag !== \"Resources\" && tag !== \"Tools\" && tag !== \"Publications\" && tag !== \"Case studies\") }}\n <button data-value=\"{{ tag | lowercase }}\" class=\"sc-nano-global-search-results result__tags-tag\">{{ tag }}</button>\n {{ /if }}\n {{ /if }}\n {{ /each }}\n {{ /if }}\n </div>\n {{ /if }}\n {{ @if (result.source) }}\n <div class=\"sc-nano-global-search-results result__source\">Source: {{ result.source }}</div>\n {{ /if }}\n </div>\n {{ /if }}\n </div>\n </li>\n {{ /each }}\n {{ /if }}\n </script>\n\n <div slot=\"start-output\"></div>\n <ul slot=\"result-output\" class=\"sc-nano-global-search-results\"></ul>\n </nano-algolia-results>\n\n {{ @if(Object.keys(it.origFilters).length) }}\n <div class=\"sc-nano-global-search-results main-search__filters filters close-filters\" id=\"main-search-filters\">\n <div class=\"sc-nano-global-search-results filters-wrap\">\n {{ @if(it.totalHits) }}\n <div class=\"sc-nano-global-search-results filters-header\">\n <strong class=\"sc-nano-global-search-results filters-title\">Filters</strong>\n <button class=\"sc-nano-global-search-results filters-reset\">Reset</button>\n <button class=\"sc-nano-global-search-results filters__close-filters close-filters icon-button\" aria-controls=\"main-search-filters\">\n <nano-icon class=\"sc-nano-global-search-results\" name=\"light/times\"></nano-icon>\n </button>\n </div>\n {{ /if }}\n\n <div>\n <input class=\"sc-nano-global-search-results filter-cb old-posts filters__old-posts\" type=\"checkbox\" name=\"old-posts\" id=\"old-posts\" value=\"nice\" />\n <label class=\"sc-nano-global-search-results filter-label\" for=\"old-posts\">\n <span>Include posts older than 2 years</span>\n </label>\n {{ @if(it.origFilters['type']) }}\n <nano-details class=\"sc-nano-global-search-results\" open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Type</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf1\" store-method=\"url-hash-push\" filter-name=\"type\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"sc-nano-global-search-results filter-cb\" type=\"checkbox\" value=\"{{ filter }}\" id=\"type-{{ filter }}-{{x}}\" />\n <label class=\"sc-nano-global-search-results filter-label\" for=\"type-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['channel']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Channels</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf2\" store-method=\"url-hash-push\" filter-name=\"channel\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"filter-cb sc-nano-global-search-results\" type=\"checkbox\" value=\"{{ filter }}\" id=\"channel-{{ filter }}-{{x}}\" />\n <label class=\"filter-label sc-nano-global-search-results\" for=\"channel-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['authors']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Authors</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf3\" store-method=\"url-hash-push\" filter-name=\"authors\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"filter-cb sc-nano-global-search-results\" type=\"checkbox\" value=\"{{ filter }}\" id=\"authors-{{ filter }}-{{x}}\" />\n <label class=\"filter-label sc-nano-global-search-results\" for=\"authors-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['categories_without_path']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Category</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf4\" store-method=\"url-hash-push\" filter-name=\"categories_without_path\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n {{ @if(!filter.match(/publication/)) }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"sc-nano-global-search-results filter-cb\" type=\"checkbox\" value=\"{{ filter }}\" id=\"cwp-{{ filter }}-{{x}}\" />\n <label class=\"sc-nano-global-search-results filter-label\" for=\"cwp-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /if }}\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n\n {{ @if(it.origFilters['tags']) }}\n <nano-details open={true} icon-rotation=\"180\">\n <strong slot=\"label\">Tags</strong>\n <nano-icon slot=\"icon-end\" name=\"light/chevron-down\" size=\"small\"></nano-icon>\n <nano-algolia-filter store-id=\"searchf5\" store-method=\"url-hash-push\" filter-name=\"tags\">\n <script type=\"text/template\" slot=\"filter-template\">\n <ul class=\"sc-nano-global-search-results\" data-num=\"{{(x = 0)}}\">\n {{ @foreach(it.dyn) => filter, filterVal }}\n <li class=\"sc-nano-global-search-results\" data-num=\"{{(x++)}}\">\n <input class=\"filter-cb sc-nano-global-search-results\" type=\"checkbox\" value=\"{{ filter | lowercase }}\" id=\"tags-{{ filter }}-{{x}}\" />\n <label class=\"filter-label sc-nano-global-search-results\" for=\"tags-{{ filter }}-{{x}}\">\n <span>{{ filter | public_name }} (<strong>{{ filterVal }}</strong>)</span>\n </label></li>\n {{ /foreach }}\n </ul>\n </script>\n <div slot=\"output\"></div>\n </nano-algolia-filter>\n </nano-details>\n {{ /if }}\n </div>\n </div>\n </div>\n {{ /if }}\n </div>`\n }\n </template>\n <div slot=\"output\"></div>\n <slot />\n </nano-algolia>\n </Host>\n );\n }\n}\n"]}
|
@@ -18,7 +18,6 @@ import { h, Host, } from '@stencil/core';
|
|
18
18
|
*/
|
19
19
|
export class Rating {
|
20
20
|
constructor() {
|
21
|
-
this.slottedElements = [];
|
22
21
|
this.show = false;
|
23
22
|
this.childrenSelector = undefined;
|
24
23
|
this.maxToShow = 3;
|
@@ -35,7 +34,7 @@ export class Rating {
|
|
35
34
|
return Array.from(children).filter((ele) => !ele.hasAttribute('slot'));
|
36
35
|
}
|
37
36
|
handleShowHideElements() {
|
38
|
-
this.
|
37
|
+
this.children.forEach((ele, i) => {
|
39
38
|
if (this.show) {
|
40
39
|
if (ele.style.display === 'none') {
|
41
40
|
ele.style.display = '';
|
@@ -51,23 +50,16 @@ export class Rating {
|
|
51
50
|
}
|
52
51
|
});
|
53
52
|
}
|
54
|
-
processSlottedContent() {
|
55
|
-
const diff = this.children.length !== this.slottedElements.length ||
|
56
|
-
!!this.children.filter((x) => !this.slottedElements.includes(x))?.length;
|
57
|
-
if (diff) {
|
58
|
-
this.slottedElements = this.children;
|
59
|
-
}
|
60
|
-
}
|
61
53
|
handleClick(_e) {
|
62
54
|
this.show = !this.show;
|
63
55
|
}
|
64
56
|
connectedCallback() {
|
65
|
-
this.
|
57
|
+
this.handleShowHideElements();
|
66
58
|
}
|
67
59
|
render() {
|
68
|
-
return (h(Host, null, h("slot", { onSlotchange: () => this.
|
69
|
-
h("div", { style: { display: this.show ? 'none' : 'contents' }, class: "button-wrapper", part: "button-wrapper button-wrapper--less", onClick: (e) => this.handleClick(e) }, h("slot", { name: "less" }, h("button", { part: "button button--less" }, "Show more (+", this.
|
70
|
-
!this.noHideBtn ? (h("div", { style: { display: this.show ? 'contents' : 'none' }, class: "button-wrapper", part: "button-wrapper button-wrapper--more", onClick: (e) => this.handleClick(e) }, h("slot", { name: "more" }, h("button", { part: "button button--more" }, "Show less (-", this.
|
60
|
+
return (h(Host, null, h("slot", { onSlotchange: () => this.handleShowHideElements() }), this.children?.length > this.maxToShow && [
|
61
|
+
h("div", { style: { display: this.show ? 'none' : 'contents' }, class: "button-wrapper", part: "button-wrapper button-wrapper--less", onClick: (e) => this.handleClick(e) }, h("slot", { name: "less" }, h("button", { part: "button button--less" }, "Show more (+", this.children.length - this.maxToShow, ")"))),
|
62
|
+
!this.noHideBtn ? (h("div", { style: { display: this.show ? 'contents' : 'none' }, class: "button-wrapper", part: "button-wrapper button-wrapper--more", onClick: (e) => this.handleClick(e) }, h("slot", { name: "more" }, h("button", { part: "button button--more" }, "Show less (-", this.children.length - this.maxToShow, ")")))) : (''),
|
71
63
|
]));
|
72
64
|
}
|
73
65
|
static get is() { return "nano-more-less"; }
|
@@ -156,17 +148,9 @@ export class Rating {
|
|
156
148
|
}
|
157
149
|
};
|
158
150
|
}
|
159
|
-
static get states() {
|
160
|
-
return {
|
161
|
-
"slottedElements": {}
|
162
|
-
};
|
163
|
-
}
|
164
151
|
static get elementRef() { return "host"; }
|
165
152
|
static get watchers() {
|
166
153
|
return [{
|
167
|
-
"propName": "slottedElements",
|
168
|
-
"methodName": "handleShowHideElements"
|
169
|
-
}, {
|
170
154
|
"propName": "maxToShow",
|
171
155
|
"methodName": "handleShowHideElements"
|
172
156
|
}, {
|
@@ -174,7 +158,7 @@ export class Rating {
|
|
174
158
|
"methodName": "handleShowHideElements"
|
175
159
|
}, {
|
176
160
|
"propName": "childrenSelector",
|
177
|
-
"methodName": "
|
161
|
+
"methodName": "handleShowHideElements"
|
178
162
|
}];
|
179
163
|
}
|
180
164
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"more-less.js","sourceRoot":"","sources":["../../../src/components/more-less/more-less.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,CAAC,EAED,IAAI,EACJ,KAAK,
|
1
|
+
{"version":3,"file":"more-less.js","sourceRoot":"","sources":["../../../src/components/more-less/more-less.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Prop,\n h,\n ComponentInterface,\n Host,\n Watch,\n} from '@stencil/core';\n\n/**\n * A simple component to show more or less elements.\n *\n * @slot less - a button displayed when all fewer are shown. When clicked will show elements\n * @slot more - a button displayed when all items are shown. When clicked will hide elements\n * @slot - default slot displaying children elements to show or hide\n *\n * @part button-wrapper - wraps the 'more' / 'less' buttons\n * @part button-wrapper--more - wraps the 'more' button\n * @part button-wrapper--less - wraps the 'less' button\n * @part button - default 'more' / 'less' buttons\n * @part button--more - the default 'more' button\n * @part button--less - the default 'less' button\n */\n@Component({\n tag: 'nano-more-less',\n shadow: true,\n styles: /* css */ `:host { display: contents; }`,\n})\nexport class Rating implements ComponentInterface {\n @Element() host: HTMLNanoMoreLessElement;\n\n /** The default state. `false` - excess items are hidden. `true` - excess items are shown. */\n @Prop({ reflect: true, mutable: true }) show = false;\n\n /** Optional JS selector to target which elements to hide or show */\n @Prop() childrenSelector: string;\n\n /** The maximum number of items to show when `show` is true.\n * Excess items will be hidden. */\n @Prop() maxToShow = 3;\n\n /** Only show the 'show more' button */\n @Prop() noHideBtn = false;\n\n get children() {\n let children: NodeListOf<Element> | HTMLCollectionOf<Element>;\n\n if (this.childrenSelector) {\n children = this.host.querySelectorAll(this.childrenSelector);\n } else {\n children = this.host.children;\n }\n return Array.from(children).filter(\n (ele) => !ele.hasAttribute('slot')\n ) as HTMLElement[];\n }\n\n @Watch('maxToShow')\n @Watch('show')\n @Watch('childrenSelector')\n handleShowHideElements() {\n this.children.forEach((ele, i) => {\n if (this.show) {\n if (ele.style.display === 'none') {\n ele.style.display = '';\n }\n } else {\n if (i >= this.maxToShow) {\n ele.style.display = 'none';\n } else {\n ele.style.display = '';\n }\n }\n });\n }\n\n private handleClick(_e: MouseEvent) {\n this.show = !this.show;\n }\n\n connectedCallback() {\n this.handleShowHideElements();\n }\n\n render() {\n return (\n <Host>\n <slot onSlotchange={() => this.handleShowHideElements()} />\n {this.children?.length > this.maxToShow && [\n <div\n style={{ display: this.show ? 'none' : 'contents' }}\n class=\"button-wrapper\"\n part=\"button-wrapper button-wrapper--less\"\n onClick={(e) => this.handleClick(e)}\n >\n <slot name=\"less\">\n <button part=\"button button--less\">\n Show more (+{this.children.length - this.maxToShow})\n </button>\n </slot>\n </div>,\n !this.noHideBtn ? (\n <div\n style={{ display: this.show ? 'contents' : 'none' }}\n class=\"button-wrapper\"\n part=\"button-wrapper button-wrapper--more\"\n onClick={(e) => this.handleClick(e)}\n >\n <slot name=\"more\">\n <button part=\"button button--more\">\n Show less (-{this.children.length - this.maxToShow})\n </button>\n </slot>\n </div>\n ) : (\n ''\n ),\n ]}\n </Host>\n );\n }\n}\n"]}
|
@@ -6,9 +6,11 @@ const STORAGE_NAME_SPACE = 'nano-component-store:';
|
|
6
6
|
const urlRead = (from = 'hash', win = window) => {
|
7
7
|
if (!win || !win.location)
|
8
8
|
return {};
|
9
|
-
if (from === 'hash' && win.location.hash)
|
9
|
+
if (from === 'hash' && win.location.hash && win.location.hash.match(/&|=/))
|
10
10
|
return parse(win.location.hash.replace(/^\#/, ''));
|
11
|
-
else if (from === 'query' &&
|
11
|
+
else if (from === 'query' &&
|
12
|
+
win.location.search &&
|
13
|
+
win.location.search.match(/&|=/))
|
12
14
|
return parse(win.location.search.replace(/^\?/, ''));
|
13
15
|
return {};
|
14
16
|
};
|
@@ -48,8 +50,19 @@ export const urlSet = (id, data, to = 'hash', win = window, method = 'replace')
|
|
48
50
|
// sanitize the incoming key
|
49
51
|
id = Object.keys(parse(id))[0];
|
50
52
|
const object = {};
|
53
|
+
// delete all empty incoming values
|
54
|
+
for (const key in data) {
|
55
|
+
if (!data[key] || (Array.isArray(data[key]) && !data[key].length)) {
|
56
|
+
delete data[key];
|
57
|
+
}
|
58
|
+
}
|
51
59
|
object[id] = data;
|
52
60
|
let currentData = urlRead(to, win);
|
61
|
+
// current data is empty and incoming data is empty
|
62
|
+
// let's not do anything
|
63
|
+
if (!currentData[id] && !object[id])
|
64
|
+
return;
|
65
|
+
// let's merge current and incoming data and write it to the url
|
53
66
|
currentData = { ...currentData, ...object };
|
54
67
|
urlSave(currentData, to, win, method);
|
55
68
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-set.js","sourceRoot":"","sources":["../../../src/utils/store/get-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAExC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAEnD,MAAM,OAAO,GAAG,CACd,OAAyB,MAAM,EAC/B,MAAc,MAAM,EACL,EAAE;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;IAAE,OAAO,EAAE,CAAC;EACrC,IAAI,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI;
|
1
|
+
{"version":3,"file":"get-set.js","sourceRoot":"","sources":["../../../src/utils/store/get-set.ts"],"names":[],"mappings":"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","sourcesContent":["import { parse, stringify } from 'tyqs';\n\nconst STORAGE_NAME_SPACE = 'nano-component-store:';\n\nconst urlRead = (\n from: 'hash' | 'query' = 'hash',\n win: Window = window\n): void | object => {\n if (!win || !win.location) return {};\n if (from === 'hash' && win.location.hash && win.location.hash.match(/&|=/))\n return parse(win.location.hash.replace(/^\\#/, ''));\n else if (\n from === 'query' &&\n win.location.search &&\n win.location.search.match(/&|=/)\n )\n return parse(win.location.search.replace(/^\\?/, ''));\n return {};\n};\n\nconst urlSave = (\n object: object,\n to: 'hash' | 'query' = 'hash',\n win: Window = window,\n method: 'replace' | 'push' = 'replace'\n) => {\n if (!win || !win.history) return;\n const oldQuery = to === 'query' ? win.location.search : win.location.hash;\n const basePath =\n to === 'query'\n ? win.location.pathname\n : win.location.pathname + win.location.search;\n let queryStr = stringify(object);\n\n if (!queryStr || !queryStr.length) {\n if (!oldQuery || !oldQuery.length) return;\n if (method === 'replace') win.history.replaceState(null, null, basePath);\n else win.history.pushState(null, null, basePath);\n return;\n }\n\n if (to === 'hash' && win.location.hash === '#' + queryStr) {\n try {\n (document.querySelector('#' + queryStr) as HTMLElement).focus();\n } catch (e) {}\n return;\n }\n queryStr = (to === 'hash' ? '#' : '?') + queryStr;\n if (queryStr === oldQuery) return;\n if (method === 'replace')\n win.history.replaceState(null, null, basePath + queryStr);\n else win.history.pushState(null, null, basePath + queryStr);\n};\n\nexport const urlSet = (\n id: string,\n data: object,\n to: 'hash' | 'query' = 'hash',\n win: Window = window,\n method: 'replace' | 'push' = 'replace'\n) => {\n // sanitize the incoming key\n id = Object.keys(parse(id))[0];\n const object = {};\n\n // delete all empty incoming values\n for (const key in data) {\n if (!data[key] || (Array.isArray(data[key]) && !data[key].length)) {\n delete data[key];\n }\n }\n\n object[id] = data;\n let currentData = urlRead(to, win);\n\n // current data is empty and incoming data is empty\n // let's not do anything\n if (!currentData[id] && !object[id]) return;\n\n // let's merge current and incoming data and write it to the url\n currentData = { ...currentData, ...object };\n urlSave(currentData, to, win, method);\n};\n\nexport const urlGet = (\n key: string,\n to: 'hash' | 'query' = 'hash',\n win: Window = window\n) => {\n // sanitize the incoming key\n key = Object.keys(parse(key))[0];\n const currentData = urlRead(to, win);\n return currentData[key] || null;\n};\n\nexport const sessionSet = (\n key: string,\n object: object,\n win: Window = window\n) => {\n try {\n if (!object) {\n win.sessionStorage.removeItem(STORAGE_NAME_SPACE + key);\n return;\n }\n win.sessionStorage.setItem(\n STORAGE_NAME_SPACE + key,\n JSON.stringify(object)\n );\n } catch (e) {\n throw e;\n }\n};\n\nexport const sessionGet = (key: string, win: Window = window) => {\n try {\n const configStr = win.sessionStorage.getItem(STORAGE_NAME_SPACE + key);\n return configStr !== null ? JSON.parse(configStr) : null;\n } catch (e) {\n throw e;\n }\n};\n\nexport const storageSet = (\n key: string,\n object: object,\n win: Window = window\n) => {\n try {\n if (!object) {\n win.localStorage.removeItem(STORAGE_NAME_SPACE + key);\n return;\n }\n win.localStorage.setItem(STORAGE_NAME_SPACE + key, JSON.stringify(object));\n } catch (e) {\n throw e;\n }\n};\n\nexport const storageGet = (key: string, win: Window = window) => {\n try {\n const configStr = win.localStorage.getItem(STORAGE_NAME_SPACE + key);\n return configStr !== null ? JSON.parse(configStr) : null;\n } catch (e) {\n throw e;\n }\n};\n"]}
|
@@ -79,9 +79,11 @@ const STORAGE_NAME_SPACE = 'nano-component-store:';
|
|
79
79
|
const urlRead = (from = 'hash', win = window) => {
|
80
80
|
if (!win || !win.location)
|
81
81
|
return {};
|
82
|
-
if (from === 'hash' && win.location.hash)
|
82
|
+
if (from === 'hash' && win.location.hash && win.location.hash.match(/&|=/))
|
83
83
|
return parse(win.location.hash.replace(/^\#/, ''));
|
84
|
-
else if (from === 'query' &&
|
84
|
+
else if (from === 'query' &&
|
85
|
+
win.location.search &&
|
86
|
+
win.location.search.match(/&|=/))
|
85
87
|
return parse(win.location.search.replace(/^\?/, ''));
|
86
88
|
return {};
|
87
89
|
};
|
@@ -121,8 +123,19 @@ const urlSet = (id, data, to = 'hash', win = window, method = 'replace') => {
|
|
121
123
|
// sanitize the incoming key
|
122
124
|
id = Object.keys(parse(id))[0];
|
123
125
|
const object = {};
|
126
|
+
// delete all empty incoming values
|
127
|
+
for (const key in data) {
|
128
|
+
if (!data[key] || (Array.isArray(data[key]) && !data[key].length)) {
|
129
|
+
delete data[key];
|
130
|
+
}
|
131
|
+
}
|
124
132
|
object[id] = data;
|
125
133
|
let currentData = urlRead(to, win);
|
134
|
+
// current data is empty and incoming data is empty
|
135
|
+
// let's not do anything
|
136
|
+
if (!currentData[id] && !object[id])
|
137
|
+
return;
|
138
|
+
// let's merge current and incoming data and write it to the url
|
126
139
|
currentData = { ...currentData, ...object };
|
127
140
|
urlSave(currentData, to, win, method);
|
128
141
|
};
|