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

Allow dashboard panels to render in a headerless mode

Summary:
Ref T4986. This mostly just makes tab panels a little nicer.

Maybe this will be modal (header = "none", "edit", "view") in a few diffs but we can clean it up then if so.

Test Plan: {F155491}

Reviewers: btrahan, chad

Reviewed By: chad

Subscribers: epriestley

Maniphest Tasks: T4986

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

+59 -21
+8 -8
resources/celerity/map.php
··· 358 358 'rsrc/js/application/conpherence/behavior-pontificate.js' => '53f6f2dd', 359 359 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '40b1ff90', 360 360 'rsrc/js/application/countdown/timer.js' => '889c96f3', 361 - 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => 'fd965b41', 361 + 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => 'f1375ea5', 362 362 'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => 'fa187a68', 363 363 'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => 'f2441746', 364 364 'rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js' => '533a187b', ··· 553 553 'javelin-behavior-conpherence-widget-pane' => '40b1ff90', 554 554 'javelin-behavior-countdown-timer' => '889c96f3', 555 555 'javelin-behavior-dark-console' => 'e9fdb5e5', 556 - 'javelin-behavior-dashboard-async-panel' => 'fd965b41', 556 + 'javelin-behavior-dashboard-async-panel' => 'f1375ea5', 557 557 'javelin-behavior-dashboard-move-panels' => 'fa187a68', 558 558 'javelin-behavior-device' => '03d6ed07', 559 559 'javelin-behavior-differential-add-reviewers-and-ccs' => '533a187b', ··· 1965 1965 0 => 'javelin-install', 1966 1966 1 => 'javelin-util', 1967 1967 ), 1968 + 'f1375ea5' => 1969 + array( 1970 + 0 => 'javelin-behavior', 1971 + 1 => 'javelin-dom', 1972 + 2 => 'javelin-workflow', 1973 + ), 1968 1974 'f2441746' => 1969 1975 array( 1970 1976 0 => 'javelin-dom', ··· 2032 2038 array( 2033 2039 0 => 'phabricator-busy', 2034 2040 1 => 'javelin-behavior', 2035 - ), 2036 - 'fd965b41' => 2037 - array( 2038 - 0 => 'javelin-behavior', 2039 - 1 => 'javelin-dom', 2040 - 2 => 'javelin-workflow', 2041 2041 ), 2042 2042 'fe2e0ba4' => 2043 2043 array(
+2 -1
src/applications/dashboard/controller/PhabricatorDashboardPanelRenderController.php
··· 37 37 ->setViewer($viewer) 38 38 ->setPanel($panel) 39 39 ->setParentPanelPHIDs($parent_phids) 40 + ->setHeaderless($request->getBool('headerless')) 40 41 ->renderPanel(); 41 42 42 43 if ($request->isAjax()) { 43 44 return id(new AphrontAjaxResponse()) 44 45 ->setContent( 45 46 array( 46 - 'panelMarkup' => $rendered_panel, 47 + 'panelMarkup' => hsprintf('%s', $rendered_panel), 47 48 )); 48 49 } 49 50
+37 -10
src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
··· 6 6 private $viewer; 7 7 private $enableAsyncRendering; 8 8 private $parentPanelPHIDs; 9 + private $headerless; 10 + 11 + public function setHeaderless($headerless) { 12 + $this->headerless = $headerless; 13 + return $this; 14 + } 15 + 16 + public function getHeaderless() { 17 + return $this->headerless; 18 + } 9 19 10 20 /** 11 21 * Allow the engine to render the panel via Ajax. ··· 75 85 } 76 86 77 87 private function renderErrorPanel($title, $body) { 78 - return id(new PHUIObjectBoxView()) 79 - ->setHeaderText($title) 80 - ->setFormErrors(array($body)); 88 + if ($this->getHeaderless()) { 89 + return id(new AphrontErrorView()) 90 + ->setErrors(array($body)); 91 + } else { 92 + return id(new PHUIObjectBoxView()) 93 + ->setHeaderText($title) 94 + ->setFormErrors(array($body)); 95 + } 81 96 } 82 97 83 98 private function renderAsyncPanel(PhabricatorDashboardPanel $panel) { ··· 88 103 array( 89 104 'panelID' => $panel_id, 90 105 'parentPanelPHIDs' => $this->getParentPanelPHIDs(), 106 + 'headerless' => $this->getHeaderless(), 91 107 'uri' => '/dashboard/panel/render/'.$panel->getID().'/', 92 108 )); 93 109 94 - return id(new PHUIObjectBoxView()) 95 - ->addSigil('dashboard-panel') 96 - ->setMetadata(array( 97 - 'objectPHID' => $panel->getPHID())) 98 - ->setHeaderText($panel->getName()) 99 - ->setID($panel_id) 100 - ->appendChild(pht('Loading...')); 110 + $content = pht('Loading...'); 111 + 112 + if ($this->headerless) { 113 + return phutil_tag( 114 + 'div', 115 + array( 116 + 'id' => $panel_id, 117 + ), 118 + $content); 119 + } else { 120 + return id(new PHUIObjectBoxView()) 121 + ->addSigil('dashboard-panel') 122 + ->setMetadata(array( 123 + 'objectPHID' => $panel->getPHID())) 124 + ->setHeaderText($panel->getName()) 125 + ->setID($panel_id) 126 + ->appendChild($content); 127 + } 101 128 } 102 129 103 130 /**
+4
src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php
··· 47 47 48 48 $content = $this->renderPanelContent($viewer, $panel, $engine); 49 49 50 + if ($engine->getHeaderless()) { 51 + return $content; 52 + } 53 + 50 54 return id(new PHUIObjectBoxView()) 51 55 ->addSigil('dashboard-panel') 52 56 ->setMetadata(array(
+2 -1
src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeTabs.php
··· 91 91 ->setEnableAsyncRendering(true) 92 92 ->setParentPanelPHIDs($parent_phids) 93 93 ->setPanel($panel) 94 + ->setHeaderless(true) 94 95 ->renderPanel(); 95 96 } else { 96 - $panel_content = 'nope'; 97 + $panel_content = pht('(Invalid Panel)'); 97 98 } 98 99 99 100 $content[] = phutil_tag(
+6 -1
webroot/rsrc/js/application/dashboard/behavior-dashboard-async-panel.js
··· 9 9 var panel = JX.$(config.panelID); 10 10 panel.style.opacity = '0.5'; 11 11 12 + var data = { 13 + parentPanelPHIDs: config.parentPanelPHIDs.join(','), 14 + headerless: config.headerless ? 1 : 0 15 + }; 16 + 12 17 new JX.Workflow(config.uri) 13 - .setData({parentPanelPHIDs: config.parentPanelPHIDs.join(',')}) 18 + .setData(data) 14 19 .setHandler(function(r) { 15 20 JX.DOM.replace(panel, JX.$H(r.panelMarkup)); 16 21 })