Merge commit '580eedcab22dc7ead82134d351ef118578359935' as 'plugins/redmine_workload'
This commit is contained in:
BIN
plugins/redmine_workload/assets/images/background-holiday.png
Normal file
BIN
plugins/redmine_workload/assets/images/background-holiday.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 170 B |
BIN
plugins/redmine_workload/assets/images/background-holiday.xcf
Normal file
BIN
plugins/redmine_workload/assets/images/background-holiday.xcf
Normal file
Binary file not shown.
BIN
plugins/redmine_workload/assets/images/logo.png
Normal file
BIN
plugins/redmine_workload/assets/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
plugins/redmine_workload/assets/images/logo.xcf
Normal file
BIN
plugins/redmine_workload/assets/images/logo.xcf
Normal file
Binary file not shown.
64
plugins/redmine_workload/assets/javascripts/slides.js
Normal file
64
plugins/redmine_workload/assets/javascripts/slides.js
Normal file
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
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);
|
||||
}
|
||||
});
|
||||
});
|
||||
336
plugins/redmine_workload/assets/stylesheets/style.css
Normal file
336
plugins/redmine_workload/assets/stylesheets/style.css
Normal file
@@ -0,0 +1,336 @@
|
||||
/*******************************************************************************
|
||||
* Color scheme.
|
||||
******************************************************************************/
|
||||
:root {
|
||||
--lightgray: #eee;
|
||||
--mediumgray: #c0c0c0;
|
||||
--anthracite: #333;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Normalisation.
|
||||
******************************************************************************/
|
||||
|
||||
.controller-workloads table th, table td {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.controller-workloads table dt {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.controller-workloads table dd {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Styles for the filter form.
|
||||
******************************************************************************/
|
||||
|
||||
.controller-workloads .filters > div,
|
||||
.controller-workloads .filters .apply {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.controller-workloads .filters .apply {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
legend {
|
||||
color: var(--anthracite);
|
||||
}
|
||||
|
||||
.controller-workloads .wrapper {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.controller-workloads .users select,
|
||||
.controller-workloads .groups select {
|
||||
width: 300px;
|
||||
height: 150px;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* Styles for the header of workload table.
|
||||
******************************************************************************/
|
||||
|
||||
.controller-workloads .data .workload_hdr {
|
||||
background-color: var(--lightgray);
|
||||
border: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
/* Column width if no data is displayed */
|
||||
.controller-workloads .data .day-of-month,
|
||||
.controller-workloads .data .day-of-week {
|
||||
min-width: 25px;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
/* Month names */
|
||||
.controller-workloads .data .month-name {
|
||||
border-left: 1px solid var(--mediumgray);
|
||||
border-top: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data .month-name:last-child {
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
/* Num of week */
|
||||
.controller-workloads .data .num-of-week.first-day-of-week {
|
||||
border-left: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data .num-of-week.last-day-of-week {
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
|
||||
/* Day of month */
|
||||
.controller-workloads .data .day-of-month.firstDayOfMonth,
|
||||
.controller-workloads .data .day-of-month:first-child {
|
||||
border-left: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data .day-of-month:last-child {
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
/* Day of week */
|
||||
.controller-workloads .data .day-of-week.firstDayOfWeek,
|
||||
.controller-workloads .data .day-of-week:first-child {
|
||||
border-left: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data .day-of-week:last-child {
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Styles for the workload table.
|
||||
******************************************************************************/
|
||||
|
||||
.controller-workloads .wrapper {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.controller-workloads .data {
|
||||
table-layout: fixed;
|
||||
border-spacing: 0 3px;
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.controller-workloads .data th {
|
||||
font-weight: initial;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Styles for the stuff that may be shown or hidden.
|
||||
-----------------------------------------------------------------------------*/
|
||||
.controller-workloads .data .additional-group-info,
|
||||
.controller-workloads .data .additional-user-info,
|
||||
.controller-workloads .data .additional-project-info,
|
||||
.controller-workloads .data .invisible-issues-summary,
|
||||
.controller-workloads .data tbody[class^="user-total-workload-in-group-"],
|
||||
.controller-workloads .data .project-total-workload,
|
||||
.controller-workloads .data .issue-workloads {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.controller-workloads .data .trigger {
|
||||
display: inline-block;
|
||||
cursor: default;
|
||||
text-align: center;
|
||||
font-size: 0.9em;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.controller-workloads table dt.mt-5,
|
||||
.controller-workloads table dd.mt-5 {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Table heads on the left side.
|
||||
-----------------------------------------------------------------------------*/
|
||||
.controller-workloads .data .group-description,
|
||||
.controller-workloads .data .user-description,
|
||||
.controller-workloads .data .project-description,
|
||||
.controller-workloads .data .issue-description,
|
||||
.controller-workloads .data .invisible-workload-description {
|
||||
text-align: left;
|
||||
border-left: 1px solid var(--mediumgray);
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
width: 300px;
|
||||
min-width: 300px;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .group-description {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .user-description {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .project-description {
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .issue-description,
|
||||
.controller-workloads .data .invisible-workload-description {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .invisible-workload-description {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.controller-workloads .data .additional-group-info,
|
||||
.controller-workloads .data .additional-user-info,
|
||||
.controller-workloads .data .additional-project-info {
|
||||
font-size: 0.9em;
|
||||
font-weight: normal;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .additional-group-info dt,
|
||||
.controller-workloads .data .additional-user-info dt,
|
||||
.controller-workloads .data .additional-project-info dt {
|
||||
float: left;
|
||||
clear: left;
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .additional-group-info dd,
|
||||
.controller-workloads .data .additional-user-info dd,
|
||||
.controller-workloads .data .additional-project-info dd {
|
||||
margin-left: 210px;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Real table data
|
||||
-----------------------------------------------------------------------------*/
|
||||
.controller-workloads .tooltip span.tip {
|
||||
top: 20px;
|
||||
}
|
||||
|
||||
.controller-workloads td.hours {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.controller-workloads .data tr td:last-child {
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data tr:last-child td,
|
||||
.controller-workloads .data tr:last-child th {
|
||||
border-bottom: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data .user-total-workload {
|
||||
background-color: #F6F7F8;
|
||||
}
|
||||
|
||||
.controller-workloads .data .issue-workloads.odd {
|
||||
background-color: #F6F7F8;
|
||||
}
|
||||
|
||||
.controller-workloads .data .issue-workloads.odd.overdue {
|
||||
background-color: #ecb4b4;
|
||||
}
|
||||
|
||||
.controller-workloads .data .issue-workloads.even {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.controller-workloads .data .issue-workloads.even.overdue {
|
||||
background-color: #f8d0d0;
|
||||
}
|
||||
|
||||
.controller-workloads .data .issue-workloads:hover,
|
||||
.controller-workloads .data .group-total-workload:hover,
|
||||
.controller-workloads .data .user-total-workload:hover,
|
||||
.controller-workloads .data .project-total-workload:hover{
|
||||
background-color: #D7D7D7!important;
|
||||
}
|
||||
|
||||
.controller-workloads .data td {
|
||||
padding: 0;
|
||||
font-size: .8em;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
width: 25px;
|
||||
min-width: 25px;
|
||||
}
|
||||
|
||||
.controller-workloads .data .today {
|
||||
border-right: 2px dashed red;
|
||||
padding-left: 2px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
/* Styling of the spans in the table */
|
||||
.controller-workloads .data .hours span {
|
||||
display: block;
|
||||
padding-top: .6em;
|
||||
padding-bottom: .3em;
|
||||
height: 1em;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.controller-workloads .data .hours.none span {
|
||||
color: var(--anthracite);
|
||||
}
|
||||
|
||||
.controller-workloads .data .none span {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.controller-workloads .data .active span {
|
||||
background-color: rgba(200, 200, 200, 0.5);
|
||||
}
|
||||
|
||||
.controller-workloads .data .low span {
|
||||
background: green;
|
||||
}
|
||||
|
||||
.controller-workloads .data .normal span {
|
||||
background: yellow;
|
||||
color: var(--anthracite);
|
||||
}
|
||||
|
||||
.controller-workloads .data .high span {
|
||||
background: red;
|
||||
}
|
||||
|
||||
.controller-workloads .data .holiday {
|
||||
background-color: var(--lightgray);
|
||||
border-left: 1px solid var(--mediumgray);
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data .holiday.today {
|
||||
background-color: var(--lightgray);
|
||||
border-left: 2px solid red;
|
||||
border-right: 1px solid var(--mediumgray);
|
||||
}
|
||||
|
||||
.controller-workloads .data .holiday span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.controller-workloads .data .active.holiday span {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Styles for national holiday page.
|
||||
******************************************************************************/
|
||||
|
||||
#year-nav {
|
||||
padding-top: 2rem;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user