mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-26 16:52:41 +01:00
Show projects on Maniphest tasks
Summary: - Remove the "Priority" column, since this is indicated by the color swatch, to save space. - Reduce the "Updated" column from datetime to date only, since time isn't incredibly useful, to save space. - Show the first two projects a task is associated with, and "..." if there are more. - Show "None" (for "no owner") in a lighter color. Test Plan: Looked at tasks on homepage and in Maniphest. Reviewers: btrahan, 20after4 Reviewed By: btrahan CC: aran, edward Maniphest Tasks: T967 Differential Revision: https://secure.phabricator.com/D2065
This commit is contained in:
parent
c7b0daadb8
commit
49a0b3fab0
10 changed files with 172 additions and 22 deletions
|
@ -1436,7 +1436,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'maniphest-task-summary-css' =>
|
'maniphest-task-summary-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/9d8a5516/rsrc/css/application/maniphest/task-summary.css',
|
'uri' => '/res/ddb926e4/rsrc/css/application/maniphest/task-summary.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -1720,6 +1720,15 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'disk' => '/rsrc/css/application/profile/profile-header-view.css',
|
'disk' => '/rsrc/css/application/profile/profile-header-view.css',
|
||||||
),
|
),
|
||||||
|
'phabricator-project-tag-css' =>
|
||||||
|
array(
|
||||||
|
'uri' => '/res/c0a3c26b/rsrc/css/application/projects/project-tag.css',
|
||||||
|
'type' => 'css',
|
||||||
|
'requires' =>
|
||||||
|
array(
|
||||||
|
),
|
||||||
|
'disk' => '/rsrc/css/application/projects/project-tag.css',
|
||||||
|
),
|
||||||
'phabricator-remarkup-css' =>
|
'phabricator-remarkup-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/43702d3c/rsrc/css/core/remarkup.css',
|
'uri' => '/res/43702d3c/rsrc/css/core/remarkup.css',
|
||||||
|
@ -2124,7 +2133,7 @@ celerity_register_resource_map(array(
|
||||||
'uri' => '/res/pkg/4fbae2af/javelin.pkg.js',
|
'uri' => '/res/pkg/4fbae2af/javelin.pkg.js',
|
||||||
'type' => 'js',
|
'type' => 'js',
|
||||||
),
|
),
|
||||||
'7cc1c9a3' =>
|
'8315b569' =>
|
||||||
array(
|
array(
|
||||||
'name' => 'maniphest.pkg.css',
|
'name' => 'maniphest.pkg.css',
|
||||||
'symbols' =>
|
'symbols' =>
|
||||||
|
@ -2134,7 +2143,7 @@ celerity_register_resource_map(array(
|
||||||
2 => 'maniphest-task-detail-css',
|
2 => 'maniphest-task-detail-css',
|
||||||
3 => 'aphront-attached-file-view-css',
|
3 => 'aphront-attached-file-view-css',
|
||||||
),
|
),
|
||||||
'uri' => '/res/pkg/7cc1c9a3/maniphest.pkg.css',
|
'uri' => '/res/pkg/8315b569/maniphest.pkg.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
),
|
),
|
||||||
'86fc0b0c' =>
|
'86fc0b0c' =>
|
||||||
|
@ -2169,7 +2178,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'reverse' =>
|
'reverse' =>
|
||||||
array(
|
array(
|
||||||
'aphront-attached-file-view-css' => '7cc1c9a3',
|
'aphront-attached-file-view-css' => '8315b569',
|
||||||
'aphront-crumbs-view-css' => '61493db4',
|
'aphront-crumbs-view-css' => '61493db4',
|
||||||
'aphront-dialog-view-css' => '61493db4',
|
'aphront-dialog-view-css' => '61493db4',
|
||||||
'aphront-form-view-css' => '61493db4',
|
'aphront-form-view-css' => '61493db4',
|
||||||
|
@ -2235,9 +2244,9 @@ celerity_register_resource_map(array(
|
||||||
'javelin-util' => '4fbae2af',
|
'javelin-util' => '4fbae2af',
|
||||||
'javelin-vector' => '4fbae2af',
|
'javelin-vector' => '4fbae2af',
|
||||||
'javelin-workflow' => '21d01ed8',
|
'javelin-workflow' => '21d01ed8',
|
||||||
'maniphest-task-detail-css' => '7cc1c9a3',
|
'maniphest-task-detail-css' => '8315b569',
|
||||||
'maniphest-task-summary-css' => '7cc1c9a3',
|
'maniphest-task-summary-css' => '8315b569',
|
||||||
'maniphest-transaction-detail-css' => '7cc1c9a3',
|
'maniphest-transaction-detail-css' => '8315b569',
|
||||||
'phabricator-app-buttons-css' => '61493db4',
|
'phabricator-app-buttons-css' => '61493db4',
|
||||||
'phabricator-content-source-view-css' => '18be02e0',
|
'phabricator-content-source-view-css' => '18be02e0',
|
||||||
'phabricator-core-buttons-css' => '61493db4',
|
'phabricator-core-buttons-css' => '61493db4',
|
||||||
|
|
|
@ -455,6 +455,7 @@ phutil_register_library_map(array(
|
||||||
'ManiphestTaskOwner' => 'applications/maniphest/constants/owner',
|
'ManiphestTaskOwner' => 'applications/maniphest/constants/owner',
|
||||||
'ManiphestTaskPriority' => 'applications/maniphest/constants/priority',
|
'ManiphestTaskPriority' => 'applications/maniphest/constants/priority',
|
||||||
'ManiphestTaskProject' => 'applications/maniphest/storage/taskproject',
|
'ManiphestTaskProject' => 'applications/maniphest/storage/taskproject',
|
||||||
|
'ManiphestTaskProjectsView' => 'applications/maniphest/view/taskprojects',
|
||||||
'ManiphestTaskQuery' => 'applications/maniphest/query',
|
'ManiphestTaskQuery' => 'applications/maniphest/query',
|
||||||
'ManiphestTaskStatus' => 'applications/maniphest/constants/status',
|
'ManiphestTaskStatus' => 'applications/maniphest/constants/status',
|
||||||
'ManiphestTaskSubscriber' => 'applications/maniphest/storage/subscriber',
|
'ManiphestTaskSubscriber' => 'applications/maniphest/storage/subscriber',
|
||||||
|
@ -1311,6 +1312,7 @@ phutil_register_library_map(array(
|
||||||
'ManiphestTaskOwner' => 'ManiphestConstants',
|
'ManiphestTaskOwner' => 'ManiphestConstants',
|
||||||
'ManiphestTaskPriority' => 'ManiphestConstants',
|
'ManiphestTaskPriority' => 'ManiphestConstants',
|
||||||
'ManiphestTaskProject' => 'ManiphestDAO',
|
'ManiphestTaskProject' => 'ManiphestDAO',
|
||||||
|
'ManiphestTaskProjectsView' => 'ManiphestView',
|
||||||
'ManiphestTaskStatus' => 'ManiphestConstants',
|
'ManiphestTaskStatus' => 'ManiphestConstants',
|
||||||
'ManiphestTaskSubscriber' => 'ManiphestDAO',
|
'ManiphestTaskSubscriber' => 'ManiphestDAO',
|
||||||
'ManiphestTaskSummaryView' => 'ManiphestView',
|
'ManiphestTaskSummaryView' => 'ManiphestView',
|
||||||
|
|
|
@ -372,7 +372,10 @@ final class PhabricatorDirectoryMainController
|
||||||
private function buildTaskListView(array $tasks) {
|
private function buildTaskListView(array $tasks) {
|
||||||
$user = $this->getRequest()->getUser();
|
$user = $this->getRequest()->getUser();
|
||||||
|
|
||||||
$phids = array_filter(mpull($tasks, 'getOwnerPHID'));
|
$phids = array_merge(
|
||||||
|
array_filter(mpull($tasks, 'getOwnerPHID')),
|
||||||
|
array_mergev(mpull($tasks, 'getProjectPHIDs')));
|
||||||
|
|
||||||
$handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
|
$handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
|
||||||
|
|
||||||
$view = new ManiphestTaskListView();
|
$view = new ManiphestTaskListView();
|
||||||
|
|
|
@ -412,7 +412,8 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
$xproject_phids,
|
$xproject_phids,
|
||||||
$owner_phids,
|
$owner_phids,
|
||||||
$author_phids,
|
$author_phids,
|
||||||
$project_group_phids);
|
$project_group_phids,
|
||||||
|
array_mergev(mpull($data, 'getProjectPHIDs')));
|
||||||
$handles = id(new PhabricatorObjectHandleData($handle_phids))
|
$handles = id(new PhabricatorObjectHandleData($handle_phids))
|
||||||
->loadHandles();
|
->loadHandles();
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group maniphest
|
||||||
|
*/
|
||||||
|
final class ManiphestTaskProjectsView extends ManiphestView {
|
||||||
|
|
||||||
|
private $handles;
|
||||||
|
|
||||||
|
public function setHandles(array $handles) {
|
||||||
|
$this->handles = $handles;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
require_celerity_resource('phabricator-project-tag-css');
|
||||||
|
|
||||||
|
|
||||||
|
$show = array_slice($this->handles, 0, 2);
|
||||||
|
|
||||||
|
$tags = array();
|
||||||
|
foreach ($show as $handle) {
|
||||||
|
$tags[] = phutil_render_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => $handle->getURI(),
|
||||||
|
'class' => 'phabricator-project-tag',
|
||||||
|
),
|
||||||
|
phutil_escape_html($handle->getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($this->handles) > 2) {
|
||||||
|
require_celerity_resource('aphront-tooltip-css');
|
||||||
|
Javelin::initBehavior('phabricator-tooltips');
|
||||||
|
|
||||||
|
$all = array();
|
||||||
|
foreach ($this->handles as $handle) {
|
||||||
|
$all[] = $handle->getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
$tags[] = javelin_render_tag(
|
||||||
|
'span',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-project-tag',
|
||||||
|
'sigil' => 'has-tooltip',
|
||||||
|
'meta' => array(
|
||||||
|
'tip' => phutil_escape_html(implode(', ', $all)),
|
||||||
|
'size' => 200,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"\xE2\x80\xA6");
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode("\n", $tags);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
src/applications/maniphest/view/taskprojects/__init__.php
Normal file
17
src/applications/maniphest/view/taskprojects/__init__.php
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'applications/maniphest/view/base');
|
||||||
|
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
||||||
|
phutil_require_module('phabricator', 'infrastructure/javelin/api');
|
||||||
|
phutil_require_module('phabricator', 'infrastructure/javelin/markup');
|
||||||
|
|
||||||
|
phutil_require_module('phutil', 'markup');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('ManiphestTaskProjectsView.php');
|
|
@ -85,6 +85,12 @@ final class ManiphestTaskSummaryView extends ManiphestView {
|
||||||
'</td>';
|
'</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$projects_view = new ManiphestTaskProjectsView();
|
||||||
|
$projects_view->setHandles(
|
||||||
|
array_select_keys(
|
||||||
|
$this->handles,
|
||||||
|
$task->getProjectPHIDs()));
|
||||||
|
|
||||||
return javelin_render_tag(
|
return javelin_render_tag(
|
||||||
'table',
|
'table',
|
||||||
array(
|
array(
|
||||||
|
@ -114,11 +120,11 @@ final class ManiphestTaskSummaryView extends ManiphestView {
|
||||||
),
|
),
|
||||||
phutil_escape_html($task->getTitle())).
|
phutil_escape_html($task->getTitle())).
|
||||||
'</td>'.
|
'</td>'.
|
||||||
'<td class="maniphest-task-priority">'.
|
'<td class="maniphest-task-projects">'.
|
||||||
ManiphestTaskPriority::getTaskPriorityName($task->getPriority()).
|
$projects_view->render().
|
||||||
'</td>'.
|
'</td>'.
|
||||||
'<td class="maniphest-task-updated">'.
|
'<td class="maniphest-task-updated">'.
|
||||||
phabricator_datetime($task->getDateModified(), $this->user).
|
phabricator_date($task->getDateModified(), $this->user).
|
||||||
'</td>'.
|
'</td>'.
|
||||||
'</tr>');
|
'</tr>');
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
phutil_require_module('phabricator', 'applications/maniphest/constants/priority');
|
phutil_require_module('phabricator', 'applications/maniphest/constants/priority');
|
||||||
phutil_require_module('phabricator', 'applications/maniphest/constants/status');
|
phutil_require_module('phabricator', 'applications/maniphest/constants/status');
|
||||||
phutil_require_module('phabricator', 'applications/maniphest/view/base');
|
phutil_require_module('phabricator', 'applications/maniphest/view/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/maniphest/view/taskprojects');
|
||||||
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
||||||
phutil_require_module('phabricator', 'infrastructure/javelin/markup');
|
phutil_require_module('phabricator', 'infrastructure/javelin/markup');
|
||||||
phutil_require_module('phabricator', 'view/utils');
|
phutil_require_module('phabricator', 'view/utils');
|
||||||
|
|
|
@ -7,13 +7,13 @@
|
||||||
margin: 4px 0;
|
margin: 4px 0;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
|
|
||||||
font-size: 13px;
|
font-size: 12px;
|
||||||
color: #222222;
|
color: #222222;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td {
|
.maniphest-task-summary td {
|
||||||
padding: 4px 6px;
|
padding: 5px 3px;
|
||||||
background: #f6f6f6;
|
background: #f9f9f9;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
|
@ -22,6 +22,10 @@
|
||||||
border-width: 1px 0;
|
border-width: 1px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.maniphest-task-summary td em {
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
|
||||||
.maniphest-batch-selected td {
|
.maniphest-batch-selected td {
|
||||||
background: #f6ff88;
|
background: #f6ff88;
|
||||||
}
|
}
|
||||||
|
@ -35,7 +39,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-batch {
|
.maniphest-task-summary td.maniphest-task-batch {
|
||||||
width: 30px;
|
padding-right: 0px;
|
||||||
|
width: 16px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,14 +49,19 @@
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.maniphest-task-summary td.maniphest-task-batch input {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-number {
|
.maniphest-task-summary td.maniphest-task-number {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #444444;
|
color: #444444;
|
||||||
width: 60px;
|
width: 70px;
|
||||||
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-status {
|
.maniphest-task-summary td.maniphest-task-status {
|
||||||
width: 80px;
|
width: 60px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,13 +75,16 @@
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-priority {
|
.maniphest-task-summary td.maniphest-task-projects {
|
||||||
width: 100px;
|
width: 180px;
|
||||||
|
text-align: right;
|
||||||
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-updated {
|
.maniphest-task-summary td.maniphest-task-updated {
|
||||||
text-align: left;
|
text-align: right;
|
||||||
width: 180px;
|
width: 85px;
|
||||||
|
padding-right: 8px;
|
||||||
border-right-width: 1px;
|
border-right-width: 1px;
|
||||||
border-right-style: solid;
|
border-right-style: solid;
|
||||||
border-right-color: #787878;
|
border-right-color: #787878;
|
||||||
|
|
25
webroot/rsrc/css/application/projects/project-tag.css
Normal file
25
webroot/rsrc/css/application/projects/project-tag.css
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/**
|
||||||
|
* @provides phabricator-project-tag-css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.phabricator-project-tag,
|
||||||
|
.phabricator-project-tag:link,
|
||||||
|
.phabricator-project-tag:visited {
|
||||||
|
font-weight: normal;
|
||||||
|
border: 1px solid #bfcfef;
|
||||||
|
padding: 1px 4px 2px;
|
||||||
|
background: #f9f9ff;
|
||||||
|
color: #667799;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 11px;
|
||||||
|
display: inline;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phabricator-project-tag:hover {
|
||||||
|
background: #dfdfef;
|
||||||
|
}
|
Loading…
Reference in a new issue