217 lines
7.5 KiB
JavaScript
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');
|
|
}
|
|
});
|
|
});
|