mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-28 00:10:57 +01:00
Modernize Maniphest
Summary: A few things - pht Maniphest where I could - implement dust background - optimize pages for mobile - adds aphront-two-column-layout - reworks maniphest page with two column layout - tweaks task table for mobile, though we should move to object-list-view Stopping here as I want to get feedback in. Super excited about mobile and the new tasks views. Only sort of excited about the sidebar filters, they need more UI work, but we should talk about that. Test Plan: Test Maniphest, Differential, and Homepage views. Sort tasks, make reports Reviewers: epriestley, btrahan Reviewed By: btrahan CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D5314
This commit is contained in:
parent
9804dab799
commit
df0c3df3cc
20 changed files with 432 additions and 390 deletions
|
@ -569,8 +569,8 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'/rsrc/image/texture/dust_background.jpg' =>
|
'/rsrc/image/texture/dust_background.jpg' =>
|
||||||
array(
|
array(
|
||||||
'hash' => 'c32ab9819d4af583f5609bbd3750721a',
|
'hash' => '1ff330c03712e08ca2eed006ccc6c1e7',
|
||||||
'uri' => '/res/c32ab981/rsrc/image/texture/dust_background.jpg',
|
'uri' => '/res/1ff330c0/rsrc/image/texture/dust_background.jpg',
|
||||||
'disk' => '/rsrc/image/texture/dust_background.jpg',
|
'disk' => '/rsrc/image/texture/dust_background.jpg',
|
||||||
'type' => 'jpg',
|
'type' => 'jpg',
|
||||||
),
|
),
|
||||||
|
@ -683,7 +683,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'aphront-form-view-css' =>
|
'aphront-form-view-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/efaecc2d/rsrc/css/aphront/form-view.css',
|
'uri' => '/res/accfc3a4/rsrc/css/aphront/form-view.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -692,7 +692,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'aphront-list-filter-view-css' =>
|
'aphront-list-filter-view-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/e783d6e1/rsrc/css/aphront/list-filter-view.css',
|
'uri' => '/res/cc6e940e/rsrc/css/aphront/list-filter-view.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -828,7 +828,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'conpherence-widget-pane-css' =>
|
'conpherence-widget-pane-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/e67ad581/rsrc/css/application/conpherence/widget-pane.css',
|
'uri' => '/res/2b4113f7/rsrc/css/application/conpherence/widget-pane.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -2591,7 +2591,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'maniphest-task-summary-css' =>
|
'maniphest-task-summary-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/14e825ce/rsrc/css/application/maniphest/task-summary.css',
|
'uri' => '/res/b3930263/rsrc/css/application/maniphest/task-summary.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -2708,7 +2708,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'phabricator-core-buttons-css' =>
|
'phabricator-core-buttons-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/7320ca6d/rsrc/css/core/buttons.css',
|
'uri' => '/res/4e6b94c8/rsrc/css/core/buttons.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -2717,7 +2717,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'phabricator-core-css' =>
|
'phabricator-core-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/1e7afaa9/rsrc/css/core/core.css',
|
'uri' => '/res/9df0488c/rsrc/css/core/core.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -3562,7 +3562,7 @@ celerity_register_resource_map(array(
|
||||||
), array(
|
), array(
|
||||||
'packages' =>
|
'packages' =>
|
||||||
array(
|
array(
|
||||||
'b481b309' =>
|
'4a549b8b' =>
|
||||||
array(
|
array(
|
||||||
'name' => 'core.pkg.css',
|
'name' => 'core.pkg.css',
|
||||||
'symbols' =>
|
'symbols' =>
|
||||||
|
@ -3605,7 +3605,7 @@ celerity_register_resource_map(array(
|
||||||
35 => 'phabricator-object-item-list-view-css',
|
35 => 'phabricator-object-item-list-view-css',
|
||||||
36 => 'global-drag-and-drop-css',
|
36 => 'global-drag-and-drop-css',
|
||||||
),
|
),
|
||||||
'uri' => '/res/pkg/b481b309/core.pkg.css',
|
'uri' => '/res/pkg/4a549b8b/core.pkg.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
),
|
),
|
||||||
'95ceba95' =>
|
'95ceba95' =>
|
||||||
|
@ -3765,7 +3765,7 @@ celerity_register_resource_map(array(
|
||||||
'uri' => '/res/pkg/cd1d650a/javelin.pkg.js',
|
'uri' => '/res/pkg/cd1d650a/javelin.pkg.js',
|
||||||
'type' => 'js',
|
'type' => 'js',
|
||||||
),
|
),
|
||||||
'eb35a026' =>
|
'c41b4907' =>
|
||||||
array(
|
array(
|
||||||
'name' => 'maniphest.pkg.css',
|
'name' => 'maniphest.pkg.css',
|
||||||
'symbols' =>
|
'symbols' =>
|
||||||
|
@ -3775,7 +3775,7 @@ celerity_register_resource_map(array(
|
||||||
2 => 'aphront-attached-file-view-css',
|
2 => 'aphront-attached-file-view-css',
|
||||||
3 => 'phabricator-project-tag-css',
|
3 => 'phabricator-project-tag-css',
|
||||||
),
|
),
|
||||||
'uri' => '/res/pkg/eb35a026/maniphest.pkg.css',
|
'uri' => '/res/pkg/c41b4907/maniphest.pkg.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
),
|
),
|
||||||
'7707de41' =>
|
'7707de41' =>
|
||||||
|
@ -3795,18 +3795,18 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'reverse' =>
|
'reverse' =>
|
||||||
array(
|
array(
|
||||||
'aphront-attached-file-view-css' => 'eb35a026',
|
'aphront-attached-file-view-css' => 'c41b4907',
|
||||||
'aphront-crumbs-view-css' => 'b481b309',
|
'aphront-crumbs-view-css' => '4a549b8b',
|
||||||
'aphront-dialog-view-css' => 'b481b309',
|
'aphront-dialog-view-css' => '4a549b8b',
|
||||||
'aphront-error-view-css' => 'b481b309',
|
'aphront-error-view-css' => '4a549b8b',
|
||||||
'aphront-form-view-css' => 'b481b309',
|
'aphront-form-view-css' => '4a549b8b',
|
||||||
'aphront-list-filter-view-css' => 'b481b309',
|
'aphront-list-filter-view-css' => '4a549b8b',
|
||||||
'aphront-pager-view-css' => 'b481b309',
|
'aphront-pager-view-css' => '4a549b8b',
|
||||||
'aphront-panel-view-css' => 'b481b309',
|
'aphront-panel-view-css' => '4a549b8b',
|
||||||
'aphront-table-view-css' => 'b481b309',
|
'aphront-table-view-css' => '4a549b8b',
|
||||||
'aphront-tokenizer-control-css' => 'b481b309',
|
'aphront-tokenizer-control-css' => '4a549b8b',
|
||||||
'aphront-tooltip-css' => 'b481b309',
|
'aphront-tooltip-css' => '4a549b8b',
|
||||||
'aphront-typeahead-control-css' => 'b481b309',
|
'aphront-typeahead-control-css' => '4a549b8b',
|
||||||
'differential-changeset-view-css' => '8aaacd1b',
|
'differential-changeset-view-css' => '8aaacd1b',
|
||||||
'differential-core-view-css' => '8aaacd1b',
|
'differential-core-view-css' => '8aaacd1b',
|
||||||
'differential-inline-comment-editor' => '322728f3',
|
'differential-inline-comment-editor' => '322728f3',
|
||||||
|
@ -3820,7 +3820,7 @@ celerity_register_resource_map(array(
|
||||||
'differential-table-of-contents-css' => '8aaacd1b',
|
'differential-table-of-contents-css' => '8aaacd1b',
|
||||||
'diffusion-commit-view-css' => 'c8ce2d88',
|
'diffusion-commit-view-css' => 'c8ce2d88',
|
||||||
'diffusion-icons-css' => 'c8ce2d88',
|
'diffusion-icons-css' => 'c8ce2d88',
|
||||||
'global-drag-and-drop-css' => 'b481b309',
|
'global-drag-and-drop-css' => '4a549b8b',
|
||||||
'inline-comment-summary-css' => '8aaacd1b',
|
'inline-comment-summary-css' => '8aaacd1b',
|
||||||
'javelin-aphlict' => '95ceba95',
|
'javelin-aphlict' => '95ceba95',
|
||||||
'javelin-behavior' => 'cd1d650a',
|
'javelin-behavior' => 'cd1d650a',
|
||||||
|
@ -3892,48 +3892,48 @@ celerity_register_resource_map(array(
|
||||||
'javelin-util' => 'cd1d650a',
|
'javelin-util' => 'cd1d650a',
|
||||||
'javelin-vector' => 'cd1d650a',
|
'javelin-vector' => 'cd1d650a',
|
||||||
'javelin-workflow' => 'cd1d650a',
|
'javelin-workflow' => 'cd1d650a',
|
||||||
'lightbox-attachment-css' => 'b481b309',
|
'lightbox-attachment-css' => '4a549b8b',
|
||||||
'maniphest-task-summary-css' => 'eb35a026',
|
'maniphest-task-summary-css' => 'c41b4907',
|
||||||
'maniphest-transaction-detail-css' => 'eb35a026',
|
'maniphest-transaction-detail-css' => 'c41b4907',
|
||||||
'phabricator-busy' => '95ceba95',
|
'phabricator-busy' => '95ceba95',
|
||||||
'phabricator-content-source-view-css' => '8aaacd1b',
|
'phabricator-content-source-view-css' => '8aaacd1b',
|
||||||
'phabricator-core-buttons-css' => 'b481b309',
|
'phabricator-core-buttons-css' => '4a549b8b',
|
||||||
'phabricator-core-css' => 'b481b309',
|
'phabricator-core-css' => '4a549b8b',
|
||||||
'phabricator-crumbs-view-css' => 'b481b309',
|
'phabricator-crumbs-view-css' => '4a549b8b',
|
||||||
'phabricator-directory-css' => 'b481b309',
|
'phabricator-directory-css' => '4a549b8b',
|
||||||
'phabricator-drag-and-drop-file-upload' => '322728f3',
|
'phabricator-drag-and-drop-file-upload' => '322728f3',
|
||||||
'phabricator-dropdown-menu' => '95ceba95',
|
'phabricator-dropdown-menu' => '95ceba95',
|
||||||
'phabricator-file-upload' => '95ceba95',
|
'phabricator-file-upload' => '95ceba95',
|
||||||
'phabricator-filetree-view-css' => 'b481b309',
|
'phabricator-filetree-view-css' => '4a549b8b',
|
||||||
'phabricator-flag-css' => 'b481b309',
|
'phabricator-flag-css' => '4a549b8b',
|
||||||
'phabricator-form-view-css' => 'b481b309',
|
'phabricator-form-view-css' => '4a549b8b',
|
||||||
'phabricator-header-view-css' => 'b481b309',
|
'phabricator-header-view-css' => '4a549b8b',
|
||||||
'phabricator-jump-nav' => 'b481b309',
|
'phabricator-jump-nav' => '4a549b8b',
|
||||||
'phabricator-keyboard-shortcut' => '95ceba95',
|
'phabricator-keyboard-shortcut' => '95ceba95',
|
||||||
'phabricator-keyboard-shortcut-manager' => '95ceba95',
|
'phabricator-keyboard-shortcut-manager' => '95ceba95',
|
||||||
'phabricator-main-menu-view' => 'b481b309',
|
'phabricator-main-menu-view' => '4a549b8b',
|
||||||
'phabricator-menu-item' => '95ceba95',
|
'phabricator-menu-item' => '95ceba95',
|
||||||
'phabricator-nav-view-css' => 'b481b309',
|
'phabricator-nav-view-css' => '4a549b8b',
|
||||||
'phabricator-notification' => '95ceba95',
|
'phabricator-notification' => '95ceba95',
|
||||||
'phabricator-notification-css' => 'b481b309',
|
'phabricator-notification-css' => '4a549b8b',
|
||||||
'phabricator-notification-menu-css' => 'b481b309',
|
'phabricator-notification-menu-css' => '4a549b8b',
|
||||||
'phabricator-object-item-list-view-css' => 'b481b309',
|
'phabricator-object-item-list-view-css' => '4a549b8b',
|
||||||
'phabricator-object-selector-css' => '8aaacd1b',
|
'phabricator-object-selector-css' => '8aaacd1b',
|
||||||
'phabricator-paste-file-upload' => '95ceba95',
|
'phabricator-paste-file-upload' => '95ceba95',
|
||||||
'phabricator-prefab' => '95ceba95',
|
'phabricator-prefab' => '95ceba95',
|
||||||
'phabricator-project-tag-css' => 'eb35a026',
|
'phabricator-project-tag-css' => 'c41b4907',
|
||||||
'phabricator-remarkup-css' => 'b481b309',
|
'phabricator-remarkup-css' => '4a549b8b',
|
||||||
'phabricator-shaped-request' => '322728f3',
|
'phabricator-shaped-request' => '322728f3',
|
||||||
'phabricator-side-menu-view-css' => 'b481b309',
|
'phabricator-side-menu-view-css' => '4a549b8b',
|
||||||
'phabricator-standard-page-view' => 'b481b309',
|
'phabricator-standard-page-view' => '4a549b8b',
|
||||||
'phabricator-textareautils' => '95ceba95',
|
'phabricator-textareautils' => '95ceba95',
|
||||||
'phabricator-tooltip' => '95ceba95',
|
'phabricator-tooltip' => '95ceba95',
|
||||||
'phabricator-transaction-view-css' => 'b481b309',
|
'phabricator-transaction-view-css' => '4a549b8b',
|
||||||
'phabricator-zindex-css' => 'b481b309',
|
'phabricator-zindex-css' => '4a549b8b',
|
||||||
'sprite-apps-large-css' => 'b481b309',
|
'sprite-apps-large-css' => '4a549b8b',
|
||||||
'sprite-gradient-css' => 'b481b309',
|
'sprite-gradient-css' => '4a549b8b',
|
||||||
'sprite-icon-css' => 'b481b309',
|
'sprite-icon-css' => '4a549b8b',
|
||||||
'sprite-menu-css' => 'b481b309',
|
'sprite-menu-css' => '4a549b8b',
|
||||||
'syntax-highlighting-css' => 'b481b309',
|
'syntax-highlighting-css' => '4a549b8b',
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
|
@ -162,6 +162,7 @@ final class DifferentialRevisionListController extends DifferentialController {
|
||||||
|
|
||||||
$filter_form = id(new AphrontFormView())
|
$filter_form = id(new AphrontFormView())
|
||||||
->setMethod('GET')
|
->setMethod('GET')
|
||||||
|
->setNoShading(true)
|
||||||
->setAction('/differential/filter/'.$this->filter.'/')
|
->setAction('/differential/filter/'.$this->filter.'/')
|
||||||
->setUser($user);
|
->setUser($user);
|
||||||
foreach ($controls as $control) {
|
foreach ($controls as $control) {
|
||||||
|
@ -199,6 +200,7 @@ final class DifferentialRevisionListController extends DifferentialController {
|
||||||
$side_nav,
|
$side_nav,
|
||||||
array(
|
array(
|
||||||
'title' => pht('Differential Home'),
|
'title' => pht('Differential Home'),
|
||||||
|
'dust' => true,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,11 +60,11 @@ final class ManiphestBatchEditController extends ManiphestController {
|
||||||
'sources' => array(
|
'sources' => array(
|
||||||
'project' => array(
|
'project' => array(
|
||||||
'src' => '/typeahead/common/projects/',
|
'src' => '/typeahead/common/projects/',
|
||||||
'placeholder' => 'Type a project name...',
|
'placeholder' => pht('Type a project name...'),
|
||||||
),
|
),
|
||||||
'owner' => array(
|
'owner' => array(
|
||||||
'src' => '/typeahead/common/searchowner/',
|
'src' => '/typeahead/common/searchowner/',
|
||||||
'placeholder' => 'Type a user name...',
|
'placeholder' => pht('Type a user name...'),
|
||||||
'limit' => 1,
|
'limit' => 1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -96,7 +96,8 @@ final class ManiphestBatchEditController extends ManiphestController {
|
||||||
'name' => 'actions',
|
'name' => 'actions',
|
||||||
'id' => 'batch-form-actions',
|
'id' => 'batch-form-actions',
|
||||||
)));
|
)));
|
||||||
$form->appendChild(phutil_tag('p', array(), 'These tasks will be edited:'));
|
$form->appendChild(
|
||||||
|
phutil_tag('p', array(), pht('These tasks will be edited:')));
|
||||||
$form->appendChild($list);
|
$form->appendChild($list);
|
||||||
$form->appendChild(
|
$form->appendChild(
|
||||||
id(new AphrontFormInsetView())
|
id(new AphrontFormInsetView())
|
||||||
|
@ -109,7 +110,7 @@ final class ManiphestBatchEditController extends ManiphestController {
|
||||||
'sigil' => 'add-action',
|
'sigil' => 'add-action',
|
||||||
'mustcapture' => true,
|
'mustcapture' => true,
|
||||||
),
|
),
|
||||||
'Add Another Action'))
|
pht('Add Another Action')))
|
||||||
->setContent(javelin_tag(
|
->setContent(javelin_tag(
|
||||||
'table',
|
'table',
|
||||||
array(
|
array(
|
||||||
|
@ -119,7 +120,7 @@ final class ManiphestBatchEditController extends ManiphestController {
|
||||||
'')))
|
'')))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSubmitControl())
|
id(new AphrontFormSubmitControl())
|
||||||
->setValue('Update Tasks')
|
->setValue(pht('Update Tasks'))
|
||||||
->addCancelButton('/maniphest/', 'Done'));
|
->addCancelButton('/maniphest/', 'Done'));
|
||||||
|
|
||||||
$panel->appendChild($form);
|
$panel->appendChild($form);
|
||||||
|
@ -128,7 +129,7 @@ final class ManiphestBatchEditController extends ManiphestController {
|
||||||
return $this->buildStandardPageResponse(
|
return $this->buildStandardPageResponse(
|
||||||
$panel,
|
$panel,
|
||||||
array(
|
array(
|
||||||
'title' => 'Batch Editor',
|
'title' => pht('Batch Editor'),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ abstract class ManiphestController extends PhabricatorController {
|
||||||
public function buildStandardPageResponse($view, array $data) {
|
public function buildStandardPageResponse($view, array $data) {
|
||||||
$page = $this->buildStandardPageView();
|
$page = $this->buildStandardPageView();
|
||||||
|
|
||||||
$page->setApplicationName('Maniphest');
|
$page->setApplicationName(pht('Maniphest'));
|
||||||
$page->setBaseURI('/maniphest/');
|
$page->setBaseURI('/maniphest/');
|
||||||
$page->setTitle(idx($data, 'title'));
|
$page->setTitle(idx($data, 'title'));
|
||||||
$page->setGlyph("\xE2\x9A\x93");
|
$page->setGlyph("\xE2\x9A\x93");
|
||||||
|
@ -22,7 +22,7 @@ abstract class ManiphestController extends PhabricatorController {
|
||||||
return $response->setContent($page->render());
|
return $response->setContent($page->render());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildBaseSideNav() {
|
protected function buildBaseSideNav($filter = null, $for_app = false) {
|
||||||
$nav = new AphrontSideNavFilterView();
|
$nav = new AphrontSideNavFilterView();
|
||||||
$nav->setBaseURI(new PhutilURI('/maniphest/view/'));
|
$nav->setBaseURI(new PhutilURI('/maniphest/view/'));
|
||||||
|
|
||||||
|
@ -50,28 +50,36 @@ abstract class ManiphestController extends PhabricatorController {
|
||||||
$query->getName(),
|
$query->getName(),
|
||||||
'/maniphest/view/custom/?key='.$query->getQueryKey());
|
'/maniphest/view/custom/?key='.$query->getQueryKey());
|
||||||
}
|
}
|
||||||
$nav->addFilter('saved', 'Edit...', '/maniphest/custom/');
|
$nav->addFilter('saved', pht('Edit...'), '/maniphest/custom/');
|
||||||
}
|
}
|
||||||
|
|
||||||
$nav->addLabel('User Tasks');
|
if ($for_app) {
|
||||||
$nav->addFilter('action', 'Assigned');
|
$nav->addFilter('', pht('Create Task'),
|
||||||
$nav->addFilter('created', 'Created');
|
$this->getApplicationURI('task/create/'));
|
||||||
$nav->addFilter('subscribed', 'Subscribed');
|
}
|
||||||
$nav->addFilter('triage', 'Need Triage');
|
|
||||||
$nav->addLabel('User Projects');
|
$nav->addLabel(pht('User Tasks'));
|
||||||
$nav->addFilter('projecttriage', 'Need Triage');
|
$nav->addFilter('action', pht('Assigned'));
|
||||||
$nav->addFilter('projectall', 'All Tasks');
|
$nav->addFilter('created', pht('Created'));
|
||||||
|
$nav->addFilter('subscribed', pht('Subscribed'));
|
||||||
|
$nav->addFilter('triage', pht('Need Triage'));
|
||||||
|
$nav->addLabel(pht('User Projects'));
|
||||||
|
$nav->addFilter('projecttriage', pht('Need Triage'));
|
||||||
|
$nav->addFilter('projectall', pht('All Tasks'));
|
||||||
$nav->addLabel('All Tasks');
|
$nav->addLabel('All Tasks');
|
||||||
$nav->addFilter('alltriage', 'Need Triage');
|
$nav->addFilter('alltriage', pht('Need Triage'));
|
||||||
$nav->addFilter('all', 'All Tasks');
|
$nav->addFilter('all', pht('All Tasks'));
|
||||||
$nav->addLabel('Custom');
|
$nav->addLabel(pht('Custom'));
|
||||||
$nav->addFilter('custom', 'Custom Query');
|
$nav->addFilter('custom', pht('Custom Query'));
|
||||||
$nav->addLabel('Reports');
|
$nav->addFilter('report', pht('Reports'), '/maniphest/report/');
|
||||||
$nav->addFilter('report', 'Reports', '/maniphest/report/');
|
|
||||||
|
|
||||||
return $nav;
|
return $nav;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function buildApplicationMenu() {
|
||||||
|
return $this->buildBaseSideNav(null, true)->getMenu();
|
||||||
|
}
|
||||||
|
|
||||||
protected function getDefaultQuery() {
|
protected function getDefaultQuery() {
|
||||||
return $this->defaultQuery;
|
return $this->defaultQuery;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,18 +27,26 @@ final class ManiphestExportController extends ManiphestController {
|
||||||
$dialog = new AphrontDialogView();
|
$dialog = new AphrontDialogView();
|
||||||
$dialog->setUser($user);
|
$dialog->setUser($user);
|
||||||
|
|
||||||
$dialog->setTitle('Excel Export Not Configured');
|
$inst1 = pht(
|
||||||
$dialog->appendChild(hsprintf(
|
'This system does not have PHPExcel installed. This software '.
|
||||||
'<p>This system does not have PHPExcel installed. This software '.
|
|
||||||
'component is required to export tasks to Excel. Have your system '.
|
'component is required to export tasks to Excel. Have your system '.
|
||||||
'administrator install it from:</p>'.
|
'administrator install it from:');
|
||||||
|
|
||||||
|
$inst2 = pht(
|
||||||
|
'Your PHP "include_path" needs to be updated to include the '.
|
||||||
|
'PHPExcel Classes directory.');
|
||||||
|
|
||||||
|
$dialog->setTitle(pht('Excel Export Not Configured'));
|
||||||
|
$dialog->appendChild(hsprintf(
|
||||||
|
'<p>%s</p>'.
|
||||||
'<br />'.
|
'<br />'.
|
||||||
'<p>'.
|
'<p>'.
|
||||||
'<a href="http://www.phpexcel.net/">http://www.phpexcel.net/</a>'.
|
'<a href="http://www.phpexcel.net/">http://www.phpexcel.net/</a>'.
|
||||||
'</p>'.
|
'</p>'.
|
||||||
'<br />'.
|
'<br />'.
|
||||||
'<p>Your PHP "include_path" needs to be updated to include the '.
|
'<p>%s</p>',
|
||||||
'PHPExcel Classes/ directory.</p>'));
|
$inst1,
|
||||||
|
$inst2));
|
||||||
|
|
||||||
$dialog->addCancelButton('/maniphest/');
|
$dialog->addCancelButton('/maniphest/');
|
||||||
return id(new AphrontDialogResponse())->setDialog($dialog);
|
return id(new AphrontDialogResponse())->setDialog($dialog);
|
||||||
|
@ -58,12 +66,12 @@ final class ManiphestExportController extends ManiphestController {
|
||||||
$dialog = new AphrontDialogView();
|
$dialog = new AphrontDialogView();
|
||||||
$dialog->setUser($user);
|
$dialog->setUser($user);
|
||||||
|
|
||||||
$dialog->setTitle('Export Tasks to Excel');
|
$dialog->setTitle(pht('Export Tasks to Excel'));
|
||||||
$dialog->appendChild(phutil_tag('p', array(), pht(
|
$dialog->appendChild(phutil_tag('p', array(), pht(
|
||||||
'Do you want to export the query results to Excel?')));
|
'Do you want to export the query results to Excel?')));
|
||||||
|
|
||||||
$dialog->addCancelButton('/maniphest/');
|
$dialog->addCancelButton('/maniphest/');
|
||||||
$dialog->addSubmitButton('Export to Excel');
|
$dialog->addSubmitButton(pht('Export to Excel'));
|
||||||
return id(new AphrontDialogResponse())->setDialog($dialog);
|
return id(new AphrontDialogResponse())->setDialog($dialog);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -85,7 +93,7 @@ final class ManiphestExportController extends ManiphestController {
|
||||||
|
|
||||||
$workbook = new PHPExcel();
|
$workbook = new PHPExcel();
|
||||||
$sheet = $workbook->setActiveSheetIndex(0);
|
$sheet = $workbook->setActiveSheetIndex(0);
|
||||||
$sheet->setTitle('Tasks');
|
$sheet->setTitle(pht('Tasks'));
|
||||||
|
|
||||||
$widths = array(
|
$widths = array(
|
||||||
null,
|
null,
|
||||||
|
@ -113,16 +121,16 @@ final class ManiphestExportController extends ManiphestController {
|
||||||
|
|
||||||
$rows = array();
|
$rows = array();
|
||||||
$rows[] = array(
|
$rows[] = array(
|
||||||
'ID',
|
pht('ID'),
|
||||||
'Owner',
|
pht('Owner'),
|
||||||
'Status',
|
pht('Status'),
|
||||||
'Priority',
|
pht('Priority'),
|
||||||
'Date Created',
|
pht('Date Created'),
|
||||||
'Date Updated',
|
pht('Date Updated'),
|
||||||
'Title',
|
pht('Title'),
|
||||||
'Projects',
|
pht('Projects'),
|
||||||
'URI',
|
pht('URI'),
|
||||||
'Description',
|
pht('Description'),
|
||||||
);
|
);
|
||||||
|
|
||||||
$is_date = array(
|
$is_date = array(
|
||||||
|
|
|
@ -34,11 +34,11 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
|
|
||||||
$nav = new AphrontSideNavFilterView();
|
$nav = new AphrontSideNavFilterView();
|
||||||
$nav->setBaseURI(new PhutilURI('/maniphest/report/'));
|
$nav->setBaseURI(new PhutilURI('/maniphest/report/'));
|
||||||
$nav->addLabel('Open Tasks');
|
$nav->addLabel(pht('Open Tasks'));
|
||||||
$nav->addFilter('user', 'By User');
|
$nav->addFilter('user', pht('By User'));
|
||||||
$nav->addFilter('project', 'By Project');
|
$nav->addFilter('project', pht('By Project'));
|
||||||
$nav->addLabel('Burnup');
|
$nav->addLabel(pht('Burnup'));
|
||||||
$nav->addFilter('burn', 'Burnup Rate');
|
$nav->addFilter('burn', pht('Burnup Rate'));
|
||||||
|
|
||||||
$this->view = $nav->selectFilter($this->view, 'user');
|
$this->view = $nav->selectFilter($this->view, 'user');
|
||||||
|
|
||||||
|
@ -210,20 +210,20 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
|
|
||||||
if ($week) {
|
if ($week) {
|
||||||
$rows[] = $this->formatBurnRow(
|
$rows[] = $this->formatBurnRow(
|
||||||
'Week To Date',
|
pht('Week To Date'),
|
||||||
$week);
|
$week);
|
||||||
$rowc[] = 'week';
|
$rowc[] = 'week';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($month) {
|
if ($month) {
|
||||||
$rows[] = $this->formatBurnRow(
|
$rows[] = $this->formatBurnRow(
|
||||||
'Month To Date',
|
pht('Month To Date'),
|
||||||
$month);
|
$month);
|
||||||
$rowc[] = 'month';
|
$rowc[] = 'month';
|
||||||
}
|
}
|
||||||
|
|
||||||
$rows[] = $this->formatBurnRow(
|
$rows[] = $this->formatBurnRow(
|
||||||
'All Time',
|
pht('All Time'),
|
||||||
$period);
|
$period);
|
||||||
$rowc[] = 'aggregate';
|
$rowc[] = 'aggregate';
|
||||||
|
|
||||||
|
@ -234,10 +234,10 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
$table->setRowClasses($rowc);
|
$table->setRowClasses($rowc);
|
||||||
$table->setHeaders(
|
$table->setHeaders(
|
||||||
array(
|
array(
|
||||||
'Period',
|
pht('Period'),
|
||||||
'Opened',
|
pht('Opened'),
|
||||||
'Closed',
|
pht('Closed'),
|
||||||
'Change',
|
pht('Change'),
|
||||||
));
|
));
|
||||||
$table->setColumnClasses(
|
$table->setColumnClasses(
|
||||||
array(
|
array(
|
||||||
|
@ -248,16 +248,17 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
));
|
));
|
||||||
|
|
||||||
if ($handle) {
|
if ($handle) {
|
||||||
$header = pht("Task Burn Rate for Project %s", $handle->renderLink());
|
$inst = pht(
|
||||||
$caption = hsprintf(
|
"NOTE: This table reflects tasks <em>currently</em> in ".
|
||||||
"<p>NOTE: This table reflects tasks <em>currently</em> in ".
|
|
||||||
"the project. If a task was opened in the past but added to ".
|
"the project. If a task was opened in the past but added to ".
|
||||||
"the project recently, it is counted on the day it was ".
|
"the project recently, it is counted on the day it was ".
|
||||||
"opened, not the day it was categorized. If a task was part ".
|
"opened, not the day it was categorized. If a task was part ".
|
||||||
"of this project in the past but no longer is, it is not ".
|
"of this project in the past but no longer is, it is not ".
|
||||||
"counted at all.</p>");
|
"counted at all.");
|
||||||
|
$header = pht("Task Burn Rate for Project %s", $handle->renderLink());
|
||||||
|
$caption = hsprintf("<p>%s</p>", $inst);
|
||||||
} else {
|
} else {
|
||||||
$header = "Task Burn Rate for All Tasks";
|
$header = pht("Task Burn Rate for All Tasks");
|
||||||
$caption = null;
|
$caption = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,7 +316,7 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setDatasource('/typeahead/common/searchproject/')
|
->setDatasource('/typeahead/common/searchproject/')
|
||||||
->setLabel('Project')
|
->setLabel(pht('Project'))
|
||||||
->setLimit(1)
|
->setLimit(1)
|
||||||
->setName('set_project')
|
->setName('set_project')
|
||||||
->setValue($tokens));
|
->setValue($tokens));
|
||||||
|
@ -325,10 +326,10 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
$form
|
$form
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormTextControl())
|
id(new AphrontFormTextControl())
|
||||||
->setLabel('"Recently" Means')
|
->setLabel(pht('Recently Means'))
|
||||||
->setName('set_window')
|
->setName('set_window')
|
||||||
->setCaption(
|
->setCaption(
|
||||||
'Configure the cutoff for the "Recently Closed" column.')
|
pht('Configure the cutoff for the "Recently Closed" column.'))
|
||||||
->setValue($window_str)
|
->setValue($window_str)
|
||||||
->setError($window_error));
|
->setError($window_error));
|
||||||
}
|
}
|
||||||
|
@ -336,7 +337,7 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
$form
|
$form
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSubmitControl())
|
id(new AphrontFormSubmitControl())
|
||||||
->setValue('Filter By Project'));
|
->setValue(pht('Filter By Project')));
|
||||||
|
|
||||||
$filter = new AphrontListFilterView();
|
$filter = new AphrontListFilterView();
|
||||||
$filter->appendChild($form);
|
$filter->appendChild($form);
|
||||||
|
@ -419,9 +420,9 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
array(
|
array(
|
||||||
'href' => $base_link.ManiphestTaskOwner::OWNER_UP_FOR_GRABS,
|
'href' => $base_link.ManiphestTaskOwner::OWNER_UP_FOR_GRABS,
|
||||||
),
|
),
|
||||||
phutil_tag('em', array(), '(Up For Grabs)'));
|
phutil_tag('em', array(), pht('(Up For Grabs)')));
|
||||||
$col_header = 'User';
|
$col_header = pht('User');
|
||||||
$header = 'Open Tasks by User and Priority ('.$date.')';
|
$header = pht('Open Tasks by User and Priority (%s)', $date);
|
||||||
break;
|
break;
|
||||||
case 'project':
|
case 'project':
|
||||||
$result = array();
|
$result = array();
|
||||||
|
@ -456,9 +457,9 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
array(
|
array(
|
||||||
'href' => $base_link.ManiphestTaskOwner::PROJECT_NO_PROJECT,
|
'href' => $base_link.ManiphestTaskOwner::PROJECT_NO_PROJECT,
|
||||||
),
|
),
|
||||||
phutil_tag('em', array(), '(No Project)'));
|
phutil_tag('em', array(), pht('(No Project)')));
|
||||||
$col_header = 'Project';
|
$col_header = pht('Project');
|
||||||
$header = 'Open Tasks by Project and Priority ('.$date.')';
|
$header = pht('Open Tasks by Project and Priority (%s)', $date);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,36 +585,37 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
array(
|
array(
|
||||||
'sigil' => 'has-tooltip',
|
'sigil' => 'has-tooltip',
|
||||||
'meta' => array(
|
'meta' => array(
|
||||||
'tip' => 'Oldest open task.',
|
'tip' => pht('Oldest open task.'),
|
||||||
'size' => 200,
|
'size' => 200,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'Oldest (All)');
|
pht('Oldest (All)'));
|
||||||
$cclass[] = 'n';
|
$cclass[] = 'n';
|
||||||
$cname[] = javelin_tag(
|
$cname[] = javelin_tag(
|
||||||
'span',
|
'span',
|
||||||
array(
|
array(
|
||||||
'sigil' => 'has-tooltip',
|
'sigil' => 'has-tooltip',
|
||||||
'meta' => array(
|
'meta' => array(
|
||||||
'tip' => 'Oldest open task, excluding those with Low or Wishlist '.
|
'tip' => pht('Oldest open task, excluding those with Low or '.
|
||||||
'priority.',
|
'Wishlist priority.'),
|
||||||
'size' => 200,
|
'size' => 200,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'Oldest (Pri)');
|
pht('Oldest (Pri)'));
|
||||||
$cclass[] = 'n';
|
$cclass[] = 'n';
|
||||||
|
|
||||||
list($ignored, $window_epoch) = $this->getWindow();
|
list($ignored, $window_epoch) = $this->getWindow();
|
||||||
|
$edate = phabricator_datetime($window_epoch, $user);
|
||||||
$cname[] = javelin_tag(
|
$cname[] = javelin_tag(
|
||||||
'span',
|
'span',
|
||||||
array(
|
array(
|
||||||
'sigil' => 'has-tooltip',
|
'sigil' => 'has-tooltip',
|
||||||
'meta' => array(
|
'meta' => array(
|
||||||
'tip' => 'Closed after '.phabricator_datetime($window_epoch, $user),
|
'tip' => pht('Closed after %s', $edate),
|
||||||
'size' => 260
|
'size' => 260
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'Recently Closed');
|
pht('Recently Closed'));
|
||||||
$cclass[] = 'n';
|
$cclass[] = 'n';
|
||||||
|
|
||||||
$table = new AphrontTableView($rows);
|
$table = new AphrontTableView($rows);
|
||||||
|
|
|
@ -30,15 +30,17 @@ final class ManiphestSavedQueryDeleteController extends ManiphestController {
|
||||||
}
|
}
|
||||||
|
|
||||||
$name = $query->getName();
|
$name = $query->getName();
|
||||||
|
$inst = pht(
|
||||||
|
'Really delete the query "%s"? It will be lost forever!', $name);
|
||||||
|
|
||||||
$dialog = id(new AphrontDialogView())
|
$dialog = id(new AphrontDialogView())
|
||||||
->setUser($user)
|
->setUser($user)
|
||||||
->setTitle('Really delete this query?')
|
->setTitle(pht('Really delete this query?'))
|
||||||
->appendChild(hsprintf(
|
->appendChild(hsprintf(
|
||||||
'<p>Really delete the query "%s"? It will be lost forever!</p>',
|
'<p>%s</p>',
|
||||||
$name))
|
$inst))
|
||||||
->addCancelButton('/maniphest/custom/')
|
->addCancelButton('/maniphest/custom/')
|
||||||
->addSubmitButton('Delete');
|
->addSubmitButton(pht('Delete'));
|
||||||
|
|
||||||
return id(new AphrontDialogResponse())->setDialog($dialog);
|
return id(new AphrontDialogResponse())->setDialog($dialog);
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,8 +42,8 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
|
||||||
$e_name = null;
|
$e_name = null;
|
||||||
$query->setName($request->getStr('name'));
|
$query->setName($request->getStr('name'));
|
||||||
if (!strlen($query->getName())) {
|
if (!strlen($query->getName())) {
|
||||||
$e_name = 'Required';
|
$e_name = pht('Required');
|
||||||
$errors[] = 'Saved query name is required.';
|
$errors[] = pht('Saved query name is required.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$errors) {
|
if (!$errors) {
|
||||||
|
@ -54,17 +54,17 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
|
||||||
|
|
||||||
if ($errors) {
|
if ($errors) {
|
||||||
$error_view = new AphrontErrorView();
|
$error_view = new AphrontErrorView();
|
||||||
$error_view->setTitle('Form Errors');
|
$error_view->setTitle(pht('Form Errors'));
|
||||||
$error_view->setErrors($errors);
|
$error_view->setErrors($errors);
|
||||||
} else {
|
} else {
|
||||||
$error_view = null;
|
$error_view = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($query->getID()) {
|
if ($query->getID()) {
|
||||||
$header = 'Edit Saved Query';
|
$header = pht('Edit Saved Query');
|
||||||
$cancel_uri = '/maniphest/custom/';
|
$cancel_uri = '/maniphest/custom/';
|
||||||
} else {
|
} else {
|
||||||
$header = 'New Saved Query';
|
$header = pht('New Saved Query');
|
||||||
$cancel_uri = '/maniphest/view/custom/?key='.$key;
|
$cancel_uri = '/maniphest/view/custom/?key='.$key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,14 +74,14 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
|
||||||
->addHiddenInput('id', $query->getID())
|
->addHiddenInput('id', $query->getID())
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormTextControl())
|
id(new AphrontFormTextControl())
|
||||||
->setLabel('Name')
|
->setLabel(pht('Name'))
|
||||||
->setValue($query->getName())
|
->setValue($query->getName())
|
||||||
->setName('name')
|
->setName('name')
|
||||||
->setError($e_name))
|
->setError($e_name))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSubmitControl())
|
id(new AphrontFormSubmitControl())
|
||||||
->addCancelButton($cancel_uri)
|
->addCancelButton($cancel_uri)
|
||||||
->setValue('Save'));
|
->setValue(pht('Save')));
|
||||||
|
|
||||||
$panel = new AphrontPanelView();
|
$panel = new AphrontPanelView();
|
||||||
$panel->setHeader($header);
|
$panel->setHeader($header);
|
||||||
|
@ -94,10 +94,11 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
|
||||||
$nav->appendChild($error_view);
|
$nav->appendChild($error_view);
|
||||||
$nav->appendChild($panel);
|
$nav->appendChild($panel);
|
||||||
|
|
||||||
return $this->buildStandardPageResponse(
|
return $this->buildApplicationPage(
|
||||||
$nav,
|
$nav,
|
||||||
array(
|
array(
|
||||||
'title' => 'Saved Queries',
|
'title' => pht('Saved Queries'),
|
||||||
|
'device' => true,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ final class ManiphestSavedQueryListController extends ManiphestController {
|
||||||
'value' => 0,
|
'value' => 0,
|
||||||
'checked' => ($default === null ? 'checked' : null),
|
'checked' => ($default === null ? 'checked' : null),
|
||||||
)),
|
)),
|
||||||
phutil_tag('em', array(), 'No Default'),
|
phutil_tag('em', array(), pht('No Default')),
|
||||||
'',
|
'',
|
||||||
'',
|
'',
|
||||||
);
|
);
|
||||||
|
@ -89,10 +89,10 @@ final class ManiphestSavedQueryListController extends ManiphestController {
|
||||||
$table = new AphrontTableView($rows);
|
$table = new AphrontTableView($rows);
|
||||||
$table->setHeaders(
|
$table->setHeaders(
|
||||||
array(
|
array(
|
||||||
'Default',
|
pht('Default'),
|
||||||
'Name',
|
pht('Name'),
|
||||||
'Edit',
|
pht('Edit'),
|
||||||
'Delete',
|
pht('Delete'),
|
||||||
));
|
));
|
||||||
$table->setColumnClasses(
|
$table->setColumnClasses(
|
||||||
array(
|
array(
|
||||||
|
@ -103,12 +103,12 @@ final class ManiphestSavedQueryListController extends ManiphestController {
|
||||||
));
|
));
|
||||||
|
|
||||||
$panel = new AphrontPanelView();
|
$panel = new AphrontPanelView();
|
||||||
$panel->setHeader('Saved Custom Queries');
|
$panel->setHeader(pht('Saved Custom Queries'));
|
||||||
$panel->addButton(
|
$panel->addButton(
|
||||||
phutil_tag(
|
phutil_tag(
|
||||||
'button',
|
'button',
|
||||||
array(),
|
array(),
|
||||||
'Save Default Query'));
|
pht('Save Default Query')));
|
||||||
$panel->appendChild($table);
|
$panel->appendChild($table);
|
||||||
|
|
||||||
$form = phabricator_form(
|
$form = phabricator_form(
|
||||||
|
@ -122,10 +122,11 @@ final class ManiphestSavedQueryListController extends ManiphestController {
|
||||||
$nav->selectFilter('saved', 'saved');
|
$nav->selectFilter('saved', 'saved');
|
||||||
$nav->appendChild($form);
|
$nav->appendChild($form);
|
||||||
|
|
||||||
return $this->buildStandardPageResponse(
|
return $this->buildApplicationPage(
|
||||||
$nav,
|
$nav,
|
||||||
array(
|
array(
|
||||||
'title' => 'Saved Queries',
|
'title' => pht('Saved Queries'),
|
||||||
|
'device' => true,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
'href' => '/maniphest/task/create/?parent='.$parent_task->getID(),
|
'href' => '/maniphest/task/create/?parent='.$parent_task->getID(),
|
||||||
'class' => 'green button',
|
'class' => 'green button',
|
||||||
),
|
),
|
||||||
'Create Another Subtask'));
|
pht('Create Another Subtask')));
|
||||||
$context_bar->appendChild(hsprintf(
|
$context_bar->appendChild(hsprintf(
|
||||||
'Created a subtask of <strong>%s</strong>',
|
'Created a subtask of <strong>%s</strong>',
|
||||||
$this->getHandle($parent_task->getPHID())->renderLink()));
|
$this->getHandle($parent_task->getPHID())->renderLink()));
|
||||||
|
@ -120,15 +120,15 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
'href' => '/maniphest/task/create/?template='.$task->getID(),
|
'href' => '/maniphest/task/create/?template='.$task->getID(),
|
||||||
'class' => 'green button',
|
'class' => 'green button',
|
||||||
),
|
),
|
||||||
'Similar Task'));
|
pht('Similar Task')));
|
||||||
$context_bar->addButton(phutil_tag(
|
$context_bar->addButton(phutil_tag(
|
||||||
'a',
|
'a',
|
||||||
array(
|
array(
|
||||||
'href' => '/maniphest/task/create/',
|
'href' => '/maniphest/task/create/',
|
||||||
'class' => 'green button',
|
'class' => 'green button',
|
||||||
),
|
),
|
||||||
'Empty Task'));
|
pht('Empty Task')));
|
||||||
$context_bar->appendChild('New task created.');
|
$context_bar->appendChild(pht('New task created.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$engine = new PhabricatorMarkupEngine();
|
$engine = new PhabricatorMarkupEngine();
|
||||||
|
@ -201,20 +201,20 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
->addHiddenInput('taskID', $task->getID())
|
->addHiddenInput('taskID', $task->getID())
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSelectControl())
|
id(new AphrontFormSelectControl())
|
||||||
->setLabel('Action')
|
->setLabel(pht('Action'))
|
||||||
->setName('action')
|
->setName('action')
|
||||||
->setOptions($transaction_types)
|
->setOptions($transaction_types)
|
||||||
->setID('transaction-action'))
|
->setID('transaction-action'))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSelectControl())
|
id(new AphrontFormSelectControl())
|
||||||
->setLabel('Resolution')
|
->setLabel(pht('Resolution'))
|
||||||
->setName('resolution')
|
->setName('resolution')
|
||||||
->setControlID('resolution')
|
->setControlID('resolution')
|
||||||
->setControlStyle('display: none')
|
->setControlStyle('display: none')
|
||||||
->setOptions($resolution_types))
|
->setOptions($resolution_types))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setLabel('Assign To')
|
->setLabel(pht('Assign To'))
|
||||||
->setName('assign_to')
|
->setName('assign_to')
|
||||||
->setControlID('assign_to')
|
->setControlID('assign_to')
|
||||||
->setControlStyle('display: none')
|
->setControlStyle('display: none')
|
||||||
|
@ -222,7 +222,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
->setDisableBehavior(true))
|
->setDisableBehavior(true))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setLabel('CCs')
|
->setLabel(pht('CCs'))
|
||||||
->setName('ccs')
|
->setName('ccs')
|
||||||
->setControlID('ccs')
|
->setControlID('ccs')
|
||||||
->setControlStyle('display: none')
|
->setControlStyle('display: none')
|
||||||
|
@ -230,7 +230,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
->setDisableBehavior(true))
|
->setDisableBehavior(true))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSelectControl())
|
id(new AphrontFormSelectControl())
|
||||||
->setLabel('Priority')
|
->setLabel(pht('Priority'))
|
||||||
->setName('priority')
|
->setName('priority')
|
||||||
->setOptions($priority_map)
|
->setOptions($priority_map)
|
||||||
->setControlID('priority')
|
->setControlID('priority')
|
||||||
|
@ -238,7 +238,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
->setValue($task->getPriority()))
|
->setValue($task->getPriority()))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setLabel('Projects')
|
->setLabel(pht('Projects'))
|
||||||
->setName('projects')
|
->setName('projects')
|
||||||
->setControlID('projects')
|
->setControlID('projects')
|
||||||
->setControlStyle('display: none')
|
->setControlStyle('display: none')
|
||||||
|
@ -246,25 +246,25 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
->setDisableBehavior(true))
|
->setDisableBehavior(true))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormFileControl())
|
id(new AphrontFormFileControl())
|
||||||
->setLabel('File')
|
->setLabel(pht('File'))
|
||||||
->setName('file')
|
->setName('file')
|
||||||
->setControlID('file')
|
->setControlID('file')
|
||||||
->setControlStyle('display: none'))
|
->setControlStyle('display: none'))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new PhabricatorRemarkupControl())
|
id(new PhabricatorRemarkupControl())
|
||||||
->setLabel('Comments')
|
->setLabel(pht('Comments'))
|
||||||
->setName('comments')
|
->setName('comments')
|
||||||
->setValue($draft_text)
|
->setValue($draft_text)
|
||||||
->setID('transaction-comments')
|
->setID('transaction-comments')
|
||||||
->setUser($user))
|
->setUser($user))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormDragAndDropUploadControl())
|
id(new AphrontFormDragAndDropUploadControl())
|
||||||
->setLabel('Attached Files')
|
->setLabel(pht('Attached Files'))
|
||||||
->setName('files')
|
->setName('files')
|
||||||
->setActivatedClass('aphront-panel-view-drag-and-drop'))
|
->setActivatedClass('aphront-panel-view-drag-and-drop'))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSubmitControl())
|
id(new AphrontFormSubmitControl())
|
||||||
->setValue($is_serious ? 'Submit' : 'Avast!'));
|
->setValue($is_serious ? pht('Submit') : pht('Avast!')));
|
||||||
|
|
||||||
$control_map = array(
|
$control_map = array(
|
||||||
ManiphestTransactionType::TYPE_STATUS => 'resolution',
|
ManiphestTransactionType::TYPE_STATUS => 'resolution',
|
||||||
|
@ -280,7 +280,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
'id' => 'projects-tokenizer',
|
'id' => 'projects-tokenizer',
|
||||||
'src' => '/typeahead/common/projects/',
|
'src' => '/typeahead/common/projects/',
|
||||||
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
|
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
|
||||||
'placeholder' => 'Type a project name...',
|
'placeholder' => pht('Type a project name...'),
|
||||||
),
|
),
|
||||||
ManiphestTransactionType::TYPE_OWNER => array(
|
ManiphestTransactionType::TYPE_OWNER => array(
|
||||||
'id' => 'assign-tokenizer',
|
'id' => 'assign-tokenizer',
|
||||||
|
@ -288,13 +288,13 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||||
'value' => $default_claim,
|
'value' => $default_claim,
|
||||||
'limit' => 1,
|
'limit' => 1,
|
||||||
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
|
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
|
||||||
'placeholder' => 'Type a user name...',
|
'placeholder' => pht('Type a user name...'),
|
||||||
),
|
),
|
||||||
ManiphestTransactionType::TYPE_CCS => array(
|
ManiphestTransactionType::TYPE_CCS => array(
|
||||||
'id' => 'cc-tokenizer',
|
'id' => 'cc-tokenizer',
|
||||||
'src' => '/typeahead/common/mailable/',
|
'src' => '/typeahead/common/mailable/',
|
||||||
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
|
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
|
||||||
'placeholder' => 'Type a user or mailing list...',
|
'placeholder' => pht('Type a user or mailing list...'),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -112,15 +112,15 @@ final class ManiphestTaskEditController extends ManiphestController {
|
||||||
$aux_field->setValueFromRequest($request);
|
$aux_field->setValueFromRequest($request);
|
||||||
|
|
||||||
if ($aux_field->isRequired() && !$aux_field->getValue()) {
|
if ($aux_field->isRequired() && !$aux_field->getValue()) {
|
||||||
$errors[] = $aux_field->getLabel() . ' is required.';
|
$errors[] = pht('%s is required.', $aux_field->getLabel());
|
||||||
$aux_field->setError('Required');
|
$aux_field->setError(pht('Required'));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$aux_field->validate();
|
$aux_field->validate();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$errors[] = $e->getMessage();
|
$errors[] = $e->getMessage();
|
||||||
$aux_field->setError('Invalid');
|
$aux_field->setError(pht('Invalid'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,18 +501,22 @@ final class ManiphestTaskEditController extends ManiphestController {
|
||||||
$panel->setHeader($header_name);
|
$panel->setHeader($header_name);
|
||||||
$panel->appendChild($form);
|
$panel->appendChild($form);
|
||||||
$panel->setNoBackground();
|
$panel->setNoBackground();
|
||||||
|
$inst1 = pht('Description Preview');
|
||||||
|
$inst2 = pht('Loading preview...');
|
||||||
|
|
||||||
$description_preview_panel = hsprintf(
|
$description_preview_panel = hsprintf(
|
||||||
'<div class="aphront-panel-preview aphront-panel-preview-full">
|
'<div class="aphront-panel-preview aphront-panel-preview-full">
|
||||||
<div class="maniphest-description-preview-header">
|
<div class="maniphest-description-preview-header">
|
||||||
Description Preview
|
%s
|
||||||
</div>
|
</div>
|
||||||
<div id="description-preview">
|
<div id="description-preview">
|
||||||
<div class="aphront-panel-preview-loading-text">
|
<div class="aphront-panel-preview-loading-text">
|
||||||
Loading preview...
|
%s
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>');
|
</div>',
|
||||||
|
$inst1,
|
||||||
|
$inst2);
|
||||||
|
|
||||||
Javelin::initBehavior(
|
Javelin::initBehavior(
|
||||||
'maniphest-description-preview',
|
'maniphest-description-preview',
|
||||||
|
@ -537,7 +541,7 @@ final class ManiphestTaskEditController extends ManiphestController {
|
||||||
array(
|
array(
|
||||||
'title' => $header_name,
|
'title' => $header_name,
|
||||||
'pageObjects' => $page_objects,
|
'pageObjects' => $page_objects,
|
||||||
'device' => true
|
'device' => true,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,6 +120,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
|
|
||||||
$form = id(new AphrontFormView())
|
$form = id(new AphrontFormView())
|
||||||
->setUser($user)
|
->setUser($user)
|
||||||
|
->setNoShading(true)
|
||||||
->setAction(
|
->setAction(
|
||||||
$request->getRequestURI()
|
$request->getRequestURI()
|
||||||
->alter('key', null)
|
->alter('key', null)
|
||||||
|
@ -142,7 +143,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setDatasource('/typeahead/common/searchowner/')
|
->setDatasource('/typeahead/common/searchowner/')
|
||||||
->setName('set_users')
|
->setName('set_users')
|
||||||
->setLabel('Users')
|
->setLabel(pht('Users'))
|
||||||
->setValue($tokens));
|
->setValue($tokens));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,12 +151,12 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
$form->appendChild(
|
$form->appendChild(
|
||||||
id(new AphrontFormTextControl())
|
id(new AphrontFormTextControl())
|
||||||
->setName('set_search')
|
->setName('set_search')
|
||||||
->setLabel('Search')
|
->setLabel(pht('Search'))
|
||||||
->setValue($search_text));
|
->setValue($search_text));
|
||||||
$form->appendChild(
|
$form->appendChild(
|
||||||
id(new AphrontFormTextControl())
|
id(new AphrontFormTextControl())
|
||||||
->setName('set_tasks')
|
->setName('set_tasks')
|
||||||
->setLabel('Task IDs')
|
->setLabel(pht('Task IDs'))
|
||||||
->setValue(join(',', $task_ids)));
|
->setValue(join(',', $task_ids)));
|
||||||
|
|
||||||
$tokens = array();
|
$tokens = array();
|
||||||
|
@ -166,7 +167,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setDatasource('/typeahead/common/searchowner/')
|
->setDatasource('/typeahead/common/searchowner/')
|
||||||
->setName('set_owners')
|
->setName('set_owners')
|
||||||
->setLabel('Owners')
|
->setLabel(pht('Owners'))
|
||||||
->setValue($tokens));
|
->setValue($tokens));
|
||||||
|
|
||||||
$tokens = array();
|
$tokens = array();
|
||||||
|
@ -177,7 +178,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setDatasource('/typeahead/common/users/')
|
->setDatasource('/typeahead/common/users/')
|
||||||
->setName('set_authors')
|
->setName('set_authors')
|
||||||
->setLabel('Authors')
|
->setLabel(pht('Authors'))
|
||||||
->setValue($tokens));
|
->setValue($tokens));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,14 +190,14 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
|
|
||||||
$caption = null;
|
$caption = null;
|
||||||
if ($this->view == 'custom') {
|
if ($this->view == 'custom') {
|
||||||
$caption = 'Find tasks in ALL of these projects ("AND" query).';
|
$caption = pht('Find tasks in ALL of these projects ("AND" query).');
|
||||||
}
|
}
|
||||||
|
|
||||||
$form->appendChild(
|
$form->appendChild(
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setDatasource('/typeahead/common/searchproject/')
|
->setDatasource('/typeahead/common/searchproject/')
|
||||||
->setName('set_projects')
|
->setName('set_projects')
|
||||||
->setLabel('Projects')
|
->setLabel(pht('Projects'))
|
||||||
->setCaption($caption)
|
->setCaption($caption)
|
||||||
->setValue($tokens));
|
->setValue($tokens));
|
||||||
}
|
}
|
||||||
|
@ -210,8 +211,8 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setDatasource('/typeahead/common/projects/')
|
->setDatasource('/typeahead/common/projects/')
|
||||||
->setName('set_aprojects')
|
->setName('set_aprojects')
|
||||||
->setLabel('Any Projects')
|
->setLabel(pht('Any Projects'))
|
||||||
->setCaption('Find tasks in ANY of these projects ("OR" query).')
|
->setCaption(pht('Find tasks in ANY of these projects ("OR" query).'))
|
||||||
->setValue($atokens));
|
->setValue($atokens));
|
||||||
|
|
||||||
$tokens = array();
|
$tokens = array();
|
||||||
|
@ -222,8 +223,8 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setDatasource('/typeahead/common/projects/')
|
->setDatasource('/typeahead/common/projects/')
|
||||||
->setName('set_xprojects')
|
->setName('set_xprojects')
|
||||||
->setLabel('Exclude Projects')
|
->setLabel(pht('Exclude Projects'))
|
||||||
->setCaption('Find tasks NOT in any of these projects.')
|
->setCaption(pht('Find tasks NOT in any of these projects.'))
|
||||||
->setValue($tokens));
|
->setValue($tokens));
|
||||||
|
|
||||||
$priority = ManiphestTaskPriority::getLowestPriority();
|
$priority = ManiphestTaskPriority::getLowestPriority();
|
||||||
|
@ -233,7 +234,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
|
|
||||||
$form->appendChild(
|
$form->appendChild(
|
||||||
id(new AphrontFormSelectControl())
|
id(new AphrontFormSelectControl())
|
||||||
->setLabel('Min Priority')
|
->setLabel(pht('Min Priority'))
|
||||||
->setName('set_lpriority')
|
->setName('set_lpriority')
|
||||||
->setValue($priority)
|
->setValue($priority)
|
||||||
->setOptions(array_reverse(
|
->setOptions(array_reverse(
|
||||||
|
@ -246,7 +247,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
|
|
||||||
$form->appendChild(
|
$form->appendChild(
|
||||||
id(new AphrontFormSelectControl())
|
id(new AphrontFormSelectControl())
|
||||||
->setLabel('Max Priority')
|
->setLabel(pht('Max Priority'))
|
||||||
->setName('set_hpriority')
|
->setName('set_hpriority')
|
||||||
->setValue($priority)
|
->setValue($priority)
|
||||||
->setOptions(ManiphestTaskPriority::getTaskPriorityMap()));
|
->setOptions(ManiphestTaskPriority::getTaskPriorityMap()));
|
||||||
|
@ -259,7 +260,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
->appendChild($this->renderOrderControl($q_order));
|
->appendChild($this->renderOrderControl($q_order));
|
||||||
|
|
||||||
$submit = id(new AphrontFormSubmitControl())
|
$submit = id(new AphrontFormSubmitControl())
|
||||||
->setValue('Filter Tasks');
|
->setValue(pht('Filter Tasks'));
|
||||||
|
|
||||||
// Only show "Save..." for novel queries which have some kind of query
|
// Only show "Save..." for novel queries which have some kind of query
|
||||||
// parameters set.
|
// parameters set.
|
||||||
|
@ -268,7 +269,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
&& $request->getRequestURI()->getQueryParams()) {
|
&& $request->getRequestURI()->getQueryParams()) {
|
||||||
$submit->addCancelButton(
|
$submit->addCancelButton(
|
||||||
'/maniphest/custom/edit/?key='.$query->getQueryKey(),
|
'/maniphest/custom/edit/?key='.$query->getQueryKey(),
|
||||||
'Save Custom Query...');
|
pht('Save Custom Query...'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$form->appendChild($submit);
|
$form->appendChild($submit);
|
||||||
|
@ -285,8 +286,6 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
$filter->appendChild($form);
|
$filter->appendChild($form);
|
||||||
}
|
}
|
||||||
|
|
||||||
$nav->appendChild($filter);
|
|
||||||
|
|
||||||
$have_tasks = false;
|
$have_tasks = false;
|
||||||
foreach ($tasks as $group => $list) {
|
foreach ($tasks as $group => $list) {
|
||||||
if (count($list)) {
|
if (count($list)) {
|
||||||
|
@ -302,10 +301,12 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
'<div class="maniphest-list-container">'));
|
'<div class="maniphest-list-container">'));
|
||||||
|
|
||||||
if (!$have_tasks) {
|
if (!$have_tasks) {
|
||||||
|
$no_tasks = pht('No matching tasks.');
|
||||||
$list_container->appendChild(hsprintf(
|
$list_container->appendChild(hsprintf(
|
||||||
'<h1 class="maniphest-task-group-header">'.
|
'<h1 class="maniphest-task-group-header">'.
|
||||||
'No matching tasks.'.
|
'%s'.
|
||||||
'</h1>'));
|
'</h1>',
|
||||||
|
$no_tasks));
|
||||||
} else {
|
} else {
|
||||||
$pager = new AphrontPagerView();
|
$pager = new AphrontPagerView();
|
||||||
$pager->setURI($request->getRequestURI(), 'offset');
|
$pager->setURI($request->getRequestURI(), 'offset');
|
||||||
|
@ -317,13 +318,16 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
$max = min($pager->getOffset() + $page_size, $total_count);
|
$max = min($pager->getOffset() + $page_size, $total_count);
|
||||||
$tot = $total_count;
|
$tot = $total_count;
|
||||||
|
|
||||||
$list_container->appendChild(hsprintf(
|
$results = pht('Displaying tasks %s - %s of %s.',
|
||||||
'<div class="maniphest-total-result-count">'.
|
|
||||||
"Displaying tasks %s - %s of %s.".
|
|
||||||
'</div>',
|
|
||||||
number_format($cur),
|
number_format($cur),
|
||||||
number_format($max),
|
number_format($max),
|
||||||
number_format($tot)));
|
number_format($tot));
|
||||||
|
$result_count = phutil_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'maniphest-total-result-count'
|
||||||
|
),
|
||||||
|
$results);
|
||||||
|
|
||||||
$selector = new AphrontNullView();
|
$selector = new AphrontNullView();
|
||||||
|
|
||||||
|
@ -333,8 +337,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
($order == 'priority') &&
|
($order == 'priority') &&
|
||||||
($group == 'none' || $group == 'priority');
|
($group == 'none' || $group == 'priority');
|
||||||
|
|
||||||
$lists = new AphrontNullView();
|
$lists = array();
|
||||||
$lists->appendChild(hsprintf('<div class="maniphest-group-container">'));
|
|
||||||
foreach ($tasks as $group => $list) {
|
foreach ($tasks as $group => $list) {
|
||||||
$task_list = new ManiphestTaskListView();
|
$task_list = new ManiphestTaskListView();
|
||||||
$task_list->setShowBatchControls(true);
|
$task_list->setShowBatchControls(true);
|
||||||
|
@ -359,18 +362,19 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
),
|
),
|
||||||
$group.' ('.$count.')');
|
$group.' ('.$count.')');
|
||||||
|
|
||||||
|
$lists[] =
|
||||||
$panel = new AphrontPanelView();
|
phutil_tag(
|
||||||
$panel->appendChild($header);
|
'div',
|
||||||
$panel->appendChild($task_list);
|
array(
|
||||||
$panel->setNoBackground();
|
'class' => 'maniphest-task-group'
|
||||||
|
),
|
||||||
$lists->appendChild($panel);
|
array(
|
||||||
|
$header,
|
||||||
|
$task_list,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
$lists->appendChild(hsprintf('</div>'));
|
|
||||||
$selector->appendChild($lists);
|
$selector->appendChild($lists);
|
||||||
|
|
||||||
|
|
||||||
$selector->appendChild($this->renderBatchEditor($query));
|
$selector->appendChild($this->renderBatchEditor($query));
|
||||||
|
|
||||||
$form_id = celerity_generate_unique_node_id();
|
$form_id = celerity_generate_unique_node_id();
|
||||||
|
@ -394,7 +398,8 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
$list_container->appendChild(hsprintf('</div>'));
|
$nav->appendChild($filter);
|
||||||
|
$nav->appendChild($result_count);
|
||||||
$nav->appendChild($list_container);
|
$nav->appendChild($list_container);
|
||||||
|
|
||||||
$title = pht('Task List');
|
$title = pht('Task List');
|
||||||
|
@ -411,10 +416,12 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
|
|
||||||
$nav->setCrumbs($crumbs);
|
$nav->setCrumbs($crumbs);
|
||||||
|
|
||||||
return $this->buildStandardPageResponse(
|
return $this->buildApplicationPage(
|
||||||
$nav,
|
$nav,
|
||||||
array(
|
array(
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
|
'device' => true,
|
||||||
|
'dust' => true,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -653,7 +660,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
'class' => 'grey button',
|
'class' => 'grey button',
|
||||||
'id' => 'batch-select-all',
|
'id' => 'batch-select-all',
|
||||||
),
|
),
|
||||||
'Select All');
|
pht('Select All'));
|
||||||
|
|
||||||
$select_none = javelin_tag(
|
$select_none = javelin_tag(
|
||||||
'a',
|
'a',
|
||||||
|
@ -663,7 +670,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
'class' => 'grey button',
|
'class' => 'grey button',
|
||||||
'id' => 'batch-select-none',
|
'id' => 'batch-select-none',
|
||||||
),
|
),
|
||||||
'Clear Selection');
|
pht('Clear Selection'));
|
||||||
|
|
||||||
$submit = phutil_tag(
|
$submit = phutil_tag(
|
||||||
'button',
|
'button',
|
||||||
|
@ -672,7 +679,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
'disabled' => 'disabled',
|
'disabled' => 'disabled',
|
||||||
'class' => 'disabled',
|
'class' => 'disabled',
|
||||||
),
|
),
|
||||||
"Batch Edit Selected Tasks \xC2\xBB");
|
pht("Batch Edit Selected \xC2\xBB"));
|
||||||
|
|
||||||
$export = javelin_tag(
|
$export = javelin_tag(
|
||||||
'a',
|
'a',
|
||||||
|
@ -680,22 +687,25 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
'href' => '/maniphest/export/'.$search_query->getQueryKey().'/',
|
'href' => '/maniphest/export/'.$search_query->getQueryKey().'/',
|
||||||
'class' => 'grey button',
|
'class' => 'grey button',
|
||||||
),
|
),
|
||||||
'Export Tasks to Excel...');
|
pht('Export to Excel'));
|
||||||
|
|
||||||
return hsprintf(
|
return hsprintf(
|
||||||
'<div class="maniphest-batch-editor">'.
|
'<div class="maniphest-batch-editor">'.
|
||||||
'<div class="batch-editor-header">Batch Task Editor</div>'.
|
'<div class="batch-editor-header">%s</div>'.
|
||||||
'<table class="maniphest-batch-editor-layout">'.
|
'<table class="maniphest-batch-editor-layout">'.
|
||||||
'<tr>'.
|
'<tr>'.
|
||||||
'<td>%s%s</td>'.
|
'<td>%s%s</td>'.
|
||||||
'<td>%s</td>'.
|
'<td>%s</td>'.
|
||||||
'<td id="batch-select-status-cell">0 Selected Tasks</td>'.
|
'<td id="batch-select-status-cell">%s</td>'.
|
||||||
'<td class="batch-select-submit-cell">%s</td>'.
|
'<td class="batch-select-submit-cell">%s</td>'.
|
||||||
'</tr>'.
|
'</tr>'.
|
||||||
'</table>'.
|
'</table>'.
|
||||||
'</table>',
|
'</table>',
|
||||||
$select_all, $select_none,
|
pht('Batch Task Editor'),
|
||||||
|
$select_all,
|
||||||
|
$select_none,
|
||||||
$export,
|
$export,
|
||||||
|
pht('0 Selected'),
|
||||||
$submit);
|
$submit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -871,35 +881,35 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
|
|
||||||
private function getStatusButtonMap() {
|
private function getStatusButtonMap() {
|
||||||
return array(
|
return array(
|
||||||
'o' => 'Open',
|
'o' => pht('Open'),
|
||||||
'c' => 'Closed',
|
'c' => pht('Closed'),
|
||||||
'oc' => 'All',
|
'oc' => pht('All'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getGroupButtonMap() {
|
private function getGroupButtonMap() {
|
||||||
return array(
|
return array(
|
||||||
'p' => 'Priority',
|
'p' => pht('Priority'),
|
||||||
'o' => 'Owner',
|
'o' => pht('Owner'),
|
||||||
's' => 'Status',
|
's' => pht('Status'),
|
||||||
'j' => 'Project',
|
'j' => pht('Project'),
|
||||||
'n' => 'None',
|
'n' => pht('None'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getOrderButtonMap() {
|
private function getOrderButtonMap() {
|
||||||
return array(
|
return array(
|
||||||
'p' => 'Priority',
|
'p' => pht('Priority'),
|
||||||
'u' => 'Updated',
|
'u' => pht('Updated'),
|
||||||
'c' => 'Created',
|
'c' => pht('Created'),
|
||||||
't' => 'Title',
|
't' => pht('Title'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderStatusControl($value) {
|
public function renderStatusControl($value) {
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
return id(new AphrontFormToggleButtonsControl())
|
return id(new AphrontFormToggleButtonsControl())
|
||||||
->setLabel('Status')
|
->setLabel(pht('Status'))
|
||||||
->setValue($this->getStatusRequestValue($value))
|
->setValue($this->getStatusRequestValue($value))
|
||||||
->setBaseURI($request->getRequestURI(), $this->getStatusRequestKey())
|
->setBaseURI($request->getRequestURI(), $this->getStatusRequestKey())
|
||||||
->setButtons($this->getStatusButtonMap());
|
->setButtons($this->getStatusButtonMap());
|
||||||
|
@ -908,7 +918,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
public function renderOrderControl($value) {
|
public function renderOrderControl($value) {
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
return id(new AphrontFormToggleButtonsControl())
|
return id(new AphrontFormToggleButtonsControl())
|
||||||
->setLabel('Order')
|
->setLabel(pht('Order'))
|
||||||
->setValue($this->getOrderRequestValue($value))
|
->setValue($this->getOrderRequestValue($value))
|
||||||
->setBaseURI($request->getRequestURI(), $this->getOrderRequestKey())
|
->setBaseURI($request->getRequestURI(), $this->getOrderRequestKey())
|
||||||
->setButtons($this->getOrderButtonMap());
|
->setButtons($this->getOrderButtonMap());
|
||||||
|
@ -917,7 +927,7 @@ final class ManiphestTaskListController extends ManiphestController {
|
||||||
public function renderGroupControl($value) {
|
public function renderGroupControl($value) {
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
return id(new AphrontFormToggleButtonsControl())
|
return id(new AphrontFormToggleButtonsControl())
|
||||||
->setLabel('Group')
|
->setLabel(pht('Group'))
|
||||||
->setValue($this->getGroupRequestValue($value))
|
->setValue($this->getGroupRequestValue($value))
|
||||||
->setBaseURI($request->getRequestURI(), $this->getGroupRequestKey())
|
->setBaseURI($request->getRequestURI(), $this->getGroupRequestKey())
|
||||||
->setButtons($this->getGroupButtonMap());
|
->setButtons($this->getGroupButtonMap());
|
||||||
|
|
|
@ -63,6 +63,7 @@ final class ManiphestTaskSummaryView extends ManiphestView {
|
||||||
$batch = phutil_tag(
|
$batch = phutil_tag(
|
||||||
'td',
|
'td',
|
||||||
array(
|
array(
|
||||||
|
'rowspan' => 2,
|
||||||
'class' => 'maniphest-task-batch',
|
'class' => 'maniphest-task-batch',
|
||||||
),
|
),
|
||||||
javelin_tag(
|
javelin_tag(
|
||||||
|
@ -91,36 +92,14 @@ final class ManiphestTaskSummaryView extends ManiphestView {
|
||||||
$handle = javelin_tag(
|
$handle = javelin_tag(
|
||||||
'td',
|
'td',
|
||||||
array(
|
array(
|
||||||
|
'rowspan' => 2,
|
||||||
'class' => 'maniphest-task-handle '.$pri_class.' '.$control_class,
|
'class' => 'maniphest-task-handle '.$pri_class.' '.$control_class,
|
||||||
'sigil' => $control_sigil,
|
'sigil' => $control_sigil,
|
||||||
),
|
),
|
||||||
'');
|
'');
|
||||||
|
|
||||||
$task_id = phutil_tag(
|
|
||||||
'td',
|
|
||||||
array(
|
|
||||||
'class' => 'maniphest-task-number',
|
|
||||||
),
|
|
||||||
'T'.$task->getID());
|
|
||||||
|
|
||||||
$task_status = phutil_tag(
|
|
||||||
'td',
|
|
||||||
array(
|
|
||||||
'class' => 'maniphest-task-status',
|
|
||||||
),
|
|
||||||
idx($status_map, $task->getStatus(), 'Unknown'));
|
|
||||||
|
|
||||||
$task_owner = phutil_tag(
|
|
||||||
'td',
|
|
||||||
array(
|
|
||||||
'class' => 'maniphest-task-owner',
|
|
||||||
),
|
|
||||||
$task->getOwnerPHID()
|
|
||||||
? $handles[$task->getOwnerPHID()]->renderLink()
|
|
||||||
: phutil_tag('em', array(), pht('None')));
|
|
||||||
|
|
||||||
$task_name = phutil_tag(
|
$task_name = phutil_tag(
|
||||||
'td',
|
'span',
|
||||||
array(
|
array(
|
||||||
'class' => 'maniphest-task-name',
|
'class' => 'maniphest-task-name',
|
||||||
),
|
),
|
||||||
|
@ -131,6 +110,50 @@ final class ManiphestTaskSummaryView extends ManiphestView {
|
||||||
),
|
),
|
||||||
$task->getTitle()));
|
$task->getTitle()));
|
||||||
|
|
||||||
|
$task_updated = phutil_tag(
|
||||||
|
'span',
|
||||||
|
array(
|
||||||
|
'class' => 'maniphest-task-updated',
|
||||||
|
),
|
||||||
|
phabricator_date($task->getDateModified(), $this->user));
|
||||||
|
|
||||||
|
$task_info = phutil_tag(
|
||||||
|
'td',
|
||||||
|
array(
|
||||||
|
'colspan' => 2,
|
||||||
|
'class' => 'maniphest-task-number',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'T'.$task->getID(),
|
||||||
|
$task_name,
|
||||||
|
$task_updated,
|
||||||
|
));
|
||||||
|
|
||||||
|
$owner = '';
|
||||||
|
if ($handles[$task->getOwnerPHID()]) {
|
||||||
|
$owner = pht('Assigned to %s',
|
||||||
|
$handles[$task->getOwnerPHID()]->renderLink());
|
||||||
|
}
|
||||||
|
|
||||||
|
$task_owner = phutil_tag(
|
||||||
|
'span',
|
||||||
|
array(
|
||||||
|
'class' => 'maniphest-task-owner',
|
||||||
|
),
|
||||||
|
$task->getOwnerPHID()
|
||||||
|
? $owner
|
||||||
|
: phutil_tag('em', array(), pht('None')));
|
||||||
|
|
||||||
|
$task_status = phutil_tag(
|
||||||
|
'td',
|
||||||
|
array(
|
||||||
|
'class' => 'maniphest-task-status',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
idx($status_map, $task->getStatus(), pht('Unknown')),
|
||||||
|
$task_owner,
|
||||||
|
));
|
||||||
|
|
||||||
$task_projects = phutil_tag(
|
$task_projects = phutil_tag(
|
||||||
'td',
|
'td',
|
||||||
array(
|
array(
|
||||||
|
@ -138,25 +161,21 @@ final class ManiphestTaskSummaryView extends ManiphestView {
|
||||||
),
|
),
|
||||||
$projects_view->render());
|
$projects_view->render());
|
||||||
|
|
||||||
$task_updated = phutil_tag(
|
$row1 = phutil_tag(
|
||||||
'td',
|
'tr',
|
||||||
array(
|
array(),
|
||||||
'class' => 'maniphest-task-updated',
|
array(
|
||||||
),
|
$handle,
|
||||||
phabricator_date($task->getDateModified(), $this->user));
|
$batch,
|
||||||
|
$task_info,
|
||||||
|
));
|
||||||
|
|
||||||
$row = phutil_tag(
|
$row2 = phutil_tag(
|
||||||
'tr',
|
'tr',
|
||||||
array(),
|
array(),
|
||||||
array(
|
array(
|
||||||
$handle,
|
|
||||||
$batch,
|
|
||||||
$task_id,
|
|
||||||
$task_status,
|
$task_status,
|
||||||
$task_owner,
|
|
||||||
$task_name,
|
|
||||||
$task_projects,
|
$task_projects,
|
||||||
$task_updated,
|
|
||||||
));
|
));
|
||||||
|
|
||||||
return javelin_tag(
|
return javelin_tag(
|
||||||
|
@ -168,7 +187,10 @@ final class ManiphestTaskSummaryView extends ManiphestView {
|
||||||
'taskID' => $task->getID(),
|
'taskID' => $task->getID(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
$row);
|
array(
|
||||||
|
$row1,
|
||||||
|
$row2,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ final class AphrontFormView extends AphrontView {
|
||||||
private $workflow;
|
private $workflow;
|
||||||
private $id;
|
private $id;
|
||||||
private $flexible;
|
private $flexible;
|
||||||
|
private $noShading;
|
||||||
private $sigils = array();
|
private $sigils = array();
|
||||||
|
|
||||||
public function setFlexible($flexible) {
|
public function setFlexible($flexible) {
|
||||||
|
@ -17,6 +18,11 @@ final class AphrontFormView extends AphrontView {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setNoShading($shading) {
|
||||||
|
$this->noShading = $shading;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function setID($id) {
|
public function setID($id) {
|
||||||
$this->id = $id;
|
$this->id = $id;
|
||||||
return $this;
|
return $this;
|
||||||
|
@ -60,7 +66,7 @@ final class AphrontFormView extends AphrontView {
|
||||||
|
|
||||||
$layout = new AphrontFormLayoutView();
|
$layout = new AphrontFormLayoutView();
|
||||||
|
|
||||||
if (!$this->flexible) {
|
if ((!$this->flexible) && (!$this->noShading)) {
|
||||||
$layout
|
$layout
|
||||||
->setBackgroundShading(true)
|
->setBackgroundShading(true)
|
||||||
->setPadded(true);
|
->setPadded(true);
|
||||||
|
|
|
@ -5,11 +5,13 @@ final class AphrontListFilterView extends AphrontView {
|
||||||
public function render() {
|
public function render() {
|
||||||
require_celerity_resource('aphront-list-filter-view-css');
|
require_celerity_resource('aphront-list-filter-view-css');
|
||||||
return hsprintf(
|
return hsprintf(
|
||||||
'<table class="aphront-list-filter-view">'.
|
'<div class="aphront-filter-table-wrapper">'.
|
||||||
'<tr>'.
|
'<table class="aphront-list-filter-view">'.
|
||||||
'<td class="aphront-list-filter-view-controls">%s</td>'.
|
'<tr>'.
|
||||||
'</tr>'.
|
'<td class="aphront-list-filter-view-controls">%s</td>'.
|
||||||
'</table>',
|
'</tr>'.
|
||||||
|
'</table>'.
|
||||||
|
'</div>',
|
||||||
$this->renderChildren());
|
$this->renderChildren());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.aphront-form-view label.aphront-form-label {
|
.aphront-form-view label.aphront-form-label {
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
width: 19%;
|
width: 19%;
|
||||||
|
@ -22,7 +21,7 @@
|
||||||
text-align: right;
|
text-align: right;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
color: #666666;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-phone .aphront-form-view label.aphront-form-label {
|
.device-phone .aphront-form-view label.aphront-form-label {
|
||||||
|
@ -30,6 +29,8 @@
|
||||||
float: none;
|
float: none;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
color: #777;
|
||||||
|
margin-bottom: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.aphront-form-input {
|
.aphront-form-input {
|
||||||
|
@ -159,7 +160,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.aphront-form-control-togglebuttons .aphront-form-input {
|
.aphront-form-control-togglebuttons .aphront-form-input {
|
||||||
padding-top: 5px;
|
padding: 2px 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.aphront-form-control-radio-layout,
|
table.aphront-form-control-radio-layout,
|
||||||
|
@ -368,42 +369,3 @@ table.aphront-form-control-checkbox-layout th {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons {
|
|
||||||
padding-top: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons .toggle {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons .toggle-fixed {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons .toggle .counter {
|
|
||||||
font-size: smaller;
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
top: -9px;
|
|
||||||
right: -8px;
|
|
||||||
padding: 0px 3px;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons:hover .toggle .counter {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons .toggle .counter {
|
|
||||||
background: gray;
|
|
||||||
color: #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons .toggle-selected .counter {
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-form-control-counted-togglebuttons .toggle.disabled:hover {
|
|
||||||
background-color: #a7a7a7;
|
|
||||||
}
|
|
||||||
|
|
|
@ -2,11 +2,23 @@
|
||||||
* @provides aphront-list-filter-view-css
|
* @provides aphront-list-filter-view-css
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.aphront-filter-table-wrapper {
|
||||||
|
border-left: 1px solid #e7e7e7;
|
||||||
|
border-right: 1px solid #e7e7e7;
|
||||||
|
border-bottom: 1px solid #c0c5d1;
|
||||||
|
margin: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-phone .aphront-filter-table-wrapper {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
.aphront-list-filter-view {
|
.aphront-list-filter-view {
|
||||||
background: #f4f5f8;
|
background: #fff;
|
||||||
border-bottom: 1px solid #d4dae0;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-bottom: 1em;
|
box-shadow: inset 0px 2px 1px rgba(150,150,150,0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
.aphront-list-filter-view-controls {
|
.aphront-list-filter-view-controls {
|
||||||
|
@ -15,6 +27,7 @@
|
||||||
|
|
||||||
.aphront-list-filter-view-controls .aphront-form-view {
|
.aphront-list-filter-view-controls .aphront-form-view {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
|
border-bottom: 1px solid #c0c5d1;
|
||||||
padding: 12px 0 6px;
|
padding: 12px 0 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,22 +4,19 @@
|
||||||
|
|
||||||
.maniphest-task-summary {
|
.maniphest-task-summary {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 4px 0;
|
margin: 0 0 -1px 0;
|
||||||
border-collapse: separate;
|
border-collapse: separate;
|
||||||
|
|
||||||
font-size: 12px;
|
|
||||||
color: #333;
|
color: #333;
|
||||||
|
border: 1px solid #c0c5d1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.maniphest-task-group {
|
||||||
|
padding-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td {
|
.maniphest-task-summary td {
|
||||||
padding: 6px 4px;
|
padding: 0 10px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
white-space: nowrap;
|
|
||||||
|
|
||||||
border-style: solid;
|
|
||||||
border-top-color: #d5dadf;
|
|
||||||
border-bottom-color: #d5dadf;
|
|
||||||
border-width: 1px 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td em {
|
.maniphest-task-summary td em {
|
||||||
|
@ -30,21 +27,23 @@
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-handle {
|
.maniphest-task-summary .maniphest-task-handle {
|
||||||
padding: 0 4px;
|
padding: 0 4px 0 0;
|
||||||
width: 1px;
|
width: 5px;
|
||||||
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-right-color: #d5dadf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-batch {
|
.maniphest-task-summary td.maniphest-task-batch {
|
||||||
padding-right: 0px;
|
padding: 15px 4px 0 10px;
|
||||||
width: 16px;
|
width: 8px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.device-phone .maniphest-task-batch,
|
||||||
|
.device-phone .maniphest-task-updated {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-batch,
|
.maniphest-task-summary td.maniphest-task-batch,
|
||||||
.maniphest-task-summary td.maniphest-task-batch input {
|
.maniphest-task-summary td.maniphest-task-batch input {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -55,43 +54,39 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-number {
|
.maniphest-task-summary td.maniphest-task-number {
|
||||||
|
padding: 6px 0 2px 10px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #333;
|
color: #333;
|
||||||
width: 50px;
|
|
||||||
text-align: right;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-status {
|
.maniphest-task-summary td.maniphest-task-status {
|
||||||
width: 60px;
|
padding: 2px 10px 6px 10px;
|
||||||
text-align: center;
|
text-align: left;
|
||||||
|
color: #777;
|
||||||
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-owner {
|
.maniphest-task-summary .maniphest-task-owner {
|
||||||
width: 100px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-name {
|
.maniphest-task-summary .maniphest-task-name {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
white-space: normal;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-projects {
|
.maniphest-task-summary td.maniphest-task-projects {
|
||||||
width: 180px;
|
|
||||||
text-align: right;
|
text-align: right;
|
||||||
white-space: normal;
|
padding: 0px 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary td.maniphest-task-updated {
|
.maniphest-task-summary .maniphest-task-updated {
|
||||||
text-align: right;
|
float: right;
|
||||||
width: 85px;
|
padding: 0 8px;
|
||||||
padding-right: 8px;
|
color: #777;
|
||||||
border-right-width: 1px;
|
font-size: 11px;
|
||||||
border-right-style: solid;
|
font-weight: normal;
|
||||||
border-right-color: #d5dadf;
|
|
||||||
}
|
|
||||||
|
|
||||||
.maniphest-task-summary .pri-bullet {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-task-summary .pri-unbreak {
|
.maniphest-task-summary .pri-unbreak {
|
||||||
|
@ -128,19 +123,18 @@
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #555;
|
color: #555;
|
||||||
padding: 5px 0;
|
padding: 0 0 8px 0;
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-panel-view .maniphest-task-group-header {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-total-result-count {
|
.maniphest-total-result-count {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
padding-right: 2em;
|
padding: 5px 20px 0 0;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #666666;
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-phone .maniphest-total-result-count {
|
||||||
|
padding-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.batch-editor-header {
|
.batch-editor-header {
|
||||||
|
@ -150,14 +144,17 @@
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-batch-editor {
|
/* TODO: Implement */
|
||||||
margin: 20px;
|
.device-phone .maniphest-batch-editor {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-batch-editor-layout {
|
.maniphest-batch-editor-layout {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-top: 1px solid #d5dadf;
|
border-left: 1px solid #e7e7e7;
|
||||||
background: #f4f5f8;
|
border-right: 1px solid #e7e7e7;
|
||||||
|
border-bottom: 1px solid #c0c5d1;
|
||||||
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.maniphest-batch-editor-layout td {
|
.maniphest-batch-editor-layout td {
|
||||||
|
@ -203,3 +200,11 @@ td.maniphest-active-handle {
|
||||||
position: relative;
|
position: relative;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.maniphest-list-container {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-phone .maniphest-list-container {
|
||||||
|
padding: 20px 5px;
|
||||||
|
}
|
||||||
|
|
|
@ -153,35 +153,28 @@ button.link:hover {
|
||||||
a.toggle {
|
a.toggle {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
|
font-size: 12px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 14px;
|
color: #555;
|
||||||
color: #ffffff;
|
|
||||||
text-shadow: 0 1px 0 #777;
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
background-color: #a7a7a7;
|
background-color: #f7f7f7;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial;
|
margin: 0 6px 0 0;
|
||||||
font-size: 12px;
|
|
||||||
margin: 0 5px 2px;
|
|
||||||
|
|
||||||
-webkit-border-radius: 3px;
|
|
||||||
-moz-border-radius: 3px;
|
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
|
box-shadow: inset 0 0 3px rgba(0,0,0,.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
a.toggle:hover {
|
a.toggle:hover {
|
||||||
background-color: #bbb;
|
background-color: #14568e;
|
||||||
|
color: #fff
|
||||||
}
|
}
|
||||||
|
|
||||||
a.toggle-selected {
|
a.toggle-selected {
|
||||||
background-color: #555;
|
background-color: #14568e;
|
||||||
|
color: #fff
|
||||||
}
|
}
|
||||||
|
|
||||||
a.toggle-fixed {
|
a.toggle-fixed {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.toggle-fixed:hover {
|
|
||||||
background-color: #555;
|
|
||||||
}
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 7.8 KiB |
Loading…
Reference in a new issue