diff --git a/assets/javascripts/views/search/search_scope.js b/assets/javascripts/views/search/search_scope.js index d5e996e2..53a7e71e 100644 --- a/assets/javascripts/views/search/search_scope.js +++ b/assets/javascripts/views/search/search_scope.js @@ -1,207 +1,180 @@ -// 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.SearchScope = class SearchScope extends app.View { - static initClass() { - SEARCH_PARAM = app.config.search_param; - - this.elements = { - input: "._search-input", - tag: "._search-tag", - }; - - this.events = { - click: "onClick", - keydown: "onKeydown", - textInput: "onTextInput", - }; - - this.routes = { after: "afterRoute" }; - - HASH_RGX = new RegExp(`^#${SEARCH_PARAM}=(.+?) .`); - } +app.views.SearchScope = class SearchScope extends app.View { + static SEARCH_PARAM = app.config.search_param; - init() { - this.placeholder = this.input.getAttribute("placeholder"); + static elements = { + input: "._search-input", + tag: "._search-tag", + }; - this.searcher = new app.SynchronousSearcher({ - fuzzy_min_length: 2, - max_results: 1, - }); - this.searcher.on("results", (results) => this.onResults(results)); - } + static events = { + click: "onClick", + keydown: "onKeydown", + textInput: "onTextInput", + }; - getScope() { - return this.doc || app; - } + static routes = { after: "afterRoute" }; - isActive() { - return !!this.doc; - } + static HASH_RGX = new RegExp(`^#${SearchScope.SEARCH_PARAM}=(.+?) .`); + + init() { + this.placeholder = this.input.getAttribute("placeholder"); + + this.searcher = new app.SynchronousSearcher({ + fuzzy_min_length: 2, + max_results: 1, + }); + this.searcher.on("results", (results) => this.onResults(results)); + } + + getScope() { + return this.doc || app; + } + + isActive() { + return !!this.doc; + } - name() { - return this.doc != null ? this.doc.name : undefined; + name() { + return this.doc != null ? this.doc.name : undefined; + } + + search(value, searchDisabled) { + if (searchDisabled == null) { + searchDisabled = false; + } + if (this.doc) { + return; + } + this.searcher.find(app.docs.all(), "text", value); + if (!this.doc && searchDisabled) { + this.searcher.find(app.disabledDocs.all(), "text", value); } + } - search(value, searchDisabled) { - if (searchDisabled == null) { - searchDisabled = false; - } - if (this.doc) { - return; - } - this.searcher.find(app.docs.all(), "text", value); - if (!this.doc && searchDisabled) { - this.searcher.find(app.disabledDocs.all(), "text", value); - } + searchUrl() { + let value; + if ((value = this.extractHashValue())) { + this.search(value, true); } + } - searchUrl() { - let value; - if ((value = this.extractHashValue())) { - this.search(value, true); - } + onResults(results) { + let doc; + if (!(doc = results[0])) { + return; } + if (app.docs.contains(doc)) { + this.selectDoc(doc); + } else { + this.redirectToDoc(doc); + } + } - onResults(results) { - let doc; - if (!(doc = results[0])) { - return; - } - if (app.docs.contains(doc)) { - this.selectDoc(doc); - } else { - this.redirectToDoc(doc); - } + selectDoc(doc) { + const previousDoc = this.doc; + if (doc === previousDoc) { + return; } + this.doc = doc; - selectDoc(doc) { - const previousDoc = this.doc; - if (doc === previousDoc) { - return; - } - this.doc = doc; + this.tag.textContent = doc.fullName; + this.tag.style.display = "block"; - this.tag.textContent = doc.fullName; - this.tag.style.display = "block"; + this.input.removeAttribute("placeholder"); + this.input.value = this.input.value.slice(this.input.selectionStart); + this.input.style.paddingLeft = this.tag.offsetWidth + 10 + "px"; - this.input.removeAttribute("placeholder"); - this.input.value = this.input.value.slice(this.input.selectionStart); - this.input.style.paddingLeft = this.tag.offsetWidth + 10 + "px"; + $.trigger(this.input, "input"); + this.trigger("change", this.doc, previousDoc); + } - $.trigger(this.input, "input"); - this.trigger("change", this.doc, previousDoc); - } + redirectToDoc(doc) { + const { hash } = location; + app.router.replaceHash(""); + location.assign(doc.fullPath() + hash); + } - redirectToDoc(doc) { - const { hash } = location; - app.router.replaceHash(""); - location.assign(doc.fullPath() + hash); + reset() { + if (!this.doc) { + return; } + const previousDoc = this.doc; + this.doc = null; - reset() { - if (!this.doc) { - return; - } - const previousDoc = this.doc; - this.doc = null; + this.tag.textContent = ""; + this.tag.style.display = "none"; - this.tag.textContent = ""; - this.tag.style.display = "none"; + this.input.setAttribute("placeholder", this.placeholder); + this.input.style.paddingLeft = ""; - this.input.setAttribute("placeholder", this.placeholder); - this.input.style.paddingLeft = ""; + this.trigger("change", null, previousDoc); + } - this.trigger("change", null, previousDoc); + doScopeSearch(event) { + this.search(this.input.value.slice(0, this.input.selectionStart)); + if (this.doc) { + $.stopEvent(event); } + } - doScopeSearch(event) { - this.search(this.input.value.slice(0, this.input.selectionStart)); - if (this.doc) { - $.stopEvent(event); - } + onClick(event) { + if (event.target === this.tag) { + this.reset(); + $.stopEvent(event); } + } - onClick(event) { - if (event.target === this.tag) { + onKeydown(event) { + if (event.which === 8) { + // backspace + if (this.doc && this.input.selectionEnd === 0) { this.reset(); $.stopEvent(event); } - } - - onKeydown(event) { - if (event.which === 8) { - // backspace - if (this.doc && this.input.selectionEnd === 0) { - this.reset(); - $.stopEvent(event); - } - } else if (!this.doc && this.input.value && !$.isChromeForAndroid()) { - if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) { - return; - } - if ( - event.which === 9 || // tab - (event.which === 32 && app.isMobile()) - ) { - // space - this.doScopeSearch(event); - } - } - } - - onTextInput(event) { - if (!$.isChromeForAndroid()) { + } else if (!this.doc && this.input.value && !$.isChromeForAndroid()) { + if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) { return; } - if (!this.doc && this.input.value && event.data === " ") { + if ( + event.which === 9 || // tab + (event.which === 32 && app.isMobile()) + ) { + // space this.doScopeSearch(event); } } + } - extractHashValue() { - let value; - if ((value = this.getHashValue())) { - const newHash = $.urlDecode(location.hash).replace( - `#${SEARCH_PARAM}=${value} `, - `#${SEARCH_PARAM}=`, - ); - app.router.replaceHash(newHash); - return value; - } + onTextInput(event) { + if (!$.isChromeForAndroid()) { + return; } + if (!this.doc && this.input.value && event.data === " ") { + this.doScopeSearch(event); + } + } - getHashValue() { - try { - return __guard__( - HASH_RGX.exec($.urlDecode(location.hash)), - (x) => x[1], - ); - } catch (error) {} + extractHashValue() { + let value; + if ((value = this.getHashValue())) { + const newHash = $.urlDecode(location.hash).replace( + `#${SearchScope.SEARCH_PARAM}=${value} `, + `#${SearchScope.SEARCH_PARAM}=`, + ); + app.router.replaceHash(newHash); + return value; } + } - afterRoute(name, context) { - if (!app.isSingleDoc() && context.init && context.doc) { - this.selectDoc(context.doc); - } + getHashValue() { + try { + return SearchScope.HASH_RGX.exec($.urlDecode(location.hash))?.[1]; + } catch (error) {} + } + + afterRoute(name, context) { + if (!app.isSingleDoc() && context.init && context.doc) { + this.selectDoc(context.doc); } - }; - app.views.SearchScope.initClass(); - return app.views.SearchScope; -})(); - -function __guard__(value, transform) { - return typeof value !== "undefined" && value !== null - ? transform(value) - : undefined; -} + } +};