diff --git a/module/kanban/css/space.css b/module/kanban/css/space.css index b6ed386225..0318e68a95 100644 --- a/module/kanban/css/space.css +++ b/module/kanban/css/space.css @@ -12,8 +12,11 @@ @media screen and (max-width: 1500px) {.kanbans > .col {width: 25%;}} .kanbans .panel {margin: 0 0; border: 1px solid #DCDCDC; border-radius: 4px; box-shadow: none; cursor: pointer; height: 160px; margin-bottom: 5px;} .kanbans .panel:hover {border-color: #006AF1; box-shadow: 0 0 10px 0 rgba(0,0,100,.25);} -.kanbans .panel-heading {padding: 12px 24px 10px 16px;} -.kanbans .kanban-name {overflow: hidden; white-space:nowrap} +.kanbans .panel-heading {padding: 4px 2px 10px 16px;} +.kanbans .kanban-name {overflow: hidden; white-space:nowrap; width: 88%; float: left; padding-top: 8px;} +.kanbans .kanban-actions {float: right; display: none;} +.kanbans .kanban-actions .dropdown-menu.pull-right {top:31px; right: -84px; left: auto;} +.kanbans .kanban-actions .dropdown-menu.pull-left {top:31px; right:-1px; left: auto;} .kanbans .panel .label-closed {background: #AAA !important; color: #FFF; margin-top:-6px;} .kanbans .panel-body {padding: 0 16px 16px;} .kanbans .kanban-desc {color: #838a9d; word-break:break-all; height: 70px; overflow: hidden; display: -webkit-box;} diff --git a/module/kanban/js/space.js b/module/kanban/js/space.js index 026a8e880b..86d5425456 100644 --- a/module/kanban/js/space.js +++ b/module/kanban/js/space.js @@ -2,8 +2,21 @@ var $kanbans = $('.kanbans'); $kanbans.on('click', '.panel', function(e) { - if(!$(e.target).closest('.panel-actions').length) + if(!$(e.target).closest('.kanban-actions').length) { window.location.href = $(this).data('url'); } }); + +/* Display drop-down menu.*/ +$('.panel').mouseenter(function(e) +{ + $('.kanban-actions' + e.currentTarget.parentElement.dataset.id).css('display','block'); +}); + +/* Hide drop-down menu. */ +$('.panel').mouseleave(function(e) +{ + $('.kanban-actions').css('display','none'); + $('.dropdown').removeClass('open'); +}); diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 936b108a34..17dc9ac78c 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -324,7 +324,7 @@ function renderKanbanItem(item, $item) $user.html(renderUsersAvatar(assignedTo, item.id)).attr('title', title); $item.css('background-color', item.color); - $item.toggleClass('has-color', item.color != '#fff'); + $item.toggleClass('has-color', item.color != '#fff' && item.color != ''); $item.find('.info > .label-light').css('background-color', item.color); } @@ -688,7 +688,7 @@ function createLaneMenu(options) var items = []; if(privs.includes('setLane')) items.push({label: kanbanLang.setLane, icon: 'edit', url: createLink('kanban', 'setLane', 'laneID=' + lane.id + '&executionID=0&from=kanban'), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '635px'}}); - if(privs.includes('deleteLane')) items.push({label: kanbanLang.deleteLane, icon: 'trash', url: createLink('kanban', 'deleteLane', 'lane=' + lane.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbanlaneLang.confirmDelete, 'data-confirmDetail': kanbanlaneLang.confirmDeleteDetail, 'target': 'hiddenwin'}}); + if(privs.includes('deleteLane')) items.push({label: kanbanLang.deleteLane, icon: 'trash', url: createLink('kanban', 'deleteLane', 'lane=' + lane.id), attrs: {'target': 'hiddenwin'}}); var bounds = options.$trigger[0].getBoundingClientRect(); items.$options = {x: bounds.right, y: bounds.top}; @@ -710,9 +710,9 @@ function createCardMenu(options) var items = []; if(privs.includes('editCard')) items.push({label: kanbanLang.editCard, icon: 'edit', url: createLink('kanban', 'editCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '80%'}}); - if(privs.includes('archiveCard') && kanban.archived == '1') items.push({label: kanbanLang.archiveCard, icon: 'card-archive', url: createLink('kanban', 'archiveCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); + if(privs.includes('archiveCard') && kanban.archived == '1') items.push({label: kanbanLang.archiveCard, icon: 'card-archive', url: createLink('kanban', 'archiveCard', 'cardID=' + card.id), attrs: {'target': 'hiddenwin'}}); if(privs.includes('copyCard')) items.push({label: kanbanLang.copyCard, icon: 'copy', url: createLink('kanban', 'copyCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); - if(privs.includes('deleteCard')) items.push({label: kanbanLang.deleteCard, icon: 'trash', url: createLink('kanban', 'deleteCard', 'cardID=' + card.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbancolumnLang.confirmDelete, 'data-confirmDetail': kanbancolumnLang.confirmDeleteDetail, 'target': 'hiddenwin'}}); + if(privs.includes('deleteCard')) items.push({label: kanbanLang.deleteCard, icon: 'trash', url: createLink('kanban', 'deleteCard', 'cardID=' + card.id), attrs: {'target': 'hiddenwin'}}); if(privs.includes('moveCard')) { var moveCardItems = []; @@ -772,8 +772,8 @@ function createColumnMenu(options) items.push({label: kanbanLang.createColumnOnRight, icon: 'col-add-right', url: createLink('kanban', 'createColumn', 'columnID=' + column.id + '&position=right'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); } if(privs.includes('copyColumn')) items.push({label: kanbanLang.copyColumn, icon: 'copy', url: createLink('kanban', 'copyColumn', 'columnID=' + column.id), className: 'iframe', attrs: {'data-toggle': 'modal'}}); - if(privs.includes('archiveColumn') && kanban.archived == '1') items.push({label: kanbanLang.archiveColumn, icon: 'card-archive', url: createLink('kanban', 'archiveColumn', 'columnID=' + column.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbancolumnLang.confirmArchive, 'data-confirmDetail': kanbancolumnLang.confirmArchiveDetail, 'data-confirmButton': lang.archive, 'data-confirming': lang.archiving}}); - if(privs.includes('deleteColumn')) items.push({label: kanbanLang.deleteColumn, icon: 'trash', url: createLink('kanban', 'deleteColumn', 'columnID=' + column.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbancolumnLang.confirmDelete, 'data-confirmDetail': kanbancolumnLang.confirmDeleteDetail, 'target': 'hiddenwin'}}); + if(privs.includes('archiveColumn') && kanban.archived == '1') items.push({label: kanbanLang.archiveColumn, icon: 'card-archive', url: createLink('kanban', 'archiveColumn', 'columnID=' + column.id), attrs: {'target': 'hiddenwin'}}); + if(privs.includes('deleteColumn')) items.push({label: kanbanLang.deleteColumn, icon: 'trash', url: createLink('kanban', 'deleteColumn', 'columnID=' + column.id), attrs: {'target': 'hiddenwin'}}); var bounds = options.$trigger[0].getBoundingClientRect(); items.$options = {x: bounds.right, y: bounds.top}; diff --git a/module/kanban/view/space.html.php b/module/kanban/view/space.html.php index 4d5f4b870e..22dd7e3504 100644 --- a/module/kanban/view/space.html.php +++ b/module/kanban/view/space.html.php @@ -32,6 +32,7 @@ +