From d25a9530a7cdcc98de9efd213f31b15f18539aa6 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Mon, 12 Sep 2016 22:19:24 +0000 Subject: [PATCH] Move search, new room into thread column in Conpherence Summary: Moves search and new room out of crumb bar and into the thread column. This opens up space to add "Edit Room" into the crumbs area as an action link. Also removed 'widget-edit' pathways and javascript. Fixes T8972 Test Plan: Search, New, Edit rooms. Click different rooms, see correct URL each time. {F1813226} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T8972 Differential Revision: https://secure.phabricator.com/D16543 --- resources/celerity/map.php | 34 ++++++------ .../ConpherenceWidgetConfigConstants.php | 6 --- .../controller/ConpherenceController.php | 38 ++++++------- .../ConpherenceWidgetController.php | 7 --- .../view/ConpherenceThreadListView.php | 54 ++++++++++++++++--- .../rsrc/css/application/conpherence/menu.css | 20 ++++++- .../conpherence/behavior-widget-pane.js | 26 ++------- 7 files changed, 104 insertions(+), 81 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index e2fa32b82c..ae6f4ae94e 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -45,7 +45,7 @@ return array( 'rsrc/css/application/config/setup-issue.css' => 'f794cfc3', 'rsrc/css/application/config/unhandled-exception.css' => '4c96257a', 'rsrc/css/application/conpherence/durable-column.css' => '194ac487', - 'rsrc/css/application/conpherence/menu.css' => '3a0fd18a', + 'rsrc/css/application/conpherence/menu.css' => '4c959efa', 'rsrc/css/application/conpherence/message-pane.css' => '31dc663d', 'rsrc/css/application/conpherence/notification.css' => '6cdcc253', 'rsrc/css/application/conpherence/transaction.css' => '2c71247c', @@ -438,7 +438,7 @@ return array( 'rsrc/js/application/conpherence/behavior-menu.js' => '1d45c74d', 'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861', 'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3', - 'rsrc/js/application/conpherence/behavior-widget-pane.js' => 'a8458711', + 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '65845387', 'rsrc/js/application/countdown/timer.js' => 'e4cc26b3', 'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => 'edf8a145', 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e', @@ -614,7 +614,7 @@ return array( 'config-options-css' => '0ede4c9b', 'config-page-css' => '8798e14f', 'conpherence-durable-column-view' => '194ac487', - 'conpherence-menu-css' => '3a0fd18a', + 'conpherence-menu-css' => '4c959efa', 'conpherence-message-pane-css' => '31dc663d', 'conpherence-notification-css' => '6cdcc253', 'conpherence-thread-manager' => '01774ab2', @@ -664,7 +664,7 @@ return array( 'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a', 'javelin-behavior-conpherence-menu' => '1d45c74d', 'javelin-behavior-conpherence-pontificate' => '21ba5861', - 'javelin-behavior-conpherence-widget-pane' => 'a8458711', + 'javelin-behavior-conpherence-widget-pane' => '65845387', 'javelin-behavior-countdown-timer' => 'e4cc26b3', 'javelin-behavior-dark-console' => 'f411b6ae', 'javelin-behavior-dashboard-async-panel' => '469c0d9e', @@ -1479,6 +1479,19 @@ return array( 'javelin-request', 'javelin-workflow', ), + 65845387 => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-util', + 'phabricator-notification', + 'javelin-behavior-device', + 'phuix-dropdown-menu', + 'phuix-action-list-view', + 'phuix-action-view', + 'conpherence-thread-manager', + ), '680ea2c8' => array( 'javelin-install', 'javelin-dom', @@ -1784,19 +1797,6 @@ return array( 'javelin-stratcom', 'javelin-dom', ), - 'a8458711' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-stratcom', - 'javelin-workflow', - 'javelin-util', - 'phabricator-notification', - 'javelin-behavior-device', - 'phuix-dropdown-menu', - 'phuix-action-list-view', - 'phuix-action-view', - 'conpherence-thread-manager', - ), 'a8d8459d' => array( 'javelin-behavior', 'javelin-dom', diff --git a/src/applications/conpherence/constants/ConpherenceWidgetConfigConstants.php b/src/applications/conpherence/constants/ConpherenceWidgetConfigConstants.php index 36d4f7d617..b8d84df082 100644 --- a/src/applications/conpherence/constants/ConpherenceWidgetConfigConstants.php +++ b/src/applications/conpherence/constants/ConpherenceWidgetConfigConstants.php @@ -36,12 +36,6 @@ final class ConpherenceWidgetConfigConstants extends ConpherenceConstants { 'deviceOnly' => false, 'hasCreate' => false, ), - 'widgets-edit' => array( - 'name' => pht('Edit Room'), - 'icon' => 'fa-pencil', - 'deviceOnly' => false, - 'hasCreate' => false, - ), ); } diff --git a/src/applications/conpherence/controller/ConpherenceController.php b/src/applications/conpherence/controller/ConpherenceController.php index 6740ed0562..c573c0bc54 100644 --- a/src/applications/conpherence/controller/ConpherenceController.php +++ b/src/applications/conpherence/controller/ConpherenceController.php @@ -38,28 +38,8 @@ abstract class ConpherenceController extends PhabricatorController { $crumbs = parent::buildApplicationCrumbs(); $crumbs->setBorder(true); - $crumbs->addAction( - id(new PHUIListItemView()) - ->setName(pht('Search')) - ->setHref($this->getApplicationURI('search/')) - ->setIcon('fa-search')); - - if ($is_rooms) { + if (!$is_rooms) { $crumbs - ->addAction( - id(new PHUIListItemView()) - ->setName(pht('New Room')) - ->setHref($this->getApplicationURI('new/')) - ->setIcon('fa-plus-square') - ->setWorkflow(true)); - } else { - $crumbs - ->addAction( - id(new PHUIListItemView()) - ->setName(pht('New Room')) - ->setHref($this->getApplicationURI('new/')) - ->setIcon('fa-plus-square') - ->setWorkflow(true)) ->addAction( id(new PHUIListItemView()) ->setName(pht('Room')) @@ -76,6 +56,7 @@ abstract class ConpherenceController extends PhabricatorController { ConpherenceThread $conpherence, array $policy_objects) { assert_instances_of($policy_objects, 'PhabricatorPolicy'); + $viewer = $this->getViewer(); $crumbs = $this->buildApplicationCrumbs(); $data = $conpherence->getDisplayData($this->getViewer()); @@ -84,6 +65,21 @@ abstract class ConpherenceController extends PhabricatorController { ->setName($data['title']) ->setHref('/'.$conpherence->getMonogram())); + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $conpherence, + PhabricatorPolicyCapability::CAN_EDIT); + + $crumbs + ->addAction( + id(new PHUIListItemView()) + ->setName(pht('Edit Room')) + ->setHref( + $this->getApplicationURI('update/'.$conpherence->getID()).'/') + ->setIcon('fa-pencil') + ->setDisabled(!$can_edit) + ->setWorkflow(true)); + return hsprintf( '%s', array( diff --git a/src/applications/conpherence/controller/ConpherenceWidgetController.php b/src/applications/conpherence/controller/ConpherenceWidgetController.php index 3e749c6cf2..bfe8803cf9 100644 --- a/src/applications/conpherence/controller/ConpherenceWidgetController.php +++ b/src/applications/conpherence/controller/ConpherenceWidgetController.php @@ -82,13 +82,6 @@ final class ConpherenceWidgetController extends ConpherenceController { 'style' => 'display: none', ), $this->renderSettingsWidgetPaneContent()); - $widgets[] = phutil_tag( - 'div', - array( - 'class' => 'widgets-body', - 'id' => 'widgets-edit', - 'style' => 'display: none', - )); // without this implosion we get "," between each element in our widgets // array diff --git a/src/applications/conpherence/view/ConpherenceThreadListView.php b/src/applications/conpherence/view/ConpherenceThreadListView.php index 302610788c..72e0ce3fc5 100644 --- a/src/applications/conpherence/view/ConpherenceThreadListView.php +++ b/src/applications/conpherence/view/ConpherenceThreadListView.php @@ -99,9 +99,7 @@ final class ConpherenceThreadListView extends AphrontView { array $rooms, array $policy_objects) { - $header = $this->renderMenuItemHeader( - pht('Rooms'), - 'conpherence-room-list-header'); + $header = $this->renderMenuItemHeader(); $menu->addMenuItem($header); if (empty($rooms)) { @@ -189,11 +187,53 @@ final class ConpherenceThreadListView extends AphrontView { return $menu; } - private function renderMenuItemHeader($title, $class = null) { + private function renderMenuItemHeader() { + $rooms = phutil_tag( + 'a', + array( + 'class' => 'room-list-href', + 'href' => '/conpherence/search/', + ), + pht('Rooms')); + + $new_icon = id(new PHUIIconView()) + ->setIcon('fa-plus-square') + ->addSigil('has-tooltip') + ->setHref('/conpherence/new/') + ->setWorkflow(true) + ->setMetaData(array( + 'tip' => pht('New Room'), + )); + + $search_icon = id(new PHUIIconView()) + ->setIcon('fa-search') + ->addSigil('has-tooltip') + ->setHref('/conpherence/search/') + ->setMetaData(array( + 'tip' => pht('Search Rooms'), + )); + + $icons = phutil_tag( + 'span', + array( + 'class' => 'room-list-icons', + ), + array( + $new_icon, + $search_icon, + )); + + $new_icon = id(new PHUIIconView()) + ->setIcon('fa-plus-square') + ->setHref('/conpherence/new/') + ->setWorkflow(true); + + $custom = array($rooms, $icons); + $item = id(new PHUIListItemView()) - ->setType(PHUIListItemView::TYPE_LABEL) - ->setName($title) - ->addClass($class); + ->setType(PHUIListItemView::TYPE_CUSTOM) + ->setName($custom) + ->addClass('conpherence-room-list-header'); return $item; } diff --git a/webroot/rsrc/css/application/conpherence/menu.css b/webroot/rsrc/css/application/conpherence/menu.css index 22f11b05bf..58b41a7fd5 100644 --- a/webroot/rsrc/css/application/conpherence/menu.css +++ b/webroot/rsrc/css/application/conpherence/menu.css @@ -51,8 +51,24 @@ display: none; } -.conpherence-menu-pane.phabricator-side-menu .phui-list-item-type-label { +.conpherence-menu-pane.phabricator-side-menu .room-list-href { padding: 10px 0 9px 8px; + display: inline-block; + text-transform: uppercase; + color: {$darkgreytext}; + font-weight: bold; + font-size: {$smallerfontsize}; +} + +.conpherence-menu-pane.phabricator-side-menu .room-list-icons { + display: inline-block; + float: right; + padding: 8px 0 5px; +} + +.conpherence-menu-pane .conpherence-room-list-header { + clear: both; + overflow: hidden; } .conpherence-menu-pane .conpherence-room-list-header @@ -60,7 +76,7 @@ font-weight: bold; float: right; text-transform: none; - margin: 0px 8px 0px 0px; + padding: 4px; } .conpherence-menu-pane .conpherence-room-list-header diff --git a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js index f83dc1b4d4..dfdf4bfd78 100644 --- a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js +++ b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js @@ -83,27 +83,11 @@ JX.behavior('conpherence-widget-pane', function(config) { var handler; var href; - if (widget == 'widgets-edit') { - var threadManager = JX.ConpherenceThreadManager.getInstance(); - handler = function(e) { - e.prevent(); - menu.close(); - threadManager.runUpdateWorkflowFromLink( - e.getTarget(), - { - action : 'metadata', - force_ajax : true, - stage : 'submit' - }); - }; - href = threadManager._getUpdateURI(); - } else { - handler = JX.bind(null, function(widget, e) { - toggleWidget({widget: widget}); - e.prevent(); - menu.close(); - }, widget); - } + handler = JX.bind(null, function(widget, e) { + toggleWidget({widget: widget}); + e.prevent(); + menu.close(); + }, widget); var item = new JX.PHUIXActionView() .setIcon(widget_data.icon || 'none') .setName(widget_data.name)