* [refac] add comments and fix add actions.
This commit is contained in:
@@ -1,23 +1,35 @@
|
||||
const allMainNavbarItemIDs = [];
|
||||
/**
|
||||
* @type {string[]}
|
||||
*/
|
||||
const allMainNavbarItemNames = [];
|
||||
|
||||
/**
|
||||
* @type {Map<string, any>}
|
||||
*/
|
||||
const allMainNavbarItemMap = new Map();
|
||||
|
||||
$(document).ready(
|
||||
function()
|
||||
{
|
||||
allMainNavbarItemIDs.length = 0;
|
||||
allMainNavbarItemNames.length = 0;
|
||||
allMainNavbarItemMap.clear();
|
||||
|
||||
if (typeof allMainNavbarItems !== 'undefined')
|
||||
{
|
||||
for(const item of allMainNavbarItems)
|
||||
{
|
||||
allMainNavbarItemIDs.push(item['data-id']);
|
||||
allMainNavbarItemNames.push(item['data-id']);
|
||||
allMainNavbarItemMap.set(item['data-id'], item);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* Get current main navbar items data.
|
||||
*
|
||||
* @returns {Array<{name: string; order: number;}>}
|
||||
*/
|
||||
function getCurrentMainNavbarItems()
|
||||
{
|
||||
const items = [];
|
||||
@@ -38,30 +50,42 @@ function getCurrentMainNavbarItems()
|
||||
return items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate main menu nav items to be added.
|
||||
*
|
||||
* @param {(name: string) => void} onClick
|
||||
* @returns {Array<{text: string; onClick: () => void;}>}
|
||||
*/
|
||||
function generateAddMainNavbarItems(onClick)
|
||||
{
|
||||
const items = [];
|
||||
const allMainNavbarItemIDSet = new Set(allMainNavbarItemMap.keys());
|
||||
const curMainNavbarItems = getCurrentMainNavbarItems();
|
||||
for(const id of curMainNavbarItems)
|
||||
for(const {name} of curMainNavbarItems)
|
||||
{
|
||||
allMainNavbarItemIDSet.delete(id);
|
||||
allMainNavbarItemIDSet.delete(name);
|
||||
}
|
||||
|
||||
if(allMainNavbarItemIDSet.size === 0) return items;
|
||||
for(const id of allMainNavbarItemIDSet)
|
||||
for(const name of allMainNavbarItemIDSet)
|
||||
{
|
||||
const item = allMainNavbarItemMap.get(id);
|
||||
const item = allMainNavbarItemMap.get(name);
|
||||
items.push(
|
||||
{
|
||||
text: item.text,
|
||||
onClick: () => onClick(id),
|
||||
onClick: () => onClick(name),
|
||||
}
|
||||
);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the current navbar item can be hidden.
|
||||
*
|
||||
* @param {Cash} $item
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canHideCurrentNavbar($item)
|
||||
{
|
||||
if($item.is('.active')) return false;
|
||||
@@ -84,8 +108,8 @@ $(document).on(
|
||||
const $li = $item.closest('li');
|
||||
const menu = $item.data('group');
|
||||
const customUrl = $.createLink('custom', 'ajaxSetMenu');
|
||||
const itemsToAdded = generateAddMainNavbarItems((id) => {
|
||||
const item = allMainNavbarItemMap.get(id);
|
||||
const itemsToAdded = generateAddMainNavbarItems((name) => {
|
||||
const item = allMainNavbarItemMap.get(name);
|
||||
const $a = $('<a></a>')
|
||||
.attr('href', item.url)
|
||||
.attr('data-id', item['data-id'])
|
||||
|
||||
+46
-28
@@ -1,35 +1,40 @@
|
||||
const allNavbarItemIDs = [];
|
||||
/**
|
||||
* @type {string[]}
|
||||
*/
|
||||
const allNavbarItemNames = [];
|
||||
|
||||
/**
|
||||
* @type {Map<string, any>}
|
||||
*/
|
||||
const allNavbarItemMap = new Map();
|
||||
|
||||
$(document).ready(
|
||||
function()
|
||||
{
|
||||
allNavbarItemIDs.length = 0;
|
||||
allNavbarItemNames.length = 0;
|
||||
allNavbarItemMap.clear();
|
||||
|
||||
for(const item of allNavbarItems)
|
||||
{
|
||||
if(item.type === 'divider')
|
||||
{
|
||||
allNavbarItemIDs.push('divider');
|
||||
allNavbarItemNames.push('divider');
|
||||
continue;
|
||||
}
|
||||
|
||||
const id = item['data-id'] || item.id;
|
||||
const name = item['data-id'] || item.id;
|
||||
|
||||
// if (item.type === 'dropdown')
|
||||
// {
|
||||
// allNavbarItemIDs.push(item.id);
|
||||
// allNavbarItemMap.set(item.id, item);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
allNavbarItemIDs.push(id);
|
||||
allNavbarItemMap.set(id, item);
|
||||
allNavbarItemNames.push(name);
|
||||
allNavbarItemMap.set(name, item);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* Get current navbar items data.
|
||||
*
|
||||
* @returns {Array<{name: string; order: number;}>}
|
||||
*/
|
||||
function getCurrentNavbarItems()
|
||||
{
|
||||
const items = [];
|
||||
@@ -45,17 +50,17 @@ function getCurrentNavbarItems()
|
||||
order: index * 5
|
||||
}
|
||||
);
|
||||
|
||||
// if($elm.is('.nav-dropdown'))
|
||||
// {
|
||||
// items[index] = $a.prop('id');
|
||||
// return;
|
||||
// }
|
||||
}
|
||||
);
|
||||
return items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate navbar items to be added.
|
||||
*
|
||||
* @param {(item: string) => void} onClick click handler of navbar item.
|
||||
* @returns {Array<{text: string; onClick: () => void;}>}
|
||||
*/
|
||||
function generateAddNavbarItems(onClick)
|
||||
{
|
||||
const customUrl = $.createLink('custom', 'ajaxSetMenu');
|
||||
@@ -74,21 +79,21 @@ function generateAddNavbarItems(onClick)
|
||||
|
||||
const allNavbarItemIDSet = new Set(allNavbarItemMap.keys());
|
||||
const curNavbarItems = getCurrentNavbarItems();
|
||||
for(const id of curNavbarItems)
|
||||
for(const {name} of curNavbarItems)
|
||||
{
|
||||
if(id === 'divider') continue;
|
||||
allNavbarItemIDSet.delete(id);
|
||||
if(name === 'divider') continue;
|
||||
allNavbarItemIDSet.delete(name);
|
||||
}
|
||||
|
||||
if(allNavbarItemIDSet.size === 0) return items;
|
||||
for(const id of allNavbarItemIDSet)
|
||||
for(const name of allNavbarItemIDSet)
|
||||
{
|
||||
const item = allNavbarItemMap.get(id);
|
||||
const item = allNavbarItemMap.get(name);
|
||||
items.push(
|
||||
{
|
||||
text: item.text,
|
||||
onClick: () => {
|
||||
onClick(id);
|
||||
onClick(name);
|
||||
const items = getCurrentNavbarItems();
|
||||
const app = $.apps.getLastApp().code;
|
||||
const menu = getMenuName(items, app);
|
||||
@@ -100,6 +105,12 @@ function generateAddNavbarItems(onClick)
|
||||
return items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the current navbar item can be hidden.
|
||||
*
|
||||
* @param {Cash} $item
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canHideCurrentNavbar($item)
|
||||
{
|
||||
if($item.is('.nav-divider')) return true;
|
||||
@@ -112,6 +123,13 @@ function canHideCurrentNavbar($item)
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get menu name by items and app.
|
||||
*
|
||||
* @param {Array<{name: string; order: number;}>} items
|
||||
* @param {string} app
|
||||
* @returns {string}
|
||||
*/
|
||||
function getMenuName(items, app)
|
||||
{
|
||||
const isHomeMenu = items.length <= 3 && ['program', 'project', 'product', 'execution'].includes(app);
|
||||
@@ -179,10 +197,10 @@ $(document).on(
|
||||
},
|
||||
{
|
||||
text: langData.add,
|
||||
items: generateAddNavbarItems((id) => {
|
||||
if(id === 'divider') return $li.after('<li class="nav-divider item divider"></li>');
|
||||
items: generateAddNavbarItems((name) => {
|
||||
if(name === 'divider') return $li.after('<li class="nav-divider item divider"></li>');
|
||||
|
||||
const item = allNavbarItemMap.get(id);
|
||||
const item = allNavbarItemMap.get(name);
|
||||
const $a = $('<a></a>')
|
||||
.attr('href', item.url)
|
||||
.attr('target', item.target)
|
||||
|
||||
@@ -819,6 +819,11 @@ setTimeout(refreshMenu, 500);
|
||||
$(document).on('click', '.menu-toggle', () => toggleMenu());
|
||||
toggleMenu(!$('body').hasClass('hide-menu'));
|
||||
|
||||
/**
|
||||
* Get current menu nav data.
|
||||
*
|
||||
* @returns {Array<{name: string; order: number;}>}
|
||||
*/
|
||||
function getMenuNavData()
|
||||
{
|
||||
const data = [];
|
||||
@@ -835,24 +840,29 @@ function getMenuNavData()
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate menu nav items to be added.
|
||||
*
|
||||
* @param {(item: string) => void} onClick click handler of menu item.
|
||||
* @returns {Array<{icon: string; text: string; onClick: () => void;}>}
|
||||
*/
|
||||
function generateAddMenuNavItems(onClick)
|
||||
{
|
||||
const customUrl = $.createLink('custom', 'ajaxSetMenu');
|
||||
const data = getMenuNavData();
|
||||
const items = [
|
||||
{
|
||||
icon: 'icon-minus',
|
||||
text: langData.divider,
|
||||
onClick: () => {
|
||||
onClick('divider');
|
||||
const data = getMenuNavData();
|
||||
$.ajaxSubmit({url: customUrl, data: {menu: 'nav', items: JSON.stringify(data)}});
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const allAppCodeSet = new Set(allAppsItemsMap.keys());
|
||||
const data = getMenuNavData();
|
||||
for(const name of data)
|
||||
for(const {name} of data)
|
||||
{
|
||||
if(name === 'divider') continue;
|
||||
allAppCodeSet.delete(name);
|
||||
@@ -909,7 +919,7 @@ $(document).on('contextmenu', '#menuNav .divider', function(event)
|
||||
animation: 150,
|
||||
ghostClass: 'bg-primary-pale',
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -1275,6 +1285,12 @@ void function generateAllAppsItemsMap() {
|
||||
}
|
||||
}();
|
||||
|
||||
/**
|
||||
* Get icon and title of app item.
|
||||
*
|
||||
* @param {string} name app name
|
||||
* @returns {[string, string]}
|
||||
*/
|
||||
function getAppItemIconAndTitle(name)
|
||||
{
|
||||
if(!allAppsItemsMap.has(name)) return[];
|
||||
@@ -1292,6 +1308,12 @@ function getAppItemIconAndTitle(name)
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add menu item to #mainNav callback, used by generateAddMenuNavItems.
|
||||
*
|
||||
* @param {Cash} $li menu item li
|
||||
* @returns {(name: string) => void}
|
||||
*/
|
||||
function addMenuToMainNavCb($li) {
|
||||
return (name) => {
|
||||
if(name === 'divider') return $li.after('<li class="divider"></li>');
|
||||
|
||||
Reference in New Issue
Block a user