97 lines
3.3 KiB
JavaScript
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
|
|
},
|
|
};
|
|
})();
|