mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-26 07:20:57 +01:00
Unify Differential/Maniphest/Diffusion styles and allow commits to be flagged explicitly
Summary: - Differential, Maniphest and Diffusion use slightly different styles for the object detail panels. - Instead, use the same styles and CSS. - Add object actions to Diffusion, including "Flag". Test Plan: Looked at revisions, tasks and commit. Flagged and unflagged commits. Reviewers: btrahan Reviewed By: btrahan CC: aran, epriestley Maniphest Tasks: T1041 Differential Revision: https://secure.phabricator.com/D2062
This commit is contained in:
parent
fcec4c368c
commit
5945546440
16 changed files with 356 additions and 184 deletions
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -50,24 +50,15 @@ final class DifferentialRevisionDetailView extends AphrontView {
|
|||
|
||||
$revision = $this->revision;
|
||||
|
||||
$rows = array();
|
||||
$dict = array();
|
||||
foreach ($this->auxiliaryFields as $field) {
|
||||
$value = $field->renderValueForRevisionView();
|
||||
if (strlen($value)) {
|
||||
$label = $field->renderLabelForRevisionView();
|
||||
$rows[] =
|
||||
'<tr>'.
|
||||
'<th>'.$label.'</th>'.
|
||||
'<td>'.$value.'</td>'.
|
||||
'</tr>';
|
||||
$label = rtrim($field->renderLabelForRevisionView(), ':');
|
||||
$dict[$label] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$properties =
|
||||
'<table class="differential-revision-properties">'.
|
||||
implode("\n", $rows).
|
||||
'</table>';
|
||||
|
||||
$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
|
||||
'<div class="differential-revision-detail differential-panel">'.
|
||||
$action_list->render().
|
||||
'<div class="differential-keyboard-shortcuts">'.
|
||||
id(new AphrontKeyboardShortcutsAvailableView())->render().
|
||||
'</div>'.
|
||||
'<div class="differential-revision-detail-core">'.
|
||||
'<h1>'.
|
||||
'<span class="aphront-headsup-object-name">'.
|
||||
phutil_escape_html('D'.$revision->getID()).
|
||||
'</span>'.
|
||||
' '.
|
||||
phutil_escape_html($revision->getTitle()).'</h1>'.
|
||||
$properties.
|
||||
'</div>'.
|
||||
'<div style="clear: both;"></div>'.
|
||||
'</div>';
|
||||
$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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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');
|
||||
|
||||
|
||||
|
|
|
@ -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(
|
||||
'<div class="diffusion-commit-dateline">'.
|
||||
'r'.$callsign.$commit->getCommitIdentifier().
|
||||
' · '.
|
||||
phabricator_datetime($commit->getEpoch(), $user).
|
||||
$headsup_panel->appendChild(
|
||||
'<div class="diffusion-commit-message phabricator-remarkup">'.
|
||||
$engine->markupText($commit_data->getCommitMessage()).
|
||||
'</div>');
|
||||
|
||||
$detail_panel->appendChild(
|
||||
'<div class="diffusion-commit-details">'.
|
||||
$property_table.
|
||||
'<hr />'.
|
||||
'<div class="diffusion-commit-message phabricator-remarkup">'.
|
||||
$engine->markupText($commit_data->getCommitMessage()).
|
||||
'</div>'.
|
||||
'</div>');
|
||||
|
||||
$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[] =
|
||||
'<tr>'.
|
||||
'<th>'.$key.':</th>'.
|
||||
'<td>'.$value.'</td>'.
|
||||
'</tr>';
|
||||
}
|
||||
|
||||
return
|
||||
'<table class="diffusion-commit-properties">'.
|
||||
implode("\n", $rows).
|
||||
'</table>';
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -30,10 +30,8 @@ final class ManiphestTaskDescriptionPreviewController
|
|||
$engine = PhabricatorMarkupEngine::newManiphestMarkupEngine();
|
||||
|
||||
$content =
|
||||
'<div class="maniphest-task-description">'.
|
||||
'<div class="phabricator-remarkup">'.
|
||||
$engine->markupText($description).
|
||||
'</div>'.
|
||||
'<div class="phabricator-remarkup">'.
|
||||
$engine->markupText($description).
|
||||
'</div>';
|
||||
|
||||
return id(new AphrontAjaxResponse())
|
||||
|
|
|
@ -185,28 +185,6 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
|||
$dict['Files'] = implode('', $views);
|
||||
}
|
||||
|
||||
$dict['Description'] =
|
||||
'<div class="maniphest-task-description">'.
|
||||
'<div class="phabricator-remarkup">'.
|
||||
$engine->markupText($task->getDescription()).
|
||||
'</div>'.
|
||||
'</div>';
|
||||
|
||||
require_celerity_resource('maniphest-task-detail-css');
|
||||
|
||||
$table = array();
|
||||
foreach ($dict as $key => $value) {
|
||||
$table[] =
|
||||
'<tr>'.
|
||||
'<th>'.phutil_escape_html($key).':</th>'.
|
||||
'<td>'.$value.'</td>'.
|
||||
'</tr>';
|
||||
}
|
||||
$table =
|
||||
'<table class="maniphest-task-properties">'.
|
||||
implode("\n", $table).
|
||||
'</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 =
|
||||
'<div class="maniphest-panel">'.
|
||||
$action_list->render().
|
||||
'<div class="maniphest-task-detail-core">'.
|
||||
'<h1>'.
|
||||
'<span class="aphront-headsup-object-name">'.
|
||||
phutil_escape_html('T'.$task->getID()).
|
||||
'</span>'.
|
||||
' '.
|
||||
phutil_escape_html($task->getTitle()).
|
||||
'</h1>'.
|
||||
$table.
|
||||
'</div>'.
|
||||
'</div>';
|
||||
$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(
|
||||
'<div class="phabricator-remarkup">'.
|
||||
$engine->markupText($task->getDescription()).
|
||||
'</div>');
|
||||
|
||||
$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,
|
||||
|
|
|
@ -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');
|
||||
|
|
112
src/view/layout/headsup/panel/AphrontHeadsupView.php
Normal file
112
src/view/layout/headsup/panel/AphrontHeadsupView.php
Normal file
|
@ -0,0 +1,112 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
final class AphrontHeadsupView extends AphrontView {
|
||||
|
||||
private $actionList;
|
||||
private $header;
|
||||
private $properties;
|
||||
private $objectName;
|
||||
private $hasKeyboardShortcuts;
|
||||
|
||||
public function setActionList(AphrontHeadsupActionListView $action_list) {
|
||||
$this->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 =
|
||||
'<h1>'.
|
||||
'<span class="aphront-headsup-object-name">'.
|
||||
phutil_escape_html($this->objectName).
|
||||
'</span>'.
|
||||
' '.
|
||||
phutil_escape_html($this->header).
|
||||
'</h1>';
|
||||
|
||||
require_celerity_resource('aphront-headsup-view-css');
|
||||
|
||||
$shortcuts = null;
|
||||
if ($this->hasKeyboardShortcuts) {
|
||||
$shortcuts =
|
||||
'<div class="aphront-headsup-keyboard-shortcuts">'.
|
||||
id(new AphrontKeyboardShortcutsAvailableView())->render().
|
||||
'</div>';
|
||||
}
|
||||
|
||||
$prop_table = null;
|
||||
if ($this->properties) {
|
||||
$prop_table = array();
|
||||
foreach ($this->properties as $key => $value) {
|
||||
$prop_table[] =
|
||||
'<tr>'.
|
||||
'<th>'.phutil_escape_html($key.':').'</th>'.
|
||||
'<td>'.$value.'</td>'.
|
||||
'</tr>';
|
||||
}
|
||||
$prop_table =
|
||||
'<table class="aphront-headsup-property-table">'.
|
||||
implode("\n", $prop_table).
|
||||
'</table>';
|
||||
}
|
||||
|
||||
$children = $this->renderChildren();
|
||||
if (strlen($children)) {
|
||||
$children =
|
||||
'<div class="aphront-headsup-details">'.
|
||||
$children.
|
||||
'</div>';
|
||||
}
|
||||
|
||||
return
|
||||
'<div class="aphront-headsup-panel">'.
|
||||
self::renderSingleView($this->actionList).
|
||||
$shortcuts.
|
||||
'<div class="aphront-headsup-core">'.
|
||||
$header.
|
||||
$prop_table.
|
||||
$children.
|
||||
'</div>'.
|
||||
'</div>';
|
||||
}
|
||||
|
||||
}
|
17
src/view/layout/headsup/panel/__init__.php
Normal file
17
src/view/layout/headsup/panel/__init__.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
||||
phutil_require_module('phabricator', 'view/base');
|
||||
phutil_require_module('phabricator', 'view/widget/keyboardshortcuts');
|
||||
|
||||
phutil_require_module('phutil', 'markup');
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('AphrontHeadsupView.php');
|
|
@ -13,7 +13,7 @@
|
|||
background: #cfcfbf;
|
||||
border: 1px solid #666622;
|
||||
border-width: 0px 0px 1px 1px;
|
||||
margin: -15px -20px 1em 0;
|
||||
margin: -15px 0px 1em 0;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
|
|
55
webroot/rsrc/css/aphront/headsup.css
Normal file
55
webroot/rsrc/css/aphront/headsup.css
Normal file
|
@ -0,0 +1,55 @@
|
|||
/**
|
||||
* @provides aphront-headsup-view-css
|
||||
*/
|
||||
|
||||
.aphront-headsup-panel {
|
||||
border: 1px solid #666622;
|
||||
background: #efefdf;
|
||||
font-size: 13px;
|
||||
margin: .5em 2em .25em;
|
||||
padding: 15px 0 0;
|
||||
}
|
||||
|
||||
.aphront-headsup-panel h1 {
|
||||
border-bottom: 1px solid #aaaa99;
|
||||
|
||||
margin: 0 285px 8px 20px;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
.aphront-headsup-property-table {
|
||||
font-size: 12px;
|
||||
width: auto;
|
||||
margin: 0 285px 15px 20px;
|
||||
}
|
||||
|
||||
.aphront-headsup-property-table th {
|
||||
font-weight: bold;
|
||||
width: 100px;
|
||||
text-align: right;
|
||||
padding: 3px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.aphront-headsup-property-table td {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.aphront-headsup-details {
|
||||
clear: both;
|
||||
border-top: 1px solid #666622;
|
||||
background: #fbfbef;
|
||||
margin-top: 1em;
|
||||
padding: .75em 20px;
|
||||
}
|
||||
|
||||
.aphront-headsup-object-name {
|
||||
color: #666666;
|
||||
margin-right: 0.25em;
|
||||
}
|
||||
|
||||
.aphront-headsup-keyboard-shortcuts {
|
||||
float: right;
|
||||
margin-right: 20px;
|
||||
}
|
|
@ -2,32 +2,6 @@
|
|||
* @provides differential-revision-detail-css
|
||||
*/
|
||||
|
||||
.differential-revision-properties {
|
||||
font-size: 12px;
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
.differential-revision-properties tt {
|
||||
letter-spacing: 1.1px;
|
||||
}
|
||||
|
||||
.differential-revision-properties th {
|
||||
font-weight: bold;
|
||||
width: 120px;
|
||||
text-align: right;
|
||||
padding: 3px 4px 3px 3px;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.differential-revision-properties td {
|
||||
padding: 3px 2px;
|
||||
}
|
||||
|
||||
.differential-revision-detail-core {
|
||||
margin-right: 265px;
|
||||
}
|
||||
|
||||
.differential-unit-block,
|
||||
.differential-lint-block {
|
||||
padding: .5em;
|
||||
|
@ -92,7 +66,3 @@
|
|||
color: #ffff66;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.differential-keyboard-shortcuts {
|
||||
float: right;
|
||||
}
|
||||
|
|
|
@ -41,8 +41,3 @@
|
|||
.maniphest-task-detail-core {
|
||||
margin-right: 265px;
|
||||
}
|
||||
|
||||
.maniphest-task-detail-core .create-button-container {
|
||||
float:right;
|
||||
margin-top:-0.5em;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue