@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

First cut of new Project Home

Summary:
First pass at a new Project Home page. This is starting to sprawl, so punting this up now before it gets too large.

- Project homes now have "large header"
- Custom Fields / Descriptions are in the main column
- Feed is simpler visually
- new "Background" option for PHUIObjectBoxView
- move header buttons globally to "Grey" instead of "Simple"
- New color and hover states for "Grey"
- Transitions on Buttons haha
- Edit Icon on Nav is now under "Manage" panel
- New "Manage" Panel

TODO:
- More testing of bad cases of Custom Fields
- Members Page in flux, needs design
- Um still not sure how to make Custom Field not show UI

Test Plan:
Lots of random Project page visits. Save project, watch project, edit project, etc.

{F1068191}

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Differential Revision: https://secure.phabricator.com/D15097

+288 -141
+13 -11
resources/celerity/map.php
··· 7 7 */ 8 8 return array( 9 9 'names' => array( 10 - 'core.pkg.css' => '4dd8bb4d', 10 + 'core.pkg.css' => '2ee00a33', 11 11 'core.pkg.js' => '573e6664', 12 12 'darkconsole.pkg.js' => 'e7393ebb', 13 13 'differential.pkg.css' => '2de124c9', ··· 93 93 'rsrc/css/application/policy/policy-transaction-detail.css' => '82100a43', 94 94 'rsrc/css/application/policy/policy.css' => '957ea14c', 95 95 'rsrc/css/application/ponder/ponder-view.css' => '7b0df4da', 96 + 'rsrc/css/application/project/project-view.css' => 'efd02445', 96 97 'rsrc/css/application/releeph/releeph-core.css' => '9b3c5733', 97 98 'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5', 98 99 'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd', ··· 122 123 'rsrc/css/phui/phui-action-panel.css' => '91c7b835', 123 124 'rsrc/css/phui/phui-badge.css' => 'f25c3476', 124 125 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', 125 - 'rsrc/css/phui/phui-box.css' => '10939564', 126 - 'rsrc/css/phui/phui-button.css' => '16020a60', 126 + 'rsrc/css/phui/phui-box.css' => 'fd269ed1', 127 + 'rsrc/css/phui/phui-button.css' => 'd6ac72db', 127 128 'rsrc/css/phui/phui-crumbs-view.css' => '414406b5', 128 129 'rsrc/css/phui/phui-document-pro.css' => '8799acf7', 129 130 'rsrc/css/phui/phui-document-summary.css' => '9ca48bdf', ··· 140 141 'rsrc/css/phui/phui-info-view.css' => '6d7c3509', 141 142 'rsrc/css/phui/phui-list.css' => '9da2aa00', 142 143 'rsrc/css/phui/phui-object-box.css' => '407eaf5a', 143 - 'rsrc/css/phui/phui-object-item-list-view.css' => '26c30d3f', 144 + 'rsrc/css/phui/phui-object-item-list-view.css' => 'bbc929b3', 144 145 'rsrc/css/phui/phui-pager.css' => 'bea33d23', 145 146 'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', 146 - 'rsrc/css/phui/phui-profile-menu.css' => '0734510a', 147 + 'rsrc/css/phui/phui-profile-menu.css' => 'fa814ef9', 147 148 'rsrc/css/phui/phui-property-list-view.css' => '27b2849e', 148 149 'rsrc/css/phui/phui-remarkup-preview.css' => '1a8f2591', 149 150 'rsrc/css/phui/phui-spacing.css' => '042804d6', ··· 151 152 'rsrc/css/phui/phui-tag-view.css' => 'e60e227b', 152 153 'rsrc/css/phui/phui-text.css' => 'cf019f54', 153 154 'rsrc/css/phui/phui-timeline-view.css' => '2efceff8', 154 - 'rsrc/css/phui/phui-two-column-view.css' => '39ecafb1', 155 + 'rsrc/css/phui/phui-two-column-view.css' => 'c75bfc5b', 155 156 'rsrc/css/phui/phui-workboard-view.css' => 'f488d036', 156 157 'rsrc/css/phui/phui-workpanel-view.css' => 'adec7699', 157 158 'rsrc/css/sprite-login.css' => '60e8560e', ··· 792 793 'phui-action-panel-css' => '91c7b835', 793 794 'phui-badge-view-css' => 'f25c3476', 794 795 'phui-big-info-view-css' => 'bd903741', 795 - 'phui-box-css' => '10939564', 796 - 'phui-button-css' => '16020a60', 796 + 'phui-box-css' => 'fd269ed1', 797 + 'phui-button-css' => 'd6ac72db', 797 798 'phui-calendar-css' => 'ccabe893', 798 799 'phui-calendar-day-css' => 'd1cf6f93', 799 800 'phui-calendar-list-css' => 'c1c7f338', ··· 816 817 'phui-inline-comment-view-css' => '0fdb3667', 817 818 'phui-list-view-css' => '9da2aa00', 818 819 'phui-object-box-css' => '407eaf5a', 819 - 'phui-object-item-list-view-css' => '26c30d3f', 820 + 'phui-object-item-list-view-css' => 'bbc929b3', 820 821 'phui-pager-css' => 'bea33d23', 821 822 'phui-pinboard-view-css' => '2495140e', 822 - 'phui-profile-menu-css' => '0734510a', 823 + 'phui-profile-menu-css' => 'fa814ef9', 823 824 'phui-property-list-view-css' => '27b2849e', 824 825 'phui-remarkup-preview-css' => '1a8f2591', 825 826 'phui-spacing-css' => '042804d6', ··· 828 829 'phui-text-css' => 'cf019f54', 829 830 'phui-theme-css' => '981a58f8', 830 831 'phui-timeline-view-css' => '2efceff8', 831 - 'phui-two-column-view-css' => '39ecafb1', 832 + 'phui-two-column-view-css' => 'c75bfc5b', 832 833 'phui-workboard-view-css' => 'f488d036', 833 834 'phui-workpanel-view-css' => 'adec7699', 834 835 'phuix-action-list-view' => 'b5c256b8', ··· 841 842 'policy-edit-css' => '815c66f7', 842 843 'policy-transaction-detail-css' => '82100a43', 843 844 'ponder-view-css' => '7b0df4da', 845 + 'project-view-css' => 'efd02445', 844 846 'raphael-core' => '51ee6b43', 845 847 'raphael-g' => '40dde778', 846 848 'raphael-g-line' => '40da039e',
+4 -2
src/__phutil_library_map__.php
··· 2889 2889 'PhabricatorProjectHeraldAction' => 'applications/project/herald/PhabricatorProjectHeraldAction.php', 2890 2890 'PhabricatorProjectHeraldAdapter' => 'applications/project/herald/PhabricatorProjectHeraldAdapter.php', 2891 2891 'PhabricatorProjectHeraldFieldGroup' => 'applications/project/herald/PhabricatorProjectHeraldFieldGroup.php', 2892 - 'PhabricatorProjectHistoryController' => 'applications/project/controller/PhabricatorProjectHistoryController.php', 2893 2892 'PhabricatorProjectIconSet' => 'applications/project/icon/PhabricatorProjectIconSet.php', 2894 2893 'PhabricatorProjectIconsConfigOptionType' => 'applications/project/config/PhabricatorProjectIconsConfigOptionType.php', 2895 2894 'PhabricatorProjectInterface' => 'applications/project/interface/PhabricatorProjectInterface.php', ··· 2901 2900 'PhabricatorProjectLogicalOrNotDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php', 2902 2901 'PhabricatorProjectLogicalUserDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalUserDatasource.php', 2903 2902 'PhabricatorProjectLogicalViewerDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php', 2903 + 'PhabricatorProjectManageController' => 'applications/project/controller/PhabricatorProjectManageController.php', 2904 + 'PhabricatorProjectManageProfilePanel' => 'applications/project/profilepanel/PhabricatorProjectManageProfilePanel.php', 2904 2905 'PhabricatorProjectMaterializedMemberEdgeType' => 'applications/project/edge/PhabricatorProjectMaterializedMemberEdgeType.php', 2905 2906 'PhabricatorProjectMemberListView' => 'applications/project/view/PhabricatorProjectMemberListView.php', 2906 2907 'PhabricatorProjectMemberOfProjectEdgeType' => 'applications/project/edge/PhabricatorProjectMemberOfProjectEdgeType.php', ··· 7298 7299 'PhabricatorProjectHeraldAction' => 'HeraldAction', 7299 7300 'PhabricatorProjectHeraldAdapter' => 'HeraldAdapter', 7300 7301 'PhabricatorProjectHeraldFieldGroup' => 'HeraldFieldGroup', 7301 - 'PhabricatorProjectHistoryController' => 'PhabricatorProjectController', 7302 7302 'PhabricatorProjectIconSet' => 'PhabricatorIconSet', 7303 7303 'PhabricatorProjectIconsConfigOptionType' => 'PhabricatorConfigJSONOptionType', 7304 7304 'PhabricatorProjectListController' => 'PhabricatorProjectController', ··· 7309 7309 'PhabricatorProjectLogicalOrNotDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 7310 7310 'PhabricatorProjectLogicalUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 7311 7311 'PhabricatorProjectLogicalViewerDatasource' => 'PhabricatorTypeaheadDatasource', 7312 + 'PhabricatorProjectManageController' => 'PhabricatorProjectController', 7313 + 'PhabricatorProjectManageProfilePanel' => 'PhabricatorProfilePanel', 7312 7314 'PhabricatorProjectMaterializedMemberEdgeType' => 'PhabricatorEdgeType', 7313 7315 'PhabricatorProjectMemberListView' => 'PhabricatorProjectUserListView', 7314 7316 'PhabricatorProjectMemberOfProjectEdgeType' => 'PhabricatorEdgeType',
+2 -2
src/applications/files/transform/PhabricatorFileThumbnailTransform.php
··· 57 57 public function generateTransforms() { 58 58 return array( 59 59 id(new PhabricatorFileThumbnailTransform()) 60 - ->setName(pht("Profile (100px \xC3\x97 100px)")) 60 + ->setName(pht("Profile (200px \xC3\x97 200px)")) 61 61 ->setKey(self::TRANSFORM_PROFILE) 62 - ->setDimensions(100, 100) 62 + ->setDimensions(200, 200) 63 63 ->setScaleUp(true), 64 64 id(new PhabricatorFileThumbnailTransform()) 65 65 ->setName(pht("Pinboard (280px \xC3\x97 210px)"))
+1 -1
src/applications/project/application/PhabricatorProjectApplication.php
··· 86 86 ), 87 87 'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/' 88 88 => 'PhabricatorProjectUpdateController', 89 - 'history/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectHistoryController', 89 + 'manage/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectManageController', 90 90 '(?P<action>watch|unwatch)/(?P<id>[1-9]\d*)/' 91 91 => 'PhabricatorProjectWatchController', 92 92 'silence/(?P<id>[1-9]\d*)/'
+1 -1
src/applications/project/controller/PhabricatorProjectArchiveController.php
··· 20 20 return new Aphront404Response(); 21 21 } 22 22 23 - $edit_uri = $this->getApplicationURI('history/'.$project->getID().'/'); 23 + $edit_uri = $this->getApplicationURI('manage/'.$project->getID().'/'); 24 24 25 25 if ($request->isFormPost()) { 26 26 if ($project->isArchived()) {
+3 -3
src/applications/project/controller/PhabricatorProjectEditPictureController.php
··· 23 23 24 24 $this->setProject($project); 25 25 26 - $edit_uri = $this->getApplicationURI('history/'.$project->getID().'/'); 27 - $view_uri = $this->getApplicationURI('history/'.$project->getID().'/'); 26 + $edit_uri = $this->getApplicationURI('manage/'.$project->getID().'/'); 27 + $view_uri = $this->getApplicationURI('manage/'.$project->getID().'/'); 28 28 29 29 $supported_formats = PhabricatorFile::getTransformableImageFormats(); 30 30 $e_file = true; ··· 255 255 ->setForm($upload_form); 256 256 257 257 $nav = $this->getProfileMenu(); 258 - $nav->selectFilter(PhabricatorProject::PANEL_PROFILE); 258 + $nav->selectFilter(PhabricatorProject::PANEL_MANAGE); 259 259 260 260 return $this->newPage() 261 261 ->setTitle($title)
+15 -9
src/applications/project/controller/PhabricatorProjectHistoryController.php src/applications/project/controller/PhabricatorProjectManageController.php
··· 1 1 <?php 2 2 3 - final class PhabricatorProjectHistoryController 3 + final class PhabricatorProjectManageController 4 4 extends PhabricatorProjectController { 5 5 6 6 public function shouldAllowPublic() { ··· 43 43 $timeline->setShouldTerminate(true); 44 44 45 45 $nav = $this->getProfileMenu(); 46 - $nav->selectFilter(PhabricatorProject::PANEL_PROFILE); 46 + $nav->selectFilter(PhabricatorProject::PANEL_MANAGE); 47 47 48 48 $crumbs = $this->buildApplicationCrumbs(); 49 - $crumbs->addTextCrumb(pht('History')); 49 + $crumbs->addTextCrumb(pht('Manage')); 50 50 51 51 return $this->newPage() 52 52 ->setNavigation($nav) ··· 72 72 $viewer, 73 73 $project, 74 74 PhabricatorPolicyCapability::CAN_EDIT); 75 - 76 - $view->addAction( 77 - id(new PhabricatorActionView()) 78 - ->setName(pht('Back to Profile')) 79 - ->setIcon('fa-chevron-left') 80 - ->setHref($project->getURI())); 81 75 82 76 $view->addAction( 83 77 id(new PhabricatorActionView()) ··· 89 83 90 84 $view->addAction( 91 85 id(new PhabricatorActionView()) 86 + ->setName(pht('Edit Menu')) 87 + ->setIcon('fa-th-list') 88 + ->setHref($this->getApplicationURI("{$id}/panel/configure/")) 89 + ->setDisabled(!$can_edit) 90 + ->setWorkflow(!$can_edit)); 91 + 92 + $view->addAction( 93 + id(new PhabricatorActionView()) 92 94 ->setName(pht('Edit Picture')) 93 95 ->setIcon('fa-picture-o') 94 96 ->setHref($this->getApplicationURI("picture/{$id}/")) ··· 125 127 $view = id(new PHUIPropertyListView()) 126 128 ->setUser($viewer) 127 129 ->setActionList($actions); 130 + 131 + $view->addProperty( 132 + pht('Looks Like'), 133 + $viewer->renderHandle($project->getPHID())->setAsTag(true)); 128 134 129 135 return $view; 130 136 }
+39 -51
src/applications/project/controller/PhabricatorProjectProfileController.php
··· 30 30 $header->setStatus('fa-ban', 'red', pht('Archived')); 31 31 } 32 32 33 - $actions = $this->buildActionListView($project); 34 - $properties = $this->buildPropertyListView($project, $actions); 35 - 36 - $object_box = id(new PHUIObjectBoxView()) 37 - ->setHeader($header) 38 - ->addPropertyList($properties); 33 + $properties = $this->buildPropertyListView($project); 34 + $watch_action = $this->renderWatchAction($project); 35 + $header->addActionLink($watch_action); 39 36 40 37 $member_list = id(new PhabricatorProjectMemberListView()) 41 38 ->setUser($viewer) ··· 52 49 $nav = $this->getProfileMenu(); 53 50 $nav->selectFilter(PhabricatorProject::PANEL_PROFILE); 54 51 55 - $watch_action = $this->renderWatchAction($project); 56 - 57 52 $stories = id(new PhabricatorFeedQuery()) 58 53 ->setViewer($viewer) 59 54 ->setFilterPHIDs( ··· 62 57 )) 63 58 ->setLimit(50) 64 59 ->execute(); 65 - 66 60 67 61 $feed = $this->renderStories($stories); 62 + $feed = phutil_tag_div('project-view-feed', $feed); 68 63 69 - $feed_header = id(new PHUIHeaderView()) 70 - ->setHeader(pht('Recent Activity')) 71 - ->addActionLink($watch_action); 72 - 73 - $feed = id(new PHUIObjectBoxView()) 74 - ->setHeader($feed_header) 75 - ->appendChild($feed); 76 - 77 - $columns = id(new AphrontMultiColumnView()) 78 - ->setFluidLayout(true) 79 - ->addColumn($feed) 80 - ->addColumn( 64 + $columns = id(new PHUITwoColumnView()) 65 + ->setMainColumn( 66 + array( 67 + $properties, 68 + $feed, 69 + )) 70 + ->setSideColumn( 81 71 array( 82 72 $member_list, 83 73 $watcher_list, 84 74 )); 85 75 86 76 $crumbs = $this->buildApplicationCrumbs(); 77 + $crumbs->setBorder(true); 78 + 79 + $header = phutil_tag( 80 + 'div', 81 + array( 82 + 'class' => 'project-view-header', 83 + ), 84 + $header); 85 + 86 + require_celerity_resource('project-view-css'); 87 + $home = phutil_tag( 88 + 'div', 89 + array( 90 + 'class' => 'project-view-home', 91 + ), 92 + array( 93 + $header, 94 + $columns, 95 + )); 87 96 88 97 return $this->newPage() 89 98 ->setNavigation($nav) ··· 92 101 ->setPageObjectPHIDs(array($project->getPHID())) 93 102 ->appendChild( 94 103 array( 95 - $object_box, 96 - $columns, 104 + $home, 97 105 )); 98 106 } 99 107 100 - private function buildActionListView(PhabricatorProject $project) { 101 - $request = $this->getRequest(); 102 - $viewer = $request->getUser(); 103 - 104 - $id = $project->getID(); 105 - 106 - $view = id(new PhabricatorActionListView()) 107 - ->setUser($viewer) 108 - ->setObject($project); 109 - 110 - $view->addAction( 111 - id(new PhabricatorActionView()) 112 - ->setName(pht('Edit Project')) 113 - ->setIcon('fa-pencil') 114 - ->setHref($this->getApplicationURI("history/{$id}/"))); 115 - 116 - return $view; 117 - } 118 - 119 108 private function buildPropertyListView( 120 - PhabricatorProject $project, 121 - PhabricatorActionListView $actions) { 109 + PhabricatorProject $project) { 122 110 $request = $this->getRequest(); 123 111 $viewer = $request->getUser(); 124 112 125 113 $view = id(new PHUIPropertyListView()) 126 114 ->setUser($viewer) 127 - ->setObject($project) 128 - ->setActionList($actions); 129 - 130 - $view->addProperty( 131 - pht('Looks Like'), 132 - $viewer->renderHandle($project->getPHID())->setAsTag(true)); 115 + ->setObject($project); 133 116 134 117 $field_list = PhabricatorCustomField::getObjectFields( 135 118 $project, 136 119 PhabricatorCustomField::ROLE_VIEW); 137 120 $field_list->appendFieldsToPropertyList($project, $viewer, $view); 121 + 122 + $view = id(new PHUIBoxView()) 123 + ->setColor(PHUIBoxView::GREY) 124 + ->appendChild($view) 125 + ->addClass('project-view-properties'); 138 126 139 127 return $view; 140 128 } ··· 147 135 $builder->setShowHovercards(true); 148 136 $view = $builder->buildView(); 149 137 150 - return phutil_tag_div('profile-feed', $view->render()); 138 + return $view; 151 139 } 152 140 153 141 private function renderWatchAction(PhabricatorProject $project) {
+1 -1
src/applications/project/engine/PhabricatorProjectEditEngine.php
··· 82 82 return $object->getURI(); 83 83 } else { 84 84 $id = $object->getID(); 85 - return "/project/history/{$id}/"; 85 + return "/project/manage/{$id}/"; 86 86 } 87 87 } 88 88
+4
src/applications/project/engine/PhabricatorProjectProfilePanelEngine.php
··· 24 24 ->setBuiltinKey(PhabricatorProject::PANEL_MEMBERS) 25 25 ->setPanelKey(PhabricatorProjectMembersProfilePanel::PANELKEY); 26 26 27 + $panels[] = $this->newPanel() 28 + ->setBuiltinKey(PhabricatorProject::PANEL_MANAGE) 29 + ->setPanelKey(PhabricatorProjectManageProfilePanel::PANELKEY); 30 + 27 31 return $panels; 28 32 } 29 33
+64
src/applications/project/profilepanel/PhabricatorProjectManageProfilePanel.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectManageProfilePanel 4 + extends PhabricatorProfilePanel { 5 + 6 + const PANELKEY = 'project.manage'; 7 + 8 + public function getPanelTypeName() { 9 + return pht('Manage Project'); 10 + } 11 + 12 + private function getDefaultName() { 13 + return pht('Manage'); 14 + } 15 + 16 + public function canMakeDefault( 17 + PhabricatorProfilePanelConfiguration $config) { 18 + return true; 19 + } 20 + 21 + public function getDisplayName( 22 + PhabricatorProfilePanelConfiguration $config) { 23 + $name = $config->getPanelProperty('name'); 24 + 25 + if (strlen($name)) { 26 + return $name; 27 + } 28 + 29 + return $this->getDefaultName(); 30 + } 31 + 32 + public function buildEditEngineFields( 33 + PhabricatorProfilePanelConfiguration $config) { 34 + return array( 35 + id(new PhabricatorTextEditField()) 36 + ->setKey('name') 37 + ->setLabel(pht('Name')) 38 + ->setPlaceholder($this->getDefaultName()) 39 + ->setValue($config->getPanelProperty('name')), 40 + ); 41 + } 42 + 43 + protected function newNavigationMenuItems( 44 + PhabricatorProfilePanelConfiguration $config) { 45 + 46 + $project = $config->getProfileObject(); 47 + 48 + $id = $project->getID(); 49 + 50 + $name = $this->getDisplayName($config); 51 + $icon = 'fa-gears'; 52 + $href = "/project/manage/{$id}/"; 53 + 54 + $item = $this->newItem() 55 + ->setHref($href) 56 + ->setName($name) 57 + ->setIcon($icon); 58 + 59 + return array( 60 + $item, 61 + ); 62 + } 63 + 64 + }
+1
src/applications/project/storage/PhabricatorProject.php
··· 49 49 const PANEL_PROFILE = 'project.profile'; 50 50 const PANEL_WORKBOARD = 'project.workboard'; 51 51 const PANEL_MEMBERS = 'project.members'; 52 + const PANEL_MANAGE = 'project.manage'; 52 53 const PANEL_MILESTONES = 'project.milestones'; 53 54 const PANEL_SUBPROJECTS = 'project.subprojects'; 54 55
+2 -1
src/applications/project/view/PhabricatorProjectUserListView.php
··· 120 120 121 121 return id(new PHUIObjectBoxView()) 122 122 ->setHeader($header) 123 - ->setObjectList($list); 123 + ->setObjectList($list) 124 + ->setBackground(PHUIBoxView::GREY); 124 125 } 125 126 126 127 }
+3 -42
src/applications/search/engine/PhabricatorProfilePanelEngine.php
··· 371 371 ->setHideInApplicationMenu(true) 372 372 ->addClass('phui-profile-menu-spacer'); 373 373 374 - if ($this->isPanelEngineConfigurable()) { 375 - $viewer = $this->getViewer(); 376 - $object = $this->getProfileObject(); 377 - 378 - $can_edit = PhabricatorPolicyFilter::hasCapability( 379 - $viewer, 380 - $object, 381 - PhabricatorPolicyCapability::CAN_EDIT); 382 - 383 - $expanded_edit_icon = id(new PHUIIconCircleView()) 384 - ->addClass('phui-list-item-icon') 385 - ->addClass('phui-profile-menu-visible-when-expanded') 386 - ->setIconFont('fa-pencil'); 387 - 388 - $collapsed_edit_icon = id(new PHUIIconCircleView()) 389 - ->addClass('phui-list-item-icon') 390 - ->addClass('phui-profile-menu-visible-when-collapsed') 391 - ->setIconFont('fa-pencil') 392 - ->addSigil('has-tooltip') 393 - ->setMetadata( 394 - array( 395 - 'tip' => pht('Edit Menu'), 396 - 'align' => 'E', 397 - )); 398 - 399 - $items[] = id(new PHUIListItemView()) 400 - ->setName('Edit Menu') 401 - ->setKey('panel.configure') 402 - ->addIcon($expanded_edit_icon) 403 - ->addIcon($collapsed_edit_icon) 404 - ->addClass('phui-profile-menu-footer') 405 - ->addClass('phui-profile-menu-footer-1') 406 - ->setHref($this->getPanelURI('configure/')) 407 - ->setDisabled(!$can_edit) 408 - ->setWorkflow(!$can_edit); 409 - } 410 - 411 374 $collapse_id = celerity_generate_unique_node_id(); 412 - 413 375 $viewer = $this->getViewer(); 414 - 415 376 $collapse_key = 416 377 PhabricatorUserPreferences::PREFERENCE_PROFILE_MENU_COLLAPSED; 417 378 ··· 442 403 $collapse_icon = id(new PHUIIconCircleView()) 443 404 ->addClass('phui-list-item-icon') 444 405 ->addClass('phui-profile-menu-visible-when-expanded') 445 - ->setIconFont('fa-angle-left'); 406 + ->setIconFont('fa-chevron-left'); 446 407 447 408 $expand_icon = id(new PHUIIconCircleView()) 448 409 ->addClass('phui-list-item-icon') ··· 453 414 'tip' => pht('Expand'), 454 415 'align' => 'E', 455 416 )) 456 - ->setIconFont('fa-angle-right'); 417 + ->setIconFont('fa-chevron-right'); 457 418 458 419 $items[] = id(new PHUIListItemView()) 459 420 ->setName('Collapse') ··· 461 422 ->addIcon($expand_icon) 462 423 ->setID($collapse_id) 463 424 ->addClass('phui-profile-menu-footer') 464 - ->addClass('phui-profile-menu-footer-2') 425 + ->addClass('phui-profile-menu-footer-1') 465 426 ->setHideInApplicationMenu(true) 466 427 ->setHref('#'); 467 428
+1 -1
src/view/phui/PHUIHeaderView.php
··· 190 190 if ($this->actionLinks) { 191 191 $actions = array(); 192 192 foreach ($this->actionLinks as $button) { 193 - $button->setColor(PHUIButtonView::SIMPLE); 193 + $button->setColor(PHUIButtonView::GREY); 194 194 $button->addClass(PHUI::MARGIN_SMALL_LEFT); 195 195 $button->addClass('phui-header-action-link'); 196 196 $actions[] = $button;
+10
src/view/phui/PHUIObjectBoxView.php
··· 4 4 5 5 private $headerText; 6 6 private $color; 7 + private $background; 7 8 private $formErrors = null; 8 9 private $formSaved = false; 9 10 private $infoView; ··· 103 104 104 105 public function setColor($color) { 105 106 $this->color = $color; 107 + return $this; 108 + } 109 + 110 + public function setBackground($color) { 111 + $this->background = $color; 106 112 return $this; 107 113 } 108 114 ··· 385 391 386 392 if ($this->color) { 387 393 $content->addClass('phui-object-box-'.$this->color); 394 + } 395 + 396 + if ($this->background) { 397 + $content->setColor($this->background); 388 398 } 389 399 390 400 if ($this->collapsed) {
+84
webroot/rsrc/css/application/project/project-view.css
··· 1 + /** 2 + * @provides project-view-css 3 + */ 4 + 5 + .project-view-home { 6 + background: #fff; 7 + } 8 + 9 + .project-view-header { 10 + padding: 32px 24px 32px; 11 + } 12 + 13 + .project-view-header .phui-header-shell { 14 + margin: 0; 15 + padding: 0; 16 + border: none; 17 + } 18 + 19 + .project-view-header .phui-header-image { 20 + height: 80px; 21 + width: 80px; 22 + } 23 + 24 + .project-view-header .phui-header-col1 { 25 + width: 96px; 26 + } 27 + 28 + .project-view-header .phui-header-subheader { 29 + margin-top: 12px; 30 + } 31 + 32 + .project-view-header .phui-header-shell .phui-header-header { 33 + font-family: 'Aleo', {$fontfamily}; 34 + font-size: 24px; 35 + } 36 + 37 + .project-view-header .phui-header-col3 { 38 + vertical-align: top; 39 + } 40 + 41 + .phui-box.phui-box-grey.project-view-properties { 42 + margin: 0 16px 0 16px; 43 + padding: 4px 12px; 44 + } 45 + 46 + .project-view-properties .phui-property-list-key { 47 + width: auto; 48 + margin-left: 4px; 49 + } 50 + 51 + .project-view-properties .phui-property-list-section-header { 52 + border: none; 53 + padding: 12px 4px 0; 54 + } 55 + 56 + .project-view-feed .phui-object-box.phui-box-border { 57 + border: none; 58 + padding: 8px; 59 + } 60 + 61 + .project-view-feed .phui-header-shell { 62 + padding: 8px 4px; 63 + } 64 + 65 + .project-view-feed .phui-header-header { 66 + font-size: {$biggerfontsize}; 67 + margin-left: 4px; 68 + } 69 + 70 + .project-view-home .phui-box-grey { 71 + padding: 0; 72 + } 73 + 74 + .project-view-home .phui-box-grey .phui-header-shell { 75 + padding: 8px 8px 8px 12px; 76 + } 77 + 78 + .project-view-home .phui-box-grey .phui-header-header { 79 + font-size: {$biggerfontsize}; 80 + } 81 + 82 + .project-view-home .phui-box-grey .phui-object-item-list-view { 83 + padding: 8px; 84 + }
+24
webroot/rsrc/css/phui/phui-box.css
··· 15 15 .phui-box-grey { 16 16 background-color: rgba(71,87,120,0.1); 17 17 border-radius: 3px; 18 + border: none; 18 19 } 19 20 20 21 .phui-box-blue { 21 22 background-color: {$bluebackground}; 22 23 border-radius: 3px; 24 + border: none; 25 + } 26 + 27 + .phui-box-blue .phui-object-item, 28 + .phui-box-grey .phui-object-item { 29 + background: transparent; 30 + } 31 + 32 + .phui-box-blue .phui-object-item-link, 33 + .phui-box-grey .phui-object-item-link { 34 + color: {$darkbluetext}; 35 + } 36 + 37 + .phui-box-blue .phui-header-shell, 38 + .phui-box-grey .phui-header-shell { 39 + border-bottom: 2px solid #fff; 40 + } 41 + 42 + .phui-box-blue .phui-info-severity-nodata, 43 + .phui-box-grey .phui-info-severity-nodata { 44 + background: transparent; 45 + padding: 12px 4px; 46 + text-align: center; 23 47 }
+9 -3
webroot/rsrc/css/phui/phui-button.css
··· 59 59 input[type="submit"].grey, 60 60 a.grey, 61 61 a.grey:visited { 62 - background-color: {$lightgreybackground}; 63 - border-color: {$lightgreyborder}; 62 + background-color: rgba(71, 87, 120, 0.06); 63 + border-color: rgba(71, 87, 120, 0.12); 64 64 color: {$darkgreytext}; 65 65 } 66 66 ··· 101 101 button:hover { 102 102 text-decoration: none; 103 103 background-color: {$sky}; 104 + transition: 0.1s; 104 105 } 105 106 106 107 a.button.grey:hover, 107 108 button.grey:hover { 108 - background-color: #fff; 109 + background-color: rgba(71, 87, 120, 0.12); 110 + border-color: rgba(71, 87, 120, 0.2); 111 + transition: 0.1s; 109 112 } 110 113 111 114 a.button.green:hover, 112 115 button.green:hover { 113 116 background-color: #0DAD48; 117 + transition: 0.1s; 114 118 } 115 119 116 120 a.button.simple:hover, 117 121 button.simple:hover { 118 122 background-color: {$blue}; 119 123 color: #fff; 124 + transition: 0.1s; 120 125 } 121 126 122 127 a.button.simple:hover .phui-icon-view, 123 128 button.simple:hover .phui-icon-view { 124 129 color: #fff; 130 + transition: 0.1s; 125 131 } 126 132 127 133 a.button.simple .phui-icon-view {
+2
webroot/rsrc/css/phui/phui-object-item-list-view.css
··· 735 735 .phui-object-item-image { 736 736 width: 40px; 737 737 height: 40px; 738 + box-shadow: inset 0 0 0 1px rgba(55,55,55,.15); 739 + border-radius: 3px; 738 740 background-size: 100%; 739 741 margin: 6px; 740 742 position: absolute;
+4 -12
webroot/rsrc/css/phui/phui-profile-menu.css
··· 165 165 166 166 .phui-profile-menu .phui-profile-menu-collapsed .phabricator-side-menu 167 167 .phui-profile-menu-footer .phui-list-item-href { 168 - padding: 20px 0 20px; 168 + padding: 20px 0 24px; 169 169 } 170 170 171 171 .phui-profile-menu .phabricator-side-menu .phui-profile-menu-footer ··· 202 202 203 203 .phui-profile-menu .phui-profile-menu-footer 204 204 .phui-icon-circle.phui-list-item-icon { 205 - font-size: 11px; 205 + font-size: 12px; 206 206 } 207 207 208 208 div.phui-profile-menu .phabricator-side-menu .phui-profile-menu-footer-1 { 209 - bottom: 40px; 210 - position: fixed; 211 - background-color: {$menu.profile.background}; 212 - } 213 - 214 - div.phui-profile-menu .phabricator-side-menu .phui-profile-menu-footer-2 { 215 209 bottom: 0; 216 210 position: fixed; 217 211 background-color: {$menu.profile.background}; 218 212 } 219 213 220 - .phui-profile-menu .phui-profile-menu-footer-1, 221 - .phui-profile-menu .phui-profile-menu-footer-2 { 214 + .phui-profile-menu .phui-profile-menu-footer-1 { 222 215 width: {$menu.profile.width}; 223 216 } 224 217 225 - .phui-profile-menu .phui-profile-menu-collapsed .phui-profile-menu-footer-1, 226 - .phui-profile-menu .phui-profile-menu-collapsed .phui-profile-menu-footer-2 { 218 + .phui-profile-menu .phui-profile-menu-collapsed .phui-profile-menu-footer-1 { 227 219 width: {$menu.profile.width.collapsed}; 228 220 } 229 221
+1 -1
webroot/rsrc/css/phui/phui-two-column-view.css
··· 28 28 } 29 29 30 30 .device-desktop .phui-two-column-view 31 - .phui-side-column .phui-object-box:first-child { 31 + .phui-side-column .phui-object-box { 32 32 margin: 0 16px 16px 0; 33 33 } 34 34