diff --git a/module/common/view/kanban.html.php b/module/common/view/kanban.html.php index ec721b4edf..4474b236ee 100644 --- a/module/common/view/kanban.html.php +++ b/module/common/view/kanban.html.php @@ -367,18 +367,17 @@ function affixKanbanHeader($kanbanBoard, affixed) */ function updateKanbanAffixState() { - var $boards = $('.kanban-board'); + var $boards = $('.kanban-board'); var $lastAffixedBoard = $boards.filter('.kanban-affixed'); + var containerTop = window.kanbanAffixContainer ? $(window.kanbanAffixContainer)[0].getBoundingClientRect().top : 0; var $currentAffixedBoard; - var currentOffsetTop = 0; - var scrollTop = $(window).scrollTop(); + $('.kanban-board').each(function() { var $board = $(this); - var offsetTop = $board.offset().top; - if(scrollTop >= offsetTop && offsetTop > currentOffsetTop && scrollTop < (offsetTop + $board.outerHeight() - 72)) + var bounds = $board[0].getBoundingClientRect(); + if(bounds.top < containerTop && bounds.bottom > (containerTop)) { - currentOffsetTop = offsetTop; $currentAffixedBoard = $board; } }); @@ -399,7 +398,6 @@ $.extend($.fn.kanban.Constructor.DEFAULTS, { readonly: true, maxColHeight: 260, - /* laneItemsClass: 'scrollbar-hover', */ // only show scrollbar on mouse hover itemRender: renderKanbanItem, useFlex: false, showCount: true, @@ -448,7 +446,7 @@ $(function() updateKanbanAffixState(); updateTimer = null; }; - $(window).on('scroll resize', function(e) + $(window.kanbanAffixContainer || window).on('scroll resize', function(e) { if(updateTimer) { diff --git a/module/execution/css/kanban.css b/module/execution/css/kanban.css index cef2290d04..09258a333c 100644 --- a/module/execution/css/kanban.css +++ b/module/execution/css/kanban.css @@ -1,3 +1,4 @@ +#main {padding-bottom: 10px;} #main > .container {max-width: 1960px!important; padding: 0 10px} .kanban + .kanban {margin-top: 15px} @@ -29,6 +30,12 @@ .kanban-affixed .kanban-header-col > .title > .text, .kanban-affixed .kanban-header-col > .title > .count {color: #fff!important;} +#kanbanContainer {margin: 0;} +#kanbanContainer > .panel-body {overflow: auto;} +#kanbans .kanban {min-height: initial;} +#kanbans .kanban-lane {min-height: 150px;} +#kanbans .kanban-affixed > .kanban-header {top: 100px;} + .dropdown-menu a {text-align: left;} .scrollbar-hover {max-height: 2000px; overflow: scroll !important;} .c-type, .c-group {width: 150px !important; overflow: unset;} diff --git a/module/execution/js/kanban.js b/module/execution/js/kanban.js index 8ecea5c0f5..204d6504d3 100644 --- a/module/execution/js/kanban.js +++ b/module/execution/js/kanban.js @@ -636,6 +636,14 @@ function createTaskMenu(options) return items; } +/** Resize kanban container size */ +function resizeKanbanContainer() +{ + var $container = $('#kanbanContainer'); + var maxHeight = window.innerHeight - 98 - 15; + $container.children('.panel-body').css('max-height', maxHeight); +} + /* Define menu creators */ window.menuCreators = { @@ -647,6 +655,9 @@ window.menuCreators = task: createTaskMenu, }; +/* Set kanban affix container */ +window.kanbanAffixContainer = '#kanbanContainer>.panel-body'; + /* Overload kanban default options */ $.extend($.fn.kanban.Constructor.DEFAULTS, { @@ -657,7 +668,7 @@ $.extend($.fn.kanban.Constructor.DEFAULTS, { maxWidth = Math.max(maxWidth, $(this).outerWidth()); }); - $('#kanbanContainer').css('min-width', maxWidth + 40); + $('#kanbans').css('min-width', maxWidth); } }); @@ -726,6 +737,10 @@ $(function() $.zui.ContextMenu.show(items, items.$options || {event: event}); }); + /* Resize kanban container on window resize */ + resizeKanbanContainer(); + $(window).on('resize', resizeKanbanContainer); + /* Hide contextmenu when page scroll */ $(window).on('scroll', function() {