From 6a40df529d062cc47004322b6bc51d4925548418 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 10 Jul 2013 05:11:08 -0700 Subject: [PATCH] Use ActionListView for all profile actions Summary: This leaves the space between the properties and the blurb looking a bit empty, but there will be more stuff there soon (status, VCS names, email, phone/fax numbers, etc., and custom user fields). I removed "view lint messages" since I'm pretty sure no one has ever clicked it. I think providing better search (e.g, T2625) to that UI in Diffusion is a preferable approach. Test Plan: {F49423} Reviewers: chad, btrahan Reviewed By: chad CC: aran Differential Revision: https://secure.phabricator.com/D6403 --- src/__celerity_resource_map__.php | 90 +++++++++---------- src/__phutil_library_map__.php | 2 - .../events/AuditPeopleMenuEventListener.php | 32 +++---- .../ConpherencePeopleMenuEventListener.php | 33 ++++--- .../DifferentialPeopleMenuEventListener.php | 35 ++++---- .../PhabricatorApplicationDiffusion.php | 1 - .../DiffusionPeopleMenuEventListener.php | 36 -------- .../PhabricatorFlagsUIEventListener.php | 7 ++ .../ManiphestPeopleMenuEventListener.php | 32 +++---- .../PhabricatorApplicationPeople.php | 2 +- .../PhabricatorPeopleProfileController.php | 50 +++-------- src/view/layout/PhabricatorHeaderView.php | 6 +- .../layout/phabricator-action-list-view.css | 7 +- 13 files changed, 143 insertions(+), 190 deletions(-) delete mode 100644 src/applications/diffusion/events/DiffusionPeopleMenuEventListener.php diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 230518ea0b..7d4e0e2cc3 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -3029,7 +3029,7 @@ celerity_register_resource_map(array( ), 'phabricator-action-list-view-css' => array( - 'uri' => '/res/f63afae7/rsrc/css/layout/phabricator-action-list-view.css', + 'uri' => '/res/ef104683/rsrc/css/layout/phabricator-action-list-view.css', 'type' => 'css', 'requires' => array( @@ -4149,7 +4149,7 @@ celerity_register_resource_map(array( ), array( 'packages' => array( - '680ace9b' => + '6e2d527c' => array( 'name' => 'core.pkg.css', 'symbols' => @@ -4197,7 +4197,7 @@ celerity_register_resource_map(array( 40 => 'phabricator-property-list-view-css', 41 => 'phabricator-tag-view-css', ), - 'uri' => '/res/pkg/680ace9b/core.pkg.css', + 'uri' => '/res/pkg/6e2d527c/core.pkg.css', 'type' => 'css', ), '75ccea43' => @@ -4391,16 +4391,16 @@ celerity_register_resource_map(array( 'reverse' => array( 'aphront-attached-file-view-css' => 'adc3c36d', - 'aphront-dialog-view-css' => '680ace9b', - 'aphront-error-view-css' => '680ace9b', - 'aphront-form-view-css' => '680ace9b', - 'aphront-list-filter-view-css' => '680ace9b', - 'aphront-pager-view-css' => '680ace9b', - 'aphront-panel-view-css' => '680ace9b', - 'aphront-table-view-css' => '680ace9b', - 'aphront-tokenizer-control-css' => '680ace9b', - 'aphront-tooltip-css' => '680ace9b', - 'aphront-typeahead-control-css' => '680ace9b', + 'aphront-dialog-view-css' => '6e2d527c', + 'aphront-error-view-css' => '6e2d527c', + 'aphront-form-view-css' => '6e2d527c', + 'aphront-list-filter-view-css' => '6e2d527c', + 'aphront-pager-view-css' => '6e2d527c', + 'aphront-panel-view-css' => '6e2d527c', + 'aphront-table-view-css' => '6e2d527c', + 'aphront-tokenizer-control-css' => '6e2d527c', + 'aphront-tooltip-css' => '6e2d527c', + 'aphront-typeahead-control-css' => '6e2d527c', 'differential-changeset-view-css' => 'dd27a69b', 'differential-core-view-css' => 'dd27a69b', 'differential-inline-comment-editor' => '4ad86dee', @@ -4414,7 +4414,7 @@ celerity_register_resource_map(array( 'differential-table-of-contents-css' => 'dd27a69b', 'diffusion-commit-view-css' => 'c8ce2d88', 'diffusion-icons-css' => 'c8ce2d88', - 'global-drag-and-drop-css' => '680ace9b', + 'global-drag-and-drop-css' => '6e2d527c', 'inline-comment-summary-css' => 'dd27a69b', 'javelin-aphlict' => '75ccea43', 'javelin-behavior' => 'a9f14d76', @@ -4488,55 +4488,55 @@ celerity_register_resource_map(array( 'javelin-util' => 'a9f14d76', 'javelin-vector' => 'a9f14d76', 'javelin-workflow' => 'a9f14d76', - 'lightbox-attachment-css' => '680ace9b', + 'lightbox-attachment-css' => '6e2d527c', 'maniphest-task-summary-css' => 'adc3c36d', 'maniphest-transaction-detail-css' => 'adc3c36d', - 'phabricator-action-list-view-css' => '680ace9b', - 'phabricator-application-launch-view-css' => '680ace9b', + 'phabricator-action-list-view-css' => '6e2d527c', + 'phabricator-application-launch-view-css' => '6e2d527c', 'phabricator-busy' => '75ccea43', 'phabricator-content-source-view-css' => 'dd27a69b', - 'phabricator-core-css' => '680ace9b', - 'phabricator-crumbs-view-css' => '680ace9b', + 'phabricator-core-css' => '6e2d527c', + 'phabricator-crumbs-view-css' => '6e2d527c', 'phabricator-drag-and-drop-file-upload' => '4ad86dee', 'phabricator-dropdown-menu' => '75ccea43', 'phabricator-file-upload' => '75ccea43', - 'phabricator-filetree-view-css' => '680ace9b', - 'phabricator-flag-css' => '680ace9b', - 'phabricator-form-view-css' => '680ace9b', - 'phabricator-header-view-css' => '680ace9b', + 'phabricator-filetree-view-css' => '6e2d527c', + 'phabricator-flag-css' => '6e2d527c', + 'phabricator-form-view-css' => '6e2d527c', + 'phabricator-header-view-css' => '6e2d527c', 'phabricator-hovercard' => '75ccea43', - 'phabricator-jump-nav' => '680ace9b', + 'phabricator-jump-nav' => '6e2d527c', 'phabricator-keyboard-shortcut' => '75ccea43', 'phabricator-keyboard-shortcut-manager' => '75ccea43', - 'phabricator-main-menu-view' => '680ace9b', + 'phabricator-main-menu-view' => '6e2d527c', 'phabricator-menu-item' => '75ccea43', - 'phabricator-nav-view-css' => '680ace9b', + 'phabricator-nav-view-css' => '6e2d527c', 'phabricator-notification' => '75ccea43', - 'phabricator-notification-css' => '680ace9b', - 'phabricator-notification-menu-css' => '680ace9b', - 'phabricator-object-item-list-view-css' => '680ace9b', + 'phabricator-notification-css' => '6e2d527c', + 'phabricator-notification-menu-css' => '6e2d527c', + 'phabricator-object-item-list-view-css' => '6e2d527c', 'phabricator-object-selector-css' => 'dd27a69b', 'phabricator-phtize' => '75ccea43', 'phabricator-prefab' => '75ccea43', 'phabricator-project-tag-css' => 'adc3c36d', - 'phabricator-property-list-view-css' => '680ace9b', - 'phabricator-remarkup-css' => '680ace9b', + 'phabricator-property-list-view-css' => '6e2d527c', + 'phabricator-remarkup-css' => '6e2d527c', 'phabricator-shaped-request' => '4ad86dee', - 'phabricator-side-menu-view-css' => '680ace9b', - 'phabricator-standard-page-view' => '680ace9b', - 'phabricator-tag-view-css' => '680ace9b', + 'phabricator-side-menu-view-css' => '6e2d527c', + 'phabricator-standard-page-view' => '6e2d527c', + 'phabricator-tag-view-css' => '6e2d527c', 'phabricator-textareautils' => '75ccea43', 'phabricator-tooltip' => '75ccea43', - 'phabricator-transaction-view-css' => '680ace9b', - 'phabricator-zindex-css' => '680ace9b', - 'phui-button-css' => '680ace9b', - 'phui-form-css' => '680ace9b', - 'phui-icon-view-css' => '680ace9b', - 'phui-spacing-css' => '680ace9b', - 'sprite-apps-large-css' => '680ace9b', - 'sprite-gradient-css' => '680ace9b', - 'sprite-icons-css' => '680ace9b', - 'sprite-menu-css' => '680ace9b', - 'syntax-highlighting-css' => '680ace9b', + 'phabricator-transaction-view-css' => '6e2d527c', + 'phabricator-zindex-css' => '6e2d527c', + 'phui-button-css' => '6e2d527c', + 'phui-form-css' => '6e2d527c', + 'phui-icon-view-css' => '6e2d527c', + 'phui-spacing-css' => '6e2d527c', + 'sprite-apps-large-css' => '6e2d527c', + 'sprite-gradient-css' => '6e2d527c', + 'sprite-icons-css' => '6e2d527c', + 'sprite-menu-css' => '6e2d527c', + 'syntax-highlighting-css' => '6e2d527c', ), )); diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index ecf2b65032..641dc4fa29 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -484,7 +484,6 @@ phutil_register_library_map(array( 'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php', 'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php', 'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php', - 'DiffusionPeopleMenuEventListener' => 'applications/diffusion/events/DiffusionPeopleMenuEventListener.php', 'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php', 'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php', 'DiffusionRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRemarkupRule.php', @@ -2412,7 +2411,6 @@ phutil_register_library_map(array( 'DiffusionPathCompleteController' => 'DiffusionController', 'DiffusionPathQueryTestCase' => 'PhabricatorTestCase', 'DiffusionPathValidateController' => 'DiffusionController', - 'DiffusionPeopleMenuEventListener' => 'PhutilEventListener', 'DiffusionQuery' => 'PhabricatorQuery', 'DiffusionRawDiffQuery' => 'DiffusionQuery', 'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject', diff --git a/src/applications/audit/events/AuditPeopleMenuEventListener.php b/src/applications/audit/events/AuditPeopleMenuEventListener.php index 1af4a40b82..9ba64d84c1 100644 --- a/src/applications/audit/events/AuditPeopleMenuEventListener.php +++ b/src/applications/audit/events/AuditPeopleMenuEventListener.php @@ -3,34 +3,34 @@ final class AuditPeopleMenuEventListener extends PhutilEventListener { public function register() { - $this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU); + $this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS); } public function handleEvent(PhutilEvent $event) { switch ($event->getType()) { - case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU: - $this->handleMenuEvent($event); + case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS: + $this->handleActionsEvent($event); break; } } - private function handleMenuEvent($event) { - $viewer = $event->getUser(); - $menu = $event->getValue('menu'); - $person = $event->getValue('person'); + private function handleActionsEvent($event) { + $person = $event->getValue('object'); + if (!($person instanceof PhabricatorUser)) { + return; + } + + $actions = $event->getValue('actions'); + $username = phutil_escape_uri($person->getUsername()); - $href = '/audit/view/author/'.$username.'/'; - $name = pht('Commits'); - $menu->addMenuItemToLabel('activity', - id(new PHUIListItemView()) - ->setIsExternal(true) - ->setName($name) - ->setHref($href) - ->setKey($name)); + $actions[] = id(new PhabricatorActionView()) + ->setIcon('transcript') + ->setName(pht('View Commits')) + ->setHref($href); - $event->setValue('menu', $menu); + $event->setValue('actions', $actions); } } diff --git a/src/applications/conpherence/events/ConpherencePeopleMenuEventListener.php b/src/applications/conpherence/events/ConpherencePeopleMenuEventListener.php index fdae04751a..70b5712d0b 100644 --- a/src/applications/conpherence/events/ConpherencePeopleMenuEventListener.php +++ b/src/applications/conpherence/events/ConpherencePeopleMenuEventListener.php @@ -3,35 +3,34 @@ final class ConpherencePeopleMenuEventListener extends PhutilEventListener { public function register() { - $this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU); + $this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS); } public function handleEvent(PhutilEvent $event) { switch ($event->getType()) { - case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU: - $this->handleMenuEvent($event); + case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS: + $this->handleActionsEvent($event); break; } } - private function handleMenuEvent($event) { - $viewer = $event->getUser(); - $menu = $event->getValue('menu'); - $person = $event->getValue('person'); + private function handleActionsEvent($event) { + $person = $event->getValue('object'); + if (!($person instanceof PhabricatorUser)) { + return; + } - $conpherence_uri = - new PhutilURI('/conpherence/new/?participant='.$person->getPHID()); - $name = pht('Message'); + $href = '/conpherence/new/?participant='.$person->getPHID(); - $menu->addMenuItemBefore('activity', - id(new PHUIListItemView()) - ->setIsExternal(true) - ->setName($name) - ->setHref($conpherence_uri) + $actions = $event->getValue('actions'); + + $actions[] = id(new PhabricatorActionView()) + ->setIcon('message') + ->setName(pht('Send Message')) ->setWorkflow(true) - ->setKey($name)); + ->setHref($href); - $event->setValue('menu', $menu); + $event->setValue('actions', $actions); } } diff --git a/src/applications/differential/events/DifferentialPeopleMenuEventListener.php b/src/applications/differential/events/DifferentialPeopleMenuEventListener.php index bcf2b8b926..7c1a88ee51 100644 --- a/src/applications/differential/events/DifferentialPeopleMenuEventListener.php +++ b/src/applications/differential/events/DifferentialPeopleMenuEventListener.php @@ -3,34 +3,35 @@ final class DifferentialPeopleMenuEventListener extends PhutilEventListener { public function register() { - $this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU); + $this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS); } public function handleEvent(PhutilEvent $event) { switch ($event->getType()) { - case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU: - $this->handleMenuEvent($event); + case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS: + $this->handleActionsEvent($event); break; } } - private function handleMenuEvent($event) { - $viewer = $event->getUser(); - $menu = $event->getValue('menu'); - $person = $event->getValue('person'); - $username = phutil_escape_uri($person->getUserName()); + private function handleActionsEvent($event) { + $person = $event->getValue('object'); + if (!($person instanceof PhabricatorUser)) { + return; + } - $href = '/differential/filter/revisions/'.$username.'/'; - $name = pht('Revisions'); + $href = '/differential/?authorPHIDs[]='.$person->getPHID(); - $menu->addMenuItemToLabel('activity', - id(new PHUIListItemView()) - ->setIsExternal(true) - ->setHref($href) - ->setName($name) - ->setKey($name)); + $actions = $event->getValue('actions'); - $event->setValue('menu', $menu); + $actions[] = id(new PhabricatorActionView()) + ->setUser($event->getUser()) + ->setRenderAsForm(true) + ->setIcon('transcript') + ->setName(pht('View Revisions')) + ->setHref($href); + + $event->setValue('actions', $actions); } } diff --git a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php index a4be7a85c6..8c21d99a87 100644 --- a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php +++ b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php @@ -26,7 +26,6 @@ final class PhabricatorApplicationDiffusion extends PhabricatorApplication { public function getEventListeners() { return array( - new DiffusionPeopleMenuEventListener(), new DiffusionHovercardEventListener(), ); } diff --git a/src/applications/diffusion/events/DiffusionPeopleMenuEventListener.php b/src/applications/diffusion/events/DiffusionPeopleMenuEventListener.php deleted file mode 100644 index def1fac496..0000000000 --- a/src/applications/diffusion/events/DiffusionPeopleMenuEventListener.php +++ /dev/null @@ -1,36 +0,0 @@ -listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU); - } - - public function handleEvent(PhutilEvent $event) { - switch ($event->getType()) { - case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU: - $this->handleMenuEvent($event); - break; - } - } - - private function handleMenuEvent($event) { - $viewer = $event->getUser(); - $menu = $event->getValue('menu'); - $person_phid = $event->getValue('person')->getPHID(); - - $href = '/diffusion/lint/?owner[0]='.$person_phid; - $name = pht('Lint Messages'); - - $menu->addMenuItemToLabel('activity', - id(new PHUIListItemView()) - ->setIsExternal(true) - ->setHref($href) - ->setName($name) - ->setKey($name)); - - $event->setValue('menu', $menu); - } - -} - diff --git a/src/applications/flag/events/PhabricatorFlagsUIEventListener.php b/src/applications/flag/events/PhabricatorFlagsUIEventListener.php index 622801aecb..e9ca4d3066 100644 --- a/src/applications/flag/events/PhabricatorFlagsUIEventListener.php +++ b/src/applications/flag/events/PhabricatorFlagsUIEventListener.php @@ -24,6 +24,13 @@ final class PhabricatorFlagsUIEventListener extends PhutilEventListener { return; } + if (($object instanceof PhabricatorUser)) { + // Although there's no real reason not to let you flag users, it also + // makes less conceptual sense than flaging other types of objects. For + // now, don't allow it. + return; + } + $flag = PhabricatorFlagQuery::loadUserFlag($user, $object->getPHID()); if ($flag) { diff --git a/src/applications/maniphest/event/ManiphestPeopleMenuEventListener.php b/src/applications/maniphest/event/ManiphestPeopleMenuEventListener.php index ebcec7eb73..76da62a57a 100644 --- a/src/applications/maniphest/event/ManiphestPeopleMenuEventListener.php +++ b/src/applications/maniphest/event/ManiphestPeopleMenuEventListener.php @@ -3,33 +3,33 @@ final class ManiphestPeopleMenuEventListener extends PhutilEventListener { public function register() { - $this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU); + $this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS); } public function handleEvent(PhutilEvent $event) { switch ($event->getType()) { - case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU: - $this->handleMenuEvent($event); + case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS: + $this->handleActionsEvent($event); break; } } - private function handleMenuEvent($event) { - $viewer = $event->getUser(); - $menu = $event->getValue('menu'); - $person_phid = $event->getValue('person')->getPHID(); + private function handleActionsEvent($event) { + $person = $event->getValue('object'); + if (!($person instanceof PhabricatorUser)) { + return; + } - $href = '/maniphest/view/action/?users='.$person_phid; - $name = pht('Tasks'); + $href = '/maniphest/view/action/?users='.$person->getPHID(); - $menu->addMenuItemToLabel('activity', - id(new PHUIListItemView()) - ->setIsExternal(true) - ->setHref($href) - ->setName($name) - ->setKey($name)); + $actions = $event->getValue('actions'); - $event->setValue('menu', $menu); + $actions[] = id(new PhabricatorActionView()) + ->setIcon('transcript') + ->setName(pht('View Tasks')) + ->setHref($href); + + $event->setValue('actions', $actions); } } diff --git a/src/applications/people/application/PhabricatorApplicationPeople.php b/src/applications/people/application/PhabricatorApplicationPeople.php index 8c055e904b..560f75751d 100644 --- a/src/applications/people/application/PhabricatorApplicationPeople.php +++ b/src/applications/people/application/PhabricatorApplicationPeople.php @@ -49,7 +49,7 @@ final class PhabricatorApplicationPeople extends PhabricatorApplication { 'picture/(?P[1-9]\d*)/' => 'PhabricatorPeopleProfilePictureController', ), - '/p/(?P[\w._-]+)/(?:(?P\w+)/)?' + '/p/(?P[\w._-]+)/' => 'PhabricatorPeopleProfileController', '/emailverify/(?P[^/]+)/' => 'PhabricatorEmailVerificationController', diff --git a/src/applications/people/controller/PhabricatorPeopleProfileController.php b/src/applications/people/controller/PhabricatorPeopleProfileController.php index 97a0c5af64..090f269a58 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfileController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileController.php @@ -4,7 +4,6 @@ final class PhabricatorPeopleProfileController extends PhabricatorPeopleController { private $username; - private $page; public function shouldRequireAdmin() { return false; @@ -12,17 +11,6 @@ final class PhabricatorPeopleProfileController public function willProcessRequest(array $data) { $this->username = idx($data, 'username'); - $this->page = idx($data, 'page'); - } - - private function getMainFilters($username) { - return array( - array( - 'key' => 'feed', - 'name' => pht('Feed'), - 'href' => '/p/'.$username.'/feed/' - ), - ); } public function processRequest() { @@ -41,26 +29,6 @@ final class PhabricatorPeopleProfileController $profile = $user->loadUserProfile(); $username = phutil_escape_uri($user->getUserName()); - $menu = new PHUIListView(); - foreach ($this->getMainFilters($username) as $filter) { - $menu->newLink($filter['name'], $filter['href'], $filter['key']); - } - - $menu->newLabel(pht('Activity'), 'activity'); - // NOTE: applications install the various links through PhabricatorEvent - // listeners - - $event = new PhabricatorEvent( - PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU, - array( - 'menu' => $menu, - 'person' => $user, - )); - $event->setUser($viewer); - PhutilEventEngine::dispatchEvent($event); - $nav = AphrontSideNavFilterView::newFromMenu($event->getValue('menu')); - $nav->selectFilter($this->page, 'feed'); - $picture = $user->loadProfileImageURI(); $header = id(new PhabricatorHeaderView()) @@ -104,6 +72,7 @@ final class PhabricatorPeopleProfileController } $actions = id(new PhabricatorActionListView()) + ->setObject($user) ->setUser($viewer); $can_edit = ($user->getPHID() == $viewer->getPHID()); @@ -134,13 +103,20 @@ final class PhabricatorPeopleProfileController $properties = $this->buildPropertyView($user); - $nav->appendChild($header); - $nav->appendChild($actions); - $nav->appendChild($properties); - $nav->appendChild($this->renderUserFeed($user)); + $crumbs = $this->buildApplicationCrumbs(); + $crumbs->addCrumb( + id(new PhabricatorCrumbView()) + ->setName($user->getUsername())); + $feed = $this->renderUserFeed($user); return $this->buildApplicationPage( - $nav, + array( + $crumbs, + $header, + $actions, + $properties, + $feed, + ), array( 'title' => $user->getUsername(), 'device' => true, diff --git a/src/view/layout/PhabricatorHeaderView.php b/src/view/layout/PhabricatorHeaderView.php index cbeb03e713..69e8a45d47 100644 --- a/src/view/layout/PhabricatorHeaderView.php +++ b/src/view/layout/PhabricatorHeaderView.php @@ -36,6 +36,9 @@ final class PhabricatorHeaderView extends AphrontView { public function render() { require_celerity_resource('phabricator-header-view-css'); + $classes = array(); + $classes[] = 'phabricator-header-shell'; + $image = null; if ($this->image) { $image = phutil_tag( @@ -45,6 +48,7 @@ final class PhabricatorHeaderView extends AphrontView { 'style' => 'background-image: url('.$this->image.')', ), ''); + $classes[] = 'phabricator-header-has-image'; } $header = array(); @@ -84,7 +88,7 @@ final class PhabricatorHeaderView extends AphrontView { return phutil_tag( 'div', array( - 'class' => 'phabricator-header-shell', + 'class' => implode(' ', $classes), ), array( $image, diff --git a/webroot/rsrc/css/layout/phabricator-action-list-view.css b/webroot/rsrc/css/layout/phabricator-action-list-view.css index 09fb8f0017..935d91e4f8 100644 --- a/webroot/rsrc/css/layout/phabricator-action-list-view.css +++ b/webroot/rsrc/css/layout/phabricator-action-list-view.css @@ -21,7 +21,12 @@ } .device-desktop .phabricator-header-shell + .phabricator-action-list-view { - margin-top: -28px; + margin-top: -33px; +} + +.device-desktop .phabricator-header-shell.phabricator-header-has-image + + .phabricator-action-list-view { + margin-top: -53px; } .device .phabricator-header-shell + .phabricator-action-list-view {