// TODO: This file was created by bulk-decaffeinate. // Sanity-check the conversion and remove this comment. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns * DS103: Rewrite code to no longer use __guard__, or convert again using --optional-chaining * DS206: Consider reworking classes to avoid initClass * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md */ (function () { let SEARCH_PARAM = undefined; let HASH_RGX = undefined; app.views.Search = class Search extends app.View { static initClass() { SEARCH_PARAM = app.config.search_param; this.el = "._search"; this.activeClass = "_search-active"; this.elements = { input: "._search-input", resetLink: "._search-clear", }; this.events = { input: "onInput", click: "onClick", submit: "onSubmit", }; this.shortcuts = { typing: "focus", altG: "google", altS: "stackoverflow", altD: "duckduckgo", }; this.routes = { after: "afterRoute" }; HASH_RGX = new RegExp(`^#${SEARCH_PARAM}=(.*)`); } init() { this.addSubview((this.scope = new app.views.SearchScope(this.el))); this.searcher = new app.Searcher(); this.searcher .on("results", (results) => this.onResults(results)) .on("end", () => this.onEnd()); this.scope.on("change", () => this.onScopeChange()); app.on("ready", () => this.onReady()); $.on(window, "hashchange", () => this.searchUrl()); $.on(window, "focus", (event) => this.onWindowFocus(event)); } focus() { if (document.activeElement === this.input) { return; } if (app.settings.get("noAutofocus")) { return; } this.input.focus(); } autoFocus() { if (app.isMobile() || $.isAndroid() || $.isIOS()) { return; } if ( (document.activeElement != null ? document.activeElement.tagName : undefined) === "INPUT" ) { return; } if (app.settings.get("noAutofocus")) { return; } this.input.focus(); } onWindowFocus(event) { if (event.target === window) { return this.autoFocus(); } } getScopeDoc() { if (this.scope.isActive()) { return this.scope.getScope(); } } reset(force) { if (force || !this.input.value) { this.scope.reset(); } this.el.reset(); this.onInput(); this.autoFocus(); } onReady() { this.value = ""; this.delay(this.onInput); } onInput() { if ( this.value == null || // ignore events pre-"ready" this.value === this.input.value ) { return; } this.value = this.input.value; if (this.value.length) { this.search(); } else { this.clear(); } } search(url) { if (url == null) { url = false; } this.addClass(this.constructor.activeClass); this.trigger("searching"); this.hasResults = null; this.flags = { urlSearch: url, initialResults: true }; this.searcher.find( this.scope.getScope().entries.all(), "text", this.value, ); } searchUrl() { let value; if (location.pathname === "/") { this.scope.searchUrl(); } else if (!app.router.isIndex()) { return; } if (!(value = this.extractHashValue())) { return; } this.input.value = this.value = value; this.input.setSelectionRange(value.length, value.length); this.search(true); return true; } clear() { this.removeClass(this.constructor.activeClass); this.trigger("clear"); } externalSearch(url) { let value; if ((value = this.value)) { if (this.scope.name()) { value = `${this.scope.name()} ${value}`; } $.popup(`${url}${encodeURIComponent(value)}`); this.reset(); } } google() { this.externalSearch("https://www.google.com/search?q="); } stackoverflow() { this.externalSearch("https://stackoverflow.com/search?q="); } duckduckgo() { this.externalSearch("https://duckduckgo.com/?t=devdocs&q="); } onResults(results) { if (results.length) { this.hasResults = true; } this.trigger("results", results, this.flags); this.flags.initialResults = false; } onEnd() { if (!this.hasResults) { this.trigger("noresults"); } } onClick(event) { if (event.target === this.resetLink) { $.stopEvent(event); this.reset(); } } onSubmit(event) { $.stopEvent(event); } onScopeChange() { this.value = ""; this.onInput(); } afterRoute(name, context) { if ( (app.shortcuts.eventInProgress != null ? app.shortcuts.eventInProgress.name : undefined) === "escape" ) { return; } if (!context.init && app.router.isIndex()) { this.reset(true); } if (context.hash) { this.delay(this.searchUrl); } $.requestAnimationFrame(() => this.autoFocus()); } extractHashValue() { let value; if ((value = this.getHashValue()) != null) { app.router.replaceHash(); return value; } } getHashValue() { try { return __guard__( HASH_RGX.exec($.urlDecode(location.hash)), (x) => x[1], ); } catch (error) {} } }; app.views.Search.initClass(); return app.views.Search; })(); function __guard__(value, transform) { return typeof value !== "undefined" && value !== null ? transform(value) : undefined; }