mj-context-menu
Version:
A generic context menu
79 lines • 2.16 kB
JavaScript
import { AbstractItem } from './abstract_item.js';
import { HtmlClasses } from './html_classes.js';
export class Submenu extends AbstractItem {
static fromJson(factory, { content: content, menu: submenu, id: id }, menu) {
const item = new this(menu, content, id);
const sm = factory.get('subMenu')(factory, submenu, item);
item.submenu = sm;
return item;
}
constructor(menu, content, id) {
super(menu, 'submenu', content, id);
this._submenu = null;
}
set submenu(menu) {
this._submenu = menu;
}
get submenu() {
return this._submenu;
}
mouseover(event) {
this.focus();
this.stop(event);
}
mouseout(event) {
this.stop(event);
}
unfocus() {
if (!this.submenu.isPosted()) {
super.unfocus();
return;
}
if (this.menu.focused !== this) {
super.unfocus();
this.menu.unpostSubmenus();
return;
}
this.html.setAttribute('tabindex', '-1');
this.html.blur();
}
focus() {
super.focus();
if (!this.submenu.isPosted() && !this.disabled) {
this.submenu.post();
}
}
executeAction() {
this.submenu.isPosted() ? this.submenu.unpost() : this.submenu.post();
}
generateHtml() {
super.generateHtml();
const html = this.html;
this.span = document.createElement('span');
this.span.textContent = '\u25BA';
this.span.classList.add(HtmlClasses['MENUARROW']);
this.span.setAttribute('aria-hidden', 'true');
html.appendChild(this.span);
html.setAttribute('aria-haspopup', 'true');
}
left(event) {
if (this.submenu.isPosted()) {
this.submenu.unpost();
}
else {
super.left(event);
}
}
right(event) {
if (!this.submenu.isPosted()) {
this.submenu.post();
}
else {
this.submenu.down(event);
}
}
toJson() {
return { type: '' };
}
}
//# sourceMappingURL=item_submenu.js.map