1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-26 23:40: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:
Chad Little 2013-03-12 23:30:03 -07:00
parent 9804dab799
commit df0c3df3cc
20 changed files with 432 additions and 390 deletions

View file

@ -569,8 +569,8 @@ celerity_register_resource_map(array(
),
'/rsrc/image/texture/dust_background.jpg' =>
array(
'hash' => 'c32ab9819d4af583f5609bbd3750721a',
'uri' => '/res/c32ab981/rsrc/image/texture/dust_background.jpg',
'hash' => '1ff330c03712e08ca2eed006ccc6c1e7',
'uri' => '/res/1ff330c0/rsrc/image/texture/dust_background.jpg',
'disk' => '/rsrc/image/texture/dust_background.jpg',
'type' => 'jpg',
),
@ -683,7 +683,7 @@ celerity_register_resource_map(array(
),
'aphront-form-view-css' =>
array(
'uri' => '/res/efaecc2d/rsrc/css/aphront/form-view.css',
'uri' => '/res/accfc3a4/rsrc/css/aphront/form-view.css',
'type' => 'css',
'requires' =>
array(
@ -692,7 +692,7 @@ celerity_register_resource_map(array(
),
'aphront-list-filter-view-css' =>
array(
'uri' => '/res/e783d6e1/rsrc/css/aphront/list-filter-view.css',
'uri' => '/res/cc6e940e/rsrc/css/aphront/list-filter-view.css',
'type' => 'css',
'requires' =>
array(
@ -828,7 +828,7 @@ celerity_register_resource_map(array(
),
'conpherence-widget-pane-css' =>
array(
'uri' => '/res/e67ad581/rsrc/css/application/conpherence/widget-pane.css',
'uri' => '/res/2b4113f7/rsrc/css/application/conpherence/widget-pane.css',
'type' => 'css',
'requires' =>
array(
@ -2591,7 +2591,7 @@ celerity_register_resource_map(array(
),
'maniphest-task-summary-css' =>
array(
'uri' => '/res/14e825ce/rsrc/css/application/maniphest/task-summary.css',
'uri' => '/res/b3930263/rsrc/css/application/maniphest/task-summary.css',
'type' => 'css',
'requires' =>
array(
@ -2708,7 +2708,7 @@ celerity_register_resource_map(array(
),
'phabricator-core-buttons-css' =>
array(
'uri' => '/res/7320ca6d/rsrc/css/core/buttons.css',
'uri' => '/res/4e6b94c8/rsrc/css/core/buttons.css',
'type' => 'css',
'requires' =>
array(
@ -2717,7 +2717,7 @@ celerity_register_resource_map(array(
),
'phabricator-core-css' =>
array(
'uri' => '/res/1e7afaa9/rsrc/css/core/core.css',
'uri' => '/res/9df0488c/rsrc/css/core/core.css',
'type' => 'css',
'requires' =>
array(
@ -3562,7 +3562,7 @@ celerity_register_resource_map(array(
), array(
'packages' =>
array(
'b481b309' =>
'4a549b8b' =>
array(
'name' => 'core.pkg.css',
'symbols' =>
@ -3605,7 +3605,7 @@ celerity_register_resource_map(array(
35 => 'phabricator-object-item-list-view-css',
36 => 'global-drag-and-drop-css',
),
'uri' => '/res/pkg/b481b309/core.pkg.css',
'uri' => '/res/pkg/4a549b8b/core.pkg.css',
'type' => 'css',
),
'95ceba95' =>
@ -3765,7 +3765,7 @@ celerity_register_resource_map(array(
'uri' => '/res/pkg/cd1d650a/javelin.pkg.js',
'type' => 'js',
),
'eb35a026' =>
'c41b4907' =>
array(
'name' => 'maniphest.pkg.css',
'symbols' =>
@ -3775,7 +3775,7 @@ celerity_register_resource_map(array(
2 => 'aphront-attached-file-view-css',
3 => 'phabricator-project-tag-css',
),
'uri' => '/res/pkg/eb35a026/maniphest.pkg.css',
'uri' => '/res/pkg/c41b4907/maniphest.pkg.css',
'type' => 'css',
),
'7707de41' =>
@ -3795,18 +3795,18 @@ celerity_register_resource_map(array(
),
'reverse' =>
array(
'aphront-attached-file-view-css' => 'eb35a026',
'aphront-crumbs-view-css' => 'b481b309',
'aphront-dialog-view-css' => 'b481b309',
'aphront-error-view-css' => 'b481b309',
'aphront-form-view-css' => 'b481b309',
'aphront-list-filter-view-css' => 'b481b309',
'aphront-pager-view-css' => 'b481b309',
'aphront-panel-view-css' => 'b481b309',
'aphront-table-view-css' => 'b481b309',
'aphront-tokenizer-control-css' => 'b481b309',
'aphront-tooltip-css' => 'b481b309',
'aphront-typeahead-control-css' => 'b481b309',
'aphront-attached-file-view-css' => 'c41b4907',
'aphront-crumbs-view-css' => '4a549b8b',
'aphront-dialog-view-css' => '4a549b8b',
'aphront-error-view-css' => '4a549b8b',
'aphront-form-view-css' => '4a549b8b',
'aphront-list-filter-view-css' => '4a549b8b',
'aphront-pager-view-css' => '4a549b8b',
'aphront-panel-view-css' => '4a549b8b',
'aphront-table-view-css' => '4a549b8b',
'aphront-tokenizer-control-css' => '4a549b8b',
'aphront-tooltip-css' => '4a549b8b',
'aphront-typeahead-control-css' => '4a549b8b',
'differential-changeset-view-css' => '8aaacd1b',
'differential-core-view-css' => '8aaacd1b',
'differential-inline-comment-editor' => '322728f3',
@ -3820,7 +3820,7 @@ celerity_register_resource_map(array(
'differential-table-of-contents-css' => '8aaacd1b',
'diffusion-commit-view-css' => 'c8ce2d88',
'diffusion-icons-css' => 'c8ce2d88',
'global-drag-and-drop-css' => 'b481b309',
'global-drag-and-drop-css' => '4a549b8b',
'inline-comment-summary-css' => '8aaacd1b',
'javelin-aphlict' => '95ceba95',
'javelin-behavior' => 'cd1d650a',
@ -3892,48 +3892,48 @@ celerity_register_resource_map(array(
'javelin-util' => 'cd1d650a',
'javelin-vector' => 'cd1d650a',
'javelin-workflow' => 'cd1d650a',
'lightbox-attachment-css' => 'b481b309',
'maniphest-task-summary-css' => 'eb35a026',
'maniphest-transaction-detail-css' => 'eb35a026',
'lightbox-attachment-css' => '4a549b8b',
'maniphest-task-summary-css' => 'c41b4907',
'maniphest-transaction-detail-css' => 'c41b4907',
'phabricator-busy' => '95ceba95',
'phabricator-content-source-view-css' => '8aaacd1b',
'phabricator-core-buttons-css' => 'b481b309',
'phabricator-core-css' => 'b481b309',
'phabricator-crumbs-view-css' => 'b481b309',
'phabricator-directory-css' => 'b481b309',
'phabricator-core-buttons-css' => '4a549b8b',
'phabricator-core-css' => '4a549b8b',
'phabricator-crumbs-view-css' => '4a549b8b',
'phabricator-directory-css' => '4a549b8b',
'phabricator-drag-and-drop-file-upload' => '322728f3',
'phabricator-dropdown-menu' => '95ceba95',
'phabricator-file-upload' => '95ceba95',
'phabricator-filetree-view-css' => 'b481b309',
'phabricator-flag-css' => 'b481b309',
'phabricator-form-view-css' => 'b481b309',
'phabricator-header-view-css' => 'b481b309',
'phabricator-jump-nav' => 'b481b309',
'phabricator-filetree-view-css' => '4a549b8b',
'phabricator-flag-css' => '4a549b8b',
'phabricator-form-view-css' => '4a549b8b',
'phabricator-header-view-css' => '4a549b8b',
'phabricator-jump-nav' => '4a549b8b',
'phabricator-keyboard-shortcut' => '95ceba95',
'phabricator-keyboard-shortcut-manager' => '95ceba95',
'phabricator-main-menu-view' => 'b481b309',
'phabricator-main-menu-view' => '4a549b8b',
'phabricator-menu-item' => '95ceba95',
'phabricator-nav-view-css' => 'b481b309',
'phabricator-nav-view-css' => '4a549b8b',
'phabricator-notification' => '95ceba95',
'phabricator-notification-css' => 'b481b309',
'phabricator-notification-menu-css' => 'b481b309',
'phabricator-object-item-list-view-css' => 'b481b309',
'phabricator-notification-css' => '4a549b8b',
'phabricator-notification-menu-css' => '4a549b8b',
'phabricator-object-item-list-view-css' => '4a549b8b',
'phabricator-object-selector-css' => '8aaacd1b',
'phabricator-paste-file-upload' => '95ceba95',
'phabricator-prefab' => '95ceba95',
'phabricator-project-tag-css' => 'eb35a026',
'phabricator-remarkup-css' => 'b481b309',
'phabricator-project-tag-css' => 'c41b4907',
'phabricator-remarkup-css' => '4a549b8b',
'phabricator-shaped-request' => '322728f3',
'phabricator-side-menu-view-css' => 'b481b309',
'phabricator-standard-page-view' => 'b481b309',
'phabricator-side-menu-view-css' => '4a549b8b',
'phabricator-standard-page-view' => '4a549b8b',
'phabricator-textareautils' => '95ceba95',
'phabricator-tooltip' => '95ceba95',
'phabricator-transaction-view-css' => 'b481b309',
'phabricator-zindex-css' => 'b481b309',
'sprite-apps-large-css' => 'b481b309',
'sprite-gradient-css' => 'b481b309',
'sprite-icon-css' => 'b481b309',
'sprite-menu-css' => 'b481b309',
'syntax-highlighting-css' => 'b481b309',
'phabricator-transaction-view-css' => '4a549b8b',
'phabricator-zindex-css' => '4a549b8b',
'sprite-apps-large-css' => '4a549b8b',
'sprite-gradient-css' => '4a549b8b',
'sprite-icon-css' => '4a549b8b',
'sprite-menu-css' => '4a549b8b',
'syntax-highlighting-css' => '4a549b8b',
),
));

View file

@ -162,6 +162,7 @@ final class DifferentialRevisionListController extends DifferentialController {
$filter_form = id(new AphrontFormView())
->setMethod('GET')
->setNoShading(true)
->setAction('/differential/filter/'.$this->filter.'/')
->setUser($user);
foreach ($controls as $control) {
@ -199,6 +200,7 @@ final class DifferentialRevisionListController extends DifferentialController {
$side_nav,
array(
'title' => pht('Differential Home'),
'dust' => true,
));
}

View file

@ -60,11 +60,11 @@ final class ManiphestBatchEditController extends ManiphestController {
'sources' => array(
'project' => array(
'src' => '/typeahead/common/projects/',
'placeholder' => 'Type a project name...',
'placeholder' => pht('Type a project name...'),
),
'owner' => array(
'src' => '/typeahead/common/searchowner/',
'placeholder' => 'Type a user name...',
'placeholder' => pht('Type a user name...'),
'limit' => 1,
),
),
@ -96,7 +96,8 @@ final class ManiphestBatchEditController extends ManiphestController {
'name' => '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(
id(new AphrontFormInsetView())
@ -109,7 +110,7 @@ final class ManiphestBatchEditController extends ManiphestController {
'sigil' => 'add-action',
'mustcapture' => true,
),
'Add Another Action'))
pht('Add Another Action')))
->setContent(javelin_tag(
'table',
array(
@ -119,7 +120,7 @@ final class ManiphestBatchEditController extends ManiphestController {
'')))
->appendChild(
id(new AphrontFormSubmitControl())
->setValue('Update Tasks')
->setValue(pht('Update Tasks'))
->addCancelButton('/maniphest/', 'Done'));
$panel->appendChild($form);
@ -128,7 +129,7 @@ final class ManiphestBatchEditController extends ManiphestController {
return $this->buildStandardPageResponse(
$panel,
array(
'title' => 'Batch Editor',
'title' => pht('Batch Editor'),
));
}

View file

@ -10,7 +10,7 @@ abstract class ManiphestController extends PhabricatorController {
public function buildStandardPageResponse($view, array $data) {
$page = $this->buildStandardPageView();
$page->setApplicationName('Maniphest');
$page->setApplicationName(pht('Maniphest'));
$page->setBaseURI('/maniphest/');
$page->setTitle(idx($data, 'title'));
$page->setGlyph("\xE2\x9A\x93");
@ -22,7 +22,7 @@ abstract class ManiphestController extends PhabricatorController {
return $response->setContent($page->render());
}
protected function buildBaseSideNav() {
protected function buildBaseSideNav($filter = null, $for_app = false) {
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/maniphest/view/'));
@ -50,28 +50,36 @@ abstract class ManiphestController extends PhabricatorController {
$query->getName(),
'/maniphest/view/custom/?key='.$query->getQueryKey());
}
$nav->addFilter('saved', 'Edit...', '/maniphest/custom/');
$nav->addFilter('saved', pht('Edit...'), '/maniphest/custom/');
}
$nav->addLabel('User Tasks');
$nav->addFilter('action', 'Assigned');
$nav->addFilter('created', 'Created');
$nav->addFilter('subscribed', 'Subscribed');
$nav->addFilter('triage', 'Need Triage');
$nav->addLabel('User Projects');
$nav->addFilter('projecttriage', 'Need Triage');
$nav->addFilter('projectall', 'All Tasks');
if ($for_app) {
$nav->addFilter('', pht('Create Task'),
$this->getApplicationURI('task/create/'));
}
$nav->addLabel(pht('User Tasks'));
$nav->addFilter('action', pht('Assigned'));
$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->addFilter('alltriage', 'Need Triage');
$nav->addFilter('all', 'All Tasks');
$nav->addLabel('Custom');
$nav->addFilter('custom', 'Custom Query');
$nav->addLabel('Reports');
$nav->addFilter('report', 'Reports', '/maniphest/report/');
$nav->addFilter('alltriage', pht('Need Triage'));
$nav->addFilter('all', pht('All Tasks'));
$nav->addLabel(pht('Custom'));
$nav->addFilter('custom', pht('Custom Query'));
$nav->addFilter('report', pht('Reports'), '/maniphest/report/');
return $nav;
}
public function buildApplicationMenu() {
return $this->buildBaseSideNav(null, true)->getMenu();
}
protected function getDefaultQuery() {
return $this->defaultQuery;
}

View file

@ -27,18 +27,26 @@ final class ManiphestExportController extends ManiphestController {
$dialog = new AphrontDialogView();
$dialog->setUser($user);
$dialog->setTitle('Excel Export Not Configured');
$dialog->appendChild(hsprintf(
'<p>This system does not have PHPExcel installed. This software '.
$inst1 = pht(
'This system does not have PHPExcel installed. This software '.
'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 />'.
'<p>'.
'<a href="http://www.phpexcel.net/">http://www.phpexcel.net/</a>'.
'</p>'.
'<br />'.
'<p>Your PHP "include_path" needs to be updated to include the '.
'PHPExcel Classes/ directory.</p>'));
'<p>%s</p>',
$inst1,
$inst2));
$dialog->addCancelButton('/maniphest/');
return id(new AphrontDialogResponse())->setDialog($dialog);
@ -58,12 +66,12 @@ final class ManiphestExportController extends ManiphestController {
$dialog = new AphrontDialogView();
$dialog->setUser($user);
$dialog->setTitle('Export Tasks to Excel');
$dialog->setTitle(pht('Export Tasks to Excel'));
$dialog->appendChild(phutil_tag('p', array(), pht(
'Do you want to export the query results to Excel?')));
$dialog->addCancelButton('/maniphest/');
$dialog->addSubmitButton('Export to Excel');
$dialog->addSubmitButton(pht('Export to Excel'));
return id(new AphrontDialogResponse())->setDialog($dialog);
}
@ -85,7 +93,7 @@ final class ManiphestExportController extends ManiphestController {
$workbook = new PHPExcel();
$sheet = $workbook->setActiveSheetIndex(0);
$sheet->setTitle('Tasks');
$sheet->setTitle(pht('Tasks'));
$widths = array(
null,
@ -113,16 +121,16 @@ final class ManiphestExportController extends ManiphestController {
$rows = array();
$rows[] = array(
'ID',
'Owner',
'Status',
'Priority',
'Date Created',
'Date Updated',
'Title',
'Projects',
'URI',
'Description',
pht('ID'),
pht('Owner'),
pht('Status'),
pht('Priority'),
pht('Date Created'),
pht('Date Updated'),
pht('Title'),
pht('Projects'),
pht('URI'),
pht('Description'),
);
$is_date = array(

View file

@ -34,11 +34,11 @@ final class ManiphestReportController extends ManiphestController {
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/maniphest/report/'));
$nav->addLabel('Open Tasks');
$nav->addFilter('user', 'By User');
$nav->addFilter('project', 'By Project');
$nav->addLabel('Burnup');
$nav->addFilter('burn', 'Burnup Rate');
$nav->addLabel(pht('Open Tasks'));
$nav->addFilter('user', pht('By User'));
$nav->addFilter('project', pht('By Project'));
$nav->addLabel(pht('Burnup'));
$nav->addFilter('burn', pht('Burnup Rate'));
$this->view = $nav->selectFilter($this->view, 'user');
@ -210,20 +210,20 @@ final class ManiphestReportController extends ManiphestController {
if ($week) {
$rows[] = $this->formatBurnRow(
'Week To Date',
pht('Week To Date'),
$week);
$rowc[] = 'week';
}
if ($month) {
$rows[] = $this->formatBurnRow(
'Month To Date',
pht('Month To Date'),
$month);
$rowc[] = 'month';
}
$rows[] = $this->formatBurnRow(
'All Time',
pht('All Time'),
$period);
$rowc[] = 'aggregate';
@ -234,10 +234,10 @@ final class ManiphestReportController extends ManiphestController {
$table->setRowClasses($rowc);
$table->setHeaders(
array(
'Period',
'Opened',
'Closed',
'Change',
pht('Period'),
pht('Opened'),
pht('Closed'),
pht('Change'),
));
$table->setColumnClasses(
array(
@ -248,16 +248,17 @@ final class ManiphestReportController extends ManiphestController {
));
if ($handle) {
$header = pht("Task Burn Rate for Project %s", $handle->renderLink());
$caption = hsprintf(
"<p>NOTE: This table reflects tasks <em>currently</em> in ".
$inst = pht(
"NOTE: This table reflects tasks <em>currently</em> in ".
"the project. If a task was opened in the past but added to ".
"the project recently, it is counted on the day it was ".
"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 ".
"counted at all.</p>");
"counted at all.");
$header = pht("Task Burn Rate for Project %s", $handle->renderLink());
$caption = hsprintf("<p>%s</p>", $inst);
} else {
$header = "Task Burn Rate for All Tasks";
$header = pht("Task Burn Rate for All Tasks");
$caption = null;
}
@ -315,7 +316,7 @@ final class ManiphestReportController extends ManiphestController {
->appendChild(
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/searchproject/')
->setLabel('Project')
->setLabel(pht('Project'))
->setLimit(1)
->setName('set_project')
->setValue($tokens));
@ -325,10 +326,10 @@ final class ManiphestReportController extends ManiphestController {
$form
->appendChild(
id(new AphrontFormTextControl())
->setLabel('"Recently" Means')
->setLabel(pht('Recently Means'))
->setName('set_window')
->setCaption(
'Configure the cutoff for the "Recently Closed" column.')
pht('Configure the cutoff for the "Recently Closed" column.'))
->setValue($window_str)
->setError($window_error));
}
@ -336,7 +337,7 @@ final class ManiphestReportController extends ManiphestController {
$form
->appendChild(
id(new AphrontFormSubmitControl())
->setValue('Filter By Project'));
->setValue(pht('Filter By Project')));
$filter = new AphrontListFilterView();
$filter->appendChild($form);
@ -419,9 +420,9 @@ final class ManiphestReportController extends ManiphestController {
array(
'href' => $base_link.ManiphestTaskOwner::OWNER_UP_FOR_GRABS,
),
phutil_tag('em', array(), '(Up For Grabs)'));
$col_header = 'User';
$header = 'Open Tasks by User and Priority ('.$date.')';
phutil_tag('em', array(), pht('(Up For Grabs)')));
$col_header = pht('User');
$header = pht('Open Tasks by User and Priority (%s)', $date);
break;
case 'project':
$result = array();
@ -456,9 +457,9 @@ final class ManiphestReportController extends ManiphestController {
array(
'href' => $base_link.ManiphestTaskOwner::PROJECT_NO_PROJECT,
),
phutil_tag('em', array(), '(No Project)'));
$col_header = 'Project';
$header = 'Open Tasks by Project and Priority ('.$date.')';
phutil_tag('em', array(), pht('(No Project)')));
$col_header = pht('Project');
$header = pht('Open Tasks by Project and Priority (%s)', $date);
break;
}
@ -584,36 +585,37 @@ final class ManiphestReportController extends ManiphestController {
array(
'sigil' => 'has-tooltip',
'meta' => array(
'tip' => 'Oldest open task.',
'tip' => pht('Oldest open task.'),
'size' => 200,
),
),
'Oldest (All)');
pht('Oldest (All)'));
$cclass[] = 'n';
$cname[] = javelin_tag(
'span',
array(
'sigil' => 'has-tooltip',
'meta' => array(
'tip' => 'Oldest open task, excluding those with Low or Wishlist '.
'priority.',
'tip' => pht('Oldest open task, excluding those with Low or '.
'Wishlist priority.'),
'size' => 200,
),
),
'Oldest (Pri)');
pht('Oldest (Pri)'));
$cclass[] = 'n';
list($ignored, $window_epoch) = $this->getWindow();
$edate = phabricator_datetime($window_epoch, $user);
$cname[] = javelin_tag(
'span',
array(
'sigil' => 'has-tooltip',
'meta' => array(
'tip' => 'Closed after '.phabricator_datetime($window_epoch, $user),
'tip' => pht('Closed after %s', $edate),
'size' => 260
),
),
'Recently Closed');
pht('Recently Closed'));
$cclass[] = 'n';
$table = new AphrontTableView($rows);

View file

@ -30,15 +30,17 @@ final class ManiphestSavedQueryDeleteController extends ManiphestController {
}
$name = $query->getName();
$inst = pht(
'Really delete the query "%s"? It will be lost forever!', $name);
$dialog = id(new AphrontDialogView())
->setUser($user)
->setTitle('Really delete this query?')
->setTitle(pht('Really delete this query?'))
->appendChild(hsprintf(
'<p>Really delete the query "%s"? It will be lost forever!</p>',
$name))
'<p>%s</p>',
$inst))
->addCancelButton('/maniphest/custom/')
->addSubmitButton('Delete');
->addSubmitButton(pht('Delete'));
return id(new AphrontDialogResponse())->setDialog($dialog);
}

View file

@ -42,8 +42,8 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
$e_name = null;
$query->setName($request->getStr('name'));
if (!strlen($query->getName())) {
$e_name = 'Required';
$errors[] = 'Saved query name is required.';
$e_name = pht('Required');
$errors[] = pht('Saved query name is required.');
}
if (!$errors) {
@ -54,17 +54,17 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
if ($errors) {
$error_view = new AphrontErrorView();
$error_view->setTitle('Form Errors');
$error_view->setTitle(pht('Form Errors'));
$error_view->setErrors($errors);
} else {
$error_view = null;
}
if ($query->getID()) {
$header = 'Edit Saved Query';
$header = pht('Edit Saved Query');
$cancel_uri = '/maniphest/custom/';
} else {
$header = 'New Saved Query';
$header = pht('New Saved Query');
$cancel_uri = '/maniphest/view/custom/?key='.$key;
}
@ -74,14 +74,14 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
->addHiddenInput('id', $query->getID())
->appendChild(
id(new AphrontFormTextControl())
->setLabel('Name')
->setLabel(pht('Name'))
->setValue($query->getName())
->setName('name')
->setError($e_name))
->appendChild(
id(new AphrontFormSubmitControl())
->addCancelButton($cancel_uri)
->setValue('Save'));
->setValue(pht('Save')));
$panel = new AphrontPanelView();
$panel->setHeader($header);
@ -94,10 +94,11 @@ final class ManiphestSavedQueryEditController extends ManiphestController {
$nav->appendChild($error_view);
$nav->appendChild($panel);
return $this->buildStandardPageResponse(
return $this->buildApplicationPage(
$nav,
array(
'title' => 'Saved Queries',
'title' => pht('Saved Queries'),
'device' => true,
));
}

View file

@ -81,7 +81,7 @@ final class ManiphestSavedQueryListController extends ManiphestController {
'value' => 0,
'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->setHeaders(
array(
'Default',
'Name',
'Edit',
'Delete',
pht('Default'),
pht('Name'),
pht('Edit'),
pht('Delete'),
));
$table->setColumnClasses(
array(
@ -103,12 +103,12 @@ final class ManiphestSavedQueryListController extends ManiphestController {
));
$panel = new AphrontPanelView();
$panel->setHeader('Saved Custom Queries');
$panel->setHeader(pht('Saved Custom Queries'));
$panel->addButton(
phutil_tag(
'button',
array(),
'Save Default Query'));
pht('Save Default Query')));
$panel->appendChild($table);
$form = phabricator_form(
@ -122,10 +122,11 @@ final class ManiphestSavedQueryListController extends ManiphestController {
$nav->selectFilter('saved', 'saved');
$nav->appendChild($form);
return $this->buildStandardPageResponse(
return $this->buildApplicationPage(
$nav,
array(
'title' => 'Saved Queries',
'title' => pht('Saved Queries'),
'device' => true,
));
}

View file

@ -107,7 +107,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
'href' => '/maniphest/task/create/?parent='.$parent_task->getID(),
'class' => 'green button',
),
'Create Another Subtask'));
pht('Create Another Subtask')));
$context_bar->appendChild(hsprintf(
'Created a subtask of <strong>%s</strong>',
$this->getHandle($parent_task->getPHID())->renderLink()));
@ -120,15 +120,15 @@ final class ManiphestTaskDetailController extends ManiphestController {
'href' => '/maniphest/task/create/?template='.$task->getID(),
'class' => 'green button',
),
'Similar Task'));
pht('Similar Task')));
$context_bar->addButton(phutil_tag(
'a',
array(
'href' => '/maniphest/task/create/',
'class' => 'green button',
),
'Empty Task'));
$context_bar->appendChild('New task created.');
pht('Empty Task')));
$context_bar->appendChild(pht('New task created.'));
}
$engine = new PhabricatorMarkupEngine();
@ -201,20 +201,20 @@ final class ManiphestTaskDetailController extends ManiphestController {
->addHiddenInput('taskID', $task->getID())
->appendChild(
id(new AphrontFormSelectControl())
->setLabel('Action')
->setLabel(pht('Action'))
->setName('action')
->setOptions($transaction_types)
->setID('transaction-action'))
->appendChild(
id(new AphrontFormSelectControl())
->setLabel('Resolution')
->setLabel(pht('Resolution'))
->setName('resolution')
->setControlID('resolution')
->setControlStyle('display: none')
->setOptions($resolution_types))
->appendChild(
id(new AphrontFormTokenizerControl())
->setLabel('Assign To')
->setLabel(pht('Assign To'))
->setName('assign_to')
->setControlID('assign_to')
->setControlStyle('display: none')
@ -222,7 +222,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
->setDisableBehavior(true))
->appendChild(
id(new AphrontFormTokenizerControl())
->setLabel('CCs')
->setLabel(pht('CCs'))
->setName('ccs')
->setControlID('ccs')
->setControlStyle('display: none')
@ -230,7 +230,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
->setDisableBehavior(true))
->appendChild(
id(new AphrontFormSelectControl())
->setLabel('Priority')
->setLabel(pht('Priority'))
->setName('priority')
->setOptions($priority_map)
->setControlID('priority')
@ -238,7 +238,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
->setValue($task->getPriority()))
->appendChild(
id(new AphrontFormTokenizerControl())
->setLabel('Projects')
->setLabel(pht('Projects'))
->setName('projects')
->setControlID('projects')
->setControlStyle('display: none')
@ -246,25 +246,25 @@ final class ManiphestTaskDetailController extends ManiphestController {
->setDisableBehavior(true))
->appendChild(
id(new AphrontFormFileControl())
->setLabel('File')
->setLabel(pht('File'))
->setName('file')
->setControlID('file')
->setControlStyle('display: none'))
->appendChild(
id(new PhabricatorRemarkupControl())
->setLabel('Comments')
->setLabel(pht('Comments'))
->setName('comments')
->setValue($draft_text)
->setID('transaction-comments')
->setUser($user))
->appendChild(
id(new AphrontFormDragAndDropUploadControl())
->setLabel('Attached Files')
->setLabel(pht('Attached Files'))
->setName('files')
->setActivatedClass('aphront-panel-view-drag-and-drop'))
->appendChild(
id(new AphrontFormSubmitControl())
->setValue($is_serious ? 'Submit' : 'Avast!'));
->setValue($is_serious ? pht('Submit') : pht('Avast!')));
$control_map = array(
ManiphestTransactionType::TYPE_STATUS => 'resolution',
@ -280,7 +280,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
'id' => 'projects-tokenizer',
'src' => '/typeahead/common/projects/',
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
'placeholder' => 'Type a project name...',
'placeholder' => pht('Type a project name...'),
),
ManiphestTransactionType::TYPE_OWNER => array(
'id' => 'assign-tokenizer',
@ -288,13 +288,13 @@ final class ManiphestTaskDetailController extends ManiphestController {
'value' => $default_claim,
'limit' => 1,
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
'placeholder' => 'Type a user name...',
'placeholder' => pht('Type a user name...'),
),
ManiphestTransactionType::TYPE_CCS => array(
'id' => 'cc-tokenizer',
'src' => '/typeahead/common/mailable/',
'ondemand' => PhabricatorEnv::getEnvConfig('tokenizer.ondemand'),
'placeholder' => 'Type a user or mailing list...',
'placeholder' => pht('Type a user or mailing list...'),
),
);

View file

@ -112,15 +112,15 @@ final class ManiphestTaskEditController extends ManiphestController {
$aux_field->setValueFromRequest($request);
if ($aux_field->isRequired() && !$aux_field->getValue()) {
$errors[] = $aux_field->getLabel() . ' is required.';
$aux_field->setError('Required');
$errors[] = pht('%s is required.', $aux_field->getLabel());
$aux_field->setError(pht('Required'));
}
try {
$aux_field->validate();
} catch (Exception $e) {
$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->appendChild($form);
$panel->setNoBackground();
$inst1 = pht('Description Preview');
$inst2 = pht('Loading preview...');
$description_preview_panel = hsprintf(
'<div class="aphront-panel-preview aphront-panel-preview-full">
<div class="maniphest-description-preview-header">
Description Preview
%s
</div>
<div id="description-preview">
<div class="aphront-panel-preview-loading-text">
Loading preview...
%s
</div>
</div>
</div>');
</div>',
$inst1,
$inst2);
Javelin::initBehavior(
'maniphest-description-preview',
@ -537,7 +541,7 @@ final class ManiphestTaskEditController extends ManiphestController {
array(
'title' => $header_name,
'pageObjects' => $page_objects,
'device' => true
'device' => true,
));
}
}

View file

@ -120,6 +120,7 @@ final class ManiphestTaskListController extends ManiphestController {
$form = id(new AphrontFormView())
->setUser($user)
->setNoShading(true)
->setAction(
$request->getRequestURI()
->alter('key', null)
@ -142,7 +143,7 @@ final class ManiphestTaskListController extends ManiphestController {
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/searchowner/')
->setName('set_users')
->setLabel('Users')
->setLabel(pht('Users'))
->setValue($tokens));
}
@ -150,12 +151,12 @@ final class ManiphestTaskListController extends ManiphestController {
$form->appendChild(
id(new AphrontFormTextControl())
->setName('set_search')
->setLabel('Search')
->setLabel(pht('Search'))
->setValue($search_text));
$form->appendChild(
id(new AphrontFormTextControl())
->setName('set_tasks')
->setLabel('Task IDs')
->setLabel(pht('Task IDs'))
->setValue(join(',', $task_ids)));
$tokens = array();
@ -166,7 +167,7 @@ final class ManiphestTaskListController extends ManiphestController {
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/searchowner/')
->setName('set_owners')
->setLabel('Owners')
->setLabel(pht('Owners'))
->setValue($tokens));
$tokens = array();
@ -177,7 +178,7 @@ final class ManiphestTaskListController extends ManiphestController {
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/users/')
->setName('set_authors')
->setLabel('Authors')
->setLabel(pht('Authors'))
->setValue($tokens));
}
@ -189,14 +190,14 @@ final class ManiphestTaskListController extends ManiphestController {
$caption = null;
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(
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/searchproject/')
->setName('set_projects')
->setLabel('Projects')
->setLabel(pht('Projects'))
->setCaption($caption)
->setValue($tokens));
}
@ -210,8 +211,8 @@ final class ManiphestTaskListController extends ManiphestController {
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/projects/')
->setName('set_aprojects')
->setLabel('Any Projects')
->setCaption('Find tasks in ANY of these projects ("OR" query).')
->setLabel(pht('Any Projects'))
->setCaption(pht('Find tasks in ANY of these projects ("OR" query).'))
->setValue($atokens));
$tokens = array();
@ -222,8 +223,8 @@ final class ManiphestTaskListController extends ManiphestController {
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/projects/')
->setName('set_xprojects')
->setLabel('Exclude Projects')
->setCaption('Find tasks NOT in any of these projects.')
->setLabel(pht('Exclude Projects'))
->setCaption(pht('Find tasks NOT in any of these projects.'))
->setValue($tokens));
$priority = ManiphestTaskPriority::getLowestPriority();
@ -233,7 +234,7 @@ final class ManiphestTaskListController extends ManiphestController {
$form->appendChild(
id(new AphrontFormSelectControl())
->setLabel('Min Priority')
->setLabel(pht('Min Priority'))
->setName('set_lpriority')
->setValue($priority)
->setOptions(array_reverse(
@ -246,7 +247,7 @@ final class ManiphestTaskListController extends ManiphestController {
$form->appendChild(
id(new AphrontFormSelectControl())
->setLabel('Max Priority')
->setLabel(pht('Max Priority'))
->setName('set_hpriority')
->setValue($priority)
->setOptions(ManiphestTaskPriority::getTaskPriorityMap()));
@ -259,7 +260,7 @@ final class ManiphestTaskListController extends ManiphestController {
->appendChild($this->renderOrderControl($q_order));
$submit = id(new AphrontFormSubmitControl())
->setValue('Filter Tasks');
->setValue(pht('Filter Tasks'));
// Only show "Save..." for novel queries which have some kind of query
// parameters set.
@ -268,7 +269,7 @@ final class ManiphestTaskListController extends ManiphestController {
&& $request->getRequestURI()->getQueryParams()) {
$submit->addCancelButton(
'/maniphest/custom/edit/?key='.$query->getQueryKey(),
'Save Custom Query...');
pht('Save Custom Query...'));
}
$form->appendChild($submit);
@ -285,8 +286,6 @@ final class ManiphestTaskListController extends ManiphestController {
$filter->appendChild($form);
}
$nav->appendChild($filter);
$have_tasks = false;
foreach ($tasks as $group => $list) {
if (count($list)) {
@ -302,10 +301,12 @@ final class ManiphestTaskListController extends ManiphestController {
'<div class="maniphest-list-container">'));
if (!$have_tasks) {
$no_tasks = pht('No matching tasks.');
$list_container->appendChild(hsprintf(
'<h1 class="maniphest-task-group-header">'.
'No matching tasks.'.
'</h1>'));
'%s'.
'</h1>',
$no_tasks));
} else {
$pager = new AphrontPagerView();
$pager->setURI($request->getRequestURI(), 'offset');
@ -317,13 +318,16 @@ final class ManiphestTaskListController extends ManiphestController {
$max = min($pager->getOffset() + $page_size, $total_count);
$tot = $total_count;
$list_container->appendChild(hsprintf(
'<div class="maniphest-total-result-count">'.
"Displaying tasks %s - %s of %s.".
'</div>',
$results = pht('Displaying tasks %s - %s of %s.',
number_format($cur),
number_format($max),
number_format($tot)));
number_format($tot));
$result_count = phutil_tag(
'div',
array(
'class' => 'maniphest-total-result-count'
),
$results);
$selector = new AphrontNullView();
@ -333,8 +337,7 @@ final class ManiphestTaskListController extends ManiphestController {
($order == 'priority') &&
($group == 'none' || $group == 'priority');
$lists = new AphrontNullView();
$lists->appendChild(hsprintf('<div class="maniphest-group-container">'));
$lists = array();
foreach ($tasks as $group => $list) {
$task_list = new ManiphestTaskListView();
$task_list->setShowBatchControls(true);
@ -359,18 +362,19 @@ final class ManiphestTaskListController extends ManiphestController {
),
$group.' ('.$count.')');
$panel = new AphrontPanelView();
$panel->appendChild($header);
$panel->appendChild($task_list);
$panel->setNoBackground();
$lists->appendChild($panel);
$lists[] =
phutil_tag(
'div',
array(
'class' => 'maniphest-task-group'
),
array(
$header,
$task_list,
));
}
$lists->appendChild(hsprintf('</div>'));
$selector->appendChild($lists);
$selector->appendChild($this->renderBatchEditor($query));
$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);
$title = pht('Task List');
@ -411,10 +416,12 @@ final class ManiphestTaskListController extends ManiphestController {
$nav->setCrumbs($crumbs);
return $this->buildStandardPageResponse(
return $this->buildApplicationPage(
$nav,
array(
'title' => $title,
'device' => true,
'dust' => true,
));
}
@ -653,7 +660,7 @@ final class ManiphestTaskListController extends ManiphestController {
'class' => 'grey button',
'id' => 'batch-select-all',
),
'Select All');
pht('Select All'));
$select_none = javelin_tag(
'a',
@ -663,7 +670,7 @@ final class ManiphestTaskListController extends ManiphestController {
'class' => 'grey button',
'id' => 'batch-select-none',
),
'Clear Selection');
pht('Clear Selection'));
$submit = phutil_tag(
'button',
@ -672,7 +679,7 @@ final class ManiphestTaskListController extends ManiphestController {
'disabled' => 'disabled',
'class' => 'disabled',
),
"Batch Edit Selected Tasks \xC2\xBB");
pht("Batch Edit Selected \xC2\xBB"));
$export = javelin_tag(
'a',
@ -680,22 +687,25 @@ final class ManiphestTaskListController extends ManiphestController {
'href' => '/maniphest/export/'.$search_query->getQueryKey().'/',
'class' => 'grey button',
),
'Export Tasks to Excel...');
pht('Export to Excel'));
return hsprintf(
'<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">'.
'<tr>'.
'<td>%s%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>'.
'</tr>'.
'</table>'.
'</table>',
$select_all, $select_none,
pht('Batch Task Editor'),
$select_all,
$select_none,
$export,
pht('0 Selected'),
$submit);
}
@ -871,35 +881,35 @@ final class ManiphestTaskListController extends ManiphestController {
private function getStatusButtonMap() {
return array(
'o' => 'Open',
'c' => 'Closed',
'oc' => 'All',
'o' => pht('Open'),
'c' => pht('Closed'),
'oc' => pht('All'),
);
}
private function getGroupButtonMap() {
return array(
'p' => 'Priority',
'o' => 'Owner',
's' => 'Status',
'j' => 'Project',
'n' => 'None',
'p' => pht('Priority'),
'o' => pht('Owner'),
's' => pht('Status'),
'j' => pht('Project'),
'n' => pht('None'),
);
}
private function getOrderButtonMap() {
return array(
'p' => 'Priority',
'u' => 'Updated',
'c' => 'Created',
't' => 'Title',
'p' => pht('Priority'),
'u' => pht('Updated'),
'c' => pht('Created'),
't' => pht('Title'),
);
}
public function renderStatusControl($value) {
$request = $this->getRequest();
return id(new AphrontFormToggleButtonsControl())
->setLabel('Status')
->setLabel(pht('Status'))
->setValue($this->getStatusRequestValue($value))
->setBaseURI($request->getRequestURI(), $this->getStatusRequestKey())
->setButtons($this->getStatusButtonMap());
@ -908,7 +918,7 @@ final class ManiphestTaskListController extends ManiphestController {
public function renderOrderControl($value) {
$request = $this->getRequest();
return id(new AphrontFormToggleButtonsControl())
->setLabel('Order')
->setLabel(pht('Order'))
->setValue($this->getOrderRequestValue($value))
->setBaseURI($request->getRequestURI(), $this->getOrderRequestKey())
->setButtons($this->getOrderButtonMap());
@ -917,7 +927,7 @@ final class ManiphestTaskListController extends ManiphestController {
public function renderGroupControl($value) {
$request = $this->getRequest();
return id(new AphrontFormToggleButtonsControl())
->setLabel('Group')
->setLabel(pht('Group'))
->setValue($this->getGroupRequestValue($value))
->setBaseURI($request->getRequestURI(), $this->getGroupRequestKey())
->setButtons($this->getGroupButtonMap());

View file

@ -63,6 +63,7 @@ final class ManiphestTaskSummaryView extends ManiphestView {
$batch = phutil_tag(
'td',
array(
'rowspan' => 2,
'class' => 'maniphest-task-batch',
),
javelin_tag(
@ -91,36 +92,14 @@ final class ManiphestTaskSummaryView extends ManiphestView {
$handle = javelin_tag(
'td',
array(
'rowspan' => 2,
'class' => 'maniphest-task-handle '.$pri_class.' '.$control_class,
'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(
'td',
'span',
array(
'class' => 'maniphest-task-name',
),
@ -131,6 +110,50 @@ final class ManiphestTaskSummaryView extends ManiphestView {
),
$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(
'td',
array(
@ -138,25 +161,21 @@ final class ManiphestTaskSummaryView extends ManiphestView {
),
$projects_view->render());
$task_updated = phutil_tag(
'td',
array(
'class' => 'maniphest-task-updated',
),
phabricator_date($task->getDateModified(), $this->user));
$row1 = phutil_tag(
'tr',
array(),
array(
$handle,
$batch,
$task_info,
));
$row = phutil_tag(
$row2 = phutil_tag(
'tr',
array(),
array(
$handle,
$batch,
$task_id,
$task_status,
$task_owner,
$task_name,
$task_projects,
$task_updated,
));
return javelin_tag(
@ -168,7 +187,10 @@ final class ManiphestTaskSummaryView extends ManiphestView {
'taskID' => $task->getID(),
),
),
$row);
array(
$row1,
$row2,
));
}
}

View file

@ -10,6 +10,7 @@ final class AphrontFormView extends AphrontView {
private $workflow;
private $id;
private $flexible;
private $noShading;
private $sigils = array();
public function setFlexible($flexible) {
@ -17,6 +18,11 @@ final class AphrontFormView extends AphrontView {
return $this;
}
public function setNoShading($shading) {
$this->noShading = $shading;
return $this;
}
public function setID($id) {
$this->id = $id;
return $this;
@ -60,7 +66,7 @@ final class AphrontFormView extends AphrontView {
$layout = new AphrontFormLayoutView();
if (!$this->flexible) {
if ((!$this->flexible) && (!$this->noShading)) {
$layout
->setBackgroundShading(true)
->setPadded(true);

View file

@ -5,11 +5,13 @@ final class AphrontListFilterView extends AphrontView {
public function render() {
require_celerity_resource('aphront-list-filter-view-css');
return hsprintf(
'<table class="aphront-list-filter-view">'.
'<tr>'.
'<td class="aphront-list-filter-view-controls">%s</td>'.
'</tr>'.
'</table>',
'<div class="aphront-filter-table-wrapper">'.
'<table class="aphront-list-filter-view">'.
'<tr>'.
'<td class="aphront-list-filter-view-controls">%s</td>'.
'</tr>'.
'</table>'.
'</div>',
$this->renderChildren());
}

View file

@ -14,7 +14,6 @@
padding: 1em;
}
.aphront-form-view label.aphront-form-label {
padding-top: 4px;
width: 19%;
@ -22,7 +21,7 @@
text-align: right;
font-weight: bold;
font-size: 13px;
color: #666666;
color: #666;
}
.device-phone .aphront-form-view label.aphront-form-label {
@ -30,6 +29,8 @@
float: none;
text-align: left;
width: 100%;
color: #777;
margin-bottom: 3px;
}
.aphront-form-input {
@ -159,7 +160,7 @@
}
.aphront-form-control-togglebuttons .aphront-form-input {
padding-top: 5px;
padding: 2px 0 0 0;
}
table.aphront-form-control-radio-layout,
@ -368,42 +369,3 @@ table.aphront-form-control-checkbox-layout th {
padding: 12px;
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;
}

View file

@ -2,11 +2,23 @@
* @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 {
background: #f4f5f8;
border-bottom: 1px solid #d4dae0;
background: #fff;
width: 100%;
margin-bottom: 1em;
box-shadow: inset 0px 2px 1px rgba(150,150,150,0.25);
}
.aphront-list-filter-view-controls {
@ -15,6 +27,7 @@
.aphront-list-filter-view-controls .aphront-form-view {
border-width: 0;
border-bottom: 1px solid #c0c5d1;
padding: 12px 0 6px;
}

View file

@ -4,22 +4,19 @@
.maniphest-task-summary {
width: 100%;
margin: 4px 0;
margin: 0 0 -1px 0;
border-collapse: separate;
font-size: 12px;
color: #333;
border: 1px solid #c0c5d1;
}
.maniphest-task-group {
padding-bottom: 30px;
}
.maniphest-task-summary td {
padding: 6px 4px;
padding: 0 10px;
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 {
@ -30,21 +27,23 @@
background: #fff;
}
.maniphest-task-summary td.maniphest-task-handle {
padding: 0 4px;
width: 1px;
border-right-width: 1px;
border-right-color: #d5dadf;
.maniphest-task-summary .maniphest-task-handle {
padding: 0 4px 0 0;
width: 5px;
}
.maniphest-task-summary td.maniphest-task-batch {
padding-right: 0px;
width: 16px;
padding: 15px 4px 0 10px;
width: 8px;
text-align: center;
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 input {
cursor: pointer;
@ -55,43 +54,39 @@
}
.maniphest-task-summary td.maniphest-task-number {
padding: 6px 0 2px 10px;
font-weight: bold;
color: #333;
width: 50px;
text-align: right;
}
.maniphest-task-summary td.maniphest-task-status {
width: 60px;
text-align: center;
padding: 2px 10px 6px 10px;
text-align: left;
color: #777;
font-size: 12px;
}
.maniphest-task-summary td.maniphest-task-owner {
width: 100px;
.maniphest-task-summary .maniphest-task-owner {
padding-left: 20px;
}
.maniphest-task-summary td.maniphest-task-name {
.maniphest-task-summary .maniphest-task-name {
font-weight: bold;
white-space: normal;
overflow: hidden;
margin-left: 5px;
}
.maniphest-task-summary td.maniphest-task-projects {
width: 180px;
text-align: right;
white-space: normal;
padding: 0px 8px;
}
.maniphest-task-summary td.maniphest-task-updated {
text-align: right;
width: 85px;
padding-right: 8px;
border-right-width: 1px;
border-right-style: solid;
border-right-color: #d5dadf;
}
.maniphest-task-summary .pri-bullet {
.maniphest-task-summary .maniphest-task-updated {
float: right;
padding: 0 8px;
color: #777;
font-size: 11px;
font-weight: normal;
}
.maniphest-task-summary .pri-unbreak {
@ -128,19 +123,18 @@
font-size: 16px;
font-weight: bold;
color: #555;
padding: 5px 0;
margin-left: 20px;
}
.aphront-panel-view .maniphest-task-group-header {
margin-left: 0;
padding: 0 0 8px 0;
}
.maniphest-total-result-count {
text-align: right;
padding-right: 2em;
padding: 5px 20px 0 0;
font-size: 11px;
color: #666666;
color: #777;
}
.device-phone .maniphest-total-result-count {
padding-right: 5px;
}
.batch-editor-header {
@ -150,14 +144,17 @@
font-weight: bold;
}
.maniphest-batch-editor {
margin: 20px;
/* TODO: Implement */
.device-phone .maniphest-batch-editor {
display: none;
}
.maniphest-batch-editor-layout {
width: 100%;
border-top: 1px solid #d5dadf;
background: #f4f5f8;
border-left: 1px solid #e7e7e7;
border-right: 1px solid #e7e7e7;
border-bottom: 1px solid #c0c5d1;
background: #fff;
}
.maniphest-batch-editor-layout td {
@ -203,3 +200,11 @@ td.maniphest-active-handle {
position: relative;
opacity: 0.5;
}
.maniphest-list-container {
padding: 20px;
}
.device-phone .maniphest-list-container {
padding: 20px 5px;
}

View file

@ -153,35 +153,28 @@ button.link:hover {
a.toggle {
display: inline-block;
padding: 4px 8px;
font-size: 12px;
font-weight: bold;
line-height: 14px;
color: #ffffff;
text-shadow: 0 1px 0 #777;
color: #555;
text-decoration: none;
white-space: nowrap;
vertical-align: baseline;
background-color: #a7a7a7;
font-family: 'Helvetica Neue', Helvetica, Arial;
font-size: 12px;
margin: 0 5px 2px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
background-color: #f7f7f7;
margin: 0 6px 0 0;
border-radius: 3px;
box-shadow: inset 0 0 3px rgba(0,0,0,.4);
}
a.toggle:hover {
background-color: #bbb;
background-color: #14568e;
color: #fff
}
a.toggle-selected {
background-color: #555;
background-color: #14568e;
color: #fff
}
a.toggle-fixed {
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