2023-05-16 10:47:08 +08:00

217 lines
7.5 KiB
JavaScript

/**
* Expand or collapse text.
*
* @access public
* @return void
*/
function limitText()
{
var fullText;
var limitText;
var $text = $(this);
var options = $.extend({limitSize: 40, suffix: '…'}, $text.data());
var text = $text.text();
if(text.length > options.limitSize)
{
fullText = $text.html();
limitText = text.substring(0, options.limitSize) + options.suffix;
$text.text(limitText).addClass('limit-text-on');
var $toggleBtn = options.toggleBtn ? $(options.toggleBtn) : $text.next('.text-limit-toggle');
$toggleBtn.text($toggleBtn.data('textExpand'));
$toggleBtn.on('click', function()
{
var isLimitOn = $text.toggleClass('limit-text-on').hasClass('limit-text-on');
if(isLimitOn) $text.text(limitText);
else $text.html(fullText);
$toggleBtn.text($toggleBtn.data(isLimitOn ? 'textExpand' : 'textCollapse'));
});
}
else
{
(options.toggleBtn ? $(options.toggleBtn) : $text.next('.text-limit-toggle')).hide();
}
$text.removeClass('hidden');
};
$.fn.textLimit = function(){return this.each(limitText);};
$(function()
{
var $taskTree = $('#taskTree').tree(
{
name: 'taskTree',
initialState: 'preserve'
});
var taskTree = $taskTree.data('zui.tree');
if(!taskTree) return;
var sortItems = function($items)
{
var items = $items.toArray();
for(i = 0; i < items.length; i++)
{
for(j = 0; j < items.length - 1 - i; j++)
{
if($(items[j + 1]).data('id').toString() > $(items[j]).data('id').toString())
{
var tmp = items[j + 1];
items[j + 1] = items[j];
items[j] = tmp;
}
}
}
return items;
}
/* Expand the tree list according to the list config.*/
var showTreeLevel = function(level)
{
if(level === 'task' || level === 'story') $('.btn-tree-view').removeClass('btn-active-text');
$('#taskTree li.item-product').removeClass('hidden');
$('#taskTree li.item-module').removeClass('hidden');
$('#taskTree li.item-story').removeClass('hidden');
$('#taskTree li.item-task').removeClass('hidden');
if((level === 'root' && collapse == false) || (level === 'task' && collapse == true) || (level === 'story' && collapse == true))
{
taskTree.collapse();
collapse = true;
if(level === 'task') type = 'task';
if(level === 'story') type = 'story';
$('[data-type=' + type + ']').addClass('btn-active-text');
}
else if((level === 'all' && type === 'task') || level === 'task')
{
type = 'task';
collapse = false;
$('[data-type=task]').addClass('btn-active-text');
taskTree.collapse();
taskTree.expand($taskTree.find('li.has-list'), true);
}
else if((level === 'all' && type === 'story') || level === 'story')
{
type = 'story';
collapse = false;
$('[data-type=story]').addClass('btn-active-text');
taskTree.collapse();
taskTree.show($taskTree.find('li.item-story').parent().parent(), true);
$('#taskTree li.item-task').addClass('hidden');
var $moduleItems = $('#taskTree li.item-module');
moduleItems = sortItems($moduleItems);
for(i = 0; i < moduleItems.length; i++)
{
var items = $(moduleItems[i]).find('ul li:not(.hidden)').length;
if(items == 0) $(moduleItems[i]).addClass('hidden');
}
var $productItems = $('#taskTree li.item-product');
$productItems.each(function()
{
var items = $(this).find('ul li:not(.hidden)').length;
if(items == 0) $(this).addClass('hidden');
});
}
$('#main').toggleClass('tree-show-root', collapse);
};
$(document).on('click', '.btn-tree-view', function()
{
showTreeLevel($(this).data('type'));
return false;
});
/* Expand the all nodes of tree when first visit.*/
showTreeLevel(type);
/* Show the content of story or task on right area.*/
var $itemContent = $('#itemContent');
var $mainContent = $('#mainContent');
var isItemLoading = false, lastAjaxRequest;
var adjustSidePosition = function()
{
if($mainContent.hasClass('hide-side')) return;
var scrollTop = $(document).scrollTop();
var $cell = $itemContent.closest('.cell');
var bounding = $cell.parent()[0].getBoundingClientRect();
$cell.css(
{
left: bounding.left + 20,
top: Math.max(20, 150 - scrollTop),
bottom: 60,
});
};
var showItem = function(url, loadingText)
{
$.zui.messager.hide();
$mainContent.toggleClass('hide-side', !url);
if (!url)
{
$taskTree.find('li.selected').removeClass('selected');
isItemLoading = false;
$.zui.store.set('project/tree/showItem', false);
return;
}
adjustSidePosition();
if (lastAjaxRequest) lastAjaxRequest.abort();
$itemContent.empty().addClass('loading').attr('data-loading', loadingText || '');
isItemLoading = true;
lastAjaxRequest = $.ajax(
{
url: url,
success: function(data)
{
if (!isItemLoading) return;
$itemContent.html(data).removeClass('loading');
lastAjaxRequest = null;
isItemLoading = false;
$itemContent.find('.text-limit').textLimit();
$itemContent.find('.histories').histories();
$itemContent.find('.iframe').modalTrigger();
$.zui.store.set('project/tree/showItem', url);
adjustSidePosition();
setTimeout(adjustSidePosition, 300);
},
error: function()
{
$mainContent.addClass('hide-side');
isItemLoading = false;
$.zui.messager.danger(window.lang.timeout);
}
});
};
var stopPropagation = function(e) {e.stopPropagation();};
$taskTree.on('click', '.tree-link', function(e)
{
var $link = $(this);
$.zui.store.set('project/tree/parentLi', $link.closest('li').attr('data-id').length > 0 ? $link.closest('li').attr('data-id') : '')
showItem($link.attr('href'), $link.find('.title').text());
$taskTree.find('li.selected').removeClass('selected');
$link.closest('li').addClass('selected');
e.preventDefault();
stopPropagation(e);
});
$itemContent.on('click', function(event)
{
if(!$(event.target).closest('a[data-app]').length || $(event.target).closest('a').hasClass('iframe')) event.stopPropagation();
});
$taskTree.on('click', stopPropagation);
$(window).on('resize scroll', adjustSidePosition);
$(document).on('click', function()
{
showItem(false);
}).on('ready', function()
{
var lastUrl = $.zui.store.get('project/tree/showItem');
var lastLi = $.zui.store.get('project/tree/parentLi');
if(lastUrl)
{
showItem(lastUrl);
$taskTree.find('li[data-id="' + lastLi + '"]').find('.tree-link[href="' + lastUrl + '"]').closest('li').addClass('selected');
}
});
});