@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.

Add a toggle, sticky pref, for Conpherence Widget Pane

Summary: This adds a "column" icon into crumbs, like in workboards, for expanding or hiding the "Widget Pane". This is per user sticky and defaults to off.

Test Plan: View a Conpherence Room, see no widgets by default. Toggle it on, see widget. Reload page, see widget stick. Verify mobile, tablets ignore hiding.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Maniphest Tasks: T10364

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

authored by

Chad Little and committed by
chad
ff64c4e0 98f7e751

+116 -16
+14 -5
resources/celerity/map.php
··· 7 7 */ 8 8 return array( 9 9 'names' => array( 10 - 'conpherence.pkg.css' => '1659749c', 10 + 'conpherence.pkg.css' => 'afbb036b', 11 11 'core.pkg.css' => '1ca373de', 12 12 'core.pkg.js' => '1d376fa9', 13 13 'darkconsole.pkg.js' => 'e7393ebb', ··· 47 47 'rsrc/css/application/config/unhandled-exception.css' => '4c96257a', 48 48 'rsrc/css/application/conpherence/durable-column.css' => '194ac487', 49 49 'rsrc/css/application/conpherence/menu.css' => '67235d90', 50 - 'rsrc/css/application/conpherence/message-pane.css' => '97f3f6cf', 50 + 'rsrc/css/application/conpherence/message-pane.css' => 'ee0e27be', 51 51 'rsrc/css/application/conpherence/notification.css' => '6cdcc253', 52 52 'rsrc/css/application/conpherence/transaction.css' => '2c71247c', 53 53 'rsrc/css/application/conpherence/update.css' => 'faf6be09', 54 - 'rsrc/css/application/conpherence/widget-pane.css' => 'c689f6a4', 54 + 'rsrc/css/application/conpherence/widget-pane.css' => 'a131d5b6', 55 55 'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4', 56 56 'rsrc/css/application/countdown/timer.css' => '16c52f5c', 57 57 'rsrc/css/application/daemon/bulk-job.css' => 'df9c1d4a', ··· 439 439 'rsrc/js/application/conpherence/behavior-menu.js' => '1d45c74d', 440 440 'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861', 441 441 'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3', 442 + 'rsrc/js/application/conpherence/behavior-toggle-widget.js' => 'b151bbbc', 442 443 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '65845387', 443 444 'rsrc/js/application/countdown/timer.js' => 'e4cc26b3', 444 445 'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => 'edf8a145', ··· 616 617 'config-page-css' => '8798e14f', 617 618 'conpherence-durable-column-view' => '194ac487', 618 619 'conpherence-menu-css' => '67235d90', 619 - 'conpherence-message-pane-css' => '97f3f6cf', 620 + 'conpherence-message-pane-css' => 'ee0e27be', 620 621 'conpherence-notification-css' => '6cdcc253', 621 622 'conpherence-thread-manager' => '01774ab2', 622 623 'conpherence-transaction-css' => '2c71247c', 623 624 'conpherence-update-css' => 'faf6be09', 624 - 'conpherence-widget-pane-css' => 'c689f6a4', 625 + 'conpherence-widget-pane-css' => 'a131d5b6', 625 626 'd3' => 'a11a5ff2', 626 627 'differential-changeset-view-css' => '9ef7d354', 627 628 'differential-core-view-css' => '5b7b8ff4', ··· 771 772 'javelin-behavior-test-payment-form' => 'fc91ab6c', 772 773 'javelin-behavior-time-typeahead' => '522431f7', 773 774 'javelin-behavior-toggle-class' => '92b9ec77', 775 + 'javelin-behavior-toggle-widget' => 'b151bbbc', 774 776 'javelin-behavior-typeahead-browse' => '635de1ec', 775 777 'javelin-behavior-typeahead-search' => '93d0c9e3', 776 778 'javelin-behavior-view-placeholder' => '47830651', ··· 1845 1847 'javelin-request', 1846 1848 'javelin-util', 1847 1849 'phabricator-shaped-request', 1850 + ), 1851 + 'b151bbbc' => array( 1852 + 'javelin-behavior', 1853 + 'javelin-dom', 1854 + 'javelin-util', 1855 + 'javelin-workflow', 1856 + 'javelin-stratcom', 1848 1857 ), 1849 1858 'b1f0ccee' => array( 1850 1859 'javelin-install',
+2
src/__phutil_library_map__.php
··· 2216 2216 'PhabricatorConpherenceNotificationsSetting' => 'applications/settings/setting/PhabricatorConpherenceNotificationsSetting.php', 2217 2217 'PhabricatorConpherencePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorConpherencePreferencesSettingsPanel.php', 2218 2218 'PhabricatorConpherenceThreadPHIDType' => 'applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php', 2219 + 'PhabricatorConpherenceWidgetVisibleSetting' => 'applications/settings/setting/PhabricatorConpherenceWidgetVisibleSetting.php', 2219 2220 'PhabricatorConsoleApplication' => 'applications/console/application/PhabricatorConsoleApplication.php', 2220 2221 'PhabricatorConsoleContentSource' => 'infrastructure/contentsource/PhabricatorConsoleContentSource.php', 2221 2222 'PhabricatorContentSource' => 'infrastructure/contentsource/PhabricatorContentSource.php', ··· 6973 6974 'PhabricatorConpherenceNotificationsSetting' => 'PhabricatorSelectSetting', 6974 6975 'PhabricatorConpherencePreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', 6975 6976 'PhabricatorConpherenceThreadPHIDType' => 'PhabricatorPHIDType', 6977 + 'PhabricatorConpherenceWidgetVisibleSetting' => 'PhabricatorInternalSetting', 6976 6978 'PhabricatorConsoleApplication' => 'PhabricatorApplication', 6977 6979 'PhabricatorConsoleContentSource' => 'PhabricatorContentSource', 6978 6980 'PhabricatorContentSource' => 'Phobject',
+21
src/applications/conpherence/controller/ConpherenceController.php
··· 80 80 ->setDisabled(!$can_edit) 81 81 ->setWorkflow(true)); 82 82 83 + $widget_key = PhabricatorConpherenceWidgetVisibleSetting::SETTINGKEY; 84 + $widget_view = (bool)$viewer->getUserSetting($widget_key, false); 85 + 86 + $divider = id(new PHUIListItemView()) 87 + ->setType(PHUIListItemView::TYPE_DIVIDER) 88 + ->addClass('conpherence-header-desktop-item'); 89 + $crumbs->addAction($divider); 90 + 91 + Javelin::initBehavior( 92 + 'toggle-widget', 93 + array( 94 + 'show' => (int)$widget_view, 95 + 'settingsURI' => '/settings/adjust/?key='.$widget_key, 96 + )); 97 + 98 + $crumbs->addAction( 99 + id(new PHUIListItemView()) 100 + ->addSigil('conpherence-widget-toggle') 101 + ->setIcon('fa-columns') 102 + ->addClass('conpherence-header-desktop-item')); 103 + 83 104 return hsprintf( 84 105 '%s', 85 106 array(
-6
src/applications/conpherence/controller/ConpherenceViewController.php
··· 9 9 return true; 10 10 } 11 11 12 - protected function buildApplicationCrumbs() { 13 - $crumbs = $this->buildConpherenceApplicationCrumbs(); 14 - $crumbs->setBorder(true); 15 - return $crumbs; 16 - } 17 - 18 12 public function handleRequest(AphrontRequest $request) { 19 13 $user = $request->getUser(); 20 14
+14 -4
src/applications/conpherence/view/ConpherenceLayoutView.php
··· 55 55 return $this; 56 56 } 57 57 58 + public function getWidgetColumnVisible() { 59 + $widget_key = PhabricatorConpherenceWidgetVisibleSetting::SETTINGKEY; 60 + $user = $this->getUser(); 61 + return (bool)$user->getUserSetting($widget_key, false); 62 + } 63 + 58 64 public function render() { 59 65 require_celerity_resource('conpherence-menu-css'); 60 66 require_celerity_resource('conpherence-message-pane-css'); 61 67 require_celerity_resource('conpherence-widget-pane-css'); 62 68 63 - $layout_id = celerity_generate_unique_node_id(); 69 + $layout_id = 'conpherence-main-layout'; 64 70 65 71 $selected_id = null; 66 72 $selected_thread_id = null; ··· 90 96 'hasWidgets' => false, 91 97 )); 92 98 93 - $class = null; 99 + $classes = array(); 94 100 if (!$this->getUser()->isLoggedIn()) { 95 - $class = 'conpherence-logged-out'; 101 + $classes[] = 'conpherence-logged-out'; 102 + } 103 + 104 + if (!$this->getWidgetColumnVisible()) { 105 + $classes[] = 'hide-widgets'; 96 106 } 97 107 98 108 $this->initBehavior( ··· 105 115 'id' => $layout_id, 106 116 'sigil' => 'conpherence-layout', 107 117 'class' => 'conpherence-layout '. 108 - $class. 118 + implode(' ', $classes). 109 119 ' conpherence-role-'.$this->role, 110 120 ), 111 121 array(
+12
src/applications/settings/setting/PhabricatorConpherenceWidgetVisibleSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorConpherenceWidgetVisibleSetting 4 + extends PhabricatorInternalSetting { 5 + 6 + const SETTINGKEY = 'conpherence-widget'; 7 + 8 + public function getSettingName() { 9 + return pht('Conpherence Widget Pane Visible'); 10 + } 11 + 12 + }
+10 -1
webroot/rsrc/css/application/conpherence/message-pane.css
··· 315 315 } 316 316 317 317 .conpherence-message-pane .remarkup-assist-textarea:focus { 318 - border-color: {$lightblueborder}; 318 + border: 2px solid {$lightgreyborder}; 319 + border-top: 1px solid {$thinblueborder}; 319 320 } 320 321 321 322 .device .conpherence-message-pane .remarkup-assist-textarea { ··· 349 350 .conpherence-message .phabricator-remarkup .remarkup-code-block pre { 350 351 max-height: 200px; 351 352 } 353 + 354 + .device .conpherence-header-desktop-item { 355 + display: none; 356 + } 357 + 358 + .device .conpherence-header-pane .phui-crumb-action-divider { 359 + display: none; 360 + }
+15
webroot/rsrc/css/application/conpherence/widget-pane.css
··· 190 190 width: 60px; 191 191 margin: 0 auto 0 auto; 192 192 } 193 + 194 + /****** Hide Widgets **********************************************************/ 195 + 196 + .device-desktop .hide-widgets .conpherence-widget-pane { 197 + display: none; 198 + } 199 + 200 + .device-desktop .hide-widgets .conpherence-message-pane, 201 + .device-desktop .hide-widgets .loading .messages-loading-mask, 202 + .device-desktop .hide-widgets .loading .messages-loading-icon, 203 + .device-desktop .hide-widgets .conpherence-no-threads, 204 + .device-desktop .hide-widgets .conpherence-message-pane .conpherence-messages, 205 + .device-desktop .hide-widgets .conpherence-message-pane .phui-form-view { 206 + right: 0; 207 + }
+28
webroot/rsrc/js/application/conpherence/behavior-toggle-widget.js
··· 1 + /** 2 + * @provides javelin-behavior-toggle-widget 3 + * @requires javelin-behavior 4 + * javelin-dom 5 + * javelin-util 6 + * javelin-workflow 7 + * javelin-stratcom 8 + */ 9 + 10 + JX.behavior('toggle-widget', function(config) { 11 + 12 + function _toggleColumn(e) { 13 + e.kill(); 14 + var node = JX.$('conpherence-main-layout'); 15 + config.show = !config.show; 16 + JX.DOM.alterClass(node, 'hide-widgets', !config.show); 17 + 18 + new JX.Request(config.settingsURI) 19 + .setData({value: (config.show ? 1 : 0)}) 20 + .send(); 21 + } 22 + 23 + JX.Stratcom.listen( 24 + 'click', 25 + 'conpherence-widget-toggle', 26 + _toggleColumn); 27 + 28 + });