You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
devdocs/assets/javascripts/views/sidebar/results.js

117 lines
2.8 KiB

// TODO: This file was created by bulk-decaffeinate.
// Sanity-check the conversion and remove this comment.
/*
* decaffeinate suggestions:
* DS002: Fix invalid constructor
* DS102: Remove unnecessary code created because of implicit returns
* 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
*/
const Cls = (app.views.Results = class Results extends app.View {
static initClass() {
1 year ago
this.className = "_list";
this.events = { click: "onClick" };
this.routes = { after: "afterRoute" };
}
11 years ago
1 year ago
constructor(sidebar, search) {
this.onResults = this.onResults.bind(this);
this.onNoResults = this.onNoResults.bind(this);
this.onClear = this.onClear.bind(this);
this.afterRoute = this.afterRoute.bind(this);
this.onClick = this.onClick.bind(this);
this.sidebar = sidebar;
this.search = search;
super(...arguments);
}
deactivate() {
if (super.deactivate(...arguments)) {
this.empty();
}
}
11 years ago
init() {
1 year ago
this.addSubview((this.listFocus = new app.views.ListFocus(this.el)));
this.addSubview((this.listSelect = new app.views.ListSelect(this.el)));
11 years ago
this.search
1 year ago
.on("results", this.onResults)
.on("noresults", this.onNoResults)
.on("clear", this.onClear);
}
11 years ago
onResults(entries, flags) {
1 year ago
if (flags.initialResults) {
if (this.listFocus != null) {
this.listFocus.blur();
}
}
if (flags.initialResults) {
this.empty();
}
this.append(this.tmpl("sidebarResult", entries));
11 years ago
if (flags.initialResults) {
1 year ago
if (flags.urlSearch) {
this.openFirst();
} else {
this.focusFirst();
}
}
}
11 years ago
onNoResults() {
1 year ago
this.html(this.tmpl("sidebarNoResults"));
}
11 years ago
onClear() {
this.empty();
}
11 years ago
focusFirst() {
1 year ago
if (!app.isMobile()) {
if (this.listFocus != null) {
this.listFocus.focusOnNextFrame(this.el.firstElementChild);
}
}
}
openFirst() {
if (this.el.firstElementChild != null) {
this.el.firstElementChild.click();
}
}
11 years ago
onDocEnabled(doc) {
app.router.show(doc.fullPath());
return this.sidebar.onDocEnabled();
}
11 years ago
afterRoute(route, context) {
1 year ago
if (route === "entry") {
this.listSelect.selectByHref(context.entry.fullPath());
} else {
this.listSelect.deselect();
}
}
11 years ago
onClick(event) {
let slug;
1 year ago
if (event.which !== 1) {
return;
}
if ((slug = $.eventTarget(event).getAttribute("data-enable"))) {
$.stopEvent(event);
1 year ago
const doc = app.disabledDocs.findBy("slug", slug);
if (doc) {
return app.enableDoc(doc, this.onDocEnabled.bind(this, doc), $.noop);
}
}
}
});
Cls.initClass();