diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php
index 98a450821b..189092c69a 100644
--- a/src/__celerity_resource_map__.php
+++ b/src/__celerity_resource_map__.php
@@ -81,13 +81,22 @@ celerity_register_resource_map(array(
),
'aphront-headsup-action-list-view-css' =>
array(
- 'uri' => '/res/84743e20/rsrc/css/aphront/headsup-action-list-view.css',
+ 'uri' => '/res/aff0a541/rsrc/css/aphront/headsup-action-list-view.css',
'type' => 'css',
'requires' =>
array(
),
'disk' => '/rsrc/css/aphront/headsup-action-list-view.css',
),
+ 'aphront-headsup-view-css' =>
+ array(
+ 'uri' => '/res/39ffc2e7/rsrc/css/aphront/headsup.css',
+ 'type' => 'css',
+ 'requires' =>
+ array(
+ ),
+ 'disk' => '/rsrc/css/aphront/headsup.css',
+ ),
'aphront-list-filter-view-css' =>
array(
'uri' => '/res/0f5ddaba/rsrc/css/aphront/list-filter-view.css',
@@ -241,7 +250,7 @@ celerity_register_resource_map(array(
),
'differential-revision-detail-css' =>
array(
- 'uri' => '/res/2433dbdc/rsrc/css/application/differential/revision-detail.css',
+ 'uri' => '/res/a838bf31/rsrc/css/application/differential/revision-detail.css',
'type' => 'css',
'requires' =>
array(
@@ -1409,7 +1418,7 @@ celerity_register_resource_map(array(
),
'maniphest-task-detail-css' =>
array(
- 'uri' => '/res/15c28f68/rsrc/css/application/maniphest/task-detail.css',
+ 'uri' => '/res/7599c878/rsrc/css/application/maniphest/task-detail.css',
'type' => 'css',
'requires' =>
array(
@@ -2039,7 +2048,7 @@ celerity_register_resource_map(array(
'uri' => '/res/pkg/21d01ed8/core.pkg.js',
'type' => 'js',
),
- '28d8e85a' =>
+ '18be02e0' =>
array(
'name' => 'differential.pkg.css',
'symbols' =>
@@ -2057,7 +2066,7 @@ celerity_register_resource_map(array(
10 => 'phabricator-content-source-view-css',
11 => 'differential-local-commits-view-css',
),
- 'uri' => '/res/pkg/28d8e85a/differential.pkg.css',
+ 'uri' => '/res/pkg/18be02e0/differential.pkg.css',
'type' => 'css',
),
'06ebcd69' =>
@@ -2115,7 +2124,7 @@ celerity_register_resource_map(array(
'uri' => '/res/pkg/4fbae2af/javelin.pkg.js',
'type' => 'js',
),
- 31583232 =>
+ '7cc1c9a3' =>
array(
'name' => 'maniphest.pkg.css',
'symbols' =>
@@ -2125,7 +2134,7 @@ celerity_register_resource_map(array(
2 => 'maniphest-task-detail-css',
3 => 'aphront-attached-file-view-css',
),
- 'uri' => '/res/pkg/31583232/maniphest.pkg.css',
+ 'uri' => '/res/pkg/7cc1c9a3/maniphest.pkg.css',
'type' => 'css',
),
'86fc0b0c' =>
@@ -2160,11 +2169,11 @@ celerity_register_resource_map(array(
),
'reverse' =>
array(
- 'aphront-attached-file-view-css' => '31583232',
+ 'aphront-attached-file-view-css' => '7cc1c9a3',
'aphront-crumbs-view-css' => '82263727',
'aphront-dialog-view-css' => '82263727',
'aphront-form-view-css' => '82263727',
- 'aphront-headsup-action-list-view-css' => '28d8e85a',
+ 'aphront-headsup-action-list-view-css' => '18be02e0',
'aphront-list-filter-view-css' => '82263727',
'aphront-pager-view-css' => '82263727',
'aphront-panel-view-css' => '82263727',
@@ -2172,16 +2181,16 @@ celerity_register_resource_map(array(
'aphront-table-view-css' => '82263727',
'aphront-tokenizer-control-css' => '82263727',
'aphront-typeahead-control-css' => '82263727',
- 'differential-changeset-view-css' => '28d8e85a',
- 'differential-core-view-css' => '28d8e85a',
+ 'differential-changeset-view-css' => '18be02e0',
+ 'differential-core-view-css' => '18be02e0',
'differential-inline-comment-editor' => '06ebcd69',
- 'differential-local-commits-view-css' => '28d8e85a',
- 'differential-revision-add-comment-css' => '28d8e85a',
- 'differential-revision-comment-css' => '28d8e85a',
- 'differential-revision-comment-list-css' => '28d8e85a',
- 'differential-revision-detail-css' => '28d8e85a',
- 'differential-revision-history-css' => '28d8e85a',
- 'differential-table-of-contents-css' => '28d8e85a',
+ 'differential-local-commits-view-css' => '18be02e0',
+ 'differential-revision-add-comment-css' => '18be02e0',
+ 'differential-revision-comment-css' => '18be02e0',
+ 'differential-revision-comment-list-css' => '18be02e0',
+ 'differential-revision-detail-css' => '18be02e0',
+ 'differential-revision-history-css' => '18be02e0',
+ 'differential-table-of-contents-css' => '18be02e0',
'diffusion-commit-view-css' => '61f9d480',
'javelin-behavior' => '4fbae2af',
'javelin-behavior-aphront-basic-tokenizer' => '2af849fb',
@@ -2226,11 +2235,11 @@ celerity_register_resource_map(array(
'javelin-util' => '4fbae2af',
'javelin-vector' => '4fbae2af',
'javelin-workflow' => '21d01ed8',
- 'maniphest-task-detail-css' => '31583232',
- 'maniphest-task-summary-css' => '31583232',
- 'maniphest-transaction-detail-css' => '31583232',
+ 'maniphest-task-detail-css' => '7cc1c9a3',
+ 'maniphest-task-summary-css' => '7cc1c9a3',
+ 'maniphest-transaction-detail-css' => '7cc1c9a3',
'phabricator-app-buttons-css' => '82263727',
- 'phabricator-content-source-view-css' => '28d8e85a',
+ 'phabricator-content-source-view-css' => '18be02e0',
'phabricator-core-buttons-css' => '82263727',
'phabricator-core-css' => '82263727',
'phabricator-directory-css' => '82263727',
@@ -2240,7 +2249,7 @@ celerity_register_resource_map(array(
'phabricator-keyboard-shortcut' => '21d01ed8',
'phabricator-keyboard-shortcut-manager' => '21d01ed8',
'phabricator-menu-item' => '21d01ed8',
- 'phabricator-object-selector-css' => '28d8e85a',
+ 'phabricator-object-selector-css' => '18be02e0',
'phabricator-paste-file-upload' => '21d01ed8',
'phabricator-remarkup-css' => '82263727',
'phabricator-shaped-request' => '06ebcd69',
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
index 7e6774f193..1a8a9fae1b 100644
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -52,6 +52,7 @@ phutil_register_library_map(array(
'AphrontHTTPSinkTestCase' => 'aphront/sink/base/__tests__',
'AphrontHeadsupActionListView' => 'view/layout/headsup/actionlist',
'AphrontHeadsupActionView' => 'view/layout/headsup/action',
+ 'AphrontHeadsupView' => 'view/layout/headsup/panel',
'AphrontIsolatedDatabaseConnection' => 'storage/connection/isolated',
'AphrontIsolatedDatabaseConnectionTestCase' => 'storage/connection/isolated/__tests__',
'AphrontIsolatedHTTPSink' => 'aphront/sink/test',
@@ -383,7 +384,6 @@ phutil_register_library_map(array(
'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/base',
'HeraldAction' => 'applications/herald/storage/action',
'HeraldActionConfig' => 'applications/herald/config/action',
- 'HeraldAllRulesController' => 'applications/herald/controller/all',
'HeraldApplyTranscript' => 'applications/herald/storage/transcript/apply',
'HeraldCommitAdapter' => 'applications/herald/adapter/commit',
'HeraldCondition' => 'applications/herald/storage/condition',
@@ -989,6 +989,7 @@ phutil_register_library_map(array(
'AphrontHTTPSinkTestCase' => 'PhabricatorTestCase',
'AphrontHeadsupActionListView' => 'AphrontView',
'AphrontHeadsupActionView' => 'AphrontView',
+ 'AphrontHeadsupView' => 'AphrontView',
'AphrontIsolatedDatabaseConnection' => 'AphrontDatabaseConnection',
'AphrontIsolatedDatabaseConnectionTestCase' => 'PhabricatorTestCase',
'AphrontIsolatedHTTPSink' => 'AphrontHTTPSink',
@@ -1263,7 +1264,6 @@ phutil_register_library_map(array(
'DrydockSSHCommandInterface' => 'DrydockCommandInterface',
'DrydockWebrootInterface' => 'DrydockInterface',
'HeraldAction' => 'HeraldDAO',
- 'HeraldAllRulesController' => 'HeraldController',
'HeraldApplyTranscript' => 'HeraldDAO',
'HeraldCommitAdapter' => 'HeraldObjectAdapter',
'HeraldCondition' => 'HeraldDAO',
@@ -1344,6 +1344,7 @@ phutil_register_library_map(array(
'PhabricatorChatLogDAO' => 'PhabricatorLiskDAO',
'PhabricatorChatLogEvent' => 'PhabricatorChatLogDAO',
'PhabricatorChatLogEventType' => 'PhabricatorChatLogConstants',
+ 'PhabricatorChatLogQuery' => 'PhabricatorOffsetPagedQuery',
'PhabricatorConduitAPIController' => 'PhabricatorConduitController',
'PhabricatorConduitCertificateToken' => 'PhabricatorConduitDAO',
'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO',
diff --git a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php
index 6f40466d55..4e637b97da 100644
--- a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php
+++ b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php
@@ -322,9 +322,7 @@ final class DifferentialRevisionViewController extends DifferentialController {
$page_pane = id(new DifferentialPrimaryPaneView())
->setLineWidthFromChangesets($changesets)
->setID($pane_id)
- ->appendChild($reviewer_warning)
->appendChild(
- $revision_detail->render().
$comment_view->render().
$diff_history->render().
$warning.
@@ -336,7 +334,11 @@ final class DifferentialRevisionViewController extends DifferentialController {
$page_pane->appendChild($comment_form->render());
}
return $this->buildStandardPageResponse(
- $page_pane,
+ array(
+ $reviewer_warning,
+ $revision_detail,
+ $page_pane,
+ ),
array(
'title' => 'D'.$revision->getID().' '.$revision->getTitle(),
));
@@ -446,11 +448,13 @@ final class DifferentialRevisionViewController extends DifferentialController {
);
}
- $links[] = array(
- 'class' => 'transcripts-metamta',
- 'name' => 'MetaMTA Transcripts',
- 'href' => "/mail/?phid={$revision_phid}",
- );
+ if ($user->getIsAdmin()) {
+ $links[] = array(
+ 'class' => 'transcripts-metamta',
+ 'name' => 'MetaMTA Transcripts',
+ 'href' => "/mail/?phid={$revision_phid}",
+ );
+ }
$links[] = array(
'class' => 'transcripts-herald',
diff --git a/src/applications/differential/view/revisiondetail/DifferentialRevisionDetailView.php b/src/applications/differential/view/revisiondetail/DifferentialRevisionDetailView.php
index 8f5e9d8469..3013828282 100644
--- a/src/applications/differential/view/revisiondetail/DifferentialRevisionDetailView.php
+++ b/src/applications/differential/view/revisiondetail/DifferentialRevisionDetailView.php
@@ -1,7 +1,7 @@
revision;
- $rows = array();
+ $dict = array();
foreach ($this->auxiliaryFields as $field) {
$value = $field->renderValueForRevisionView();
if (strlen($value)) {
- $label = $field->renderLabelForRevisionView();
- $rows[] =
- '
'.
- ''.$label.' | '.
- ''.$value.' | '.
- '
';
+ $label = rtrim($field->renderLabelForRevisionView(), ':');
+ $dict[$label] = $value;
}
}
- $properties =
- ''.
- implode("\n", $rows).
- '
';
-
$actions = array();
foreach ($this->actions as $action) {
$obj = new AphrontHeadsupActionView();
@@ -83,22 +74,14 @@ final class DifferentialRevisionDetailView extends AphrontView {
$action_list = new AphrontHeadsupActionListView();
$action_list->setActions($actions);
- return
- ''.
- $action_list->render().
- '
'.
- id(new AphrontKeyboardShortcutsAvailableView())->render().
- '
'.
- '
'.
- '
'.
- ''.
- phutil_escape_html('D'.$revision->getID()).
- ''.
- ' '.
- phutil_escape_html($revision->getTitle()).'
'.
- $properties.
- ''.
- '
'.
- '
';
+ $action_panel = new AphrontHeadsupView();
+ $action_panel->setActionList($action_list);
+ $action_panel->setHasKeyboardShortcuts(true);
+ $action_panel->setProperties($dict);
+
+ $action_panel->setObjectName('D'.$revision->getID());
+ $action_panel->setHeader($revision->getTitle());
+
+ return $action_panel->render();
}
}
diff --git a/src/applications/differential/view/revisiondetail/__init__.php b/src/applications/differential/view/revisiondetail/__init__.php
index 8e301d24c1..bd3cc3e932 100644
--- a/src/applications/differential/view/revisiondetail/__init__.php
+++ b/src/applications/differential/view/revisiondetail/__init__.php
@@ -10,9 +10,8 @@ phutil_require_module('phabricator', 'infrastructure/celerity/api');
phutil_require_module('phabricator', 'view/base');
phutil_require_module('phabricator', 'view/layout/headsup/action');
phutil_require_module('phabricator', 'view/layout/headsup/actionlist');
-phutil_require_module('phabricator', 'view/widget/keyboardshortcuts');
+phutil_require_module('phabricator', 'view/layout/headsup/panel');
-phutil_require_module('phutil', 'markup');
phutil_require_module('phutil', 'utils');
diff --git a/src/applications/diffusion/controller/commit/DiffusionCommitController.php b/src/applications/diffusion/controller/commit/DiffusionCommitController.php
index 316ca08587..f1d0f4185a 100644
--- a/src/applications/diffusion/controller/commit/DiffusionCommitController.php
+++ b/src/applications/diffusion/controller/commit/DiffusionCommitController.php
@@ -41,8 +41,6 @@ final class DiffusionCommitController extends DiffusionController {
'commit' => true,
));
- $detail_panel = new AphrontPanelView();
-
$repository = $drequest->getRepository();
$commit = $drequest->loadCommit();
@@ -76,31 +74,23 @@ final class DiffusionCommitController extends DiffusionController {
$parent_query = DiffusionCommitParentsQuery::newFromDiffusionRequest(
$drequest);
- $parents = $parent_query->loadParents();
- $property_table = $this->renderPropertyTable(
- $commit,
- $commit_data,
- $parents);
+ $headsup_panel = new AphrontHeadsupView();
+ $headsup_panel->setHeader('Commit Detail');
+ $headsup_panel->setActionList(
+ $this->renderHeadsupActionList($commit));
+ $headsup_panel->setProperties(
+ $this->getCommitProperties(
+ $commit,
+ $commit_data,
+ $parent_query->loadParents()));
- $detail_panel->setHeader('Revision Detail');
- $detail_panel->addButton(
- ''.
- 'r'.$callsign.$commit->getCommitIdentifier().
- ' · '.
- phabricator_datetime($commit->getEpoch(), $user).
+ $headsup_panel->appendChild(
+ '');
- $detail_panel->appendChild(
- '
'.
- $property_table.
- '
'.
- ''.
- '');
-
- $content[] = $detail_panel;
+ $content[] = $headsup_panel;
}
$query = new PhabricatorAuditQuery();
@@ -273,10 +263,11 @@ final class DiffusionCommitController extends DiffusionController {
));
}
- private function renderPropertyTable(
+ private function getCommitProperties(
PhabricatorRepositoryCommit $commit,
PhabricatorRepositoryCommitData $data,
array $parents) {
+ $user = $this->getRequest()->getUser();
$phids = array();
if ($data->getCommitDetail('authorPHID')) {
@@ -302,6 +293,17 @@ final class DiffusionCommitController extends DiffusionController {
$props = array();
+ if ($commit->getAuditStatus()) {
+ $status = PhabricatorAuditCommitStatusConstants::getStatusName(
+ $commit->getAuditStatus());
+ $props['Status'] = phutil_render_tag(
+ 'strong',
+ array(),
+ phutil_escape_html($status));
+ }
+
+ $props['Committed'] = phabricator_datetime($commit->getEpoch(), $user);
+
$author_phid = $data->getCommitDetail('authorPHID');
if ($data->getCommitDetail('authorPHID')) {
$props['Author'] = $handles[$author_phid]->renderLink();
@@ -322,11 +324,6 @@ final class DiffusionCommitController extends DiffusionController {
$props['Differential Revision'] = $handles[$revision_phid]->renderLink();
}
- if ($commit->getAuditStatus()) {
- $props['Audit'] = PhabricatorAuditCommitStatusConstants::getStatusName(
- $commit->getAuditStatus());
- }
-
if ($parents) {
$parent_links = array();
foreach ($parents as $parent) {
@@ -347,19 +344,7 @@ final class DiffusionCommitController extends DiffusionController {
$props['Branches'] = $branches;
}
- $rows = array();
- foreach ($props as $key => $value) {
- $rows[] =
- '
'.
- ''.$key.': | '.
- ''.$value.' | '.
- '
';
- }
-
- return
- '
'.
- implode("\n", $rows).
- '
';
+ return $props;
}
private function buildAuditTable($commit, $audits) {
@@ -378,6 +363,7 @@ final class DiffusionCommitController extends DiffusionController {
$panel = new AphrontPanelView();
$panel->setHeader('Audits');
+ $panel->setCaption('Audits you are responsible for are highlighted.');
$panel->appendChild($view);
return $panel;
@@ -609,5 +595,68 @@ final class DiffusionCommitController extends DiffusionController {
return $panel;
}
+ private function renderHeadsupActionList(
+ PhabricatorRepositoryCommit $commit) {
+
+ $user = $this->getRequest()->getUser();
+
+ $actions = array();
+
+ require_celerity_resource('phabricator-flag-css');
+ $flag = PhabricatorFlagQuery::loadUserFlag($user, $commit->getPHID());
+ if ($flag) {
+ $class = PhabricatorFlagColor::getCSSClass($flag->getColor());
+ $color = PhabricatorFlagColor::getColorName($flag->getColor());
+
+ $action = new AphrontHeadsupActionView();
+ $action->setClass('flag-clear '.$class);
+ $action->setURI('/flag/delete/'.$flag->getID().'/');
+ $action->setName('Remove '.$color.' Flag');
+ $action->setWorkflow(true);
+ $actions[] = $action;
+ } else {
+ $action = new AphrontHeadsupActionView();
+ $action->setClass('phabricator-flag-ghost');
+ $action->setURI('/flag/edit/'.$commit->getPHID().'/');
+ $action->setName('Flag Commit');
+ $action->setWorkflow(true);
+ $actions[] = $action;
+ }
+
+ require_celerity_resource('phabricator-object-selector-css');
+ require_celerity_resource('javelin-behavior-phabricator-object-selector');
+
+ /*
+ TODO: Implement this.
+
+ $action = new AphrontHeadsupActionView();
+ $action->setName('Edit Maniphest Tasks');
+ $action->setURI('/search/attach/'.$commit->getPHID().'/TASK/');
+ $action->setWorkflow(true);
+ $action->setClass('attach-maniphest');
+ $actions[] = $action;
+
+ */
+
+ if ($user->getIsAdmin()) {
+ $action = new AphrontHeadsupActionView();
+ $action->setName('MetaMTA Transcripts');
+ $action->setURI('/mail/?phid='.$commit->getPHID());
+ $action->setClass('transcripts-metamta');
+ $actions[] = $action;
+ }
+
+ $action = new AphrontHeadsupActionView();
+ $action->setName('Herald Transcripts');
+ $action->setURI('/herald/transcript/?phid='.$commit->getPHID());
+ $action->setClass('transcripts-herald');
+ $actions[] = $action;
+
+ $action_list = new AphrontHeadsupActionListView();
+ $action_list->setActions($actions);
+
+ return $action_list;
+ }
+
}
diff --git a/src/applications/diffusion/controller/commit/__init__.php b/src/applications/diffusion/controller/commit/__init__.php
index 01a6354783..b90af27377 100644
--- a/src/applications/diffusion/controller/commit/__init__.php
+++ b/src/applications/diffusion/controller/commit/__init__.php
@@ -29,6 +29,8 @@ phutil_require_module('phabricator', 'applications/diffusion/view/commentlist');
phutil_require_module('phabricator', 'applications/diffusion/view/commitchangetable');
phutil_require_module('phabricator', 'applications/diffusion/view/historytable');
phutil_require_module('phabricator', 'applications/draft/storage/draft');
+phutil_require_module('phabricator', 'applications/flag/constants/color');
+phutil_require_module('phabricator', 'applications/flag/query/flag');
phutil_require_module('phabricator', 'applications/markup/engine');
phutil_require_module('phabricator', 'applications/phid/handle/data');
phutil_require_module('phabricator', 'applications/repository/constants/repositorytype');
@@ -42,6 +44,9 @@ phutil_require_module('phabricator', 'view/form/control/select');
phutil_require_module('phabricator', 'view/form/control/submit');
phutil_require_module('phabricator', 'view/form/control/textarea');
phutil_require_module('phabricator', 'view/form/error');
+phutil_require_module('phabricator', 'view/layout/headsup/action');
+phutil_require_module('phabricator', 'view/layout/headsup/actionlist');
+phutil_require_module('phabricator', 'view/layout/headsup/panel');
phutil_require_module('phabricator', 'view/layout/panel');
phutil_require_module('phabricator', 'view/null');
phutil_require_module('phabricator', 'view/utils');
diff --git a/src/applications/maniphest/controller/descriptionpreview/ManiphestTaskDescriptionPreviewController.php b/src/applications/maniphest/controller/descriptionpreview/ManiphestTaskDescriptionPreviewController.php
index 70b640f9ef..a01e15a349 100644
--- a/src/applications/maniphest/controller/descriptionpreview/ManiphestTaskDescriptionPreviewController.php
+++ b/src/applications/maniphest/controller/descriptionpreview/ManiphestTaskDescriptionPreviewController.php
@@ -30,10 +30,8 @@ final class ManiphestTaskDescriptionPreviewController
$engine = PhabricatorMarkupEngine::newManiphestMarkupEngine();
$content =
- '
'.
- ''.
+ '';
return id(new AphrontAjaxResponse())
diff --git a/src/applications/maniphest/controller/taskdetail/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/taskdetail/ManiphestTaskDetailController.php
index 9fc1024801..582a80a1c0 100644
--- a/src/applications/maniphest/controller/taskdetail/ManiphestTaskDetailController.php
+++ b/src/applications/maniphest/controller/taskdetail/ManiphestTaskDetailController.php
@@ -185,28 +185,6 @@ final class ManiphestTaskDetailController extends ManiphestController {
$dict['Files'] = implode('', $views);
}
- $dict['Description'] =
- '
'.
- ''.
- '
';
-
- require_celerity_resource('maniphest-task-detail-css');
-
- $table = array();
- foreach ($dict as $key => $value) {
- $table[] =
- '
'.
- ''.phutil_escape_html($key).': | '.
- ''.$value.' | '.
- '
';
- }
- $table =
- '
'.
- implode("\n", $table).
- '
';
-
$context_bar = null;
if ($parent_task) {
@@ -308,20 +286,16 @@ final class ManiphestTaskDetailController extends ManiphestController {
$action_list = new AphrontHeadsupActionListView();
$action_list->setActions($actions);
- $panel =
- '
'.
- $action_list->render().
- '
'.
- '
'.
- ''.
- phutil_escape_html('T'.$task->getID()).
- ''.
- ' '.
- phutil_escape_html($task->getTitle()).
- '
'.
- $table.
- ''.
- '
';
+ $headsup_panel = new AphrontHeadsupView();
+ $headsup_panel->setObjectName('T'.$task->getID());
+ $headsup_panel->setHeader($task->getTitle());
+ $headsup_panel->setActionList($action_list);
+ $headsup_panel->setProperties($dict);
+
+ $headsup_panel->appendChild(
+ '');
$transaction_types = ManiphestTransactionType::getTransactionTypeMap();
$resolution_types = ManiphestTaskStatus::getTaskStatusMap();
@@ -523,7 +497,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
return $this->buildStandardPageResponse(
array(
$context_bar,
- $panel,
+ $headsup_panel,
$transaction_view,
$comment_panel,
$preview_panel,
diff --git a/src/applications/maniphest/controller/taskdetail/__init__.php b/src/applications/maniphest/controller/taskdetail/__init__.php
index 4bd258840b..4bd8605259 100644
--- a/src/applications/maniphest/controller/taskdetail/__init__.php
+++ b/src/applications/maniphest/controller/taskdetail/__init__.php
@@ -36,6 +36,7 @@ phutil_require_module('phabricator', 'view/layout/contextbar');
phutil_require_module('phabricator', 'view/layout/filepreview');
phutil_require_module('phabricator', 'view/layout/headsup/action');
phutil_require_module('phabricator', 'view/layout/headsup/actionlist');
+phutil_require_module('phabricator', 'view/layout/headsup/panel');
phutil_require_module('phabricator', 'view/layout/panel');
phutil_require_module('phutil', 'markup');
diff --git a/src/view/layout/headsup/panel/AphrontHeadsupView.php b/src/view/layout/headsup/panel/AphrontHeadsupView.php
new file mode 100644
index 0000000000..0b585fcf1a
--- /dev/null
+++ b/src/view/layout/headsup/panel/AphrontHeadsupView.php
@@ -0,0 +1,112 @@
+actionList = $action_list;
+ return $this;
+ }
+
+ public function setHeader($header) {
+ $this->header = $header;
+ return $this;
+ }
+
+ public function setProperties(array $dict) {
+ $this->properties = $dict;
+ return $this;
+ }
+
+ public function setObjectName($name) {
+ $this->objectName = $name;
+ return $this;
+ }
+
+ public function setHasKeyboardShortcuts($has_keyboard_shortcuts) {
+ $this->hasKeyboardShortcuts = $has_keyboard_shortcuts;
+ return $this;
+ }
+
+ public function getHasKeyboardShortcuts() {
+ return $this->hasKeyboardShortcuts;
+ }
+
+ public function render() {
+ $header =
+ '
'.
+ ''.
+ phutil_escape_html($this->objectName).
+ ''.
+ ' '.
+ phutil_escape_html($this->header).
+ '
';
+
+ require_celerity_resource('aphront-headsup-view-css');
+
+ $shortcuts = null;
+ if ($this->hasKeyboardShortcuts) {
+ $shortcuts =
+ '
'.
+ id(new AphrontKeyboardShortcutsAvailableView())->render().
+ '
';
+ }
+
+ $prop_table = null;
+ if ($this->properties) {
+ $prop_table = array();
+ foreach ($this->properties as $key => $value) {
+ $prop_table[] =
+ '
'.
+ ''.phutil_escape_html($key.':').' | '.
+ ''.$value.' | '.
+ '
';
+ }
+ $prop_table =
+ '
'.
+ implode("\n", $prop_table).
+ '
';
+ }
+
+ $children = $this->renderChildren();
+ if (strlen($children)) {
+ $children =
+ '
'.
+ $children.
+ '
';
+ }
+
+ return
+ '
'.
+ self::renderSingleView($this->actionList).
+ $shortcuts.
+ '
'.
+ $header.
+ $prop_table.
+ $children.
+ '
'.
+ '
';
+ }
+
+}
diff --git a/src/view/layout/headsup/panel/__init__.php b/src/view/layout/headsup/panel/__init__.php
new file mode 100644
index 0000000000..258eb19d72
--- /dev/null
+++ b/src/view/layout/headsup/panel/__init__.php
@@ -0,0 +1,17 @@
+