cyp/app/js/lib/search.js
Ondrej Zara e0bbd1107b search
2019-04-01 15:16:39 +02:00

45 lines
1 KiB
JavaScript

import * as html from "./html.js";
const OPEN = "open";
export function normalize(str) {
// FIXME diac/translit
return str.toLowerCase();
}
export default class Search extends EventTarget {
constructor(parent) {
super();
this._node = html.node("label", {className:"search"});
this._input = html.node("input", {type:"text"}, "", this._node);
html.icon("magnify", this._node);
this._node.addEventListener("click", e => {
if (e.target == this._input) { return; }
if (this._node.classList.contains(OPEN)) {
this.reset();
this.dispatchEvent(new Event("input"));
} else {
this._node.classList.add(OPEN);
}
});
this._input.addEventListener("input", e => {
this.dispatchEvent(new Event("input"));
});
}
getNode() { return this._node; }
match(str) {
let q = normalize(this._input.value.trim());
if (!q) { return true; }
return normalize(str).split(" ").some(str => str.indexOf(q) == 0);
}
reset() {
this._input.value = "";
this._node.classList.remove(OPEN);
}
}