Files
EasySoft-ZenTaoPMS/module/doc/js/common.js
2016-11-14 15:52:38 +08:00

229 lines
11 KiB
JavaScript

function showLibMenu()
{
var $item = $('#currentItem');
var $li = $item.closest('li');
var $menu = $('#dropMenu');
if($li.hasClass('show')) {$li.removeClass('show'); return;}
var $search = $('#searchLib');
if(!$li.data('showagain'))
{
$menu.addClass('loading');
var isBigMode = false;
var items = {};
var itemIdSeed = $.zui.uuid();
var orderSeed = 1;
$.getJSON(createLink('doc', 'ajaxGetAllLibs'), function(data)
{
$menu.removeClass('loading');
var $list = $('#libMenuProductGroup > .lib-menu-list');
var productCount = 0, projectCount = 0, customCount = 0;
$.each(data.product, function(idx, product)
{
$list.append('<div class="list-menu-item-heading" data-status="' + product.status + '" data-product="' + product.id + '">[ ' + product.name + ' ]</div>');
$.each(product.libs, function(libId, libName)
{
var url = libId === 'files' ? createLink('doc', 'showFiles', 'type=product&objectID=' + product.id) : createLink('doc', 'browse', 'libID=' + libId);
var url = libId === 'project' ? createLink('doc', 'allLibs', 'type=project&extra=' + product.id) : url;
var itemId = 'lib-' + itemIdSeed++;
$list.append('<a data-order="' + (orderSeed++) + '" data-status="' + product.status + '" title="' + product.name + '/' + libName + '" id="' + itemId + '" href="' + url + '" class="list-menu-item" data-type="product" data-product="' + product.id + '" data-id="' + libId + '">' + libName + '</a>');
items[itemId] = {type: 'product', id: libId, name: libName, objectId: product.id, product: product.name, search: (libName + ' ' + product.name).toLowerCase()};
productCount++;
});
$list.append('<div class="list-menu-item-footer" data-status="' + product.status + '" data-product="' + product.id + '"></div>');
});
$list.toggleClass('lib-list-bg', productCount > 4);
$list = $('#libMenuProjectGroup > .lib-menu-list');
$.each(data.project, function(idx, project)
{
$list.append('<div class="list-menu-item-heading" data-status="' + project.status + '" data-project="' + project.id + '">[ ' + project.name + ' ]</div>');
$.each(project.libs, function(libId, libName)
{
var url = libId === 'files' ? createLink('doc', 'showFiles', 'type=project&objectID=' + project.id) : createLink('doc', 'browse', 'libID=' + libId);
var itemId = 'lib-' + itemIdSeed++;
$list.append('<a data-order="' + (orderSeed++) + '" data-status="' + project.status + '" title="' + project.name + '/' + libName + '" id="' + itemId + '" href="' + url + '" class="list-menu-item" data-type="project" data-project="' + project.id + '" data-id="' + libId + '">' + libName + '</a>');
items[itemId] = {type: 'project', id: libId, name: libName, objectId: project.id, project: project.name, search: (libName + ' ' + project.name).toLowerCase()};
projectCount++;
});
$list.append('<div class="list-menu-item-footer" data-status="' + project.status + '" data-project="' + project.id + '"></div>');
});
$list.find('[data-status="done"]').addClass('hidden');
$list.toggleClass('lib-list-bg', projectCount > 4);
$list = $('#libMenuCustomGroup > .lib-menu-list');
$.each(data.custom, function(libId, libName)
{
var url = createLink('doc', 'browse', 'libID=' + libId);
var itemId = 'lib-' + itemIdSeed++;
$list.append('<a data-order="' + (orderSeed++) + '" title="' + libName + '" id="' + itemId + '" href="' + url + '" class="list-menu-item" data-type="custom" data-id="' + libId + '">' + libName + '</a>');
items[itemId] = {type: 'custom', id: libId, name: libName, search: libName.toLowerCase()};
customCount++;
});
$list.toggleClass('lib-list-bg', customCount > 4);
var $items = $menu.find('.list-menu-item');
$items.filter('[data-id="' + $item.data('libId') + '"]').addClass('current');
$items.first().addClass('active');
$menu.toggleClass('lib-menu-lg', productCount > 9 || projectCount > 9 || customCount > 9);
var lastSearchKey = $search.val();
$search.on('change keyup paste input propertychange', function()
{
var searchKey = $search.val();
if(searchKey == lastSearchKey) return;
lastSearchKey = searchKey;
$menu.find('.list-menu-item.active').removeClass('active');
if(searchKey)
{
var $menuHeadings = $menu.find('.list-menu-item-heading').addClass('hidden');
var $menuFooters = $menu.find('.list-menu-item-footer').addClass('hidden');
searchKey = searchKey.toLowerCase();
$.each(items, function(itemId, item)
{
var isMatch = item.search.indexOf(searchKey) > -1 || '@' + item.type === searchKey || item.id === searchKey;
$('#' + itemId).toggleClass('hidden', !isMatch);
if(isMatch && item.type !== 'custom' && item.objectId)
{
$menuHeadings.filter('[data-' + item.type + '="' + item.objectId + '"]').removeClass('hidden');
$menuFooters.filter('[data-' + item.type + '="' + item.objectId + '"]').removeClass('hidden');
}
});
}
else
{
$menu.find('.list-menu-item.hidden,.list-menu-item-heading.hidden,.list-menu-item-footer.hidden').removeClass('hidden');
var hasActive = ($('.lib-menu-project-done').hasClass('active'));
if(hasActive)
{
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status!="done"]').addClass('hidden');
}
else
{
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status="done"]').addClass('hidden');
}
}
$menu.find('.list-menu-item:not(.hidden)').first().addClass('active');
}).on('keydown', function(e)
{
$items = $menu.find('.list-menu-item');
var code = e.which;
var $this = $items.filter('.list-menu-item.active');
if(code === 38) // up
{
$this.removeClass('active');
if($this.length)
{
var order = $this.data('order') - 1;
if(order > 0)
{
var $prev = $items.filter('.list-menu-item[data-order="' + order + '"]');
while($prev.hasClass('hidden') && order > 1)
{
order -= 1;
$prev = $items.filter('.list-menu-item[data-order="' + order + '"]');
}
if($prev.length)
{
$prev.addClass('active');
return;
}
}
}
$items.last(':not(.hidden)').addClass('active');
}
else if(code === 40) // down
{
$this.removeClass('active');
if($this.length)
{
var order = $this.data('order') + 1;
if(order <= $items.length)
{
var $next = $items.filter('.list-menu-item[data-order="' + order + '"]');
while($next.hasClass('hidden') && order <= $items.length)
{
order += 1;
$next = $items.filter('.list-menu-item[data-order="' + order + '"]');
}
if($next.length)
{
$next.addClass('active');
return;
}
}
}
$items.first(':not(.hidden)').addClass('active');
}
else if(code === 13) // enter
{
if($this.length) window.location.href = $this.attr('href');
}
});
$menu.on('mouseenter', '.list-menu-item', function()
{
$menu.find('.list-menu-item.active').removeClass('active');
$(this).addClass('active');
});
$menu.on('click', '.lib-menu-list-heading', function()
{
var libType = $(this).data('type');
var showFilter = $menu.attr('data-filter') != libType;
$menu.attr('data-filter', showFilter ? libType : null);
});
$menu.on('click', '.lib-menu-project-done', function()
{
var hasActive = ($(this).hasClass('active'));
if(hasActive)
{
$(this).removeClass('active');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status!="done"]').removeClass('hidden');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status="done"]').addClass('hidden');
}
else
{
$(this).addClass('active');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status!="done"]').addClass('hidden');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status="done"]').removeClass('hidden');
}
});
});
$li.data('showagain', true);
$li.on('click', function(e){e.stopPropagation();});
$(document).click(function(){$li.removeClass('show');});
}
$menu.find('.lib-menu-list').css('max-height', $(window).height() - 210);
$li.addClass('show');
$search.focus();
}
function loadModules(libID)
{
link = createLink('doc', 'ajaxGetModules', 'libID=' + libID);
$('#moduleBox').load(link, function(){$('#moduleBox').find('select').chosen(defaultChosenOptions)});
}
function toggleAcl(acl)
{
if(acl == 'custom')
{
$('#whiteListBox').removeClass('hidden');
}
else
{
$('#whiteListBox').addClass('hidden');
}
}
$(document).ready(function()
{
$('[data-id="create"] a').modalTrigger({type: 'iframe', width: 800});
$('#modulemenu .nav li').removeClass('active');
if(typeof(type) != 'undefined') $('#modulemenu .nav li[data-id="' + type + '"]').addClass('active');
});