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/list/list_select.js

67 lines
1.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
* DS103: Rewrite code to no longer use __guard__, or convert again using --optional-chaining
* DS206: Consider reworking classes to avoid initClass
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
*/
const Cls = (app.views.ListSelect = class ListSelect extends app.View {
static initClass() {
this.activeClass = 'active';
this.events =
{click: 'onClick'};
}
constructor(el) { this.onClick = this.onClick.bind(this); this.el = el; super(...arguments); }
deactivate() {
if (super.deactivate(...arguments)) { this.deselect(); }
}
select(el) {
this.deselect();
if (el) {
el.classList.add(this.constructor.activeClass);
$.trigger(el, 'select');
}
}
deselect() {
let selection;
if (selection = this.getSelection()) {
selection.classList.remove(this.constructor.activeClass);
$.trigger(selection, 'deselect');
}
}
selectByHref(href) {
if (__guard__(this.getSelection(), x => x.getAttribute('href')) !== href) {
this.select(this.find(`a[href='${href}']`));
}
}
selectCurrent() {
this.selectByHref(location.pathname + location.hash);
}
getSelection() {
return this.findByClass(this.constructor.activeClass);
}
onClick(event) {
if ((event.which !== 1) || event.metaKey || event.ctrlKey) { return; }
const target = $.eventTarget(event);
if (target.tagName === 'A') {
this.select(target);
}
}
});
Cls.initClass();
function __guard__(value, transform) {
return (typeof value !== 'undefined' && value !== null) ? transform(value) : undefined;
}