diff --git a/_includes/2017/head.html b/_includes/2017/head.html index 8e40e0d89..eca56305d 100644 --- a/_includes/2017/head.html +++ b/_includes/2017/head.html @@ -18,6 +18,5 @@ -
diff --git a/assets/2017/script.js b/_js/behaviors/search.js similarity index 80% rename from assets/2017/script.js rename to _js/behaviors/search.js index f0d92b036..cd02f6afd 100644 --- a/assets/2017/script.js +++ b/_js/behaviors/search.js @@ -1,3 +1,6 @@ +import $ from 'jquery' +import * as Search from '../helpers/search' + /* * Behavior: Search */ @@ -69,30 +72,6 @@ function splitwords (str) { return words } -/* - * Search - */ - -const Search = { - showAll () { - $('[data-search-index]').removeAttr('aria-hidden') - }, - - show (val) { - const keywords = splitwords(val) - - if (!keywords.length) return Search.showAll() - - const selectors = keywords - .map(k => `[data-search-index~=${JSON.stringify(k)}]`) - .join('') - - $('[data-search-index]').attr('aria-hidden', true) - $(selectors).removeAttr('aria-hidden') - } -} - - /* * Helper: minimal qs implementation */ diff --git a/_js/behaviors/searchable-item.js b/_js/behaviors/searchable-item.js index e6c1869dc..74b747b8f 100644 --- a/_js/behaviors/searchable-item.js +++ b/_js/behaviors/searchable-item.js @@ -3,6 +3,10 @@ import $ from 'jquery' import onmount from 'onmount' import permutate from '../helpers/permutate' +/** + * Sets search indices (`data-search-index` attribute) + */ + onmount('[data-js-searchable-item]', function () { const $this = $(this) const data = $this.data('js-searchable-item') diff --git a/_js/helpers/search.js b/_js/helpers/search.js new file mode 100644 index 000000000..914b6ef94 --- /dev/null +++ b/_js/helpers/search.js @@ -0,0 +1,40 @@ +import { splitwords } from './permutate' +import qsa from 'dom101/query-selector-all' + +/** + * Show everything. + * + * @example + * Search.showAll() + */ + +export function showAll () { + qsa('[data-search-index]').forEach(el => { + el.removeAttribute('aria-hidden') + }) +} + +/** + * Search for a given keyword. + * + * @example + * Search.show('hello') + */ + +export function show (val) { + const keywords = splitwords(val) + + if (!keywords.length) return showAll() + + const selectors = keywords + .map(k => `[data-search-index~=${JSON.stringify(k)}]`) + .join('') + + qsa('[data-search-index]').forEach(el => { + el.setAttribute('aria-hidden', true) + }) + + qsa(selectors).forEach(el => { + el.removeAttribute('aria-hidden') + }) +} diff --git a/package.json b/package.json index d64ccc456..584846632 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "babel-polyfill": "6.26.0", - "dom101": "1.3.0", + "dom101": "2.0.1", "hint.css": "2.5.0", "isotope-layout": "3.0.4", "jquery": "3.2.1", diff --git a/yarn.lock b/yarn.lock index d7c555103..f594565c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1194,9 +1194,9 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dom101@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/dom101/-/dom101-1.3.0.tgz#d7fca30686240171b6cf17c2e855d6a32fa2c9c9" +dom101@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/dom101/-/dom101-2.0.1.tgz#b40f643ce977e30989014bce40479bceef0ff29a" domain-browser@^1.1.1: version "1.1.7"