| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- $(function()
- {
- var currentModule = startMenu['module'],
- currentMethod = startMenu['method'],
- $navbar = $('#navbar'),
- $subNavbar = $('#subNavbar'),
- $mainMenu = $('#mainMenu'),
- $loadingIcon = $('#loadingIcon'),
- $menuEditor = $('#menuEditor'),
- menuConfig =
- {
- 'main': null,
- 'module': {},
- 'feature': {}
- };
- var updateConfig = function($menu)
- {
- var moduleName = $menu.data('module'), methodName = $menu.data('method');
- var menu = [];
- $menu.children('.nav').children('li:not(.drag-shadow)').each(function()
- {
- var $e = $(this);
- var item = $e.children('a').data('menu');
- item.order = $e.attr('data-order');
- menu.push(item);
- });
- if(moduleName === 'main') menuConfig.main = menu;
- else if(methodName) menuConfig['feature'][moduleName][methodName] = menu;
- else menuConfig['module'][moduleName] = menu;
- }
- var updateMenu = function(moduleName, methodName, items)
- {
- var $menu = moduleName === 'main' ? $navbar : (methodName ? $mainMenu : $subNavbar);
- var items = items || (moduleName === 'main' ? menuConfig.main : (methodName ? menuConfig['feature'][moduleName][methodName] : menuConfig['module'][moduleName]));
- $menu.data({'module': moduleName, 'method': methodName});
- if(items)
- {
- var $nav = $('<ul class="nav nav-default"/>');
- $.each(items, function(idx, item)
- {
- if(!item.text || item.fixed) return;
- var $a = $('<a href="#"/>').append(item.text);
- $a.data('menu', item).append('<i class="item-hidden-icon icon icon-eye-off"></i>');
- var hidden = !!item.hidden;
- if(item.subMenu)
- {
- hidden = true;
- $a.addClass('dropdown dropdown-hover').append("<span class='caret'></span><ul class='dropdown-menu'></ul>");
- var $dropmenu = $a.find('.dropdown-menu');
- $.each(item.subMenu, function(subIdx, subItem)
- {
- subItem.order = subIdx + 1;
- var $subA = $('<a href="#"/>').append(subItem.text);
- $subA.data('menu', subItem).append('<i class="item-hidden-icon icon icon-eye-off"></i>');
- $('<li/>').attr('data-id', subItem.name).toggleClass('right', subItem.float === 'right').toggleClass('menu-hidden', !!subItem.hidden).append($subA).appendTo($dropmenu);
- hidden = subItem.hidden && hidden;
- });
- var $aInner = $a.children('a');
- if ($aInner.length)
- {
- $aInner.replaceWith($('<span>' + $aInner.text() + ' <span class="caret"></span></span>'));
- $a.addClass('dropdown-hover');
- }
- if(!$dropmenu.children().length)
- {
- $a.removeClass('dropdown dropdown-hover').find('.caret').remove();
- $dropmenu.remove();
- }
- }
- $('<li/>').attr('data-id', item.name).toggleClass('right', item.float === 'right').toggleClass('menu-hidden', hidden).append($a).appendTo($nav);
- });
- $nav.sortable({finish: function(e)
- {
- updateConfig(e.element.closest('nav'));
- }});
- $menu.children('ul').replaceWith($nav);
- }
- else
- {
- $menu.children('ul').empty();
- }
- };
- var activeCurrent = function(moduleName, methodName)
- {
- currentModule = moduleName;
- currentMethod = methodName;
- $navbar.find('li.active').removeClass('active');
- $navbar.find('li[data-id="' + moduleName + '"]:not(.right)').addClass('active');
- $subNavbar.find('li.active').removeClass('active');
- $subNavbar.find('li[data-id="' + methodName + '"]:not(.right)').addClass('active');
- };
- var loadData = function(moduleName, methodName, type, callback)
- {
- type = type || '';
- var link = createLink('custom', 'ajaxGetMenu', 'module=' + moduleName + '&method=' + methodName + '&type=' + type, 'json');
- $loadingIcon.addClass('active');
- $.get(link, function(data)
- {
- if(data.result === 'success' && data.menu)
- {
- var menu = data.menu;
- if(menu['main'] && !menuConfig['main'])
- {
- menuConfig['main'] = menu['main'];
- }
- if(menu['module'] && !menuConfig['module'][moduleName])
- {
- menuConfig['module'][moduleName] = menu['module'];
- }
- if(menu['feature'] !== undefined && (!menuConfig['feature'][moduleName] || menuConfig['feature'][moduleName][methodName] === undefined))
- {
- if(!menuConfig['feature'][moduleName]) menuConfig['feature'][moduleName] = {};
- menuConfig['feature'][moduleName][methodName] = menu['feature'];
- }
- activeCurrent(moduleName, methodName);
- callback && callback(true, data);
- }
- else
- {
- callback && callback(false, data);
- }
- $loadingIcon.removeClass('active');
- }, 'json');
- };
- var formatMenuConfig = function(items)
- {
- var dataList = [];
- $.each(items, function(idx, item)
- {
- var data = {name: item.name, order: parseInt(item.order)};
- if(item.hidden) data.hidden = true;
- if(item.float) data.float = item.float;
- if(item.subMenu)
- {
- var subMenu = [];
- $.each(item.subMenu, function(sIdx, subItem)
- {
- var subData = {name: subItem.name, order: parseInt(subItem.order)};
- if(subItem.hidden) subData.hidden = true;
- if(subItem.float) subData.float = subItem.float;
- subMenu.push(subData);
- });
- data.subMenu = subMenu;
- }
- dataList.push(data);
- });
- return dataList;
- };
- $menuEditor.on('mouseenter', '.nav > li:not(.drag-shadow) > a', function()
- {
- var $a = $(this);
- var item = $a.data('menu');
- var $menu = $a.closest('nav');
- if($menu.is('#navbar'))
- {
- var moduleName = item.name;
- if(moduleName !== currentModule)
- {
- var methodName = item.link['method'];
- if(menuConfig['module'][moduleName])
- {
- updateMenu(moduleName);
- if(menuConfig['feature'][moduleName] && menuConfig['feature'][moduleName][methodName] !== undefined)
- {
- updateMenu(moduleName, methodName);
- activeCurrent(moduleName, methodName);
- }
- else
- {
- loadData(moduleName, methodName, 'all', function(result)
- {
- if(result)
- {
- updateMenu(moduleName, methodName);
- activeCurrent(moduleName, methodName);
- }
- });
- }
- }
- else
- {
- loadData(moduleName, methodName, 'all', function(result)
- {
- if(result)
- {
- updateMenu(moduleName);
- updateMenu(moduleName, methodName);
- activeCurrent(moduleName, methodName);
- }
- });
- }
- }
- }
- else if($menu.is('#subNavbar'))
- {
- var moduleName = item.link ? item.link['module'] : $menu.data('module');
- var methodName = item.link ? item.link['method'] : item.name;
- if(methodName !== currentMethod)
- {
- if(menuConfig['feature'][moduleName] && menuConfig['feature'][moduleName][methodName] !== undefined)
- {
- updateMenu(moduleName, methodName);
- activeCurrent($menu.data('module'), item.name);
- }
- else
- {
- loadData(moduleName, methodName, 'all', function(result)
- {
- if(result)
- {
- updateMenu(moduleName, methodName);
- activeCurrent($menu.data('module'), item.name);
- }
- });
- }
- }
- }
- }).on('click', '.nav>li>a,.dropdown-menu>li>a', function(e)
- {
- var $a = $(this);
- var item = $a.data('menu');
- if(!item) return;
- if($a.find('.dropdown-menu').length) return;
- var $menu = $a.closest('nav');
- var moduleName = item.link && item.link['module'] ? item.link['module'] : item.name;
- var methodName = item.link && item.link['method'] ? item.link['method'] : '';
- item.hidden = !item.hidden;
- if($menu.is('#subNavbar'))
- {
- moduleName = currentModule;
- methodName = item.name;
- }
- $a.parent().toggleClass('menu-hidden', item.hidden);
- /* Update parent menu by sub menu. */
- if($a.parent().parent().hasClass('dropdown-menu'))
- {
- var hidden = true;
- $a.parent().parent().children().each(function()
- {
- hidden = $(this).hasClass('menu-hidden') && hidden;
- });
- $a.parent().parent().parent().parent().toggleClass('menu-hidden', hidden);
- }
- updateConfig($menu);
- e.stopPropagation();
- });
- $('#saveMenuBtn').click(function()
- {
- var postData = [{'module': 'main', value: formatMenuConfig(menuConfig.main)}];
- $.each(menuConfig['module'], function(moduleName, items)
- {
- postData.push({'module': moduleName, value: formatMenuConfig(items)});
- });
- $.each(menuConfig['feature'], function(moduleName, feature)
- {
- if(!feature) return;
- $.each(feature, function(methodName, items)
- {
- if(items) postData.push({'module': moduleName, 'method': methodName, value: formatMenuConfig(items)});
- });
- });
- postData = $.map(postData, JSON.stringify);
- setPublic = $('#setPublic1').prop('checked') ? 1 : 0;
- $.post(createLink('custom', 'ajaxSetMenu'), {menus: postData, setPublic: setPublic}, function(data)
- {
- if(data.result === 'success') window.parent.location.reload()
- if(data.message) alert(data.message);
- }, 'json').error(function(e) {alert(lang.timeout);});
- }).on('mouseenter', function() {$menuEditor.addClass('preview')})
- .on('mouseout', function() {$menuEditor.removeClass('preview')});
- loadData(currentModule, currentMethod, 'all', function(result)
- {
- if(result)
- {
- updateMenu('main');
- updateMenu(currentModule);
- updateMenu(currentModule, currentMethod);
- activeCurrent(currentModule, currentMethod);
- }
- });
- $('#closeModalBtn').click(function()
- {
- window.parent.$.closeModal();
- });
- $('#resetMenuBtn').click(function()
- {
- var setPublic = $('#setPublic1').prop('checked') ? 1 : 0;
- hiddenwin.location.href = createLink('custom', 'ajaxRestoreMenu', "public=" + setPublic);
- });
- });
|