diff options
author | Frederic Guillot <fred@kanboard.net> | 2015-02-14 18:55:55 -0500 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2015-02-14 18:55:55 -0500 |
commit | 23346d5e76a171efb407612dc54a92740863dfbc (patch) | |
tree | 650a2d8063b79d20a71ce4ef2fb3aca1e31c2409 | |
parent | 8c8692cd4d7a7f6872f79805da7ef89075cbcc4b (diff) |
Move function to the right place (pull-request) and improve board task icons
-rw-r--r-- | app/Core/Helper.php | 27 | ||||
-rw-r--r-- | app/Locale/da_DK/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/de_DE/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/es_ES/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/fi_FI/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/fr_FR/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/hu_HU/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/it_IT/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/ja_JP/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/pl_PL/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/pt_BR/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/ru_RU/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/sv_SE/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/th_TH/translations.php | 3 | ||||
-rw-r--r-- | app/Locale/zh_CN/translations.php | 3 | ||||
-rw-r--r-- | app/Template/board/task.php | 70 | ||||
-rw-r--r-- | app/functions.php | 26 | ||||
-rw-r--r-- | assets/css/app.css | 88 | ||||
-rw-r--r-- | assets/css/src/task.css | 88 |
19 files changed, 175 insertions, 166 deletions
diff --git a/app/Core/Helper.php b/app/Core/Helper.php index d60e29d4..57d1b98a 100644 --- a/app/Core/Helper.php +++ b/app/Core/Helper.php @@ -50,6 +50,33 @@ class Helper } /** + * Get the age of an item in quasi human readable format. + * It's in this format: <1h , NNh, NNd + * + * @access public + * @param integer $timestamp Unix timestamp of the artifact for which age will be calculated + * @param integer $now Compare with this timestamp (Default value is the current unix timestamp) + * @return string + */ + public function getTaskAge($timestamp, $now = null) + { + if ($now === null) { + $now = time(); + } + + $diff = $now - $timestamp; + + if ($diff < 3600) { + return t('<1h'); + } + else if ($diff < 86400) { + return t('%dh', $diff / 3600); + } + + return t('%dd', ($now - $timestamp) / 86400); + } + + /** * Proxy cache helper for acl::isManagerActionAllowed() * * @access public diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index db91895f..b6186a33 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index 967d5f62..f954ce78 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index c69d9084..60a90c9a 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index 0dd29c37..42054646 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index 7872dec4..26372c48 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -721,4 +721,7 @@ return array( 'fixes' => 'corrige', 'is fixed by' => 'est corrigée par', 'This task' => 'Cette tâche', + '<1h' => '<1h', + '%dh' => '%dh', + '%b %e' => '%e %b', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index 1f8de0ea..487492b2 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index afd41d5c..f395caff 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index 9d06b83f..ab62128c 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index 2ebfc219..688230fa 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index ded6e0db..d7759fc8 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index de792516..0afd3643 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 838b426a..c9a9b041 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index 66c7712b..502b1135 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index 32278e21..75690708 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -719,4 +719,7 @@ return array( // 'fixes' => '', // 'is fixed by' => '', // 'This task' => '', + // '<1h' => '', + // '%dh' => '', + // '%b %e' => '', ); diff --git a/app/Template/board/task.php b/app/Template/board/task.php index 075eab92..638078c3 100644 --- a/app/Template/board/task.php +++ b/app/Template/board/task.php @@ -20,10 +20,6 @@ <?php endif ?> </span> - <?php if ($task['score']): ?> - <span class="task-score"><?= $this->e($task['score']) ?></span> - <?php endif ?> - <div class="task-board-title"> <?= $this->a($this->e($task['title']), 'task', 'readonly', array('task_id' => $task['id'], 'token' => $project['token'])) ?> </div> @@ -59,7 +55,7 @@ <span class="task-board-user <?= $this->userSession->isCurrentUser($task['owner_id']) ? 'task-board-current-user' : '' ?>"> <?= $this->a( - (! empty($task['owner_id']) ? t('Assigned to %s', $task['assignee_name'] ?: $task['assignee_username']) : t('Nobody assigned')), + (! empty($task['owner_id']) ? ($task['assignee_name'] ?: $task['assignee_username']) : t('Nobody assigned')), 'board', 'changeAssignee', array('task_id' => $task['id'], 'project_id' => $task['project_id']), @@ -68,13 +64,9 @@ t('Change assignee') ) ?> </span> - - <span title="<?= t('Task age in days')?>" class="task-days-age"><?= getAgeShort ($task['date_creation']) ?></span> - <span title="<?= t('Days in this column')?>" class="task-days-incolumn"><?= getAgeShort ($task['date_moved']) ?></span> - - <?php if ($task['score']): ?> - <span class="task-score"><?= $this->e($task['score']) ?></span> - <?php endif ?> + + <span title="<?= t('Task age in days')?>" class="task-days-age"><?= $this->getTaskAge($task['date_creation']) ?></span> + <span title="<?= t('Days in this column')?>" class="task-days-incolumn"><?= $this->getTaskAge($task['date_moved']) ?></span> <div class="task-board-title"> <?= $this->a($this->e($task['title']), 'task', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), false, '', t('View this task')) ?> @@ -99,40 +91,34 @@ </div> <?php endif ?> +<div class="task-board-icons"> + <?php if (! empty($task['date_due'])): ?> + <span class="task-board-date <?= time() > $task['date_due'] ? 'task-board-date-overdue' : '' ?>"> + <i class="fa fa-calendar"></i> <?= dt('%b %e', $task['date_due']) ?> + </span> + <?php endif ?> -<?php if (! empty($task['date_due']) || ! empty($task['nb_files']) || ! empty($task['nb_comments']) || ! empty($task['description']) || ! empty($task['nb_subtasks']) || ! empty($task['nb_links'])): ?> -<div class="task-board-footer"> + <?php if (! empty($task['nb_links'])): ?> + <span title="<?= t('Links') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'tasklinks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_links'] ?> <i class="fa fa-code-fork"></i></span> + <?php endif ?> - <?php if (! empty($task['date_due'])): ?> - <div class="task-board-date <?= time() > $task['date_due'] ? 'task-board-date-overdue' : '' ?>"> - <i class="fa fa-calendar"></i> <?= dt('%b %e, %Y', $task['date_due']) ?> - </div> + <?php if (! empty($task['nb_subtasks'])): ?> + <span title="<?= t('Sub-Tasks') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'subtasks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= round($task['nb_completed_subtasks']/$task['nb_subtasks']*100, 0).'%' ?> <i class="fa fa-bars"></i></span> <?php endif ?> - <div class="task-board-icons"> - <?php if (! empty($task['nb_links'])): ?> - <span title="<?= t('Links') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'tasklinks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_links'] ?> <i class="fa fa-code-fork"></i></span> - <?php endif ?> - - <?php if (! empty($task['nb_subtasks'])): ?> - <span title="<?= t('Sub-Tasks') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'subtasks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= round($task['nb_completed_subtasks']/$task['nb_subtasks']*100, 0).'%' ?> <i class="fa fa-bars"></i></span> - <?php endif ?> - - <?php if (! empty($task['nb_files'])): ?> - <span title="<?= t('Attachments') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'attachments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_files'] ?> <i class="fa fa-paperclip"></i></span> - <?php endif ?> - - <?php if (! empty($task['nb_comments'])): ?> - <span title="<?= p($task['nb_comments'], t('%d comment', $task['nb_comments']), t('%d comments', $task['nb_comments'])) ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'comments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_comments'] ?> <i class="fa fa-comment-o"></i></span> - <?php endif ?> - - <?php if (! empty($task['description'])): ?> - <span title="<?= t('Description') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'description', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"> - <i class="fa fa-file-text-o"></i> - </span> - <?php endif ?> - </div> + <?php if (! empty($task['nb_files'])): ?> + <span title="<?= t('Attachments') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'attachments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_files'] ?> <i class="fa fa-paperclip"></i></span> + <?php endif ?> + + <?php if (! empty($task['nb_comments'])): ?> + <span title="<?= p($task['nb_comments'], t('%d comment', $task['nb_comments']), t('%d comments', $task['nb_comments'])) ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'comments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_comments'] ?> <i class="fa fa-comment-o"></i></span> + <?php endif ?> + + <?php if (! empty($task['description'])): ?> + <span title="<?= t('Description') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'description', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"> + <i class="fa fa-file-text-o"></i> + </span> + <?php endif ?> </div> -<?php endif ?> </div> diff --git a/app/functions.php b/app/functions.php index a748f005..439375be 100644 --- a/app/functions.php +++ b/app/functions.php @@ -63,31 +63,9 @@ function dt($format, $timestamp) * @todo Improve this function * @return mixed */ -function p($value, $t1, $t2) { +function p($value, $t1, $t2) +{ return $value > 1 ? $t2 : $t1; } -/** - * Get the age of an item in quasi human readable format. - * It's in this format: <1h , NNh, NNd - * - * @access public - * @param int $time - * Unix timestamp of the artifact for which age will be calculated - * @param int $currenttime - * Comepare with timestamp. Default current unix timestamp - * @return string - */ -function getAgeShort($time, $currenttime = NULL) { - if (! $currenttime) { - $currenttime = time (); - } - $diff = $currenttime - $time; - if ($diff < 3600) - return "<1h"; - elseif ($diff < 86400) { - return intval ( ($diff / 3600) ) . "h"; - } - return intval ( ((floor ( $currenttime ) - floor ( $time )) / 86400) ) . "d"; -} diff --git a/assets/css/app.css b/assets/css/app.css index 04eaca54..acb1e042 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -783,11 +783,10 @@ a.filter-on { /* task inside the board */ .task-board { position: relative; - margin-right: 5px; - margin-bottom: 10px; + margin-bottom: 5px; border: 1px solid #000; - padding: 5px; - font-size: 95%; + padding: 3px; + font-size: 0.9em; word-wrap: break-word; } @@ -811,7 +810,7 @@ div.task-board-recent { .task-board-title { margin-top: 10px; - font-size: 110%; + font-size: 1.1em; } .task-board-title a { @@ -819,7 +818,7 @@ div.task-board-recent { } .task-board-user { - font-size: 80%; + font-size: 0.8em; } .task-board-current-user a { @@ -848,32 +847,14 @@ a.task-board-nobody { font-size: 0.9em; color: #000; border: 1px solid #555; - border-radius: 4px; padding: 2px; padding-right: 5px; padding-left: 5px; } -.task-board-footer { - height: 25px; -} - -.task-board-date { - position: absolute; - bottom: 0; - left: 1px; - font-weight: bold; - color: #000; -} - -.task-board-date-overdue { - color: #D90000; -} - .task-board-icons { - position: absolute; - bottom: 0; - right: 5px; + text-align: right; + margin-top: 8px; } .task-board-icons a { @@ -890,16 +871,43 @@ a.task-board-nobody { opacity: 1.0; } +.task-board-date { + font-weight: bold; + color: #000; +} + +.task-board-date-overdue { + color: #D90000; +} + /* task score */ .task-score { font-weight: bold; position: absolute; + font-size: 1.6em; + right: 5px; + bottom: 5px; } -.task-board .task-score { - font-size: 1.5em; - right: 5px; - top: 0; +/* task age */ +.task-days-age { + font-size: 0.8em; + border: #888 1px solid; + border-radius:2px; + padding: 1px 4px 1px 2px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.task-days-incolumn { + font-size: 0.8em; + border: #888 1px solid; + border-left: none; + margin-left: -5px; + border-radius:2px; + padding: 1px 2px 1px 4px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; } /* task view */ @@ -988,26 +996,6 @@ a.task-board-nobody { padding: 3px; } -.task-days-age { - font-size: 0.8em; - border: #888 1px solid; - border-radius:2px; - padding: 1px 4px 1px 2px; - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} - -.task-days-incolumn { - font-size: 0.8em; - border: #888 1px solid; - border-left: none; - margin-left: -5px; - border-radius:2px; - padding: 1px 2px 1px 4px; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} - .task-link-closed { text-decoration: line-through; } diff --git a/assets/css/src/task.css b/assets/css/src/task.css index c16304a6..7a5b61c9 100644 --- a/assets/css/src/task.css +++ b/assets/css/src/task.css @@ -1,11 +1,10 @@ /* task inside the board */ .task-board { position: relative; - margin-right: 5px; - margin-bottom: 10px; + margin-bottom: 5px; border: 1px solid #000; - padding: 5px; - font-size: 95%; + padding: 3px; + font-size: 0.9em; word-wrap: break-word; } @@ -29,7 +28,7 @@ div.task-board-recent { .task-board-title { margin-top: 10px; - font-size: 110%; + font-size: 1.1em; } .task-board-title a { @@ -37,7 +36,7 @@ div.task-board-recent { } .task-board-user { - font-size: 80%; + font-size: 0.8em; } .task-board-current-user a { @@ -66,32 +65,14 @@ a.task-board-nobody { font-size: 0.9em; color: #000; border: 1px solid #555; - border-radius: 4px; padding: 2px; padding-right: 5px; padding-left: 5px; } -.task-board-footer { - height: 25px; -} - -.task-board-date { - position: absolute; - bottom: 0; - left: 1px; - font-weight: bold; - color: #000; -} - -.task-board-date-overdue { - color: #D90000; -} - .task-board-icons { - position: absolute; - bottom: 0; - right: 5px; + text-align: right; + margin-top: 8px; } .task-board-icons a { @@ -108,16 +89,43 @@ a.task-board-nobody { opacity: 1.0; } +.task-board-date { + font-weight: bold; + color: #000; +} + +.task-board-date-overdue { + color: #D90000; +} + /* task score */ .task-score { font-weight: bold; position: absolute; + font-size: 1.6em; + right: 5px; + bottom: 5px; } -.task-board .task-score { - font-size: 1.5em; - right: 5px; - top: 0; +/* task age */ +.task-days-age { + font-size: 0.8em; + border: #888 1px solid; + border-radius:2px; + padding: 1px 4px 1px 2px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.task-days-incolumn { + font-size: 0.8em; + border: #888 1px solid; + border-left: none; + margin-left: -5px; + border-radius:2px; + padding: 1px 2px 1px 4px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; } /* task view */ @@ -206,26 +214,6 @@ a.task-board-nobody { padding: 3px; } -.task-days-age { - font-size: 0.8em; - border: #888 1px solid; - border-radius:2px; - padding: 1px 4px 1px 2px; - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} - -.task-days-incolumn { - font-size: 0.8em; - border: #888 1px solid; - border-left: none; - margin-left: -5px; - border-radius:2px; - padding: 1px 2px 1px 4px; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} - .task-link-closed { text-decoration: line-through; } |