Files
redmine/plugins/redmine_workload/assets/javascripts/slides.js

65 lines
2.5 KiB
JavaScript

/**
Toggle along the hierarchie tree.
When opening, open level by level. When closing, close the item with all
lower levels at once.
*/
$(document).ready(function() {
$('.trigger').click(function() {
var OPENED = '▼'
var CLOSED = '▶'
$(this).toggleClass('closed opened');
identifier = $(this).attr('data-for');
identifierClasses = identifier.trim().replace(/\s/g, ".");
// topDownHierarchieChain shows current hierarchie level on the left and the css
// class of the next hierarchie level on the right hand side.
topDownHierarchieChain = new Map([
["group-description " + identifier, ".user-total-workload-in-" + identifierClasses],
["user-description " + identifier, ".project-total-workload." + identifierClasses],
["project-description " + identifier, ".issue-workloads." + identifierClasses]
]);
// bottomUpHierarchies shows current hierarchie level on the left and all
// lower hierarchie levels on the right hand side.
bottomUpHierarchieChain = new Map([
["group-description " + identifier, [".issue-workloads." + identifierClasses,
".project-total-workload." + identifierClasses,
".user-total-workload-in-" + identifierClasses]],
["user-description " + identifier, [".issue-workloads." + identifierClasses,
".project-total-workload." + identifierClasses]],
["project-description " + identifier, [".issue-workloads." + identifierClasses]]
]);
currentHierarchieLevel = $(this).parent().attr('class');
if ($(this).hasClass('opened')) {
$(this).show();
// Shows additional info
$(this).siblings().show();
// Reveals the next hierarchie level
nextHierarchieLevelClass = topDownHierarchieChain.get(currentHierarchieLevel);
$(nextHierarchieLevelClass).each(function(){
$(this).show(); // but keep its 'children' closed if any
$(this).siblings('.invisible-issues-summary.' + identifierClasses).show();
});
$(this).html(OPENED);
}
else {
lowerHierarchieLevelClasses = bottomUpHierarchieChain.get(currentHierarchieLevel);
// Collapses all lower levels of the currentHierarchieLevel at once
// as defined in bottomUpHierarchieChain.
lowerHierarchieLevelClasses.forEach(function(css){
$(css).hide();
$(css).siblings('.invisible-issues-summary.' + identifierClasses).hide();
currentHierarchieLevel = $(css).find('span.trigger.opened');
currentHierarchieLevel.html(CLOSED);
currentHierarchieLevel.siblings('dl').hide();
})
$(this).siblings().hide();
$(this).html(CLOSED);
}
});
});