Convert Differential to new layout
Summary: First pass at converting Differential, I likely have some buggy-poos but thought I'd toss this up now in case very bad bugs present. To do: - Need to put status back on Hovercards - "Diff Detail" probably needs a better design Test Plan: Looking at lots of diffs, admittedly I dont have harbormaster, etc, running locally. Checked Diffusion for Table of Content changes on small and large commits. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D15463
This commit is contained in:
		| @@ -7,10 +7,10 @@ | |||||||
|  */ |  */ | ||||||
| return array( | return array( | ||||||
|   'names' => array( |   'names' => array( | ||||||
|     'core.pkg.css' => '9c8e888d', |     'core.pkg.css' => 'c6ad5231', | ||||||
|     'core.pkg.js' => '7d8faf57', |     'core.pkg.js' => '7d8faf57', | ||||||
|     'darkconsole.pkg.js' => 'e7393ebb', |     'darkconsole.pkg.js' => 'e7393ebb', | ||||||
|     'differential.pkg.css' => '7d0a63a7', |     'differential.pkg.css' => '7ba78475', | ||||||
|     'differential.pkg.js' => 'd0cd0df6', |     'differential.pkg.js' => 'd0cd0df6', | ||||||
|     'diffusion.pkg.css' => 'f45955ed', |     'diffusion.pkg.css' => 'f45955ed', | ||||||
|     'diffusion.pkg.js' => '3a9a8bfa', |     'diffusion.pkg.js' => '3a9a8bfa', | ||||||
| @@ -57,8 +57,8 @@ return array( | |||||||
|     'rsrc/css/application/dashboard/dashboard.css' => 'eb458607', |     'rsrc/css/application/dashboard/dashboard.css' => 'eb458607', | ||||||
|     'rsrc/css/application/diff/inline-comment-summary.css' => '51efda3a', |     'rsrc/css/application/diff/inline-comment-summary.css' => '51efda3a', | ||||||
|     'rsrc/css/application/differential/add-comment.css' => 'c47f8c40', |     'rsrc/css/application/differential/add-comment.css' => 'c47f8c40', | ||||||
|     'rsrc/css/application/differential/changeset-view.css' => 'b6b0d1bb', |     'rsrc/css/application/differential/changeset-view.css' => '3e3b0b76', | ||||||
|     'rsrc/css/application/differential/core.css' => '7ac3cabc', |     'rsrc/css/application/differential/core.css' => '5b7b8ff4', | ||||||
|     'rsrc/css/application/differential/phui-inline-comment.css' => '5953c28e', |     'rsrc/css/application/differential/phui-inline-comment.css' => '5953c28e', | ||||||
|     'rsrc/css/application/differential/revision-comment.css' => '14b8565a', |     'rsrc/css/application/differential/revision-comment.css' => '14b8565a', | ||||||
|     'rsrc/css/application/differential/revision-history.css' => '0e8eb855', |     'rsrc/css/application/differential/revision-history.css' => '0e8eb855', | ||||||
| @@ -123,7 +123,7 @@ return array( | |||||||
|     'rsrc/css/phui/phui-action-panel.css' => '91c7b835', |     'rsrc/css/phui/phui-action-panel.css' => '91c7b835', | ||||||
|     'rsrc/css/phui/phui-badge.css' => 'f25c3476', |     'rsrc/css/phui/phui-badge.css' => 'f25c3476', | ||||||
|     'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', |     'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', | ||||||
|     'rsrc/css/phui/phui-box.css' => '3830ab21', |     'rsrc/css/phui/phui-box.css' => '06153ae3', | ||||||
|     'rsrc/css/phui/phui-button.css' => 'a64a8de6', |     'rsrc/css/phui/phui-button.css' => 'a64a8de6', | ||||||
|     'rsrc/css/phui/phui-chart.css' => '6bf6f78e', |     'rsrc/css/phui/phui-chart.css' => '6bf6f78e', | ||||||
|     'rsrc/css/phui/phui-crumbs-view.css' => '79d536e5', |     'rsrc/css/phui/phui-crumbs-view.css' => '79d536e5', | ||||||
| @@ -144,7 +144,7 @@ return array( | |||||||
|     'rsrc/css/phui/phui-info-panel.css' => '27ea50a1', |     'rsrc/css/phui/phui-info-panel.css' => '27ea50a1', | ||||||
|     'rsrc/css/phui/phui-info-view.css' => '6d7c3509', |     'rsrc/css/phui/phui-info-view.css' => '6d7c3509', | ||||||
|     'rsrc/css/phui/phui-list.css' => '9da2aa00', |     'rsrc/css/phui/phui-list.css' => '9da2aa00', | ||||||
|     'rsrc/css/phui/phui-object-box.css' => '91628842', |     'rsrc/css/phui/phui-object-box.css' => '6b487c57', | ||||||
|     'rsrc/css/phui/phui-object-item-list-view.css' => '18b2ce8e', |     'rsrc/css/phui/phui-object-item-list-view.css' => '18b2ce8e', | ||||||
|     'rsrc/css/phui/phui-pager.css' => 'bea33d23', |     'rsrc/css/phui/phui-pager.css' => 'bea33d23', | ||||||
|     'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', |     'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', | ||||||
| @@ -156,7 +156,7 @@ return array( | |||||||
|     'rsrc/css/phui/phui-status.css' => '37309046', |     'rsrc/css/phui/phui-status.css' => '37309046', | ||||||
|     'rsrc/css/phui/phui-tag-view.css' => '6bbd83e2', |     'rsrc/css/phui/phui-tag-view.css' => '6bbd83e2', | ||||||
|     'rsrc/css/phui/phui-timeline-view.css' => 'a0173eba', |     'rsrc/css/phui/phui-timeline-view.css' => 'a0173eba', | ||||||
|     'rsrc/css/phui/phui-two-column-view.css' => 'e6bf86b6', |     'rsrc/css/phui/phui-two-column-view.css' => '61dd6d38', | ||||||
|     'rsrc/css/phui/workboards/phui-workboard-color.css' => 'ac6fe6a7', |     'rsrc/css/phui/workboards/phui-workboard-color.css' => 'ac6fe6a7', | ||||||
|     'rsrc/css/phui/workboards/phui-workboard.css' => 'e6d89647', |     'rsrc/css/phui/workboards/phui-workboard.css' => 'e6d89647', | ||||||
|     'rsrc/css/phui/workboards/phui-workcard.css' => '3646fb96', |     'rsrc/css/phui/workboards/phui-workcard.css' => '3646fb96', | ||||||
| @@ -545,8 +545,8 @@ return array( | |||||||
|     'conpherence-update-css' => 'faf6be09', |     'conpherence-update-css' => 'faf6be09', | ||||||
|     'conpherence-widget-pane-css' => '775eaaba', |     'conpherence-widget-pane-css' => '775eaaba', | ||||||
|     'd3' => 'a11a5ff2', |     'd3' => 'a11a5ff2', | ||||||
|     'differential-changeset-view-css' => 'b6b0d1bb', |     'differential-changeset-view-css' => '3e3b0b76', | ||||||
|     'differential-core-view-css' => '7ac3cabc', |     'differential-core-view-css' => '5b7b8ff4', | ||||||
|     'differential-inline-comment-editor' => '64a5550f', |     'differential-inline-comment-editor' => '64a5550f', | ||||||
|     'differential-revision-add-comment-css' => 'c47f8c40', |     'differential-revision-add-comment-css' => 'c47f8c40', | ||||||
|     'differential-revision-comment-css' => '14b8565a', |     'differential-revision-comment-css' => '14b8565a', | ||||||
| @@ -805,7 +805,7 @@ return array( | |||||||
|     'phui-action-panel-css' => '91c7b835', |     'phui-action-panel-css' => '91c7b835', | ||||||
|     'phui-badge-view-css' => 'f25c3476', |     'phui-badge-view-css' => 'f25c3476', | ||||||
|     'phui-big-info-view-css' => 'bd903741', |     'phui-big-info-view-css' => 'bd903741', | ||||||
|     'phui-box-css' => '3830ab21', |     'phui-box-css' => '06153ae3', | ||||||
|     'phui-button-css' => 'a64a8de6', |     'phui-button-css' => 'a64a8de6', | ||||||
|     'phui-calendar-css' => 'ccabe893', |     'phui-calendar-css' => 'ccabe893', | ||||||
|     'phui-calendar-day-css' => 'd1cf6f93', |     'phui-calendar-day-css' => 'd1cf6f93', | ||||||
| @@ -833,7 +833,7 @@ return array( | |||||||
|     'phui-info-view-css' => '6d7c3509', |     'phui-info-view-css' => '6d7c3509', | ||||||
|     'phui-inline-comment-view-css' => '5953c28e', |     'phui-inline-comment-view-css' => '5953c28e', | ||||||
|     'phui-list-view-css' => '9da2aa00', |     'phui-list-view-css' => '9da2aa00', | ||||||
|     'phui-object-box-css' => '91628842', |     'phui-object-box-css' => '6b487c57', | ||||||
|     'phui-object-item-list-view-css' => '18b2ce8e', |     'phui-object-item-list-view-css' => '18b2ce8e', | ||||||
|     'phui-pager-css' => 'bea33d23', |     'phui-pager-css' => 'bea33d23', | ||||||
|     'phui-pinboard-view-css' => '2495140e', |     'phui-pinboard-view-css' => '2495140e', | ||||||
| @@ -846,7 +846,7 @@ return array( | |||||||
|     'phui-tag-view-css' => '6bbd83e2', |     'phui-tag-view-css' => '6bbd83e2', | ||||||
|     'phui-theme-css' => '027ba77e', |     'phui-theme-css' => '027ba77e', | ||||||
|     'phui-timeline-view-css' => 'a0173eba', |     'phui-timeline-view-css' => 'a0173eba', | ||||||
|     'phui-two-column-view-css' => 'e6bf86b6', |     'phui-two-column-view-css' => '61dd6d38', | ||||||
|     'phui-workboard-color-css' => 'ac6fe6a7', |     'phui-workboard-color-css' => 'ac6fe6a7', | ||||||
|     'phui-workboard-view-css' => 'e6d89647', |     'phui-workboard-view-css' => 'e6d89647', | ||||||
|     'phui-workcard-view-css' => '3646fb96', |     'phui-workcard-view-css' => '3646fb96', | ||||||
| @@ -1124,6 +1124,9 @@ return array( | |||||||
|       'javelin-util', |       'javelin-util', | ||||||
|       'javelin-uri', |       'javelin-uri', | ||||||
|     ), |     ), | ||||||
|  |     '3e3b0b76' => array( | ||||||
|  |       'phui-inline-comment-view-css', | ||||||
|  |     ), | ||||||
|     '3f5d6dbf' => array( |     '3f5d6dbf' => array( | ||||||
|       'javelin-behavior', |       'javelin-behavior', | ||||||
|       'javelin-dom', |       'javelin-dom', | ||||||
| @@ -1791,9 +1794,6 @@ return array( | |||||||
|       'javelin-json', |       'javelin-json', | ||||||
|       'phabricator-draggable-list', |       'phabricator-draggable-list', | ||||||
|     ), |     ), | ||||||
|     'b6b0d1bb' => array( |  | ||||||
|       'phui-inline-comment-view-css', |  | ||||||
|     ), |  | ||||||
|     'bae58312' => array( |     'bae58312' => array( | ||||||
|       'javelin-install', |       'javelin-install', | ||||||
|       'javelin-workboard-card', |       'javelin-workboard-card', | ||||||
|   | |||||||
| @@ -473,7 +473,6 @@ phutil_register_library_map(array( | |||||||
|     'DifferentialParseCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialParseCommitMessageConduitAPIMethod.php', |     'DifferentialParseCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialParseCommitMessageConduitAPIMethod.php', | ||||||
|     'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php', |     'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php', | ||||||
|     'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php', |     'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php', | ||||||
|     'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php', |  | ||||||
|     'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php', |     'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php', | ||||||
|     'DifferentialProjectsField' => 'applications/differential/customfield/DifferentialProjectsField.php', |     'DifferentialProjectsField' => 'applications/differential/customfield/DifferentialProjectsField.php', | ||||||
|     'DifferentialQueryConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryConduitAPIMethod.php', |     'DifferentialQueryConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryConduitAPIMethod.php', | ||||||
| @@ -508,7 +507,6 @@ phutil_register_library_map(array( | |||||||
|     'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php', |     'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php', | ||||||
|     'DifferentialRevisionDependedOnByRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependedOnByRevisionEdgeType.php', |     'DifferentialRevisionDependedOnByRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependedOnByRevisionEdgeType.php', | ||||||
|     'DifferentialRevisionDependsOnRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependsOnRevisionEdgeType.php', |     'DifferentialRevisionDependsOnRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependsOnRevisionEdgeType.php', | ||||||
|     'DifferentialRevisionDetailView' => 'applications/differential/view/DifferentialRevisionDetailView.php', |  | ||||||
|     'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php', |     'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php', | ||||||
|     'DifferentialRevisionFulltextEngine' => 'applications/differential/search/DifferentialRevisionFulltextEngine.php', |     'DifferentialRevisionFulltextEngine' => 'applications/differential/search/DifferentialRevisionFulltextEngine.php', | ||||||
|     'DifferentialRevisionHasCommitEdgeType' => 'applications/differential/edge/DifferentialRevisionHasCommitEdgeType.php', |     'DifferentialRevisionHasCommitEdgeType' => 'applications/differential/edge/DifferentialRevisionHasCommitEdgeType.php', | ||||||
| @@ -4580,7 +4578,6 @@ phutil_register_library_map(array( | |||||||
|     'DifferentialParseCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod', |     'DifferentialParseCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod', | ||||||
|     'DifferentialParseRenderTestCase' => 'PhabricatorTestCase', |     'DifferentialParseRenderTestCase' => 'PhabricatorTestCase', | ||||||
|     'DifferentialPathField' => 'DifferentialCustomField', |     'DifferentialPathField' => 'DifferentialCustomField', | ||||||
|     'DifferentialPrimaryPaneView' => 'AphrontView', |  | ||||||
|     'DifferentialProjectReviewersField' => 'DifferentialCustomField', |     'DifferentialProjectReviewersField' => 'DifferentialCustomField', | ||||||
|     'DifferentialProjectsField' => 'DifferentialCoreCustomField', |     'DifferentialProjectsField' => 'DifferentialCoreCustomField', | ||||||
|     'DifferentialQueryConduitAPIMethod' => 'DifferentialConduitAPIMethod', |     'DifferentialQueryConduitAPIMethod' => 'DifferentialConduitAPIMethod', | ||||||
| @@ -4630,7 +4627,6 @@ phutil_register_library_map(array( | |||||||
|     'DifferentialRevisionControlSystem' => 'Phobject', |     'DifferentialRevisionControlSystem' => 'Phobject', | ||||||
|     'DifferentialRevisionDependedOnByRevisionEdgeType' => 'PhabricatorEdgeType', |     'DifferentialRevisionDependedOnByRevisionEdgeType' => 'PhabricatorEdgeType', | ||||||
|     'DifferentialRevisionDependsOnRevisionEdgeType' => 'PhabricatorEdgeType', |     'DifferentialRevisionDependsOnRevisionEdgeType' => 'PhabricatorEdgeType', | ||||||
|     'DifferentialRevisionDetailView' => 'AphrontView', |  | ||||||
|     'DifferentialRevisionEditController' => 'DifferentialController', |     'DifferentialRevisionEditController' => 'DifferentialController', | ||||||
|     'DifferentialRevisionFulltextEngine' => 'PhabricatorFulltextEngine', |     'DifferentialRevisionFulltextEngine' => 'PhabricatorFulltextEngine', | ||||||
|     'DifferentialRevisionHasCommitEdgeType' => 'PhabricatorEdgeType', |     'DifferentialRevisionHasCommitEdgeType' => 'PhabricatorEdgeType', | ||||||
|   | |||||||
| @@ -28,7 +28,8 @@ abstract class DifferentialController extends PhabricatorController { | |||||||
|     $viewer = $this->getViewer(); |     $viewer = $this->getViewer(); | ||||||
|  |  | ||||||
|     $toc_view = id(new PHUIDiffTableOfContentsListView()) |     $toc_view = id(new PHUIDiffTableOfContentsListView()) | ||||||
|       ->setUser($viewer); |       ->setUser($viewer) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); | ||||||
|  |  | ||||||
|     $have_owners = PhabricatorApplication::isClassInstalledForViewer( |     $have_owners = PhabricatorApplication::isClassInstalledForViewer( | ||||||
|       'PhabricatorOwnersApplication', |       'PhabricatorOwnersApplication', | ||||||
|   | |||||||
| @@ -40,7 +40,6 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|     $revision->attachActiveDiff(last($diffs)); |     $revision->attachActiveDiff(last($diffs)); | ||||||
|  |  | ||||||
|     $diff_vs = $request->getInt('vs'); |     $diff_vs = $request->getInt('vs'); | ||||||
|  |  | ||||||
|     $target_id = $request->getInt('id'); |     $target_id = $request->getInt('id'); | ||||||
|     $target = idx($diffs, $target_id, end($diffs)); |     $target = idx($diffs, $target_id, end($diffs)); | ||||||
|  |  | ||||||
| @@ -210,14 +209,10 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       $commits_for_links = array(); |       $commits_for_links = array(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $revision_detail = id(new DifferentialRevisionDetailView()) |     $header = $this->buildHeader($revision); | ||||||
|       ->setUser($viewer) |     $subheader = $this->buildSubheaderView($revision); | ||||||
|       ->setRevision($revision) |     $details = $this->buildDetails($revision, $field_list); | ||||||
|       ->setDiff(end($diffs)) |     $curtain = $this->buildCurtain($revision); | ||||||
|       ->setCustomFields($field_list) |  | ||||||
|       ->setURI($request->getRequestURI()); |  | ||||||
|  |  | ||||||
|     $actions = $this->getRevisionActions($revision); |  | ||||||
|  |  | ||||||
|     $whitespace = $request->getStr( |     $whitespace = $request->getStr( | ||||||
|       'whitespace', |       'whitespace', | ||||||
| @@ -232,21 +227,16 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       $symbol_indexes = array(); |       $symbol_indexes = array(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $revision_detail->setActions($actions); |  | ||||||
|     $revision_detail->setUser($viewer); |  | ||||||
|  |  | ||||||
|     $revision_detail_box = $revision_detail->render(); |  | ||||||
|  |  | ||||||
|     $revision_warnings = $this->buildRevisionWarnings( |     $revision_warnings = $this->buildRevisionWarnings( | ||||||
|       $revision, |       $revision, | ||||||
|       $field_list, |       $field_list, | ||||||
|       $warning_handle_map, |       $warning_handle_map, | ||||||
|       $handles); |       $handles); | ||||||
|  |     $info_view = null; | ||||||
|     if ($revision_warnings) { |     if ($revision_warnings) { | ||||||
|       $revision_warnings = id(new PHUIInfoView()) |       $info_view = id(new PHUIInfoView()) | ||||||
|         ->setSeverity(PHUIInfoView::SEVERITY_WARNING) |         ->setSeverity(PHUIInfoView::SEVERITY_WARNING) | ||||||
|         ->setErrors($revision_warnings); |         ->setErrors($revision_warnings); | ||||||
|       $revision_detail_box->setInfoView($revision_warnings); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $detail_diffs = array_select_keys( |     $detail_diffs = array_select_keys( | ||||||
| @@ -277,39 +267,31 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       $comment_view->setQuoteTargetID('comment-content'); |       $comment_view->setQuoteTargetID('comment-content'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $wrap_id = celerity_generate_unique_node_id(); |     $changeset_view = id(new DifferentialChangesetListView()) | ||||||
|     $comment_view = phutil_tag( |       ->setChangesets($changesets) | ||||||
|       'div', |       ->setVisibleChangesets($visible_changesets) | ||||||
|       array( |       ->setStandaloneURI('/differential/changeset/') | ||||||
|         'id' => $wrap_id, |       ->setRawFileURIs( | ||||||
|       ), |         '/differential/changeset/?view=old', | ||||||
|       $comment_view); |         '/differential/changeset/?view=new') | ||||||
|  |       ->setUser($viewer) | ||||||
|  |       ->setDiff($target) | ||||||
|  |       ->setRenderingReferences($rendering_references) | ||||||
|  |       ->setVsMap($vs_map) | ||||||
|  |       ->setWhitespace($whitespace) | ||||||
|  |       ->setSymbolIndexes($symbol_indexes) | ||||||
|  |       ->setTitle(pht('Diff %s', $target->getID())) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); | ||||||
|  |  | ||||||
|     $changeset_view = new DifferentialChangesetListView(); |     if ($repository) { | ||||||
|     $changeset_view->setChangesets($changesets); |       $changeset_view->setRepository($repository); | ||||||
|     $changeset_view->setVisibleChangesets($visible_changesets); |     } | ||||||
|  |  | ||||||
|     if (!$viewer_is_anonymous) { |     if (!$viewer_is_anonymous) { | ||||||
|       $changeset_view->setInlineCommentControllerURI( |       $changeset_view->setInlineCommentControllerURI( | ||||||
|         '/differential/comment/inline/edit/'.$revision->getID().'/'); |         '/differential/comment/inline/edit/'.$revision->getID().'/'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $changeset_view->setStandaloneURI('/differential/changeset/'); |  | ||||||
|     $changeset_view->setRawFileURIs( |  | ||||||
|       '/differential/changeset/?view=old', |  | ||||||
|       '/differential/changeset/?view=new'); |  | ||||||
|  |  | ||||||
|     $changeset_view->setUser($viewer); |  | ||||||
|     $changeset_view->setDiff($target); |  | ||||||
|     $changeset_view->setRenderingReferences($rendering_references); |  | ||||||
|     $changeset_view->setVsMap($vs_map); |  | ||||||
|     $changeset_view->setWhitespace($whitespace); |  | ||||||
|     if ($repository) { |  | ||||||
|       $changeset_view->setRepository($repository); |  | ||||||
|     } |  | ||||||
|     $changeset_view->setSymbolIndexes($symbol_indexes); |  | ||||||
|     $changeset_view->setTitle(pht('Diff %s', $target->getID())); |  | ||||||
|  |  | ||||||
|     $diff_history = id(new DifferentialRevisionUpdateHistoryView()) |     $diff_history = id(new DifferentialRevisionUpdateHistoryView()) | ||||||
|       ->setUser($viewer) |       ->setUser($viewer) | ||||||
|       ->setDiffs($diffs) |       ->setDiffs($diffs) | ||||||
| @@ -344,6 +326,233 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|  |  | ||||||
|     $comment_form = null; |     $comment_form = null; | ||||||
|     if (!$viewer_is_anonymous) { |     if (!$viewer_is_anonymous) { | ||||||
|  |       $comment_form = $this->buildCommentForm($revision, $field_list); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $signatures = DifferentialRequiredSignaturesField::loadForRevision( | ||||||
|  |       $revision); | ||||||
|  |     $missing_signatures = false; | ||||||
|  |     foreach ($signatures as $phid => $signed) { | ||||||
|  |       if (!$signed) { | ||||||
|  |         $missing_signatures = true; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $footer = array(); | ||||||
|  |     $signature_message = null; | ||||||
|  |     if ($missing_signatures) { | ||||||
|  |       $signature_message = id(new PHUIInfoView()) | ||||||
|  |         ->setTitle(pht('Content Hidden')) | ||||||
|  |         ->appendChild( | ||||||
|  |           pht( | ||||||
|  |             'The content of this revision is hidden until the author has '. | ||||||
|  |             'signed all of the required legal agreements.')); | ||||||
|  |     } else { | ||||||
|  |       $footer[] = | ||||||
|  |         array( | ||||||
|  |           $diff_history, | ||||||
|  |           $warning, | ||||||
|  |           $local_view, | ||||||
|  |           $toc_view, | ||||||
|  |           $other_view, | ||||||
|  |           $changeset_view, | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if ($comment_form) { | ||||||
|  |       $footer[] = $comment_form; | ||||||
|  |     } else { | ||||||
|  |       // TODO: For now, just use this to get "Login to Comment". | ||||||
|  |       $footer[] = id(new PhabricatorApplicationTransactionCommentView()) | ||||||
|  |         ->setUser($viewer) | ||||||
|  |         ->setRequestURI($request->getRequestURI()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $object_id = 'D'.$revision->getID(); | ||||||
|  |     $operations_box = $this->buildOperationsBox($revision); | ||||||
|  |  | ||||||
|  |     $crumbs = $this->buildApplicationCrumbs(); | ||||||
|  |     $crumbs->addTextCrumb($object_id, '/'.$object_id); | ||||||
|  |     $crumbs->setBorder(true); | ||||||
|  |  | ||||||
|  |     $prefs = $viewer->loadPreferences(); | ||||||
|  |     $pref_filetree = PhabricatorUserPreferences::PREFERENCE_DIFF_FILETREE; | ||||||
|  |     $nav = null; | ||||||
|  |     if ($prefs->getPreference($pref_filetree)) { | ||||||
|  |       $collapsed = $prefs->getPreference( | ||||||
|  |         PhabricatorUserPreferences::PREFERENCE_NAV_COLLAPSED, | ||||||
|  |         false); | ||||||
|  |  | ||||||
|  |       $nav = id(new DifferentialChangesetFileTreeSideNavBuilder()) | ||||||
|  |         ->setTitle('D'.$revision->getID()) | ||||||
|  |         ->setBaseURI(new PhutilURI('/D'.$revision->getID())) | ||||||
|  |         ->setCollapsed((bool)$collapsed) | ||||||
|  |         ->build($changesets); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Haunt Mode | ||||||
|  |     $pane_id = celerity_generate_unique_node_id(); | ||||||
|  |     Javelin::initBehavior( | ||||||
|  |       'differential-keyboard-navigation', | ||||||
|  |       array( | ||||||
|  |         'haunt' => $pane_id, | ||||||
|  |       )); | ||||||
|  |     Javelin::initBehavior('differential-user-select'); | ||||||
|  |  | ||||||
|  |     $view = id(new PHUITwoColumnView()) | ||||||
|  |       ->setHeader($header) | ||||||
|  |       ->setSubheader($subheader) | ||||||
|  |       ->setCurtain($curtain) | ||||||
|  |       ->setID($pane_id) | ||||||
|  |       ->setMainColumn(array( | ||||||
|  |         $operations_box, | ||||||
|  |         $info_view, | ||||||
|  |         $details, | ||||||
|  |         $diff_detail_box, | ||||||
|  |         $unit_box, | ||||||
|  |         $comment_view, | ||||||
|  |         $signature_message, | ||||||
|  |       )) | ||||||
|  |       ->setFooter($footer); | ||||||
|  |  | ||||||
|  |     $page =  $this->newPage() | ||||||
|  |       ->setTitle($object_id.' '.$revision->getTitle()) | ||||||
|  |       ->setCrumbs($crumbs) | ||||||
|  |       ->setPageObjectPHIDs(array($revision->getPHID())) | ||||||
|  |       ->appendChild($view); | ||||||
|  |  | ||||||
|  |     if ($nav) { | ||||||
|  |       $page->setNavigation($nav); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return $page; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   private function buildHeader(DifferentialRevision $revision) { | ||||||
|  |     $view = id(new PHUIHeaderView()) | ||||||
|  |       ->setHeader($revision->getTitle($revision)) | ||||||
|  |       ->setUser($this->getViewer()) | ||||||
|  |       ->setPolicyObject($revision) | ||||||
|  |       ->setHeaderIcon('fa-cog'); | ||||||
|  |  | ||||||
|  |     $status = $revision->getStatus(); | ||||||
|  |     $status_name = | ||||||
|  |       DifferentialRevisionStatus::renderFullDescription($status); | ||||||
|  |  | ||||||
|  |     $view->addProperty(PHUIHeaderView::PROPERTY_STATUS, $status_name); | ||||||
|  |  | ||||||
|  |     return $view; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   private function buildSubheaderView(DifferentialRevision $revision) { | ||||||
|  |     $viewer = $this->getViewer(); | ||||||
|  |  | ||||||
|  |     $author_phid = $revision->getAuthorPHID(); | ||||||
|  |  | ||||||
|  |     $author = $viewer->renderHandle($author_phid)->render(); | ||||||
|  |     $date = phabricator_datetime($revision->getDateCreated(), $viewer); | ||||||
|  |     $author = phutil_tag('strong', array(), $author); | ||||||
|  |  | ||||||
|  |     $handles = $viewer->loadHandles(array($author_phid)); | ||||||
|  |     $image_uri = $handles[$author_phid]->getImageURI(); | ||||||
|  |     $image_href = $handles[$author_phid]->getURI(); | ||||||
|  |  | ||||||
|  |     $content = pht('Authored by %s on %s.', $author, $date); | ||||||
|  |  | ||||||
|  |     return id(new PHUIHeadThingView()) | ||||||
|  |       ->setImage($image_uri) | ||||||
|  |       ->setImageHref($image_href) | ||||||
|  |       ->setContent($content); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   private function buildDetails( | ||||||
|  |     DifferentialRevision $revision, | ||||||
|  |     $custom_fields) { | ||||||
|  |     $viewer = $this->getViewer(); | ||||||
|  |     $properties = id(new PHUIPropertyListView()) | ||||||
|  |       ->setUser($viewer); | ||||||
|  |  | ||||||
|  |     if ($custom_fields) { | ||||||
|  |       $custom_fields->appendFieldsToPropertyList( | ||||||
|  |         $revision, | ||||||
|  |         $viewer, | ||||||
|  |         $properties); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $header = id(new PHUIHeaderView()) | ||||||
|  |       ->setHeader(pht('DETAILS')); | ||||||
|  |  | ||||||
|  |     return id(new PHUIObjectBoxView()) | ||||||
|  |       ->setHeader($header) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||||
|  |       ->appendChild($properties); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   private function buildCurtain(DifferentialRevision $revision) { | ||||||
|  |     $viewer = $this->getViewer(); | ||||||
|  |     $revision_id = $revision->getID(); | ||||||
|  |     $revision_phid = $revision->getPHID(); | ||||||
|  |     $curtain = $this->newCurtainView($revision); | ||||||
|  |  | ||||||
|  |     $can_edit = PhabricatorPolicyFilter::hasCapability( | ||||||
|  |       $viewer, | ||||||
|  |       $revision, | ||||||
|  |       PhabricatorPolicyCapability::CAN_EDIT); | ||||||
|  |  | ||||||
|  |     $curtain->addAction( | ||||||
|  |       id(new PhabricatorActionView()) | ||||||
|  |         ->setIcon('fa-pencil') | ||||||
|  |         ->setHref("/differential/revision/edit/{$revision_id}/") | ||||||
|  |         ->setName(pht('Edit Revision')) | ||||||
|  |         ->setDisabled(!$can_edit) | ||||||
|  |         ->setWorkflow(!$can_edit)); | ||||||
|  |  | ||||||
|  |     $curtain->addAction( | ||||||
|  |       id(new PhabricatorActionView()) | ||||||
|  |         ->setIcon('fa-upload') | ||||||
|  |         ->setHref("/differential/revision/update/{$revision_id}/") | ||||||
|  |         ->setName(pht('Update Diff')) | ||||||
|  |         ->setDisabled(!$can_edit) | ||||||
|  |         ->setWorkflow(!$can_edit)); | ||||||
|  |  | ||||||
|  |     $this->requireResource('phabricator-object-selector-css'); | ||||||
|  |     $this->requireResource('javelin-behavior-phabricator-object-selector'); | ||||||
|  |  | ||||||
|  |     $curtain->addAction( | ||||||
|  |       id(new PhabricatorActionView()) | ||||||
|  |         ->setIcon('fa-link') | ||||||
|  |         ->setName(pht('Edit Dependencies')) | ||||||
|  |         ->setHref("/search/attach/{$revision_phid}/DREV/dependencies/") | ||||||
|  |         ->setWorkflow(true) | ||||||
|  |         ->setDisabled(!$can_edit)); | ||||||
|  |  | ||||||
|  |     $maniphest = 'PhabricatorManiphestApplication'; | ||||||
|  |     if (PhabricatorApplication::isClassInstalled($maniphest)) { | ||||||
|  |       $curtain->addAction( | ||||||
|  |         id(new PhabricatorActionView()) | ||||||
|  |           ->setIcon('fa-anchor') | ||||||
|  |           ->setName(pht('Edit Maniphest Tasks')) | ||||||
|  |           ->setHref("/search/attach/{$revision_phid}/TASK/") | ||||||
|  |           ->setWorkflow(true) | ||||||
|  |           ->setDisabled(!$can_edit)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $request_uri = $this->getRequest()->getRequestURI(); | ||||||
|  |     $curtain->addAction( | ||||||
|  |       id(new PhabricatorActionView()) | ||||||
|  |         ->setIcon('fa-download') | ||||||
|  |         ->setName(pht('Download Raw Diff')) | ||||||
|  |         ->setHref($request_uri->alter('download', 'true'))); | ||||||
|  |  | ||||||
|  |     return $curtain; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   private function buildCommentForm( | ||||||
|  |     DifferentialRevision $revision, | ||||||
|  |     $field_list) { | ||||||
|  |  | ||||||
|  |     $viewer = $this->getViewer(); | ||||||
|  |  | ||||||
|     $draft = id(new PhabricatorDraft())->loadOneWhere( |     $draft = id(new PhabricatorDraft())->loadOneWhere( | ||||||
|       'authorPHID = %s AND draftKey = %s', |       'authorPHID = %s AND draftKey = %s', | ||||||
|       $viewer->getPHID(), |       $viewer->getPHID(), | ||||||
| @@ -361,8 +570,8 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|       $comment_form = new DifferentialAddCommentView(); |     $comment_form = id(new DifferentialAddCommentView()) | ||||||
|       $comment_form->setRevision($revision); |       ->setRevision($revision); | ||||||
|  |  | ||||||
|     $review_warnings = array(); |     $review_warnings = array(); | ||||||
|     foreach ($field_list->getFields() as $field) { |     foreach ($field_list->getFields() as $field) { | ||||||
| @@ -377,15 +586,15 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       $comment_form->setInfoView($review_warnings_panel); |       $comment_form->setInfoView($review_warnings_panel); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|       $comment_form->setActions($this->getRevisionCommentActions($revision)); |  | ||||||
|     $action_uri = $this->getApplicationURI( |     $action_uri = $this->getApplicationURI( | ||||||
|       'comment/save/'.$revision->getID().'/'); |       'comment/save/'.$revision->getID().'/'); | ||||||
|  |  | ||||||
|       $comment_form->setActionURI($action_uri); |     $comment_form->setActions($this->getRevisionCommentActions($revision)) | ||||||
|       $comment_form->setUser($viewer); |       ->setActionURI($action_uri) | ||||||
|       $comment_form->setDraft($draft); |       ->setUser($viewer) | ||||||
|       $comment_form->setReviewers(mpull($reviewers, 'getFullName', 'getPHID')); |       ->setDraft($draft) | ||||||
|       $comment_form->setCCs(mpull($ccs, 'getFullName', 'getPHID')); |       ->setReviewers(mpull($reviewers, 'getFullName', 'getPHID')) | ||||||
|  |       ->setCCs(mpull($ccs, 'getFullName', 'getPHID')); | ||||||
|  |  | ||||||
|     // TODO: This just makes the "Z" key work. Generalize this and remove |     // TODO: This just makes the "Z" key work. Generalize this and remove | ||||||
|     // it at some point. |     // it at some point. | ||||||
| @@ -395,162 +604,7 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|         'class' => 'differential-add-comment-panel', |         'class' => 'differential-add-comment-panel', | ||||||
|       ), |       ), | ||||||
|       $comment_form); |       $comment_form); | ||||||
|     } |     return $comment_form; | ||||||
|  |  | ||||||
|     $pane_id = celerity_generate_unique_node_id(); |  | ||||||
|     Javelin::initBehavior( |  | ||||||
|       'differential-keyboard-navigation', |  | ||||||
|       array( |  | ||||||
|         'haunt' => $pane_id, |  | ||||||
|       )); |  | ||||||
|     Javelin::initBehavior('differential-user-select'); |  | ||||||
|  |  | ||||||
|     $page_pane = id(new DifferentialPrimaryPaneView()) |  | ||||||
|       ->setID($pane_id) |  | ||||||
|       ->appendChild($comment_view); |  | ||||||
|  |  | ||||||
|     $signatures = DifferentialRequiredSignaturesField::loadForRevision( |  | ||||||
|       $revision); |  | ||||||
|     $missing_signatures = false; |  | ||||||
|     foreach ($signatures as $phid => $signed) { |  | ||||||
|       if (!$signed) { |  | ||||||
|         $missing_signatures = true; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if ($missing_signatures) { |  | ||||||
|       $signature_message = id(new PHUIInfoView()) |  | ||||||
|         ->setErrors( |  | ||||||
|           array( |  | ||||||
|             array( |  | ||||||
|               phutil_tag('strong', array(), pht('Content Hidden:')), |  | ||||||
|               ' ', |  | ||||||
|               pht( |  | ||||||
|                 'The content of this revision is hidden until the author has '. |  | ||||||
|                 'signed all of the required legal agreements.'), |  | ||||||
|             ), |  | ||||||
|           )); |  | ||||||
|       $page_pane->appendChild($signature_message); |  | ||||||
|     } else { |  | ||||||
|       $page_pane->appendChild( |  | ||||||
|         array( |  | ||||||
|           $diff_history, |  | ||||||
|           $warning, |  | ||||||
|           $local_view, |  | ||||||
|           $toc_view, |  | ||||||
|           $other_view, |  | ||||||
|           $changeset_view, |  | ||||||
|         )); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if ($comment_form) { |  | ||||||
|       $page_pane->appendChild($comment_form); |  | ||||||
|     } else { |  | ||||||
|       // TODO: For now, just use this to get "Login to Comment". |  | ||||||
|       $page_pane->appendChild( |  | ||||||
|         id(new PhabricatorApplicationTransactionCommentView()) |  | ||||||
|           ->setUser($viewer) |  | ||||||
|           ->setRequestURI($request->getRequestURI())); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $object_id = 'D'.$revision->getID(); |  | ||||||
|  |  | ||||||
|     $operations_box = $this->buildOperationsBox($revision); |  | ||||||
|  |  | ||||||
|     $content = array( |  | ||||||
|       $operations_box, |  | ||||||
|       $revision_detail_box, |  | ||||||
|       $diff_detail_box, |  | ||||||
|       $unit_box, |  | ||||||
|       $page_pane, |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     $crumbs = $this->buildApplicationCrumbs(); |  | ||||||
|     $crumbs->addTextCrumb($object_id, '/'.$object_id); |  | ||||||
|  |  | ||||||
|     $prefs = $viewer->loadPreferences(); |  | ||||||
|  |  | ||||||
|     $pref_filetree = PhabricatorUserPreferences::PREFERENCE_DIFF_FILETREE; |  | ||||||
|     if ($prefs->getPreference($pref_filetree)) { |  | ||||||
|       $collapsed = $prefs->getPreference( |  | ||||||
|         PhabricatorUserPreferences::PREFERENCE_NAV_COLLAPSED, |  | ||||||
|         false); |  | ||||||
|  |  | ||||||
|       $nav = id(new DifferentialChangesetFileTreeSideNavBuilder()) |  | ||||||
|         ->setTitle('D'.$revision->getID()) |  | ||||||
|         ->setBaseURI(new PhutilURI('/D'.$revision->getID())) |  | ||||||
|         ->setCollapsed((bool)$collapsed) |  | ||||||
|         ->build($changesets); |  | ||||||
|     } else { |  | ||||||
|       $nav = null; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $page = $this->newPage() |  | ||||||
|       ->setTitle($object_id.' '.$revision->getTitle()) |  | ||||||
|       ->setCrumbs($crumbs) |  | ||||||
|       ->setPageObjectPHIDs(array($revision->getPHID())) |  | ||||||
|       ->appendChild($content); |  | ||||||
|  |  | ||||||
|     if ($nav) { |  | ||||||
|       $page->setNavigation($nav); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return $page; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   private function getRevisionActions(DifferentialRevision $revision) { |  | ||||||
|     $viewer = $this->getRequest()->getUser(); |  | ||||||
|     $revision_id = $revision->getID(); |  | ||||||
|     $revision_phid = $revision->getPHID(); |  | ||||||
|  |  | ||||||
|     $can_edit = PhabricatorPolicyFilter::hasCapability( |  | ||||||
|       $viewer, |  | ||||||
|       $revision, |  | ||||||
|       PhabricatorPolicyCapability::CAN_EDIT); |  | ||||||
|  |  | ||||||
|     $actions = array(); |  | ||||||
|  |  | ||||||
|     $actions[] = id(new PhabricatorActionView()) |  | ||||||
|       ->setIcon('fa-pencil') |  | ||||||
|       ->setHref("/differential/revision/edit/{$revision_id}/") |  | ||||||
|       ->setName(pht('Edit Revision')) |  | ||||||
|       ->setDisabled(!$can_edit) |  | ||||||
|       ->setWorkflow(!$can_edit); |  | ||||||
|  |  | ||||||
|     $actions[] = id(new PhabricatorActionView()) |  | ||||||
|       ->setIcon('fa-upload') |  | ||||||
|       ->setHref("/differential/revision/update/{$revision_id}/") |  | ||||||
|       ->setName(pht('Update Diff')) |  | ||||||
|       ->setDisabled(!$can_edit) |  | ||||||
|       ->setWorkflow(!$can_edit); |  | ||||||
|  |  | ||||||
|     $this->requireResource('phabricator-object-selector-css'); |  | ||||||
|     $this->requireResource('javelin-behavior-phabricator-object-selector'); |  | ||||||
|  |  | ||||||
|     $actions[] = id(new PhabricatorActionView()) |  | ||||||
|       ->setIcon('fa-link') |  | ||||||
|       ->setName(pht('Edit Dependencies')) |  | ||||||
|       ->setHref("/search/attach/{$revision_phid}/DREV/dependencies/") |  | ||||||
|       ->setWorkflow(true) |  | ||||||
|       ->setDisabled(!$can_edit); |  | ||||||
|  |  | ||||||
|     $maniphest = 'PhabricatorManiphestApplication'; |  | ||||||
|     if (PhabricatorApplication::isClassInstalled($maniphest)) { |  | ||||||
|       $actions[] = id(new PhabricatorActionView()) |  | ||||||
|         ->setIcon('fa-anchor') |  | ||||||
|         ->setName(pht('Edit Maniphest Tasks')) |  | ||||||
|         ->setHref("/search/attach/{$revision_phid}/TASK/") |  | ||||||
|         ->setWorkflow(true) |  | ||||||
|         ->setDisabled(!$can_edit); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $request_uri = $this->getRequest()->getRequestURI(); |  | ||||||
|     $actions[] = id(new PhabricatorActionView()) |  | ||||||
|       ->setIcon('fa-download') |  | ||||||
|       ->setName(pht('Download Raw Diff')) |  | ||||||
|       ->setHref($request_uri->alter('download', 'true')); |  | ||||||
|  |  | ||||||
|     return $actions; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   private function getRevisionCommentActions(DifferentialRevision $revision) { |   private function getRevisionCommentActions(DifferentialRevision $revision) { | ||||||
| @@ -558,7 +612,7 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       DifferentialAction::ACTION_COMMENT => true, |       DifferentialAction::ACTION_COMMENT => true, | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     $viewer = $this->getRequest()->getUser(); |     $viewer = $this->getViewer(); | ||||||
|     $viewer_phid = $viewer->getPHID(); |     $viewer_phid = $viewer->getPHID(); | ||||||
|     $viewer_is_owner = ($viewer_phid == $revision->getAuthorPHID()); |     $viewer_is_owner = ($viewer_phid == $revision->getAuthorPHID()); | ||||||
|     $viewer_is_reviewer = in_array($viewer_phid, $revision->getReviewers()); |     $viewer_is_reviewer = in_array($viewer_phid, $revision->getReviewers()); | ||||||
| @@ -814,11 +868,12 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|     $viewer = $this->getViewer(); |     $viewer = $this->getViewer(); | ||||||
|  |  | ||||||
|     $header = id(new PHUIHeaderView()) |     $header = id(new PHUIHeaderView()) | ||||||
|       ->setHeader(pht('Recent Similar Open Revisions')); |       ->setHeader(pht('Recent Similar Revisions')); | ||||||
|  |  | ||||||
|     $view = id(new DifferentialRevisionListView()) |     $view = id(new DifferentialRevisionListView()) | ||||||
|       ->setHeader($header) |       ->setHeader($header) | ||||||
|       ->setRevisions($revisions) |       ->setRevisions($revisions) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||||
|       ->setUser($viewer); |       ->setUser($viewer); | ||||||
|  |  | ||||||
|     $phids = $view->getRequiredHandlePHIDs(); |     $phids = $view->getRequiredHandlePHIDs(); | ||||||
| @@ -845,7 +900,7 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|     assert_instances_of($changesets,    'DifferentialChangeset'); |     assert_instances_of($changesets,    'DifferentialChangeset'); | ||||||
|     assert_instances_of($vs_changesets, 'DifferentialChangeset'); |     assert_instances_of($vs_changesets, 'DifferentialChangeset'); | ||||||
|  |  | ||||||
|     $viewer = $this->getRequest()->getUser(); |     $viewer = $this->getViewer(); | ||||||
|  |  | ||||||
|     id(new DifferentialHunkQuery()) |     id(new DifferentialHunkQuery()) | ||||||
|       ->setViewer($viewer) |       ->setViewer($viewer) | ||||||
| @@ -978,7 +1033,8 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     $box = id(new PHUIObjectBoxView()) |     $box = id(new PHUIObjectBoxView()) | ||||||
|       ->setHeaderText(pht('Diff Detail')) |       ->setHeaderText(pht('DIFF DETAIL')) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||||
|       ->setUser($viewer); |       ->setUser($viewer); | ||||||
|  |  | ||||||
|     $last_tab = null; |     $last_tab = null; | ||||||
| @@ -1061,7 +1117,8 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     $box_view = id(new PHUIObjectBoxView()) |     $box_view = id(new PHUIObjectBoxView()) | ||||||
|       ->setHeaderText(pht('Active Operations')); |       ->setHeaderText(pht('ACTIVE OPERATIONS')) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); | ||||||
|  |  | ||||||
|     return id(new DrydockRepositoryOperationStatusView()) |     return id(new DrydockRepositoryOperationStatusView()) | ||||||
|       ->setUser($viewer) |       ->setUser($viewer) | ||||||
| @@ -1078,10 +1135,6 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       return null; |       return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (!$diff->getBuildable()) { |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $interesting_messages = array(); |     $interesting_messages = array(); | ||||||
|     foreach ($diff->getUnitMessages() as $message) { |     foreach ($diff->getUnitMessages() as $message) { | ||||||
|       switch ($message->getResult()) { |       switch ($message->getResult()) { | ||||||
| @@ -1109,6 +1162,7 @@ final class DifferentialRevisionViewController extends DifferentialController { | |||||||
|       ->setBuildable($diff->getBuildable()) |       ->setBuildable($diff->getBuildable()) | ||||||
|       ->setUnitMessages($diff->getUnitMessages()) |       ->setUnitMessages($diff->getUnitMessages()) | ||||||
|       ->setLimit(5) |       ->setLimit(5) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||||
|       ->setShowViewAll(true); |       ->setShowViewAll(true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ final class DifferentialAuthorField | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   public function shouldAppearInPropertyView() { |   public function shouldAppearInPropertyView() { | ||||||
|     return true; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   public function renderPropertyViewLabel() { |   public function renderPropertyViewLabel() { | ||||||
|   | |||||||
| @@ -70,8 +70,6 @@ final class DifferentialHovercardEngineExtension | |||||||
|       $hovercard->addField(pht('Summary'), $summary); |       $hovercard->addField(pht('Summary'), $summary); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $tag = DifferentialRevisionDetailView::renderTagForRevision($revision); |  | ||||||
|     $hovercard->addTag($tag); |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -163,7 +163,7 @@ final class DifferentialAddCommentView extends AphrontView { | |||||||
|     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business'); |     $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business'); | ||||||
|     $header_text = $is_serious |     $header_text = $is_serious | ||||||
|       ? pht('Add Comment') |       ? pht('Add Comment') | ||||||
|       : pht('Leap Into Action'); |       : pht('Leap Into Action!'); | ||||||
|  |  | ||||||
|     $header = id(new PHUIHeaderView()) |     $header = id(new PHUIHeaderView()) | ||||||
|       ->setHeader($header_text); |       ->setHeader($header_text); | ||||||
|   | |||||||
| @@ -8,6 +8,7 @@ final class DifferentialChangesetListView extends AphrontView { | |||||||
|   private $inlineURI; |   private $inlineURI; | ||||||
|   private $renderURI = '/differential/changeset/'; |   private $renderURI = '/differential/changeset/'; | ||||||
|   private $whitespace; |   private $whitespace; | ||||||
|  |   private $background; | ||||||
|  |  | ||||||
|   private $standaloneURI; |   private $standaloneURI; | ||||||
|   private $leftRawFileURI; |   private $leftRawFileURI; | ||||||
| @@ -112,6 +113,11 @@ final class DifferentialChangesetListView extends AphrontView { | |||||||
|     return $this; |     return $this; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   public function setBackground($background) { | ||||||
|  |     $this->background = $background; | ||||||
|  |     return $this; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   public function render() { |   public function render() { | ||||||
|     $viewer = $this->getViewer(); |     $viewer = $this->getViewer(); | ||||||
|  |  | ||||||
| @@ -254,6 +260,7 @@ final class DifferentialChangesetListView extends AphrontView { | |||||||
|     $object_box = id(new PHUIObjectBoxView()) |     $object_box = id(new PHUIObjectBoxView()) | ||||||
|       ->setHeader($header) |       ->setHeader($header) | ||||||
|       ->setCollapsed(true) |       ->setCollapsed(true) | ||||||
|  |       ->setBackground($this->background) | ||||||
|       ->appendChild($content); |       ->appendChild($content); | ||||||
|  |  | ||||||
|     return $object_box; |     return $object_box; | ||||||
|   | |||||||
| @@ -127,6 +127,7 @@ final class DifferentialLocalCommitsView extends AphrontView { | |||||||
|  |  | ||||||
|     return id(new PHUIObjectBoxView()) |     return id(new PHUIObjectBoxView()) | ||||||
|       ->setHeaderText(pht('Local Commits')) |       ->setHeaderText(pht('Local Commits')) | ||||||
|  |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||||
|       ->setTable($table); |       ->setTable($table); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,23 +0,0 @@ | |||||||
| <?php |  | ||||||
|  |  | ||||||
| final class DifferentialPrimaryPaneView extends AphrontView { |  | ||||||
|  |  | ||||||
|   private $id; |  | ||||||
|  |  | ||||||
|   public function setID($id) { |  | ||||||
|     $this->id = $id; |  | ||||||
|     return $this; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function render() { |  | ||||||
|  |  | ||||||
|     return phutil_tag( |  | ||||||
|       'div', |  | ||||||
|       array( |  | ||||||
|         'class' => 'differential-primary-pane', |  | ||||||
|         'id'    => $this->id, |  | ||||||
|       ), |  | ||||||
|       $this->renderChildren()); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,121 +0,0 @@ | |||||||
| <?php |  | ||||||
|  |  | ||||||
| final class DifferentialRevisionDetailView extends AphrontView { |  | ||||||
|  |  | ||||||
|   private $revision; |  | ||||||
|   private $actions; |  | ||||||
|   private $customFields; |  | ||||||
|   private $diff; |  | ||||||
|   private $uri; |  | ||||||
|   private $actionList; |  | ||||||
|  |  | ||||||
|   public function setURI($uri) { |  | ||||||
|     $this->uri = $uri; |  | ||||||
|     return $this; |  | ||||||
|   } |  | ||||||
|   public function getURI() { |  | ||||||
|     return $this->uri; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function setDiff(DifferentialDiff $diff) { |  | ||||||
|     $this->diff = $diff; |  | ||||||
|     return $this; |  | ||||||
|   } |  | ||||||
|   private function getDiff() { |  | ||||||
|     return $this->diff; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function setRevision(DifferentialRevision $revision) { |  | ||||||
|     $this->revision = $revision; |  | ||||||
|     return $this; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function setActions(array $actions) { |  | ||||||
|     $this->actions = $actions; |  | ||||||
|     return $this; |  | ||||||
|   } |  | ||||||
|   private function getActions() { |  | ||||||
|     return $this->actions; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function setActionList(PhabricatorActionListView $list) { |  | ||||||
|     $this->actionList = $list; |  | ||||||
|     return $this; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function getActionList() { |  | ||||||
|     return $this->actionList; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function setCustomFields(PhabricatorCustomFieldList $list) { |  | ||||||
|     $this->customFields = $list; |  | ||||||
|     return $this; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public function render() { |  | ||||||
|  |  | ||||||
|     $this->requireResource('differential-core-view-css'); |  | ||||||
|  |  | ||||||
|     $revision = $this->revision; |  | ||||||
|     $user = $this->getUser(); |  | ||||||
|  |  | ||||||
|     $header = $this->renderHeader($revision); |  | ||||||
|  |  | ||||||
|     $actions = id(new PhabricatorActionListView()) |  | ||||||
|       ->setUser($user) |  | ||||||
|       ->setObject($revision); |  | ||||||
|     foreach ($this->getActions() as $action) { |  | ||||||
|       $actions->addAction($action); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $properties = id(new PHUIPropertyListView()) |  | ||||||
|       ->setUser($user) |  | ||||||
|       ->setObject($revision); |  | ||||||
|  |  | ||||||
|     $properties->setHasKeyboardShortcuts(true); |  | ||||||
|     $properties->setActionList($actions); |  | ||||||
|     $this->setActionList($actions); |  | ||||||
|  |  | ||||||
|     $field_list = $this->customFields; |  | ||||||
|     if ($field_list) { |  | ||||||
|       $field_list->appendFieldsToPropertyList( |  | ||||||
|         $revision, |  | ||||||
|         $user, |  | ||||||
|         $properties); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $object_box = id(new PHUIObjectBoxView()) |  | ||||||
|       ->setHeader($header) |  | ||||||
|       ->addPropertyList($properties); |  | ||||||
|  |  | ||||||
|     return $object_box; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   private function renderHeader(DifferentialRevision $revision) { |  | ||||||
|     $view = id(new PHUIHeaderView()) |  | ||||||
|       ->setHeader($revision->getTitle($revision)) |  | ||||||
|       ->setUser($this->getUser()) |  | ||||||
|       ->setPolicyObject($revision); |  | ||||||
|  |  | ||||||
|     $status = $revision->getStatus(); |  | ||||||
|     $status_name = |  | ||||||
|       DifferentialRevisionStatus::renderFullDescription($status); |  | ||||||
|  |  | ||||||
|     $view->addProperty(PHUIHeaderView::PROPERTY_STATUS, $status_name); |  | ||||||
|  |  | ||||||
|     return $view; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public static function renderTagForRevision( |  | ||||||
|     DifferentialRevision $revision) { |  | ||||||
|  |  | ||||||
|     $status = $revision->getStatus(); |  | ||||||
|     $status_name = |  | ||||||
|       ArcanistDifferentialRevisionStatus::getNameForRevisionStatus($status); |  | ||||||
|  |  | ||||||
|     return id(new PHUITagView()) |  | ||||||
|       ->setType(PHUITagView::TYPE_STATE) |  | ||||||
|       ->setName($status_name); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -11,6 +11,7 @@ final class DifferentialRevisionListView extends AphrontView { | |||||||
|   private $header; |   private $header; | ||||||
|   private $noDataString; |   private $noDataString; | ||||||
|   private $noBox; |   private $noBox; | ||||||
|  |   private $background = null; | ||||||
|  |  | ||||||
|   public function setNoDataString($no_data_string) { |   public function setNoDataString($no_data_string) { | ||||||
|     $this->noDataString = $no_data_string; |     $this->noDataString = $no_data_string; | ||||||
| @@ -38,6 +39,11 @@ final class DifferentialRevisionListView extends AphrontView { | |||||||
|     return $this; |     return $this; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   public function setBackground($background) { | ||||||
|  |     $this->background = $background; | ||||||
|  |     return $this; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   public function getRequiredHandlePHIDs() { |   public function getRequiredHandlePHIDs() { | ||||||
|     $phids = array(); |     $phids = array(); | ||||||
|     foreach ($this->revisions as $revision) { |     foreach ($this->revisions as $revision) { | ||||||
| @@ -192,6 +198,7 @@ final class DifferentialRevisionListView extends AphrontView { | |||||||
|     if ($this->header && !$this->noBox) { |     if ($this->header && !$this->noBox) { | ||||||
|       $list->setFlush(true); |       $list->setFlush(true); | ||||||
|       $list = id(new PHUIObjectBoxView()) |       $list = id(new PHUIObjectBoxView()) | ||||||
|  |         ->setBackground($this->background) | ||||||
|         ->setObjectList($list); |         ->setObjectList($list); | ||||||
|  |  | ||||||
|       if ($this->header instanceof PHUIHeaderView) { |       if ($this->header instanceof PHUIHeaderView) { | ||||||
|   | |||||||
| @@ -305,7 +305,7 @@ final class DifferentialRevisionUpdateHistoryView extends AphrontView { | |||||||
|  |  | ||||||
|     return id(new PHUIObjectBoxView()) |     return id(new PHUIObjectBoxView()) | ||||||
|       ->setHeaderText(pht('Revision Update History')) |       ->setHeaderText(pht('Revision Update History')) | ||||||
|       ->setFlush(true) |       ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||||
|       ->setTable($content); |       ->setTable($content); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -214,13 +214,11 @@ final class DiffusionCommitController extends DiffusionController { | |||||||
|       // changes inline even if there are more than the soft limit. |       // changes inline even if there are more than the soft limit. | ||||||
|       $show_all_details = $request->getBool('show_all'); |       $show_all_details = $request->getBool('show_all'); | ||||||
|  |  | ||||||
|       $change_panel = new PHUIObjectBoxView(); |       $header = id(new PHUIHeaderView()) | ||||||
|       $header = new PHUIHeaderView(); |         ->setHeader(pht('Changes (%s)', new PhutilNumber($count))); | ||||||
|       $header->setHeader(pht('Changes (%s)', new PhutilNumber($count))); |  | ||||||
|       $change_panel->setID('toc'); |  | ||||||
|  |  | ||||||
|  |       $warning_view = null; | ||||||
|       if ($count > self::CHANGES_LIMIT && !$show_all_details) { |       if ($count > self::CHANGES_LIMIT && !$show_all_details) { | ||||||
|  |  | ||||||
|         $button = id(new PHUIButtonView()) |         $button = id(new PHUIButtonView()) | ||||||
|           ->setText(pht('Show All Changes')) |           ->setText(pht('Show All Changes')) | ||||||
|           ->setHref('?show_all=true') |           ->setHref('?show_all=true') | ||||||
| @@ -230,11 +228,9 @@ final class DiffusionCommitController extends DiffusionController { | |||||||
|         $warning_view = id(new PHUIInfoView()) |         $warning_view = id(new PHUIInfoView()) | ||||||
|           ->setSeverity(PHUIInfoView::SEVERITY_WARNING) |           ->setSeverity(PHUIInfoView::SEVERITY_WARNING) | ||||||
|           ->setTitle(pht('Very Large Commit')) |           ->setTitle(pht('Very Large Commit')) | ||||||
|  |           ->addButton($button) | ||||||
|           ->appendChild( |           ->appendChild( | ||||||
|             pht('This commit is very large. Load each file individually.')); |             pht('This commit is very large. Load each file individually.')); | ||||||
|  |  | ||||||
|         $change_panel->setInfoView($warning_view); |  | ||||||
|         $header->addActionLink($button); |  | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       $changesets = DiffusionPathChange::convertToDifferentialChangesets( |       $changesets = DiffusionPathChange::convertToDifferentialChangesets( | ||||||
| @@ -244,12 +240,11 @@ final class DiffusionCommitController extends DiffusionController { | |||||||
|       // TODO: This table and panel shouldn't really be separate, but we need |       // TODO: This table and panel shouldn't really be separate, but we need | ||||||
|       // to clean up the "Load All Files" interaction first. |       // to clean up the "Load All Files" interaction first. | ||||||
|       $change_table = $this->buildTableOfContents( |       $change_table = $this->buildTableOfContents( | ||||||
|         $changesets); |         $changesets, | ||||||
|  |         $header, | ||||||
|  |         $warning_view); | ||||||
|  |  | ||||||
|       $change_panel->setTable($change_table); |       $content[] = $change_table; | ||||||
|       $change_panel->setHeader($header); |  | ||||||
|  |  | ||||||
|       $content[] = $change_panel; |  | ||||||
|  |  | ||||||
|       $vcs = $repository->getVersionControlSystem(); |       $vcs = $repository->getVersionControlSystem(); | ||||||
|       switch ($vcs) { |       switch ($vcs) { | ||||||
| @@ -1017,12 +1012,21 @@ final class DiffusionCommitController extends DiffusionController { | |||||||
|     return $parser->processCorpus($corpus); |     return $parser->processCorpus($corpus); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   private function buildTableOfContents(array $changesets) { |   private function buildTableOfContents( | ||||||
|  |     array $changesets, | ||||||
|  |     $header, | ||||||
|  |     $info_view) { | ||||||
|  |  | ||||||
|     $drequest = $this->getDiffusionRequest(); |     $drequest = $this->getDiffusionRequest(); | ||||||
|     $viewer = $this->getViewer(); |     $viewer = $this->getViewer(); | ||||||
|  |  | ||||||
|     $toc_view = id(new PHUIDiffTableOfContentsListView()) |     $toc_view = id(new PHUIDiffTableOfContentsListView()) | ||||||
|       ->setUser($viewer); |       ->setUser($viewer) | ||||||
|  |       ->setHeader($header); | ||||||
|  |  | ||||||
|  |     if ($info_view) { | ||||||
|  |       $toc_view->setInfoView($info_view); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // TODO: This is hacky, we just want access to the linkX() methods on |     // TODO: This is hacky, we just want access to the linkX() methods on | ||||||
|     // DiffusionView. |     // DiffusionView. | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ final class HarbormasterUnitSummaryView extends AphrontView { | |||||||
|   private $limit; |   private $limit; | ||||||
|   private $excuse; |   private $excuse; | ||||||
|   private $showViewAll; |   private $showViewAll; | ||||||
|  |   private $background; | ||||||
|  |  | ||||||
|   public function setBuildable(HarbormasterBuildable $buildable) { |   public function setBuildable(HarbormasterBuildable $buildable) { | ||||||
|     $this->buildable = $buildable; |     $this->buildable = $buildable; | ||||||
| @@ -33,6 +34,11 @@ final class HarbormasterUnitSummaryView extends AphrontView { | |||||||
|     return $this; |     return $this; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   public function setBackground($background) { | ||||||
|  |     $this->background = $background; | ||||||
|  |     return $this; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   public function render() { |   public function render() { | ||||||
|     $messages = $this->messages; |     $messages = $this->messages; | ||||||
|     $buildable = $this->buildable; |     $buildable = $this->buildable; | ||||||
| @@ -54,9 +60,14 @@ final class HarbormasterUnitSummaryView extends AphrontView { | |||||||
|       $tag_icon = 'fa-ban'; |       $tag_icon = 'fa-ban'; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     $tag = id(new PHUITagView()) | ||||||
|  |       ->setType(PHUITagView::TYPE_SHADE) | ||||||
|  |       ->setShade($tag_color) | ||||||
|  |       ->setIcon($tag_icon) | ||||||
|  |       ->setName($tag_text); | ||||||
|  |  | ||||||
|     $header = id(new PHUIHeaderView()) |     $header = id(new PHUIHeaderView()) | ||||||
|       ->setHeader(pht('Unit Tests')) |       ->setHeader(array(pht('Unit Tests'), $tag)); | ||||||
|       ->setStatus($tag_icon, $tag_color, $tag_text); |  | ||||||
|  |  | ||||||
|     if ($this->showViewAll) { |     if ($this->showViewAll) { | ||||||
|       $view_all = id(new PHUIButtonView()) |       $view_all = id(new PHUIButtonView()) | ||||||
| @@ -98,6 +109,10 @@ final class HarbormasterUnitSummaryView extends AphrontView { | |||||||
|  |  | ||||||
|     $box->setTable($table); |     $box->setTable($table); | ||||||
|  |  | ||||||
|  |     if ($this->background) { | ||||||
|  |       $box->setBackground($this->background); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return $box; |     return $box; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,6 +4,9 @@ final class PHUIDiffTableOfContentsListView extends AphrontView { | |||||||
|  |  | ||||||
|   private $items = array(); |   private $items = array(); | ||||||
|   private $authorityPackages; |   private $authorityPackages; | ||||||
|  |   private $header; | ||||||
|  |   private $infoView; | ||||||
|  |   private $background; | ||||||
|  |  | ||||||
|   public function addItem(PHUIDiffTableOfContentsItemView $item) { |   public function addItem(PHUIDiffTableOfContentsItemView $item) { | ||||||
|     $this->items[] = $item; |     $this->items[] = $item; | ||||||
| @@ -20,6 +23,21 @@ final class PHUIDiffTableOfContentsListView extends AphrontView { | |||||||
|     return $this->authorityPackages; |     return $this->authorityPackages; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   public function setBackground($background) { | ||||||
|  |     $this->background = $background; | ||||||
|  |     return $this; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public function setHeader(PHUIHeaderView $header) { | ||||||
|  |     $this->header = $header; | ||||||
|  |     return $this; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public function setInfoView(PHUIInfoView $infoview) { | ||||||
|  |     $this->infoView = $infoview; | ||||||
|  |     return $this; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   public function render() { |   public function render() { | ||||||
|     $this->requireResource('differential-core-view-css'); |     $this->requireResource('differential-core-view-css'); | ||||||
|     $this->requireResource('differential-table-of-contents-css'); |     $this->requireResource('differential-table-of-contents-css'); | ||||||
| @@ -142,11 +160,24 @@ final class PHUIDiffTableOfContentsListView extends AphrontView { | |||||||
|       ->setAnchorName('toc') |       ->setAnchorName('toc') | ||||||
|       ->setNavigationMarker(true); |       ->setNavigationMarker(true); | ||||||
|  |  | ||||||
|     return id(new PHUIObjectBoxView()) |     $header = id(new PHUIHeaderView()) | ||||||
|       ->setHeaderText(pht('Table of Contents')) |       ->setHeader(pht('Table of Contents')); | ||||||
|  |  | ||||||
|  |     if ($this->header) { | ||||||
|  |       $header = $this->header; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $box = id(new PHUIObjectBoxView()) | ||||||
|  |       ->setHeader($header) | ||||||
|  |       ->setBackground($this->background) | ||||||
|       ->setTable($table) |       ->setTable($table) | ||||||
|       ->appendChild($anchor) |       ->appendChild($anchor) | ||||||
|       ->appendChild($buttons); |       ->appendChild($buttons); | ||||||
|  |  | ||||||
|  |     if ($this->infoView) { | ||||||
|  |       $box->setInfoView($this->infoView); | ||||||
|  |     } | ||||||
|  |     return $box; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| .differential-changeset { | .differential-changeset { | ||||||
|   position: relative; |   position: relative; | ||||||
|   margin: 0; |   margin: 0; | ||||||
|   padding-top: 32px; |   padding-top: 16px; | ||||||
|   overflow-x: auto; |   overflow-x: auto; | ||||||
|  |  | ||||||
|   /* Fixes what seems to be a layout bug in Firefox which causes scrollbars, |   /* Fixes what seems to be a layout bug in Firefox which causes scrollbars, | ||||||
| @@ -265,7 +265,7 @@ td.cov-I { | |||||||
|  |  | ||||||
| .differential-changeset h1 { | .differential-changeset h1 { | ||||||
|   font-size: {$biggestfontsize}; |   font-size: {$biggestfontsize}; | ||||||
|   padding: 2px 0 12px 12px; |   padding: 2px 0 20px 12px; | ||||||
|   line-height: 20px; |   line-height: 20px; | ||||||
|   color: #000; |   color: #000; | ||||||
| } | } | ||||||
| @@ -322,7 +322,7 @@ td.cov-I { | |||||||
|  |  | ||||||
| .differential-changeset-buttons { | .differential-changeset-buttons { | ||||||
|   float: right; |   float: right; | ||||||
|   margin-right: 8px; |   margin-right: 12px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .device-phone .differential-changeset-buttons { | .device-phone .differential-changeset-buttons { | ||||||
| @@ -362,3 +362,7 @@ tr.differential-inline-hidden { | |||||||
| tr.differential-inline-loading { | tr.differential-inline-loading { | ||||||
|   opacity: 0.5; |   opacity: 0.5; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .differential-review-stage { | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| .differential-primary-pane { | .differential-primary-pane { | ||||||
|   margin-bottom: 32px; |   margin-top: -20px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .differential-panel { | .differential-panel { | ||||||
| @@ -23,3 +23,7 @@ | |||||||
|   -ms-user-select: none; |   -ms-user-select: none; | ||||||
|   user-select: none; |   user-select: none; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .differential-content-hidden { | ||||||
|  |   margin: 0 0 24px 0; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -66,10 +66,6 @@ | |||||||
|   padding: 0; |   padding: 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| .phui-box.phui-box-blue-property .phui-header-header { |  | ||||||
|   text-transform: uppercase; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .phui-box.phui-box-blue-property .phui-header-header .phui-header-icon { | .phui-box.phui-box-blue-property .phui-header-header .phui-header-icon { | ||||||
|   margin-right: 6px; |   margin-right: 6px; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -52,6 +52,16 @@ div.phui-object-box.phui-object-box-flush { | |||||||
|   margin: 8px 8px 0 8px; |   margin: 8px 8px 0 8px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .phui-object-box .phui-header-header .phui-tag-view { | ||||||
|  |   margin-left: 8px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .phui-object-box .phui-header-header .phui-tag-core { | ||||||
|  |   border-color: transparent; | ||||||
|  |   padding: 1px 6px; | ||||||
|  |   font-size: {$normalfontsize}; | ||||||
|  | } | ||||||
|  |  | ||||||
| /* - Object Box Colors ------------------------------------------------------ */ | /* - Object Box Colors ------------------------------------------------------ */ | ||||||
|  |  | ||||||
| .phui-box-border.phui-object-box-green { | .phui-box-border.phui-object-box-green { | ||||||
|   | |||||||
| @@ -182,12 +182,12 @@ | |||||||
|  |  | ||||||
| /* Info View */ | /* Info View */ | ||||||
|  |  | ||||||
| .phui-two-column-view .phui-two-column-content .phui-info-view { | .phui-two-column-view .phui-two-column-row .phui-info-view { | ||||||
|   margin: 0 0 20px 0; |   margin: 0 0 20px 0; | ||||||
|   padding: 16px; |   padding: 16px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .phui-two-column-view .phui-two-column-content .phui-object-box | .phui-two-column-view .phui-two-column-row .phui-object-box | ||||||
|   .phui-info-view { |   .phui-info-view { | ||||||
|     margin: 0; |     margin: 0; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Chad Little
					Chad Little