From 80ca6c55857b7f007102a4d31da018f039c58147 Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Fri, 17 Dec 2021 08:43:48 +0800 Subject: [PATCH 1/4] *Finish task.*Finish task.*Finish task.*Finish task.*Finish task.*Finish task.*Finish task.*Finish task. --- module/kanban/css/view.css | 7 +++ module/kanban/css/viewcard.css | 1 + module/kanban/js/view.js | 89 +++++++++++++++++--------------- module/kanban/view/view.html.php | 1 + 4 files changed, 57 insertions(+), 41 deletions(-) diff --git a/module/kanban/css/view.css b/module/kanban/css/view.css index 8b7e411ee1..c033898342 100644 --- a/module/kanban/css/view.css +++ b/module/kanban/css/view.css @@ -65,6 +65,13 @@ body {background-color: #fff} .region .kanban-item > .kanban-card > .info > .estimate{margin-left: 10px; color: #999} .region .kanban-item > .kanban-card > .info > .time {margin-left: 10px; font-size: 12px; background: rgb(242, 242, 242)} .region .kanban-item > .kanban-card > .info > .user {position: absolute; right: 0; top: 0} +.region .kanban-item > .kanban-card > .info > .user > .avatar {display: inline-block; width: 24px; height: 24px; line-height: 24px; margin-right: 0px;} +.region .kanban-item > .kanban-card > .info > .user > span {display: inline-block; color: transparent; width: 2px; height: 2px; background-color: #8990a2; position: sticky; border-radius: 50%; top: 3px; margin: 0 7px;} +.region .kanban-item > .kanban-card > .info > .user > span:before, +.region .kanban-item > .kanban-card > .info > .user > span:after {content: ''; display: block; position: absolute; width: 2px; height: 2px; background-color: #8990a2; top: 0; border-radius: 50%} +.region .kanban-item > .kanban-card > .info > .user > span:before {left: -4px;} +.region .kanban-item > .kanban-card > .info > .user > span:after {right: -4px;} +.region .kanban-item > .kanban-card > .info > .user > div {display: inline-block; height: 24px; position: sticky; border-radius: 50%; top: 3px; margin: 5px;} .region .kanban-item > .kanban-card > .actions > a {display: block; float: left; width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 4px; opacity: .7;} .region .kanban-item > .kanban-card > .actions > a:hover {background-color: rgba(0,0,0,.075); opacity: 1;} .region .kanban-item:hover > .actions {opacity: 1;} diff --git a/module/kanban/css/viewcard.css b/module/kanban/css/viewcard.css index 5644fd1cf9..100bcb57cd 100644 --- a/module/kanban/css/viewcard.css +++ b/module/kanban/css/viewcard.css @@ -1,2 +1,3 @@ [lang^='en'] .table-data tbody>tr>th {width: 100px;} .pull-left div {float: left !important;} + diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 5cbad2bc71..cee6303c5a 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -189,6 +189,48 @@ function renderLaneName($lane, lane, $kanban, columns, kanban) } } +/** + * Render avatars of user. + * @param {String|{account: string, avatar: string}} user User account or user object + * @returns {string} + */ +function renderUsersAvatar(users, itemID, size) +{ + var avatarSizeClass = 'avatar-' + (size || 'sm'); + var link = createLink('kanban', 'assigncard', 'id=' + itemID, '', true); + + if(users.length == 0 || (users.length == 1 && users[0] == '')) + { + return $(''); + } + + var assignees = []; + for(var user of users) + { + var $noPrivAndNoAssigned = $('
'); + if(!priv.canAssignCard && !user) + { + assignees.push($noPrivAndNoAssigned); + continue; + } + + if(!user) + { + assignees.push($('')); + continue; + } + + if(typeof user === 'string') user = {account: user}; + if(!user.avatar && window.userList && window.userList[user.account]) user = window.userList[user.account]; + + assignees.push($('').avatar({user: user})); + } + if(assignees.length > 3) assignees.splice(3, assignees.length - 4, '...'); + assignees.push('
' + kanbanLang.teamSumCount.replace('%s',assignees.length) + '
'); + return assignees; +} + + /** * The function for rendering kanban item */ @@ -239,9 +281,9 @@ function renderKanbanItem(item, $item) var $time = $info.children('.time'); if(item.end && item.end !== '0000-00-00') { - var end = $.zui.createDate(item.end); - var today = new Date(); - var isExpired = end.getTime() < today.getTime(); + var end = $.zui.createDate(item.end); + var today = new Date(); + var isExpired = end.getTime() < today.getTime(); var dateFormat = (today.getFullYear() === end.getFullYear() ? 'MM-dd ' : 'yyyy-MM-dd ') + kanbancardLang.deadlineAB; $time.text($.zui.formatDate(end, dateFormat)) .toggleClass('text-red', isExpired) @@ -252,45 +294,10 @@ function renderKanbanItem(item, $item) $time.hide(); } + /* Display avatars of assignedTo. */ + var assignedTo = item.assignedTo.split(','); var $user = $info.children('.user'); - if(item.assignedTo) - { - var assignedTo = item.assignedTo.split(','); - if(assignedTo.length != 0) - { - for(var index = 0; index < assignedTo.length; index ++) - { - var user = assignedTo[index]; - - if(typeof user === 'string') user = {account: user}; - if(!user.avatar && window.userList && window.userList[user.account]) user = window.userList[user.account]; - - var $avatar = $( - priv.canAssignCard ? '
' - : '
' - ).attr('data-name', user.realname || user.account) - .attr('data-id', user.id || user.account); - if(user.avatar) - { - $avatar.append(''); - } - - if(priv.canAssignCard) - { - $avatar.attr('href', createLink('kanban', 'assignCard', 'id=' + item.id, '', 1)); - } - - $user.empty() - .append($avatar) - .attr('title', user.realname || user.account) - .show(); - } - } - } - else - { - $user.hide(); - } + $user.html(renderUsersAvatar(assignedTo, item.id)); $item.css('background-color', item.color); $item.toggleClass('has-color', item.color != '#FFFFFF'); diff --git a/module/kanban/view/view.html.php b/module/kanban/view/view.html.php index 75f4361ae3..c6da0ebe49 100644 --- a/module/kanban/view/view.html.php +++ b/module/kanban/view/view.html.php @@ -13,6 +13,7 @@ js::set('kanbancardLang', $lang->kanbancard); js::set('kanbanID', $kanban->id); js::set('laneCount', $laneCount); js::set('userList', $userList); +js::set('noAssigned', $lang->kanbancard->noAssigned); js::set('priv', array( From 3a7789e4139ace310920f627d01cc4892fcfa945 Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Fri, 17 Dec 2021 08:48:05 +0800 Subject: [PATCH 2/4] *Finish task --- module/kanban/css/viewcard.css | 1 - 1 file changed, 1 deletion(-) diff --git a/module/kanban/css/viewcard.css b/module/kanban/css/viewcard.css index 100bcb57cd..5644fd1cf9 100644 --- a/module/kanban/css/viewcard.css +++ b/module/kanban/css/viewcard.css @@ -1,3 +1,2 @@ [lang^='en'] .table-data tbody>tr>th {width: 100px;} .pull-left div {float: left !important;} - From a377632a4529d8a6cf4afe17ec8662f99d0fb877 Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Fri, 17 Dec 2021 08:49:33 +0800 Subject: [PATCH 3/4] *Finish task. --- module/kanban/js/view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index cee6303c5a..1e7d7f5862 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -225,7 +225,7 @@ function renderUsersAvatar(users, itemID, size) assignees.push($('').avatar({user: user})); } - if(assignees.length > 3) assignees.splice(3, assignees.length - 4, '...'); + if(assignees.length > 4) assignees.splice(3, assignees.length - 4, '...'); assignees.push('
' + kanbanLang.teamSumCount.replace('%s',assignees.length) + '
'); return assignees; } From a40d4b9ce15f9bd18de54bcd66d93951bd4c6ed3 Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Fri, 17 Dec 2021 09:11:22 +0800 Subject: [PATCH 4/4] *Finish task. --- module/kanban/js/view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 1e7d7f5862..bb8f5232a0 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -226,7 +226,7 @@ function renderUsersAvatar(users, itemID, size) assignees.push($('
').avatar({user: user})); } if(assignees.length > 4) assignees.splice(3, assignees.length - 4, '...'); - assignees.push('
' + kanbanLang.teamSumCount.replace('%s',assignees.length) + '
'); + assignees.push('
' + kanbanLang.teamSumCount.replace('%s', assignees.length) + '
'); return assignees; }