| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- app.views.Results = class Results extends app.View {
- static className = "_list";
- static events = { click: "onClick" };
- static routes = { after: "afterRoute" };
- constructor(sidebar, search) {
- super();
- this.sidebar = sidebar;
- this.search = search;
- this.init0(); // needs this.search
- this.refreshElements();
- }
- deactivate() {
- if (super.deactivate(...arguments)) {
- this.empty();
- }
- }
- init0() {
- this.addSubview((this.listFocus = new app.views.ListFocus(this.el)));
- this.addSubview((this.listSelect = new app.views.ListSelect(this.el)));
- this.search
- .on("results", (entries, flags) => this.onResults(entries, flags))
- .on("noresults", () => this.onNoResults())
- .on("clear", () => this.onClear());
- }
- onResults(entries, flags) {
- if (flags.initialResults) {
- this.listFocus?.blur();
- }
- if (flags.initialResults) {
- this.empty();
- }
- this.append(this.tmpl("sidebarResult", entries));
- if (flags.initialResults) {
- if (flags.urlSearch) {
- this.openFirst();
- } else {
- this.focusFirst();
- }
- }
- }
- onNoResults() {
- this.html(this.tmpl("sidebarNoResults"));
- }
- onClear() {
- this.empty();
- }
- focusFirst() {
- if (!app.isMobile()) {
- this.listFocus?.focusOnNextFrame(this.el.firstElementChild);
- }
- }
- openFirst() {
- this.el.firstElementChild?.click();
- }
- onDocEnabled(doc) {
- app.router.show(doc.fullPath());
- return this.sidebar.onDocEnabled();
- }
- afterRoute(route, context) {
- if (route === "entry") {
- this.listSelect.selectByHref(context.entry.fullPath());
- } else {
- this.listSelect.deselect();
- }
- }
- onClick(event) {
- if (event.which !== 1) {
- return;
- }
- const slug = $.eventTarget(event).getAttribute("data-enable");
- if (slug) {
- $.stopEvent(event);
- const doc = app.disabledDocs.findBy("slug", slug);
- if (doc) {
- return app.enableDoc(doc, this.onDocEnabled.bind(this, doc), $.noop);
- }
- }
- }
- };
|