diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -7,12 +7,12 @@ */ return array( 'names' => array( - 'core.pkg.css' => '225e8ac7', + 'core.pkg.css' => 'a93de192', 'core.pkg.js' => '7d8faf57', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '7ba78475', 'differential.pkg.js' => 'd0cd0df6', - 'diffusion.pkg.css' => 'f45955ed', + 'diffusion.pkg.css' => 'dc8e0cc2', 'diffusion.pkg.js' => '3a9a8bfa', 'maniphest.pkg.css' => '4845691a', 'maniphest.pkg.js' => '949a7498', @@ -64,9 +64,9 @@ 'rsrc/css/application/differential/revision-history.css' => '0e8eb855', 'rsrc/css/application/differential/revision-list.css' => 'f3c47d33', 'rsrc/css/application/differential/table-of-contents.css' => 'ae4b7a55', - 'rsrc/css/application/diffusion/diffusion-icons.css' => '2941baf1', + 'rsrc/css/application/diffusion/diffusion-icons.css' => '3311444d', 'rsrc/css/application/diffusion/diffusion-readme.css' => '356a4f3c', - 'rsrc/css/application/diffusion/diffusion-source.css' => '075ba788', + 'rsrc/css/application/diffusion/diffusion-source.css' => '68b30fd3', 'rsrc/css/application/feed/feed.css' => 'ecd4ec57', 'rsrc/css/application/files/global-drag-and-drop.css' => '5c1b47c2', 'rsrc/css/application/flag/flag.css' => '5337623f', @@ -123,7 +123,7 @@ 'rsrc/css/phui/phui-action-panel.css' => '91c7b835', 'rsrc/css/phui/phui-badge.css' => 'f25c3476', 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', - 'rsrc/css/phui/phui-box.css' => '96a10c5d', + 'rsrc/css/phui/phui-box.css' => 'b2d49bae', 'rsrc/css/phui/phui-button.css' => 'a64a8de6', 'rsrc/css/phui/phui-chart.css' => '6bf6f78e', 'rsrc/css/phui/phui-crumbs-view.css' => '79d536e5', @@ -135,28 +135,28 @@ 'rsrc/css/phui/phui-fontkit.css' => '9cda225e', 'rsrc/css/phui/phui-form-view.css' => '4a1a0f5e', 'rsrc/css/phui/phui-form.css' => 'aac1d51d', - 'rsrc/css/phui/phui-head-thing.css' => '31638812', - 'rsrc/css/phui/phui-header-view.css' => '26cffd3d', + 'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f', + 'rsrc/css/phui/phui-header-view.css' => '230254d3', 'rsrc/css/phui/phui-hovercard.css' => 'de1a2119', 'rsrc/css/phui/phui-icon-set-selector.css' => '1ab67aad', 'rsrc/css/phui/phui-icon.css' => '3f33ab57', 'rsrc/css/phui/phui-image-mask.css' => 'a8498f9c', 'rsrc/css/phui/phui-info-panel.css' => '27ea50a1', - 'rsrc/css/phui/phui-info-view.css' => '6d7c3509', + 'rsrc/css/phui/phui-info-view.css' => '28efab79', 'rsrc/css/phui/phui-list.css' => '9da2aa00', 'rsrc/css/phui/phui-object-box.css' => '6b487c57', 'rsrc/css/phui/phui-object-item-list-view.css' => '18b2ce8e', 'rsrc/css/phui/phui-pager.css' => 'bea33d23', 'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', 'rsrc/css/phui/phui-profile-menu.css' => '7e92a89a', - 'rsrc/css/phui/phui-property-list-view.css' => 'b12e801c', + 'rsrc/css/phui/phui-property-list-view.css' => '1d42ee7c', 'rsrc/css/phui/phui-remarkup-preview.css' => '1a8f2591', 'rsrc/css/phui/phui-segment-bar-view.css' => '46342871', 'rsrc/css/phui/phui-spacing.css' => '042804d6', 'rsrc/css/phui/phui-status.css' => '37309046', 'rsrc/css/phui/phui-tag-view.css' => '6bbd83e2', 'rsrc/css/phui/phui-timeline-view.css' => 'a0173eba', - 'rsrc/css/phui/phui-two-column-view.css' => '61dd6d38', + 'rsrc/css/phui/phui-two-column-view.css' => 'c110d0c3', 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'ac6fe6a7', 'rsrc/css/phui/workboards/phui-workboard.css' => 'e6d89647', 'rsrc/css/phui/workboards/phui-workcard.css' => '3646fb96', @@ -553,9 +553,9 @@ 'differential-revision-history-css' => '0e8eb855', 'differential-revision-list-css' => 'f3c47d33', 'differential-table-of-contents-css' => 'ae4b7a55', - 'diffusion-icons-css' => '2941baf1', + 'diffusion-icons-css' => '3311444d', 'diffusion-readme-css' => '356a4f3c', - 'diffusion-source-css' => '075ba788', + 'diffusion-source-css' => '68b30fd3', 'diviner-shared-css' => 'aa3656aa', 'font-aleo' => '8bdb2835', 'font-fontawesome' => 'c43323c5', @@ -805,7 +805,7 @@ 'phui-action-panel-css' => '91c7b835', 'phui-badge-view-css' => 'f25c3476', 'phui-big-info-view-css' => 'bd903741', - 'phui-box-css' => '96a10c5d', + 'phui-box-css' => 'b2d49bae', 'phui-button-css' => 'a64a8de6', 'phui-calendar-css' => 'ccabe893', 'phui-calendar-day-css' => 'd1cf6f93', @@ -822,15 +822,15 @@ 'phui-fontkit-css' => '9cda225e', 'phui-form-css' => 'aac1d51d', 'phui-form-view-css' => '4a1a0f5e', - 'phui-head-thing-view-css' => '31638812', - 'phui-header-view-css' => '26cffd3d', + 'phui-head-thing-view-css' => 'fd311e5f', + 'phui-header-view-css' => '230254d3', 'phui-hovercard' => '1bd28176', 'phui-hovercard-view-css' => 'de1a2119', 'phui-icon-set-selector-css' => '1ab67aad', 'phui-icon-view-css' => '3f33ab57', 'phui-image-mask-css' => 'a8498f9c', 'phui-info-panel-css' => '27ea50a1', - 'phui-info-view-css' => '6d7c3509', + 'phui-info-view-css' => '28efab79', 'phui-inline-comment-view-css' => '5953c28e', 'phui-list-view-css' => '9da2aa00', 'phui-object-box-css' => '6b487c57', @@ -838,7 +838,7 @@ 'phui-pager-css' => 'bea33d23', 'phui-pinboard-view-css' => '2495140e', 'phui-profile-menu-css' => '7e92a89a', - 'phui-property-list-view-css' => 'b12e801c', + 'phui-property-list-view-css' => '1d42ee7c', 'phui-remarkup-preview-css' => '1a8f2591', 'phui-segment-bar-view-css' => '46342871', 'phui-spacing-css' => '042804d6', @@ -846,7 +846,7 @@ 'phui-tag-view-css' => '6bbd83e2', 'phui-theme-css' => '027ba77e', 'phui-timeline-view-css' => 'a0173eba', - 'phui-two-column-view-css' => '61dd6d38', + 'phui-two-column-view-css' => 'c110d0c3', 'phui-workboard-color-css' => 'ac6fe6a7', 'phui-workboard-view-css' => 'e6d89647', 'phui-workcard-view-css' => '3646fb96', diff --git a/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php b/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php --- a/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php +++ b/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php @@ -37,9 +37,11 @@ $color = 'red'; break; case self::NEEDS_AUDIT: - case self::PARTIALLY_AUDITED: $color = 'orange'; break; + case self::PARTIALLY_AUDITED: + $color = 'yellow'; + break; case self::FULLY_AUDITED: $color = 'green'; break; @@ -53,11 +55,11 @@ public static function getStatusIcon($code) { switch ($code) { case self::CONCERN_RAISED: - $icon = 'fa-exclamation-triangle'; + $icon = 'fa-exclamation-circle'; break; case self::NEEDS_AUDIT: case self::PARTIALLY_AUDITED: - $icon = 'fa-exclamation-triangle'; + $icon = 'fa-exclamation-circle'; break; case self::FULLY_AUDITED: $icon = 'fa-check'; diff --git a/src/applications/differential/constants/DifferentialChangeType.php b/src/applications/differential/constants/DifferentialChangeType.php --- a/src/applications/differential/constants/DifferentialChangeType.php +++ b/src/applications/differential/constants/DifferentialChangeType.php @@ -81,6 +81,21 @@ return idx($icons, $type, 'fa-file'); } + public static function getIconColorForFileType($type) { + static $icons = array( + self::FILE_TEXT => 'black', + self::FILE_IMAGE => 'black', + self::FILE_BINARY => 'green', + self::FILE_DIRECTORY => 'blue', + self::FILE_SYMLINK => 'blue', + self::FILE_DELETED => 'red', + self::FILE_NORMAL => 'black', + self::FILE_SUBMODULE => 'blue', + ); + + return idx($icons, $type, 'black'); + } + public static function isOldLocationChangeType($type) { static $types = array( self::TYPE_MOVE_AWAY => true, diff --git a/src/applications/differential/view/DifferentialChangesetListView.php b/src/applications/differential/view/DifferentialChangesetListView.php --- a/src/applications/differential/view/DifferentialChangesetListView.php +++ b/src/applications/differential/view/DifferentialChangesetListView.php @@ -9,6 +9,7 @@ private $renderURI = '/differential/changeset/'; private $whitespace; private $background; + private $header; private $standaloneURI; private $leftRawFileURI; @@ -118,6 +119,11 @@ return $this; } + public function setHeader($header) { + $this->header = $header; + return $this; + } + public function render() { $viewer = $this->getViewer(); @@ -246,8 +252,12 @@ )); } - $header = id(new PHUIHeaderView()) - ->setHeader($this->getTitle()); + if ($this->header) { + $header = $this->header; + } else { + $header = id(new PHUIHeaderView()) + ->setHeader($this->getTitle()); + } $content = phutil_tag( 'div', @@ -259,8 +269,8 @@ $object_box = id(new PHUIObjectBoxView()) ->setHeader($header) - ->setCollapsed(true) ->setBackground($this->background) + ->setCollapsed(true) ->appendChild($content); return $object_box; diff --git a/src/applications/diffusion/controller/DiffusionBranchTableController.php b/src/applications/diffusion/controller/DiffusionBranchTableController.php --- a/src/applications/diffusion/controller/DiffusionBranchTableController.php +++ b/src/applications/diffusion/controller/DiffusionBranchTableController.php @@ -48,26 +48,37 @@ ->withRepository($repository) ->execute(); - $view = id(new DiffusionBranchTableView()) + $table = id(new DiffusionBranchTableView()) ->setUser($viewer) ->setBranches($branches) ->setCommits($commits) ->setDiffusionRequest($drequest); - $panel = id(new PHUIObjectBoxView()) - ->setHeaderText(pht('Branches')) - ->setTable($view); - - $content = $panel; + $content = id(new PHUIObjectBoxView()) + ->setHeaderText($repository->getName()) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setTable($table); } $crumbs = $this->buildCrumbs( array( 'branches' => true, )); + $crumbs->setBorder(true); $pager_box = $this->renderTablePagerBox($pager); + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Branches')) + ->setHeaderIcon('fa-code-fork'); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $content, + $pager_box, + )); + return $this->newPage() ->setTitle( array( @@ -77,8 +88,7 @@ ->setCrumbs($crumbs) ->appendChild( array( - $content, - $pager_box, + $view, )); } diff --git a/src/applications/diffusion/controller/DiffusionBrowseController.php b/src/applications/diffusion/controller/DiffusionBrowseController.php --- a/src/applications/diffusion/controller/DiffusionBrowseController.php +++ b/src/applications/diffusion/controller/DiffusionBrowseController.php @@ -55,20 +55,17 @@ } private function browseSearch() { - $drequest = $this->getDiffusionRequest(); - - $actions = $this->buildActionView($drequest); - $properties = $this->buildPropertyView($drequest, $actions); - $object_box = id(new PHUIObjectBoxView()) - ->setHeader($this->buildHeaderView($drequest)) - ->addPropertyList($properties); + $drequest = $this->getDiffusionRequest(); + $header = $this->buildHeaderView($drequest); - $content = array(); + $search_form = $this->renderSearchForm(); + $search_results = $this->renderSearchResults(); - $content[] = $object_box; - $content[] = $this->renderSearchForm($collapsed = false); - $content[] = $this->renderSearchResults(); + $search_form = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Search')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->appendChild($search_form); $crumbs = $this->buildCrumbs( array( @@ -76,6 +73,14 @@ 'path' => true, 'view' => 'browse', )); + $crumbs->setBorder(true); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $search_form, + $search_results, + )); return $this->newPage() ->setTitle( @@ -84,7 +89,7 @@ $drequest->getRepository()->getDisplayName(), )) ->setCrumbs($crumbs) - ->appendChild($content); + ->appendChild($view); } private function browseFile() { @@ -218,20 +223,18 @@ require_celerity_resource('diffusion-source-css'); // Render the page. - $view = $this->buildActionView($drequest); - $action_list = $this->enrichActionView( + $view = $this->buildCurtain($drequest); + $curtain = $this->enrichCurtain( $view, $drequest, $show_blame, $show_color); - $properties = $this->buildPropertyView($drequest, $action_list); - $object_box = id(new PHUIObjectBoxView()) - ->setHeader($this->buildHeaderView($drequest)) - ->addPropertyList($properties); + $properties = $this->buildPropertyView($drequest); + $header = $this->buildHeaderView($drequest); + $header->setHeaderIcon('fa-file-code-o'); $content = array(); - $content[] = $object_box; $follow = $request->getStr('follow'); if ($follow) { @@ -277,17 +280,31 @@ 'path' => true, 'view' => 'browse', )); + $crumbs->setBorder(true); $basename = basename($this->getDiffusionRequest()->getPath()); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setCurtain($curtain) + ->setMainColumn(array( + $content, + )); + + if ($properties) { + $view->addPropertySection(pht('DETAILS'), $properties); + } + + $title = array($basename, $repository->getDisplayName()); + return $this->newPage() - ->setTitle( - array( - $basename, - $repository->getDisplayName(), - )) + ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($content); + ->appendChild( + array( + $view, + )); + } public function browseDirectory( @@ -300,23 +317,21 @@ $reason = $results->getReasonForEmptyResultSet(); - $content = array(); - $actions = $this->buildActionView($drequest); - $properties = $this->buildPropertyView($drequest, $actions); + $curtain = $this->buildCurtain($drequest); + $details = $this->buildPropertyView($drequest); - $object_box = id(new PHUIObjectBoxView()) - ->setHeader($this->buildHeaderView($drequest)) - ->addPropertyList($properties); + $header = $this->buildHeaderView($drequest); + $header->setHeaderIcon('fa-folder-open'); - $content[] = $object_box; - $content[] = $this->renderSearchForm($collapsed = true); + $search_form = $this->renderSearchForm(); + $empty_result = null; + $browse_panel = null; if (!$results->isValidResults()) { $empty_result = new DiffusionEmptyResultView(); $empty_result->setDiffusionRequest($drequest); $empty_result->setDiffusionBrowseResultSet($results); $empty_result->setView($request->getStr('view')); - $content[] = $empty_result; } else { $phids = array(); foreach ($results->getPaths() as $result) { @@ -331,21 +346,30 @@ $phids = array_keys($phids); $handles = $this->loadViewerHandles($phids); - $browse_table = new DiffusionBrowseTableView(); - $browse_table->setDiffusionRequest($drequest); - $browse_table->setHandles($handles); - $browse_table->setPaths($results->getPaths()); - $browse_table->setUser($request->getUser()); + $browse_table = id(new DiffusionBrowseTableView()) + ->setDiffusionRequest($drequest) + ->setHandles($handles) + ->setPaths($results->getPaths()) + ->setUser($request->getUser()); - $browse_panel = new PHUIObjectBoxView(); - $browse_panel->setHeaderText($drequest->getPath(), '/'); - $browse_panel->setTable($browse_table); + $browse_header = id(new PHUIHeaderView()) + ->setHeader(nonempty(basename($drequest->getPath()), '/')) + ->setHeaderIcon('fa-folder-open'); - $content[] = $browse_panel; + $browse_panel = id(new PHUIObjectBoxView()) + ->setHeader($browse_header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setTable($browse_table); + + $browse_panel->setShowHide( + array(pht('Show Search')), + pht('Hide Search'), + $search_form, + '#'); } - $content[] = $this->buildOpenRevisions(); - $content[] = $this->renderDirectoryReadme($results); + $open_revisions = $this->buildOpenRevisions(); + $readme = $this->renderDirectoryReadme($results); $crumbs = $this->buildCrumbs( array( @@ -355,18 +379,34 @@ )); $pager_box = $this->renderTablePagerBox($pager); + $crumbs->setBorder(true); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setCurtain($curtain) + ->setMainColumn(array( + $empty_result, + $browse_panel, + )) + ->setFooter(array( + $open_revisions, + $readme, + $pager_box, + )); + + if ($details) { + $view->addPropertySection(pht('DETAILS'), $details); + } return $this->newPage() - ->setTitle( - array( + ->setTitle(array( nonempty(basename($drequest->getPath()), '/'), $repository->getDisplayName(), )) ->setCrumbs($crumbs) ->appendChild( array( - $content, - $pager_box, + $view, )); } @@ -431,6 +471,7 @@ $box = id(new PHUIObjectBoxView()) ->setHeaderText($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setTable($table); $pager_box = $this->renderTablePagerBox($pager); @@ -697,12 +738,14 @@ $edit = $this->renderEditButton(); $file = $this->renderFileButton(); $header = id(new PHUIHeaderView()) - ->setHeader(pht('File Contents')) + ->setHeader(basename($this->getDiffusionRequest()->getPath())) + ->setHeaderIcon('fa-file-code-o') ->addActionLink($edit) ->addActionLink($file); $corpus = id(new PHUIObjectBoxView()) ->setHeader($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->appendChild($corpus) ->setCollapsed(true); @@ -737,16 +780,16 @@ return $corpus; } - private function enrichActionView( - PhabricatorActionListView $view, + private function enrichCurtain( + PHUICurtainView $curtain, DiffusionRequest $drequest, $show_blame, $show_color) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $base_uri = $this->getRequest()->getRequestURI(); - $view->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName(pht('Show Last Change')) ->setHref( @@ -766,7 +809,7 @@ $blame_value = 1; } - $view->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName($blame_text) ->setHref($base_uri->alter('blame', $blame_value)) @@ -784,7 +827,7 @@ $highlight_value = 1; } - $view->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName($highlight_text) ->setHref($base_uri->alter('color', $highlight_value)) @@ -809,14 +852,57 @@ ))->alter('lint', ''); } - $view->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName($lint_text) ->setHref($href) ->setIcon('fa-exclamation-triangle') ->setDisabled(!$href)); - return $view; + + $repository = $drequest->getRepository(); + + $owners = 'PhabricatorOwnersApplication'; + if (PhabricatorApplication::isClassInstalled($owners)) { + $package_query = id(new PhabricatorOwnersPackageQuery()) + ->setViewer($viewer) + ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) + ->withControl( + $repository->getPHID(), + array( + $drequest->getPath(), + )); + + $package_query->execute(); + + $packages = $package_query->getControllingPackagesForPath( + $repository->getPHID(), + $drequest->getPath()); + + if ($packages) { + $ownership = id(new PHUIStatusListView()) + ->setUser($viewer); + + foreach ($packages as $package) { + $icon = 'fa-list-alt'; + $color = 'grey'; + + $item = id(new PHUIStatusItemView()) + ->setIcon($icon, $color) + ->setTarget($viewer->renderHandle($package->getPHID())); + + $ownership->addItem($item); + } + } else { + $ownership = phutil_tag('em', array(), pht('None')); + } + + $curtain->newPanel() + ->setHeaderText(pht('Owners')) + ->appendChild($ownership); + } + + return $curtain; } private function renderEditButton() { @@ -1265,11 +1351,13 @@ $file = $this->renderFileButton($file_uri); $header = id(new PHUIHeaderView()) - ->setHeader(pht('Image')) - ->addActionLink($file); + ->setHeader(basename($this->getDiffusionRequest()->getPath())) + ->addActionLink($file) + ->setHeaderIcon('fa-file-image-o'); return id(new PHUIObjectBoxView()) ->setHeader($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($properties); } @@ -1282,11 +1370,12 @@ $file = $this->renderFileButton($file_uri); $header = id(new PHUIHeaderView()) - ->setHeader(pht('Details')) + ->setHeader(pht('DETAILS')) ->addActionLink($file); $box = id(new PHUIObjectBoxView()) ->setHeader($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->appendChild($text); return $box; @@ -1298,7 +1387,7 @@ ->appendChild($message); $header = id(new PHUIHeaderView()) - ->setHeader(pht('Details')); + ->setHeader(pht('DETAILS')); $box = id(new PHUIObjectBoxView()) ->setHeader($header) @@ -1461,12 +1550,12 @@ return "{$summary}\n{$date} \xC2\xB7 {$author}"; } - protected function renderSearchForm($collapsed) { + protected function renderSearchForm() { $drequest = $this->getDiffusionRequest(); $forms = array(); $form = id(new AphrontFormView()) - ->setUser($this->getRequest()->getUser()) + ->setUser($this->getViewer()) ->setMethod('GET'); switch ($drequest->getRepository()->getVersionControlSystem()) { @@ -1492,22 +1581,10 @@ break; } - $filter = new AphrontListFilterView(); - $filter->appendChild($forms); - - if ($collapsed) { - $filter->setCollapsed( - pht('Show Search'), - pht('Hide Search'), - pht('Search for file names or content in this directory.'), - '#'); - } + require_celerity_resource('diffusion-icons-css'); + $form_box = phutil_tag_div('diffusion-search-boxen', $forms); - $filter = id(new PHUIBoxView()) - ->addClass('mlt mlb') - ->appendChild($filter); - - return $filter; + return $form_box; } protected function markupText($text) { @@ -1526,28 +1603,29 @@ } protected function buildHeaderView(DiffusionRequest $drequest) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); + + $tag = $this->renderCommitHashTag($drequest); $header = id(new PHUIHeaderView()) ->setUser($viewer) ->setHeader($this->renderPathLinks($drequest, $mode = 'browse')) - ->setPolicyObject($drequest->getRepository()); + ->addTag($tag); return $header; } - protected function buildActionView(DiffusionRequest $drequest) { - $viewer = $this->getRequest()->getUser(); + protected function buildCurtain(DiffusionRequest $drequest) { + $viewer = $this->getViewer(); - $view = id(new PhabricatorActionListView()) - ->setUser($viewer); + $curtain = $this->newCurtainView($drequest); $history_uri = $drequest->generateURI( array( 'action' => 'history', )); - $view->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName(pht('View History')) ->setHref($history_uri) @@ -1559,40 +1637,22 @@ 'commit' => '', 'action' => 'browse', )); - $view->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName(pht('Jump to HEAD')) ->setHref($head_uri) ->setIcon('fa-home') ->setDisabled(!$behind_head)); - return $view; + return $curtain; } protected function buildPropertyView( - DiffusionRequest $drequest, - PhabricatorActionListView $actions) { + DiffusionRequest $drequest) { $viewer = $this->getViewer(); - $view = id(new PHUIPropertyListView()) - ->setUser($viewer) - ->setActionList($actions); - - $stable_commit = $drequest->getStableCommit(); - - $view->addProperty( - pht('Commit'), - phutil_tag( - 'a', - array( - 'href' => $drequest->generateURI( - array( - 'action' => 'commit', - 'commit' => $stable_commit, - )), - ), - $drequest->getRepository()->formatCommitName($stable_commit))); + ->setUser($viewer); if ($drequest->getSymbolicType() == 'tag') { $symbolic = $drequest->getSymbolicCommit(); @@ -1616,47 +1676,11 @@ } } - $repository = $drequest->getRepository(); - - $owners = 'PhabricatorOwnersApplication'; - if (PhabricatorApplication::isClassInstalled($owners)) { - $package_query = id(new PhabricatorOwnersPackageQuery()) - ->setViewer($viewer) - ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) - ->withControl( - $repository->getPHID(), - array( - $drequest->getPath(), - )); - - $package_query->execute(); - - $packages = $package_query->getControllingPackagesForPath( - $repository->getPHID(), - $drequest->getPath()); - - if ($packages) { - $ownership = id(new PHUIStatusListView()) - ->setUser($viewer); - - foreach ($packages as $package) { - $icon = 'fa-list-alt'; - $color = 'grey'; - - $item = id(new PHUIStatusItemView()) - ->setIcon($icon, $color) - ->setTarget($viewer->renderHandle($package->getPHID())); - - $ownership->addItem($item); - } - } else { - $ownership = phutil_tag('em', array(), pht('None')); - } - - $view->addProperty(pht('Packages'), $ownership); + if ($view->hasAnyProperties()) { + return $view; } - return $view; + return null; } private function buildOpenRevisions() { diff --git a/src/applications/diffusion/controller/DiffusionChangeController.php b/src/applications/diffusion/controller/DiffusionChangeController.php --- a/src/applications/diffusion/controller/DiffusionChangeController.php +++ b/src/applications/diffusion/controller/DiffusionChangeController.php @@ -15,8 +15,6 @@ $viewer = $this->getViewer(); $drequest = $this->getDiffusionRequest(); - $content = array(); - $data = $this->callConduitWithDiffusionRequest( 'diffusion.diffquery', array( @@ -42,9 +40,11 @@ 0 => $changeset, ); + $changeset_header = $this->buildChangesetHeader($drequest); + $changeset_view = new DifferentialChangesetListView(); - $changeset_view->setTitle(pht('Change')); $changeset_view->setChangesets($changesets); + $changeset_view->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); $changeset_view->setVisibleChangesets($changesets); $changeset_view->setRenderingReferences( array( @@ -68,11 +68,11 @@ $changeset_view->setWhitespace( DifferentialChangesetParser::WHITESPACE_SHOW_ALL); $changeset_view->setUser($viewer); + $changeset_view->setHeader($changeset_header); // TODO: This is pretty awkward, unify the CSS between Diffusion and // Differential better. require_celerity_resource('differential-core-view-css'); - $content[] = $changeset_view->render(); $crumbs = $this->buildCrumbs( array( @@ -80,19 +80,18 @@ 'path' => true, 'view' => 'change', )); + $crumbs->setBorder(true); $links = $this->renderPathLinks($drequest, $mode = 'browse'); + $header = $this->buildHeader($drequest, $links); - $header = id(new PHUIHeaderView()) - ->setHeader($links) - ->setUser($viewer) - ->setPolicyObject($drequest->getRepository()); - $actions = $this->buildActionView($drequest); - $properties = $this->buildPropertyView($drequest, $actions); - - $object_box = id(new PHUIObjectBoxView()) + $view = id(new PHUITwoColumnView()) ->setHeader($header) - ->addPropertyList($properties); + ->setMainColumn(array( + )) + ->setFooter(array( + $changeset_view, + )); return $this->newPage() ->setTitle( @@ -103,25 +102,41 @@ ->setCrumbs($crumbs) ->appendChild( array( - $object_box, - $content, + $view, )); } - private function buildActionView(DiffusionRequest $drequest) { - $viewer = $this->getRequest()->getUser(); + private function buildHeader( + DiffusionRequest $drequest, + $links) { + $viewer = $this->getViewer(); - $view = id(new PhabricatorActionListView()) - ->setUser($viewer); + $tag = $this->renderCommitHashTag($drequest); + + $header = id(new PHUIHeaderView()) + ->setHeader($links) + ->setUser($viewer) + ->setPolicyObject($drequest->getRepository()) + ->addTag($tag); + + return $header; + } + + private function buildChangesetHeader(DiffusionRequest $drequest) { + $viewer = $this->getViewer(); + + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Changes')); $history_uri = $drequest->generateURI( array( 'action' => 'history', )); - $view->addAction( - id(new PhabricatorActionView()) - ->setName(pht('View History')) + $header->addActionLink( + id(new PHUIButtonView()) + ->setTag('a') + ->setText(pht('View History')) ->setHref($history_uri) ->setIcon('fa-clock-o')); @@ -130,13 +145,14 @@ 'action' => 'browse', )); - $view->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Browse Content')) + $header->addActionLink( + id(new PHUIButtonView()) + ->setTag('a') + ->setText(pht('Browse Content')) ->setHref($browse_uri) ->setIcon('fa-files-o')); - return $view; + return $header; } protected function buildPropertyView( diff --git a/src/applications/diffusion/controller/DiffusionCommitController.php b/src/applications/diffusion/controller/DiffusionCommitController.php --- a/src/applications/diffusion/controller/DiffusionCommitController.php +++ b/src/applications/diffusion/controller/DiffusionCommitController.php @@ -24,8 +24,7 @@ } $drequest = $this->getDiffusionRequest(); - - $user = $request->getUser(); + $viewer = $request->getUser(); if ($request->getStr('diff')) { return $this->buildRawDiffResponse($drequest); @@ -33,9 +32,8 @@ $repository = $drequest->getRepository(); - $content = array(); $commit = id(new DiffusionCommitQuery()) - ->setViewer($request->getUser()) + ->setViewer($viewer) ->withRepository($repository) ->withIdentifiers(array($drequest->getCommit())) ->needCommitData(true) @@ -45,6 +43,7 @@ $crumbs = $this->buildCrumbs(array( 'commit' => true, )); + $crumbs->setBorder(true); if (!$commit) { if (!$this->getCommitExists()) { @@ -70,10 +69,11 @@ $audit_requests = $commit->getAudits(); $this->auditAuthorityPHIDs = - PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($user); + PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer); $commit_data = $commit->getCommitData(); $is_foreign = $commit_data->getCommitDetail('foreign-svn-stub'); + $error_panel = null; if ($is_foreign) { $subpath = $commit_data->getCommitDetail('svn-subpath'); @@ -87,43 +87,41 @@ "didn't affect the tracked subdirectory ('%s'), so no ". "information is available.", $subpath)); - $content[] = $error_panel; } else { $engine = PhabricatorMarkupEngine::newDifferentialMarkupEngine(); - $engine->setConfig('viewer', $user); + $engine->setConfig('viewer', $viewer); - $headsup_view = id(new PHUIHeaderView()) + $commit_tag = $this->renderCommitHashTag($drequest); + $header = id(new PHUIHeaderView()) ->setHeader(nonempty($commit->getSummary(), pht('Commit Detail'))) - ->setSubheader(pht('Commit: %s', $commit->getCommitIdentifier())); - - $headsup_actions = $this->renderHeadsupActionList($commit, $repository); + ->setHeaderIcon('fa-code-fork') + ->addTag($commit_tag); + + if ($commit->getAuditStatus()) { + $icon = PhabricatorAuditCommitStatusConstants::getStatusIcon( + $commit->getAuditStatus()); + $color = PhabricatorAuditCommitStatusConstants::getStatusColor( + $commit->getAuditStatus()); + $status = PhabricatorAuditCommitStatusConstants::getStatusName( + $commit->getAuditStatus()); + + $header->setStatus($icon, $color, $status); + } - $commit_properties = $this->loadCommitProperties( + $curtain = $this->buildCurtain($commit, $repository); + $subheader = $this->buildSubheaderView($commit, $commit_data); + $details = $this->buildPropertyListView( $commit, $commit_data, $audit_requests); - $property_list = id(new PHUIPropertyListView()) - ->setHasKeyboardShortcuts(true) - ->setUser($user) - ->setObject($commit); - foreach ($commit_properties as $key => $value) { - $property_list->addProperty($key, $value); - } $message = $commit_data->getCommitMessage(); $revision = $commit->getCommitIdentifier(); $message = $this->linkBugtraq($message); - $message = $engine->markupText($message); - $property_list->invokeWillRenderEvent(); - $property_list->setActionList($headsup_actions); - $detail_list = new PHUIPropertyListView(); - $detail_list->addSectionHeader( - pht('Description'), - PHUIPropertyListView::ICON_SUMMARY); $detail_list->addTextContent( phutil_tag( 'div', @@ -132,19 +130,14 @@ ), $message)); - $headsup_view->setTall(true); - - $object_box = id(new PHUIObjectBoxView()) - ->setHeader($headsup_view) - ->setFormErrors($this->getCommitErrors()) - ->addPropertyList($property_list) - ->addPropertyList($detail_list); - - $content[] = $object_box; + if ($this->getCommitErrors()) { + $error_panel = id(new PHUIInfoView()) + ->appendChild($this->getCommitErrors()) + ->setSeverity(PHUIInfoView::SEVERITY_WARNING); + } } - $content[] = $this->buildComments($commit); - + $timeline = $this->buildComments($commit); $hard_limit = 1000; if ($commit->isImported()) { @@ -161,10 +154,10 @@ $changes = array_slice($changes, 0, $hard_limit); } - $content[] = $this->buildMergesTable($commit); + $merge_table = $this->buildMergesTable($commit); $highlighted_audits = $commit->getAuthorityAudits( - $user, + $viewer, $this->auditAuthorityPHIDs); $count = count($changes); @@ -179,32 +172,35 @@ } $show_changesets = false; + $info_panel = null; + $change_list = null; + $change_table = null; if ($bad_commit) { - $content[] = $this->renderStatusMessage( + $info_panel = $this->renderStatusMessage( pht('Bad Commit'), $bad_commit['description']); } else if ($is_foreign) { // Don't render anything else. } else if (!$commit->isImported()) { - $content[] = $this->renderStatusMessage( + $info_panel = $this->renderStatusMessage( pht('Still Importing...'), pht( 'This commit is still importing. Changes will be visible once '. 'the import finishes.')); } else if (!count($changes)) { - $content[] = $this->renderStatusMessage( + $info_panel = $this->renderStatusMessage( pht('Empty Commit'), pht( 'This commit is empty and does not affect any paths.')); } else if ($was_limited) { - $content[] = $this->renderStatusMessage( + $info_panel = $this->renderStatusMessage( pht('Enormous Commit'), pht( 'This commit is enormous, and affects more than %d files. '. 'Changes are not shown.', $hard_limit)); } else if (!$this->getCommitExists()) { - $content[] = $this->renderStatusMessage( + $info_panel = $this->renderStatusMessage( pht('Commit No Longer Exists'), pht('This commit no longer exists in the repository.')); } else { @@ -214,7 +210,7 @@ // changes inline even if there are more than the soft limit. $show_all_details = $request->getBool('show_all'); - $header = id(new PHUIHeaderView()) + $change_header = id(new PHUIHeaderView()) ->setHeader(pht('Changes (%s)', new PhutilNumber($count))); $warning_view = null; @@ -228,24 +224,23 @@ $warning_view = id(new PHUIInfoView()) ->setSeverity(PHUIInfoView::SEVERITY_WARNING) ->setTitle(pht('Very Large Commit')) - ->addButton($button) ->appendChild( pht('This commit is very large. Load each file individually.')); + + $change_header->addActionLink($button); } $changesets = DiffusionPathChange::convertToDifferentialChangesets( - $user, + $viewer, $changes); // TODO: This table and panel shouldn't really be separate, but we need // to clean up the "Load All Files" interaction first. $change_table = $this->buildTableOfContents( $changesets, - $header, + $change_header, $warning_view); - $content[] = $change_table; - $vcs = $repository->getVersionControlSystem(); switch ($vcs) { case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: @@ -291,7 +286,7 @@ } else { $visible_changesets = array(); $inlines = PhabricatorAuditInlineComment::loadDraftAndPublishedComments( - $user, + $viewer, $commit->getPHID()); $path_ids = mpull($inlines, null, 'getPathID'); foreach ($changesets as $key => $changeset) { @@ -308,10 +303,10 @@ $change_list->setChangesets($changesets); $change_list->setVisibleChangesets($visible_changesets); $change_list->setRenderingReferences($references); - $change_list->setRenderURI( - $repository->getPathURI('diff/')); + $change_list->setRenderURI($repository->getPathURI('diff/')); $change_list->setRepository($repository); - $change_list->setUser($user); + $change_list->setUser($viewer); + $change_list->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); // TODO: Try to setBranch() to something reasonable here? @@ -327,48 +322,74 @@ $change_list->setInlineCommentControllerURI( '/diffusion/inline/edit/'.phutil_escape_uri($commit->getPHID()).'/'); - $content[] = $change_list->render(); } - $content[] = $this->renderAddCommentPanel($commit, $audit_requests); + $add_comment = $this->renderAddCommentPanel($commit, $audit_requests); - $prefs = $user->loadPreferences(); + $prefs = $viewer->loadPreferences(); $pref_filetree = PhabricatorUserPreferences::PREFERENCE_DIFF_FILETREE; $pref_collapse = PhabricatorUserPreferences::PREFERENCE_NAV_COLLAPSED; $show_filetree = $prefs->getPreference($pref_filetree); $collapsed = $prefs->getPreference($pref_collapse); + $nav = null; if ($show_changesets && $show_filetree) { $nav = id(new DifferentialChangesetFileTreeSideNavBuilder()) ->setTitle($commit->getDisplayName()) ->setBaseURI(new PhutilURI($commit->getURI())) ->build($changesets) ->setCrumbs($crumbs) - ->setCollapsed((bool)$collapsed) - ->appendChild($content); - $content = $nav; - } else { - $content = array($crumbs, $content); + ->setCollapsed((bool)$collapsed); } - return $this->buildApplicationPage( - $content, - array( - 'title' => $commit->getDisplayName(), - 'pageObjects' => array($commit->getPHID()), + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setSubheader($subheader) + ->setMainColumn(array( + $error_panel, + $timeline, + $merge_table, + $info_panel, + )) + ->setFooter(array( + $change_table, + $change_list, + $add_comment, + )) + ->addPropertySection(pht('DESCRIPTION'), $detail_list) + ->addPropertySection(pht('DETAILS'), $details) + ->setCurtain($curtain); + + $page = $this->newPage() + ->setTitle($commit->getDisplayName()) + ->setCrumbs($crumbs) + ->setPageObjectPHIDS(array($commit->getPHID())) + ->appendChild( + array( + $view, )); + + if ($nav) { + $page->setNavigation($nav); + } + + return $page; + } - private function loadCommitProperties( + private function buildPropertyListView( PhabricatorRepositoryCommit $commit, PhabricatorRepositoryCommitData $data, array $audit_requests) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $commit_phid = $commit->getPHID(); $drequest = $this->getDiffusionRequest(); $repository = $drequest->getRepository(); + $view = id(new PHUIPropertyListView()) + ->setUser($this->getRequest()->getUser()); + $edge_query = id(new PhabricatorEdgeQuery()) ->withSourcePHIDs(array($commit_phid)) ->withEdgeTypes(array( @@ -432,31 +453,6 @@ $props = array(); - if ($commit->getAuditStatus()) { - $status = PhabricatorAuditCommitStatusConstants::getStatusName( - $commit->getAuditStatus()); - $tag = id(new PHUITagView()) - ->setType(PHUITagView::TYPE_STATE) - ->setName($status); - - switch ($commit->getAuditStatus()) { - case PhabricatorAuditCommitStatusConstants::NEEDS_AUDIT: - $tag->setBackgroundColor(PHUITagView::COLOR_ORANGE); - break; - case PhabricatorAuditCommitStatusConstants::CONCERN_RAISED: - $tag->setBackgroundColor(PHUITagView::COLOR_RED); - break; - case PhabricatorAuditCommitStatusConstants::PARTIALLY_AUDITED: - $tag->setBackgroundColor(PHUITagView::COLOR_BLUE); - break; - case PhabricatorAuditCommitStatusConstants::FULLY_AUDITED: - $tag->setBackgroundColor(PHUITagView::COLOR_GREEN); - break; - } - - $props['Status'] = $tag; - } - if ($audit_requests) { $user_requests = array(); $other_requests = array(); @@ -469,37 +465,21 @@ } if ($user_requests) { - $props['Auditors'] = $this->renderAuditStatusView( - $user_requests); + $view->addProperty( + pht('Auditors'), + $this->renderAuditStatusView($user_requests)); } if ($other_requests) { - $props['Project/Package Auditors'] = $this->renderAuditStatusView( - $other_requests); + $view->addProperty( + pht('Project/Package Auditors'), + $this->renderAuditStatusView($other_requests)); } } $author_phid = $data->getCommitDetail('authorPHID'); $author_name = $data->getAuthorName(); - - if (!$repository->isSVN()) { - $authored_info = id(new PHUIStatusItemView()); - - $author_epoch = $data->getCommitDetail('authorEpoch'); - if ($author_epoch !== null) { - $authored_info->setNote( - phabricator_datetime($author_epoch, $viewer)); - } - - if ($author_phid) { - $authored_info->setTarget($handles[$author_phid]->renderLink()); - } else if (strlen($author_name)) { - $authored_info->setTarget($author_name); - } - - $props['Authored'] = id(new PHUIStatusListView()) - ->addItem($authored_info); - } + $author_epoch = $data->getCommitDetail('authorEpoch'); $committed_info = id(new PHUIStatusItemView()) ->setNote(phabricator_datetime($commit->getEpoch(), $viewer)); @@ -516,8 +496,9 @@ $committed_info->setTarget($author_name); } - $props['Committed'] = id(new PHUIStatusListView()) - ->addItem($committed_info); + $view->addProperty( + pht('Committed'), + $committed_info); if ($push_logs) { $pushed_list = new PHUIStatusListView(); @@ -529,36 +510,49 @@ $pushed_list->addItem($pushed_item); } - $props['Pushed'] = $pushed_list; + $view->addProperty( + pht('Pushed'), + $pushed_list); } $reviewer_phid = $data->getCommitDetail('reviewerPHID'); if ($reviewer_phid) { - $props['Reviewer'] = $handles[$reviewer_phid]->renderLink(); + $view->addProperty( + pht('Reviewer'), + $handles[$reviewer_phid]->renderLink()); } if ($revision_phid) { - $props['Differential Revision'] = $handles[$revision_phid]->renderLink(); + $view->addProperty( + pht('Differential Revision'), + $handles[$revision_phid]->renderLink()); } $parents = $this->getCommitParents(); if ($parents) { - $props['Parents'] = $viewer->renderHandleList(mpull($parents, 'getPHID')); + $view->addProperty( + pht('Parents'), + $viewer->renderHandleList(mpull($parents, 'getPHID'))); } if ($this->getCommitExists()) { - $props['Branches'] = phutil_tag( + $view->addProperty( + pht('Branches'), + phutil_tag( 'span', array( 'id' => 'commit-branches', ), - pht('Unknown')); - $props['Tags'] = phutil_tag( + pht('Unknown'))); + + $view->addProperty( + pht('Tags'), + phutil_tag( 'span', array( 'id' => 'commit-tags', ), - pht('Unknown')); + pht('Unknown'))); $identifier = $commit->getCommitIdentifier(); $root = $repository->getPathURI("commit/{$identifier}"); @@ -581,16 +575,21 @@ ), $ref_data['ref']); } - $props['References'] = phutil_implode_html(', ', $ref_links); + $view->addProperty( + pht('References'), + phutil_implode_html(', ', $ref_links)); } if ($reverts_phids) { - $props[pht('Reverts')] = $viewer->renderHandleList($reverts_phids); + $view->addProperty( + pht('Reverts'), + $viewer->renderHandleList($reverts_phids)); } if ($reverted_by_phids) { - $props[pht('Reverted By')] = $viewer->renderHandleList( - $reverted_by_phids); + $view->addProperty( + pht('Reverted By'), + $viewer->renderHandleList($reverted_by_phids)); } if ($task_phids) { @@ -599,12 +598,60 @@ $task_list[] = $handles[$phid]->renderLink(); } $task_list = phutil_implode_html(phutil_tag('br'), $task_list); - $props['Tasks'] = $task_list; + $view->addProperty( + pht('Tasks'), + $task_list); } - return $props; + return $view; } + private function buildSubheaderView( + PhabricatorRepositoryCommit $commit, + PhabricatorRepositoryCommitData $data) { + + $viewer = $this->getViewer(); + $drequest = $this->getDiffusionRequest(); + $repository = $drequest->getRepository(); + + if ($repository->isSVN()) { + return null; + } + + $author_phid = $data->getCommitDetail('authorPHID'); + $author_name = $data->getAuthorName(); + $author_epoch = $data->getCommitDetail('authorEpoch'); + $date = null; + if ($author_epoch !== null) { + $date = phabricator_datetime($author_epoch, $viewer); + } + + if ($author_phid) { + $handles = $viewer->loadHandles(array($author_phid)); + $image_uri = $handles[$author_phid]->getImageURI(); + $image_href = $handles[$author_phid]->getURI(); + $author = $handles[$author_phid]->renderLink(); + } else if (strlen($author_name)) { + $author = $author_name; + $image_uri = null; + $image_href = null; + } + + $author = phutil_tag('strong', array(), $author); + if ($date) { + $content = pht('Authored by %s on %s.', $author, $date); + } else { + $content = pht('Authored by %s.', $author); + } + + return id(new PHUIHeadThingView()) + ->setImage($image_uri) + ->setImageHref($image_href) + ->setContent($content); + + } + + private function buildComments(PhabricatorRepositoryCommit $commit) { $timeline = $this->buildTransactionTimeline( $commit, @@ -619,11 +666,11 @@ assert_instances_of($audit_requests, 'PhabricatorRepositoryAuditRequest'); $request = $this->getRequest(); - $user = $request->getUser(); + $viewer = $request->getUser(); - if (!$user->isLoggedIn()) { + if (!$viewer->isLoggedIn()) { return id(new PhabricatorApplicationTransactionCommentView()) - ->setUser($user) + ->setUser($viewer) ->setRequestURI($request->getRequestURI()); } @@ -638,7 +685,7 @@ $draft = id(new PhabricatorDraft())->loadOneWhere( 'authorPHID = %s AND draftKey = %s', - $user->getPHID(), + $viewer->getPHID(), 'diffusion-audit-'.$commit->getID()); if ($draft) { $draft = $draft->getDraft(); @@ -652,7 +699,7 @@ $auditor_source = new DiffusionAuditorDatasource(); $form = id(new AphrontFormView()) - ->setUser($user) + ->setUser($viewer) ->setAction('/audit/addcomment/') ->addHiddenInput('commit', $commit->getPHID()) ->appendChild( @@ -685,7 +732,7 @@ ->setName('content') ->setValue($draft) ->setID('audit-content') - ->setUser($user)) + ->setUser($viewer)) ->appendChild( id(new AphrontFormSubmitControl()) ->setValue(pht('Submit'))); @@ -771,13 +818,13 @@ PhabricatorRepositoryCommit $commit, array $audit_requests) { assert_instances_of($audit_requests, 'PhabricatorRepositoryAuditRequest'); - $user = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); - $user_is_author = ($commit->getAuthorPHID() == $user->getPHID()); + $user_is_author = ($commit->getAuthorPHID() == $viewer->getPHID()); $user_request = null; foreach ($audit_requests as $audit_request) { - if ($audit_request->getAuditorPHID() == $user->getPHID()) { + if ($audit_request->getAuditorPHID() == $viewer->getPHID()) { $user_request = $audit_request; break; } @@ -871,9 +918,10 @@ $history_table->loadRevisions(); - $panel = new PHUIObjectBoxView(); - $panel->setHeaderText(pht('Merged Changes')); - $panel->setTable($history_table); + $panel = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Merged Changes')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setTable($history_table); if ($caption) { $panel->setInfoView($caption); } @@ -881,19 +929,16 @@ return $panel; } - private function renderHeadsupActionList( + private function buildCurtain( PhabricatorRepositoryCommit $commit, PhabricatorRepository $repository) { $request = $this->getRequest(); - $user = $request->getUser(); - - $actions = id(new PhabricatorActionListView()) - ->setUser($user) - ->setObject($commit); + $viewer = $this->getViewer(); + $curtain = $this->newCurtainView($commit); $can_edit = PhabricatorPolicyFilter::hasCapability( - $user, + $viewer, $commit, PhabricatorPolicyCapability::CAN_EDIT); @@ -906,7 +951,7 @@ ->setIcon('fa-pencil') ->setDisabled(!$can_edit) ->setWorkflow(!$can_edit); - $actions->addAction($action); + $curtain->addAction($action); require_celerity_resource('phabricator-object-selector-css'); require_celerity_resource('javelin-behavior-phabricator-object-selector'); @@ -919,16 +964,16 @@ ->setHref('/search/attach/'.$commit->getPHID().'/TASK/edge/') ->setWorkflow(true) ->setDisabled(!$can_edit); - $actions->addAction($action); + $curtain->addAction($action); } $action = id(new PhabricatorActionView()) ->setName(pht('Download Raw Diff')) ->setHref($request->getRequestURI()->alter('diff', true)) ->setIcon('fa-download'); - $actions->addAction($action); + $curtain->addAction($action); - return $actions; + return $curtain; } private function buildRawDiffResponse(DiffusionRequest $drequest) { @@ -1022,7 +1067,8 @@ $toc_view = id(new PHUIDiffTableOfContentsListView()) ->setUser($viewer) - ->setHeader($header); + ->setHeader($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); if ($info_view) { $toc_view->setInfoView($info_view); diff --git a/src/applications/diffusion/controller/DiffusionController.php b/src/applications/diffusion/controller/DiffusionController.php --- a/src/applications/diffusion/controller/DiffusionController.php +++ b/src/applications/diffusion/controller/DiffusionController.php @@ -291,6 +291,7 @@ return id(new PHUIInfoView()) ->setSeverity(PHUIInfoView::SEVERITY_WARNING) ->setTitle($title) + ->setFlush(true) ->appendChild($body); } @@ -300,6 +301,27 @@ ->appendChild($pager); } + protected function renderCommitHashTag(DiffusionRequest $drequest) { + $stable_commit = $drequest->getStableCommit(); + $commit = phutil_tag( + 'a', + array( + 'href' => $drequest->generateURI( + array( + 'action' => 'commit', + 'commit' => $stable_commit, + )), + ), + $drequest->getRepository()->formatCommitName($stable_commit, true)); + + $tag = id(new PHUITagView()) + ->setName($commit) + ->setShade('indigo') + ->setType(PHUITagView::TYPE_SHADE); + + return $tag; + } + protected function renderDirectoryReadme(DiffusionBrowseResultSet $browse) { $readme_path = $browse->getReadmePath(); if ($readme_path === null) { diff --git a/src/applications/diffusion/controller/DiffusionHistoryController.php b/src/applications/diffusion/controller/DiffusionHistoryController.php --- a/src/applications/diffusion/controller/DiffusionHistoryController.php +++ b/src/applications/diffusion/controller/DiffusionHistoryController.php @@ -40,8 +40,6 @@ $history = $pager->sliceResults($history); $show_graph = !strlen($drequest->getPath()); - $content = array(); - $history_table = id(new DiffusionHistoryTableView()) ->setUser($request->getUser()) ->setDiffusionRequest($drequest) @@ -55,23 +53,13 @@ $history_table->setIsTail(!$pager->getHasMorePages()); } - $history_panel = new PHUIObjectBoxView(); - $history_panel->setHeaderText(pht('History')); - $history_panel->setTable($history_table); - - $content[] = $history_panel; + $history_header = $this->buildHistoryHeader($drequest); + $history_panel = id(new PHUIObjectBoxView()) + ->setHeader($history_header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setTable($history_table); - $header = id(new PHUIHeaderView()) - ->setUser($viewer) - ->setPolicyObject($repository) - ->setHeader($this->renderPathLinks($drequest, $mode = 'history')); - - $actions = $this->buildActionView($drequest); - $properties = $this->buildPropertyView($drequest, $actions); - - $object_box = id(new PHUIObjectBoxView()) - ->setHeader($header) - ->addPropertyList($properties); + $header = $this->buildHeader($drequest, $repository); $crumbs = $this->buildCrumbs( array( @@ -79,9 +67,17 @@ 'path' => true, 'view' => 'history', )); + $crumbs->setBorder(true); $pager_box = $this->renderTablePagerBox($pager); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $history_panel, + $pager_box, + )); + return $this->newPage() ->setTitle( array( @@ -91,28 +87,39 @@ ->setCrumbs($crumbs) ->appendChild( array( - $object_box, - $content, - $pager_box, + $view, )); } - private function buildActionView(DiffusionRequest $drequest) { - $viewer = $this->getRequest()->getUser(); + private function buildHeader(DiffusionRequest $drequest) { + $viewer = $this->getViewer(); - $view = id(new PhabricatorActionListView()) - ->setUser($viewer); + $tag = $this->renderCommitHashTag($drequest); + + $header = id(new PHUIHeaderView()) + ->setUser($viewer) + ->setPolicyObject($drequest->getRepository()) + ->addTag($tag) + ->setHeader($this->renderPathLinks($drequest, $mode = 'history')) + ->setHeaderIcon('fa-clock-o'); + + return $header; + + } + + private function buildHistoryHeader(DiffusionRequest $drequest) { + $viewer = $this->getViewer(); $browse_uri = $drequest->generateURI( array( 'action' => 'browse', )); - $view->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Browse Content')) - ->setHref($browse_uri) - ->setIcon('fa-files-o')); + $browse_button = id(new PHUIButtonView()) + ->setTag('a') + ->setText(pht('Browse')) + ->setHref($browse_uri) + ->setIcon('fa-files-o'); // TODO: Sometimes we do have a change view, we need to look at the most // recent history entry to figure it out. @@ -130,41 +137,18 @@ ->alter('copies', true); } - $view->addAction( - id(new PhabricatorActionView()) - ->setName($branch_name) - ->setIcon('fa-code-fork') - ->setHref($branch_uri)); - - return $view; - } + $branch_button = id(new PHUIButtonView()) + ->setTag('a') + ->setText($branch_name) + ->setIcon('fa-code-fork') + ->setHref($branch_uri); - protected function buildPropertyView( - DiffusionRequest $drequest, - PhabricatorActionListView $actions) { - - $viewer = $this->getRequest()->getUser(); - - $view = id(new PHUIPropertyListView()) - ->setUser($viewer) - ->setActionList($actions); - - $stable_commit = $drequest->getStableCommit(); + $header = id(new PHUIHeaderView()) + ->setHeader(pht('History')) + ->addActionLink($browse_button) + ->addActionLink($branch_button); - $view->addProperty( - pht('Commit'), - phutil_tag( - 'a', - array( - 'href' => $drequest->generateURI( - array( - 'action' => 'commit', - 'commit' => $stable_commit, - )), - ), - $drequest->getRepository()->formatCommitName($stable_commit))); - - return $view; + return $header; } } diff --git a/src/applications/diffusion/controller/DiffusionLintController.php b/src/applications/diffusion/controller/DiffusionLintController.php --- a/src/applications/diffusion/controller/DiffusionLintController.php +++ b/src/applications/diffusion/controller/DiffusionLintController.php @@ -157,6 +157,7 @@ $content[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Lint')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setTable($table); $title = array('Lint'); @@ -179,7 +180,7 @@ $header = id(new PHUIHeaderView()) ->setHeader($this->renderPathLinks($drequest, 'lint')) ->setUser($viewer) - ->setPolicyObject($drequest->getRepository()); + ->setHeaderIcon('fa-code'); $actions = $this->buildActionView($drequest); $properties = $this->buildPropertyView( $drequest, @@ -189,18 +190,28 @@ $object_box = id(new PHUIObjectBoxView()) ->setHeader($header) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($properties); } else { $object_box = null; + $header = id(new PHUIHeaderView()) + ->setHeader(pht('All Lint')) + ->setHeaderIcon('fa-code'); } + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $object_box, + $content, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) ->appendChild( array( - $object_box, - $content, + $view, )); } @@ -444,6 +455,7 @@ $content[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Lint Details')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setTable($table); $crumbs = $this->buildCrumbs( @@ -454,6 +466,16 @@ )); $pager_box = $this->renderTablePagerBox($pager); + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Lint: %s', $drequest->getRepository()->getDisplayName())) + ->setHeaderIcon('fa-code'); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $content, + $pager_box, + )); return $this->newPage() ->setTitle( @@ -464,8 +486,7 @@ ->setCrumbs($crumbs) ->appendChild( array( - $content, - $pager_box, + $view, )); } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryController.php b/src/applications/diffusion/controller/DiffusionRepositoryController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryController.php @@ -16,11 +16,14 @@ $drequest = $this->getDiffusionRequest(); $repository = $drequest->getRepository(); - $content = array(); - $crumbs = $this->buildCrumbs(); + $crumbs->setBorder(true); - $content[] = $this->buildPropertiesTable($drequest->getRepository()); + $header = $this->buildHeaderView($repository); + $curtain = $this->buildCurtain($repository); + $property_table = $this->buildPropertiesTable($repository); + $description = $this->buildDescriptionView($repository); + $locate_file = $this->buildLocateFile(); // Before we do any work, make sure we're looking at a some content: we're // on a valid branch, and the repository is not empty. @@ -68,14 +71,24 @@ } if ($page_has_content) { - $content[] = $this->buildNormalContent($drequest); + $content = $this->buildNormalContent($drequest); } else { - $content[] = id(new PHUIInfoView()) + $content = id(new PHUIInfoView()) ->setTitle($empty_title) ->setSeverity(PHUIInfoView::SEVERITY_WARNING) ->setErrors(array($empty_message)); } + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setCurtain($curtain) + ->setMainColumn(array( + $property_table, + $description, + $locate_file, + )) + ->setFooter($content); + return $this->newPage() ->setTitle( array( @@ -83,7 +96,9 @@ $repository->getDisplayName(), )) ->setCrumbs($crumbs) - ->appendChild($content); + ->appendChild(array( + $view, + )); } @@ -206,13 +221,13 @@ return $content; } - private function buildPropertiesTable(PhabricatorRepository $repository) { - $user = $this->getRequest()->getUser(); - + private function buildHeaderView(PhabricatorRepository $repository) { + $viewer = $this->getViewer(); $header = id(new PHUIHeaderView()) ->setHeader($repository->getName()) - ->setUser($user) - ->setPolicyObject($repository); + ->setUser($viewer) + ->setPolicyObject($repository) + ->setHeaderIcon('fa-code'); if (!$repository->isTracked()) { $header->setStatus('fa-ban', 'dark', pht('Inactive')); @@ -227,12 +242,64 @@ $header->setStatus('fa-check', 'bluegrey', pht('Active')); } + return $header; + } + + private function buildCurtain(PhabricatorRepository $repository) { + $viewer = $this->getViewer(); + + $edit_uri = $repository->getPathURI('edit/'); + $curtain = $this->newCurtainView($repository); + + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $repository, + PhabricatorPolicyCapability::CAN_EDIT); + + $curtain->addAction( + id(new PhabricatorActionView()) + ->setName(pht('Edit Repository')) + ->setIcon('fa-pencil') + ->setHref($edit_uri) + ->setWorkflow(!$can_edit) + ->setDisabled(!$can_edit)); + + if ($repository->isHosted()) { + $push_uri = $this->getApplicationURI( + 'pushlog/?repositories='.$repository->getMonogram()); - $actions = $this->buildActionList($repository); + $curtain->addAction( + id(new PhabricatorActionView()) + ->setName(pht('View Push Logs')) + ->setIcon('fa-list-alt') + ->setHref($push_uri)); + } + return $curtain; + } + + private function buildDescriptionView(PhabricatorRepository $repository) { + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) - ->setObject($repository) - ->setUser($user); + ->setUser($viewer); + + $description = $repository->getDetail('description'); + if (strlen($description)) { + $description = new PHUIRemarkupView($viewer, $description); + $view->addTextContent($description); + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('DESCRIPTION')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->appendChild($view); + } + return null; + } + + private function buildPropertiesTable(PhabricatorRepository $repository) { + $viewer = $this->getViewer(); + + $view = id(new PHUIPropertyListView()) + ->setUser($viewer); if ($repository->isHosted()) { $ssh_uri = $repository->getSSHCloneURIObject(); @@ -286,21 +353,10 @@ } } - $view->invokeWillRenderEvent(); - - $description = $repository->getDetail('description'); - if (strlen($description)) { - $description = new PHUIRemarkupView($user, $description); - $view->addSectionHeader( - pht('Description'), PHUIPropertyListView::ICON_SUMMARY); - $view->addTextContent($description); - } - - $view->setActionList($actions); - $box = id(new PHUIObjectBoxView()) - ->setHeader($header) - ->addPropertyList($view); + ->setHeaderText(pht('DETAILS')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->appendChild($view); $info = null; $drequest = $this->getDiffusionRequest(); @@ -344,7 +400,7 @@ } private function buildBranchListTable(DiffusionRequest $drequest) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); if ($drequest->getBranch() === null) { return null; @@ -379,7 +435,8 @@ ->setBranches($branches) ->setCommits($commits); - $panel = new PHUIObjectBoxView(); + $panel = id(new PHUIObjectBoxView()) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); $header = new PHUIHeaderView(); $header->setHeader(pht('Branches')); @@ -388,7 +445,7 @@ } $button = new PHUIButtonView(); - $button->setText(pht('Show All Branches')); + $button->setText(pht('Show All')); $button->setTag('a'); $button->setIcon('fa-code-fork'); $button->setHref($drequest->generateURI( @@ -404,7 +461,7 @@ } private function buildTagListTable(DiffusionRequest $drequest) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $repository = $drequest->getRepository(); switch ($repository->getVersionControlSystem()) { @@ -469,46 +526,11 @@ $panel->setHeader($header); $panel->setTable($view); + $panel->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); return $panel; } - private function buildActionList(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); - - $edit_uri = $repository->getPathURI('edit/'); - - $view = id(new PhabricatorActionListView()) - ->setUser($viewer) - ->setObject($repository); - - $can_edit = PhabricatorPolicyFilter::hasCapability( - $viewer, - $repository, - PhabricatorPolicyCapability::CAN_EDIT); - - $view->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Edit Repository')) - ->setIcon('fa-pencil') - ->setHref($edit_uri) - ->setWorkflow(!$can_edit) - ->setDisabled(!$can_edit)); - - if ($repository->isHosted()) { - $push_uri = $this->getApplicationURI( - 'pushlog/?repositories='.$repository->getMonogram()); - - $view->addAction( - id(new PhabricatorActionView()) - ->setName(pht('View Push Logs')) - ->setIcon('fa-list-alt') - ->setHref($push_uri)); - } - - return $view; - } - private function buildHistoryTable( $history_results, $history, @@ -551,7 +573,7 @@ ->setIcon('fa-list-alt'); $button = id(new PHUIButtonView()) - ->setText(pht('View Full History')) + ->setText(pht('View History')) ->setHref($drequest->generateURI( array( 'action' => 'history', @@ -559,7 +581,8 @@ ->setTag('a') ->setIcon($icon); - $panel = new PHUIObjectBoxView(); + $panel = id(new PHUIObjectBoxView()) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); $header = id(new PHUIHeaderView()) ->setHeader(pht('Recent Commits')) ->addActionLink($button); @@ -569,6 +592,46 @@ return $panel; } + private function buildLocateFile() { + $request = $this->getRequest(); + $viewer = $request->getUser(); + $drequest = $this->getDiffusionRequest(); + $repository = $drequest->getRepository(); + + $locate_panel = null; + if ($repository->canUsePathTree()) { + Javelin::initBehavior( + 'diffusion-locate-file', + array( + 'controlID' => 'locate-control', + 'inputID' => 'locate-input', + 'browseBaseURI' => (string)$drequest->generateURI( + array( + 'action' => 'browse', + )), + 'uri' => (string)$drequest->generateURI( + array( + 'action' => 'pathtree', + )), + )); + + $form = id(new AphrontFormView()) + ->setUser($viewer) + ->appendChild( + id(new AphrontFormTypeaheadControl()) + ->setHardpointID('locate-control') + ->setID('locate-input') + ->setLabel(pht('Locate File'))); + $form_box = id(new PHUIBoxView()) + ->appendChild($form->buildLayoutView()); + $locate_panel = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Locate File')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->appendChild($form_box); + } + return $locate_panel; + } + private function buildBrowseTable( $browse_results, $browse_paths, @@ -606,9 +669,10 @@ $browse_uri = $drequest->generateURI(array('action' => 'browse')); - $browse_panel = new PHUIObjectBoxView(); + $browse_panel = id(new PHUIObjectBoxView()) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); $header = id(new PHUIHeaderView()) - ->setHeader(pht('Repository')); + ->setHeader($repository->getName()); $icon = id(new PHUIIconView()) ->setIcon('fa-folder-open'); @@ -621,38 +685,6 @@ $header->addActionLink($button); $browse_panel->setHeader($header); - - $locate_panel = null; - if ($repository->canUsePathTree()) { - Javelin::initBehavior( - 'diffusion-locate-file', - array( - 'controlID' => 'locate-control', - 'inputID' => 'locate-input', - 'browseBaseURI' => (string)$drequest->generateURI( - array( - 'action' => 'browse', - )), - 'uri' => (string)$drequest->generateURI( - array( - 'action' => 'pathtree', - )), - )); - - $form = id(new AphrontFormView()) - ->setUser($viewer) - ->appendChild( - id(new AphrontFormTypeaheadControl()) - ->setHardpointID('locate-control') - ->setID('locate-input') - ->setLabel(pht('Locate File'))); - $form_box = id(new PHUIBoxView()) - ->appendChild($form->buildLayoutView()); - $locate_panel = id(new PHUIObjectBoxView()) - ->setHeaderText('Locate File') - ->appendChild($form_box); - } - $browse_panel->setTable($browse_table); $pager->setURI($browse_uri, 'offset'); @@ -664,7 +696,6 @@ } return array( - $locate_panel, $browse_panel, $pager_box, ); diff --git a/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php b/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php @@ -262,10 +262,26 @@ $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb($title); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); + + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText($title) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setForm($form); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($form); + ->appendChild($view); + } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php @@ -53,6 +53,10 @@ $title = pht('Edit Actions (%s)', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); + $policies = id(new PhabricatorPolicyQuery()) ->setViewer($viewer) ->setObject($repository) @@ -97,13 +101,21 @@ ->addCancelButton($edit_uri)); $form_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + ->setHeaderText(pht('Actions')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($form_box); + ->appendChild($view); + } } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditAutomationController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditAutomationController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditAutomationController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditAutomationController.php @@ -49,6 +49,10 @@ $title = pht('Edit %s', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); + $form = id(new AphrontFormView()) ->setUser($viewer) ->appendRemarkupInstructions( @@ -69,14 +73,21 @@ ->setValue(pht('Save')) ->addCancelButton($edit_uri)); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Automation')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php @@ -105,6 +105,10 @@ $title = pht('Edit %s', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); + $form = id(new AphrontFormView()) ->setUser($viewer) ->appendChild( @@ -144,16 +148,23 @@ ->appendChild(id(new PHUIFormDividerControl())) ->appendRemarkupInstructions($this->getReadmeInstructions()); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Basic Information')) ->setValidationException($validation_exception) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form) ->setFormErrors($errors); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } private function getReadmeInstructions() { diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php @@ -98,6 +98,9 @@ $crumbs->addTextCrumb(pht('Edit Branches')); $title = pht('Edit Branches (%s)', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $policies = id(new PhabricatorPolicyQuery()) ->setViewer($viewer) @@ -213,14 +216,21 @@ ->addCancelButton($edit_uri)); $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Branches')) ->setValidationException($validation_exception) - ->setHeaderText($title) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($form_box); + ->appendChild($view); } private function processBranches($string) { diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditController.php @@ -20,6 +20,7 @@ $crumbs->addTextCrumb(pht('Edit'), $edit_uri); } } + $crumbs->setBorder(true); return $crumbs; } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php @@ -50,6 +50,9 @@ $crumbs->addTextCrumb(pht('Edit Encoding')); $title = pht('Edit %s', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $form = id(new AphrontFormView()) ->setUser($user) @@ -65,15 +68,22 @@ ->setValue(pht('Save Encoding')) ->addCancelButton($edit_uri)); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Encoding')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form) ->setFormErrors($errors); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } private function getEncodingInstructions() { diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditHostingController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditHostingController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditHostingController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditHostingController.php @@ -57,6 +57,9 @@ $crumbs->addTextCrumb(pht('Edit Hosting')); $title = pht('Edit Hosting (%s)', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $hosted_control = id(new AphrontFormRadioButtonControl()) ->setName('hosting') @@ -95,14 +98,21 @@ ->setValue(pht('Save and Continue')) ->addCancelButton($edit_uri)); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Hosting')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } public function handleProtocols(PhabricatorRepository $repository) { @@ -155,7 +165,9 @@ $crumbs->addTextCrumb(pht('Edit Protocols')); $title = pht('Edit Protocols (%s)', $repository->getName()); - + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $rw_message = pht( 'Phabricator will serve a read-write copy of this repository.'); @@ -256,14 +268,21 @@ ->setValue(pht('Save Changes')) ->addCancelButton($prev_uri, pht('Back'))); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Protocols')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php @@ -38,16 +38,16 @@ $title = pht('Edit %s', $repository->getName()); $header = id(new PHUIHeaderView()) - ->setHeader($title); + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); if ($repository->isTracked()) { $header->setStatus('fa-check', 'bluegrey', pht('Active')); } else { $header->setStatus('fa-ban', 'dark', pht('Inactive')); } - $basic_actions = $this->buildBasicActions($repository); - $basic_properties = - $this->buildBasicProperties($repository, $basic_actions); + $curtain = $this->buildCurtain($repository); + $basic_properties = $this->buildBasicProperties($repository); $policy_actions = $this->buildPolicyActions($repository); $policy_properties = @@ -120,15 +120,13 @@ $boxes = array(); $boxes[] = id(new PHUIObjectBoxView()) - ->setHeader($header) - ->addPropertyList($basic_properties); - - $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Policies')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($policy_properties); $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Hosting')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($hosting_properties); if ($repository->canMirror()) { @@ -156,6 +154,7 @@ $boxes[] = id(new PHUIObjectBoxView()) ->setFormErrors($mirror_info) ->setHeaderText(pht('Mirrors')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($mirror_properties); $boxes[] = $mirror_list; @@ -164,73 +163,88 @@ if ($remote_properties) { $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Remote')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($remote_properties); } if ($storage_properties) { $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Storage')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($storage_properties); } if ($staging_properties) { $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Staging')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($staging_properties); } if ($automation_properties) { $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Automation')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($automation_properties); } $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Text Encoding')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($encoding_properties); $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Symbols')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($symbols_properties); if ($branches_properties) { $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Branches')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($branches_properties); } if ($subversion_properties) { $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Subversion')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($subversion_properties); } $boxes[] = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Actions')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addPropertyList($actions_properties); - return $this->buildApplicationPage( - array( - $crumbs, + $crumbs->setBorder(true); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setCurtain($curtain) + ->addPropertySection(pht('Properties'), $basic_properties) + ->setMainColumn(array( $boxes, $timeline, - ), - array( - 'title' => $title, )); + + return $this->newPage() + ->setTitle($title) + ->setCrumbs($crumbs) + ->appendChild($view); + } - private function buildBasicActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + private function buildCurtain(PhabricatorRepository $repository) { + $viewer = $this->getViewer(); - $view = id(new PhabricatorActionListView()) - ->setUser($viewer); + $curtain = $this->newCurtainView($repository); $edit = id(new PhabricatorActionView()) ->setIcon('fa-pencil') ->setName(pht('Edit Basic Information')) ->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/')); - $view->addAction($edit); + $curtain->addAction($edit); $edit = id(new PhabricatorActionView()) ->setIcon('fa-refresh') @@ -238,7 +252,7 @@ ->setWorkflow(true) ->setHref( $this->getRepositoryControllerURI($repository, 'edit/update/')); - $view->addAction($edit); + $curtain->addAction($edit); $activate = id(new PhabricatorActionView()) ->setHref( @@ -255,9 +269,9 @@ ->setName(pht('Activate Repository')); } - $view->addAction($activate); + $curtain->addAction($activate); - $view->addAction( + $curtain->addAction( id(new PhabricatorActionView()) ->setName(pht('Delete Repository')) ->setIcon('fa-times') @@ -266,19 +280,16 @@ ->setDisabled(true) ->setWorkflow(true)); - return $view; + return $curtain; } private function buildBasicProperties( - PhabricatorRepository $repository, - PhabricatorActionListView $actions) { + PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) - ->setUser($viewer) - ->setObject($repository) - ->setActionList($actions); + ->setUser($viewer); $type = PhabricatorRepositoryType::getNameForRepositoryType( $repository->getVersionControlSystem()); @@ -322,7 +333,7 @@ } private function buildEncodingActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -341,7 +352,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -358,7 +369,7 @@ } private function buildPolicyActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -377,7 +388,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -412,7 +423,7 @@ } private function buildBranchesActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -431,7 +442,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -461,7 +472,7 @@ } private function buildSubversionActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -480,7 +491,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -500,7 +511,7 @@ } private function buildActionsActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -519,7 +530,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -541,7 +552,7 @@ } private function buildRemoteActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -560,7 +571,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -581,7 +592,7 @@ } private function buildStorageActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -600,7 +611,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -801,7 +812,7 @@ private function buildRepositoryStatus( PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $is_cluster = $repository->getAlmanacServicePHID(); $view = new PHUIStatusListView(); @@ -1188,7 +1199,7 @@ private function buildMirrorActions( PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $mirror_actions = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -1211,7 +1222,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $mirror_properties = id(new PHUIPropertyListView()) ->setUser($viewer) @@ -1262,11 +1273,14 @@ $mirror_list->addItem($item); } - return $mirror_list; + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Configured Mirrors')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setObjectList($mirror_list); } private function buildSymbolsActions(PhabricatorRepository $repository) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PhabricatorActionListView()) ->setUser($viewer); @@ -1285,7 +1299,7 @@ PhabricatorRepository $repository, PhabricatorActionListView $actions) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditStagingController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditStagingController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditStagingController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditStagingController.php @@ -45,7 +45,10 @@ $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Edit Staging')); - $title = pht('Edit %s', $repository->getName()); + $title = pht('Edit Staging (%s)', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $form = id(new AphrontFormView()) ->setUser($viewer) @@ -68,14 +71,21 @@ ->setValue(pht('Save')) ->addCancelButton($edit_uri)); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Staging')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditStorageController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditStorageController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditStorageController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditStorageController.php @@ -22,6 +22,9 @@ $crumbs->addTextCrumb(pht('Edit Storage')); $title = pht('Edit %s', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $service_phid = $repository->getAlmanacServicePHID(); if ($service_phid) { @@ -57,15 +60,21 @@ id(new AphrontFormSubmitControl()) ->addCancelButton($edit_uri, pht('Done'))); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) - ->setForm($form) - ->setFormErrors($errors); + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Storage')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setForm($form); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php @@ -63,6 +63,9 @@ $crumbs->addTextCrumb(pht('Edit Subversion Info')); $title = pht('Edit Subversion Info (%s)', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $policies = id(new PhabricatorPolicyQuery()) ->setViewer($viewer) @@ -96,13 +99,20 @@ ->addCancelButton($edit_uri)); $form_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + ->setHeaderText(pht('Subversion')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($form_box); + ->appendChild($view); } } diff --git a/src/applications/diffusion/controller/DiffusionRepositorySymbolsController.php b/src/applications/diffusion/controller/DiffusionRepositorySymbolsController.php --- a/src/applications/diffusion/controller/DiffusionRepositorySymbolsController.php +++ b/src/applications/diffusion/controller/DiffusionRepositorySymbolsController.php @@ -59,7 +59,10 @@ $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Edit Symbols')); - $title = pht('Edit %s', $repository->getName()); + $title = pht('Edit Symbols (%s)', $repository->getName()); + $header = id(new PHUIHeaderView()) + ->setHeader($title) + ->setHeaderIcon('fa-pencil'); $form = id(new AphrontFormView()) ->setUser($viewer) @@ -85,15 +88,22 @@ ->setValue(pht('Save')) ->addCancelButton($edit_uri)); - $object_box = id(new PHUIObjectBoxView()) - ->setHeaderText($title) + $form_box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Symbols')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setForm($form) ->setFormErrors($errors); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $form_box, + )); + return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->appendChild($object_box); + ->appendChild($view); } private function getInstructions() { diff --git a/src/applications/diffusion/controller/DiffusionSymbolController.php b/src/applications/diffusion/controller/DiffusionSymbolController.php --- a/src/applications/diffusion/controller/DiffusionSymbolController.php +++ b/src/applications/diffusion/controller/DiffusionSymbolController.php @@ -134,17 +134,24 @@ $table->setNoDataString( pht('No matching symbol could be found in any indexed repository.')); - $panel = id(new PHUIObjectBoxView()) - ->setHeaderText(pht('Similar Symbols')) - ->setTable($table); + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Similar Symbols')) + ->setHeaderIcon('fa-bullseye'); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Find Symbol')); + $crumbs->setBorder(true); + + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $table, + )); return $this->newPage() ->setTitle(pht('Find Symbol')) ->setCrumbs($crumbs) - ->appendChild($panel); + ->appendChild($view); } } diff --git a/src/applications/diffusion/controller/DiffusionTagListController.php b/src/applications/diffusion/controller/DiffusionTagListController.php --- a/src/applications/diffusion/controller/DiffusionTagListController.php +++ b/src/applications/diffusion/controller/DiffusionTagListController.php @@ -45,6 +45,11 @@ $tags = $pager->sliceResults($tags); $content = null; + + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Tags')) + ->setHeaderIcon('fa-tags'); + if (!$tags) { $content = $this->renderStatusMessage( pht('No Tags'), @@ -69,11 +74,7 @@ $handles = $this->loadViewerHandles($phids); $view->setHandles($handles); - $panel = id(new PHUIObjectBoxView()) - ->setHeaderText(pht('Tags')) - ->appendChild($view); - - $content = $panel; + $content = $view; } $crumbs = $this->buildCrumbs( @@ -81,9 +82,22 @@ 'tags' => true, 'commit' => $drequest->getSymbolicCommit(), )); + $crumbs->setBorder(true); + + $box = id(new PHUIObjectBoxView()) + ->setHeaderText($repository->getDisplayName()) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->setTable($view); $pager_box = $this->renderTablePagerBox($pager); + $view = id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter(array( + $box, + $pager_box, + )); + return $this->newPage() ->setTitle( array( @@ -91,11 +105,7 @@ $repository->getDisplayName(), )) ->setCrumbs($crumbs) - ->appendChild( - array( - $content, - $pager_box, - )); + ->appendChild($view); } } diff --git a/src/applications/diffusion/view/DiffusionBrowseTableView.php b/src/applications/diffusion/view/DiffusionBrowseTableView.php --- a/src/applications/diffusion/view/DiffusionBrowseTableView.php +++ b/src/applications/diffusion/view/DiffusionBrowseTableView.php @@ -90,7 +90,6 @@ $browse_link, idx($dict, 'lint'), $dict['commit'], - $dict['author'], $dict['details'], $dict['date'], ); @@ -120,7 +119,6 @@ pht('Path'), ($lint ? $lint : pht('Lint')), pht('Modified'), - pht('Author/Committer'), pht('Details'), pht('Committed'), )); @@ -130,7 +128,6 @@ '', '', '', - '', 'wide', '', )); @@ -142,7 +139,6 @@ true, true, true, - true, )); $view->setDeviceVisibility( @@ -150,7 +146,6 @@ true, true, false, - true, false, true, false, diff --git a/src/applications/diffusion/view/DiffusionView.php b/src/applications/diffusion/view/DiffusionView.php --- a/src/applications/diffusion/view/DiffusionView.php +++ b/src/applications/diffusion/view/DiffusionView.php @@ -95,7 +95,9 @@ } $icon = DifferentialChangeType::getIconForFileType($file_type); - $icon_view = id(new PHUIIconView())->setIcon($icon); + $color = DifferentialChangeType::getIconColorForFileType($file_type); + $icon_view = id(new PHUIIconView()) + ->setIcon($icon.' '.$color); // If we're rendering a file or directory name, don't show the tooltip. if ($display_name !== null) { diff --git a/src/view/form/PHUIInfoView.php b/src/view/form/PHUIInfoView.php --- a/src/view/form/PHUIInfoView.php +++ b/src/view/form/PHUIInfoView.php @@ -14,6 +14,7 @@ private $id; private $buttons = array(); private $isHidden; + private $flush; public function setTitle($title) { $this->title = $title; @@ -40,6 +41,11 @@ return $this; } + public function setFlush($flush) { + $this->flush = $flush; + return $this; + } + public function addButton(PHUIButtonView $button) { $this->buttons[] = $button; return $this; @@ -87,6 +93,9 @@ $classes[] = 'phui-info-view'; $classes[] = 'phui-info-severity-'.$this->severity; $classes[] = 'grouped'; + if ($this->flush) { + $classes[] = 'phui-info-view-flush'; + } $classes = implode(' ', $classes); $children = $this->renderChildren(); diff --git a/src/view/form/PHUIPagedFormView.php b/src/view/form/PHUIPagedFormView.php --- a/src/view/form/PHUIPagedFormView.php +++ b/src/view/form/PHUIPagedFormView.php @@ -263,6 +263,7 @@ $form->appendChild($submit); $box = id(new PHUIObjectBoxView()) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->setFormErrors($errors) ->setForm($form); diff --git a/src/view/phui/PHUIHeadThingView.php b/src/view/phui/PHUIHeadThingView.php --- a/src/view/phui/PHUIHeadThingView.php +++ b/src/view/phui/PHUIHeadThingView.php @@ -35,6 +35,9 @@ $classes = array(); $classes[] = 'phui-head-thing-view'; + if ($this->image) { + $classes[] = 'phui-head-has-image'; + } if ($this->size) { $classes[] = $this->size; @@ -57,8 +60,11 @@ 'href' => $this->imageHref, )); - return array($image, $this->content); - + if ($this->image) { + return array($image, $this->content); + } else { + return $this->content; + } } diff --git a/webroot/rsrc/css/application/diffusion/diffusion-icons.css b/webroot/rsrc/css/application/diffusion/diffusion-icons.css --- a/webroot/rsrc/css/application/diffusion/diffusion-icons.css +++ b/webroot/rsrc/css/application/diffusion/diffusion-icons.css @@ -20,3 +20,11 @@ .diffusion-link-icon + .diffusion-link-icon { margin-left: 6px; } + +.diffusion-search-boxen { + padding: 16px; +} + +.diffusion-search-boxen .phui-form-view { + padding: 0; +} diff --git a/webroot/rsrc/css/application/diffusion/diffusion-source.css b/webroot/rsrc/css/application/diffusion/diffusion-source.css --- a/webroot/rsrc/css/application/diffusion/diffusion-source.css +++ b/webroot/rsrc/css/application/diffusion/diffusion-source.css @@ -4,7 +4,6 @@ .diffusion-source { width: 100%; - font: 10px/13px "Menlo", "Consolas", "Monaco", monospace; background: #fff; } @@ -21,13 +20,12 @@ } .diffusion-source td { - letter-spacing: 0.0083334px; - vertical-align: top; - white-space: pre-wrap; - padding-bottom: 1px; - padding-left: 8px; - line-height: 16px; - width: 100%; + vertical-align: top; + white-space: pre-wrap; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 8px; + width: 100%; } .diffusion-browse-type-form { diff --git a/webroot/rsrc/css/phui/phui-box.css b/webroot/rsrc/css/phui/phui-box.css --- a/webroot/rsrc/css/phui/phui-box.css +++ b/webroot/rsrc/css/phui/phui-box.css @@ -86,8 +86,10 @@ padding: 6px 16px; } -.device .phui-box.phui-box-blue-property .phui-header-shell { - padding: 6px 12px; +.device .phui-box.phui-box-blue-property .phui-header-shell, +.device .phui-box-blue-property.phui-object-box.phui-object-box-collapsed + .phui-header-shell { + padding: 6px 12px; } .phui-box.phui-box-blue-property .phui-header-header { @@ -98,3 +100,16 @@ .phui-box-blue-property .phui-object-item-list-view.phui-object-list-flush { padding: 2px 8px; } + +body .phui-box-blue-property.phui-object-box.phui-object-box-collapsed { + padding: 0; +} + +body .phui-box-blue-property .phui-header-shell + .phui-object-box { + margin-bottom: 0; +} + +.phui-box-blue-property .phui-header-shell + .phui-object-box + .phui-header-shell { + background: #fff; +} diff --git a/webroot/rsrc/css/phui/phui-head-thing.css b/webroot/rsrc/css/phui/phui-head-thing.css --- a/webroot/rsrc/css/phui/phui-head-thing.css +++ b/webroot/rsrc/css/phui/phui-head-thing.css @@ -6,6 +6,9 @@ height: 24px; line-height: 22px; color: {$greytext}; +} + +.phui-head-thing-view.phui-head-has-image { position: relative; padding-left: 32px; } diff --git a/webroot/rsrc/css/phui/phui-header-view.css b/webroot/rsrc/css/phui/phui-header-view.css --- a/webroot/rsrc/css/phui/phui-header-view.css +++ b/webroot/rsrc/css/phui/phui-header-view.css @@ -324,3 +324,7 @@ .phui-profile-header .phui-header-col3 { vertical-align: top; } + +.phui-header-view .phui-tag-shade-indigo a { + color: {$sh-indigotext}; +} diff --git a/webroot/rsrc/css/phui/phui-info-view.css b/webroot/rsrc/css/phui/phui-info-view.css --- a/webroot/rsrc/css/phui/phui-info-view.css +++ b/webroot/rsrc/css/phui/phui-info-view.css @@ -10,6 +10,10 @@ border-radius: 3px; } +.phui-info-view.phui-info-view-flush { + margin: 0 0 20px 0; +} + .device .phui-info-view { margin: 8px; } diff --git a/webroot/rsrc/css/phui/phui-property-list-view.css b/webroot/rsrc/css/phui/phui-property-list-view.css --- a/webroot/rsrc/css/phui/phui-property-list-view.css +++ b/webroot/rsrc/css/phui/phui-property-list-view.css @@ -199,7 +199,6 @@ .phui-property-list-image-content img { margin: 20px auto; background: url('/rsrc/image/checker_light.png'); - border: 1px solid {$lightblueborder}; } .device-desktop .phui-property-list-image-content img:hover { diff --git a/webroot/rsrc/css/phui/phui-two-column-view.css b/webroot/rsrc/css/phui/phui-two-column-view.css --- a/webroot/rsrc/css/phui/phui-two-column-view.css +++ b/webroot/rsrc/css/phui/phui-two-column-view.css @@ -79,10 +79,6 @@ margin: 0 0 20px 0; } -.phui-two-column-view .phui-object-box.phui-object-box-collapsed { - padding: 0; -} - /* Timeline */ .phui-two-column-view .phui-timeline-view { @@ -115,12 +111,12 @@ .device-desktop .phui-main-column .phui-property-list-key { margin-left: 0; - width: 140px; + width: 160px; } .device-desktop .phui-main-column .phui-property-list-value { margin-left: 8px; - width: calc(100% - 180px); + width: calc(100% - 200px); } @@ -132,13 +128,18 @@ } .device-desktop .phui-two-column-view .phui-property-list-container { - padding: 12px 16px; + padding: 16px 0; } .device .phui-two-column-view .phui-property-list-container { padding: 12px 8px; } +.phui-two-column-view .phui-property-list-container + .keyboard-shortcuts-available { + display: none; +} + .phui-two-column-properties.phui-object-box { border: 1px solid rgba({$alphablue}, .2); } @@ -191,3 +192,7 @@ .phui-info-view { margin: 0; } + +.phui-two-column-view .phui-object-box .phui-header-shell + .phui-info-view { + margin: 16px 16px 0 16px; +}