mami/src/mami.js/ui/menus.js

97 lines
3.3 KiB
JavaScript

#include utility.js
Umi.UI.Menus = (function() {
const ids = [];
const sidebarMenu = 'sidebar__menu';
const sidebarMenuActive = 'sidebar__menu--active';
const sidebarMenuHidden = 'sidebar__menu--hidden';
const sidebarSelectorMode = 'sidebar__selector-mode';
const sidebarSelectorModeActive = 'sidebar__selector-mode--active';
const sidebarSelectorModeAttention = 'sidebar__selector-mode--attention';
const sidebarSelectorModeHidden = 'sidebar__selector-mode--hidden';
const attention = function(baseId, mode) {
if(mode === undefined)
mode = true;
const element = $i('umi-menu-icons-' + baseId);
element.classList.remove(sidebarSelectorModeHidden);
if(mode && !element.classList.contains(sidebarSelectorModeAttention) && !element.classList.contains('active'))
element.classList.add(sidebarSelectorModeAttention);
else if(!mode && element.classList.contains(sidebarSelectorModeAttention))
element.classList.remove(sidebarSelectorModeAttention);
};
const activate = function(baseId) {
const icon = 'umi-menu-icons-' + baseId,
menu = 'umi-menus-' + baseId;
const menuToggle = Umi.UI.Toggles.Get('menu-toggle');
if(menuToggle.className.indexOf('closed') !== -1)
menuToggle.click();
attention(baseId, false);
$c(sidebarMenuActive)[0].classList.remove(sidebarMenuActive);
$i(menu).classList.add(sidebarMenuActive);
$c(sidebarSelectorModeActive)[0].classList.remove(sidebarSelectorModeActive);
$i(icon).classList.add(sidebarSelectorModeActive);
};
return {
Add: function(baseId, title, initiallyHidden) {
if(ids.includes(baseId))
return;
ids.push(baseId);
const menuClass = [sidebarMenu, `${sidebarMenu}--${baseId}`];
const iconClass = [sidebarSelectorMode, `${sidebarSelectorMode}--${baseId}`];
const menus = $i('umi-menus');
const icons = $i('umi-menu-icons');
if(menus.children.length < 1) {
menuClass.push(sidebarMenuActive);
iconClass.push(sidebarSelectorModeActive);
}
if(initiallyHidden) {
menuClass.push(sidebarMenuHidden);
iconClass.push(sidebarSelectorModeHidden);
}
icons.appendChild($e({
attrs: {
id: `umi-menu-icons-${baseId}`,
classList: iconClass,
title: title,
onclick: function() {
activate(baseId);
},
},
}));
menus.appendChild($e({ attrs: { 'class': menuClass, id: `umi-menus-${baseId}` } }));
},
Get: function(baseId, icon) {
const id = (icon ? 'umi-menu-icons' : 'umi-menus') + '-' + baseId;
if(ids.indexOf(baseId) >= 0)
return $i(id);
return null;
},
Remove: function(baseId) {
$ri('umi-menu-icons-' + baseId);
$ri('umi-menus-' + baseId);
},
Activate: activate,
Attention: attention,
Active: function() {
return $c(sidebarMenuActive)[0].id.substring(10); // LOL
},
};
})();