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( + '
'. + $engine->markupText($commit_data->getCommitMessage()). '
'); - $detail_panel->appendChild( - '
'. - $property_table. - '
'. - '
'. - $engine->markupText($commit_data->getCommitMessage()). - '
'. - '
'); - - $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 = - '
'. - '
'. - $engine->markupText($description). - '
'. + '
'. + $engine->markupText($description). '
'; 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'] = - '
'. - '
'. - $engine->markupText($task->getDescription()). - '
'. - '
'; - - 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( + '
'. + $engine->markupText($task->getDescription()). + '
'); $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 @@ +