diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -358,7 +358,7 @@ 'rsrc/js/application/conpherence/behavior-pontificate.js' => '53f6f2dd', 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '40b1ff90', 'rsrc/js/application/countdown/timer.js' => '889c96f3', - 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => 'fd965b41', + 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => 'f1375ea5', 'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => 'fa187a68', 'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => 'f2441746', 'rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js' => '533a187b', @@ -553,7 +553,7 @@ 'javelin-behavior-conpherence-widget-pane' => '40b1ff90', 'javelin-behavior-countdown-timer' => '889c96f3', 'javelin-behavior-dark-console' => 'e9fdb5e5', - 'javelin-behavior-dashboard-async-panel' => 'fd965b41', + 'javelin-behavior-dashboard-async-panel' => 'f1375ea5', 'javelin-behavior-dashboard-move-panels' => 'fa187a68', 'javelin-behavior-device' => '03d6ed07', 'javelin-behavior-differential-add-reviewers-and-ccs' => '533a187b', @@ -1965,6 +1965,12 @@ 0 => 'javelin-install', 1 => 'javelin-util', ), + 'f1375ea5' => + array( + 0 => 'javelin-behavior', + 1 => 'javelin-dom', + 2 => 'javelin-workflow', + ), 'f2441746' => array( 0 => 'javelin-dom', @@ -2033,12 +2039,6 @@ 0 => 'phabricator-busy', 1 => 'javelin-behavior', ), - 'fd965b41' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-workflow', - ), 'fe2e0ba4' => array( 0 => 'javelin-behavior', diff --git a/src/applications/dashboard/controller/PhabricatorDashboardPanelRenderController.php b/src/applications/dashboard/controller/PhabricatorDashboardPanelRenderController.php --- a/src/applications/dashboard/controller/PhabricatorDashboardPanelRenderController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardPanelRenderController.php @@ -37,13 +37,14 @@ ->setViewer($viewer) ->setPanel($panel) ->setParentPanelPHIDs($parent_phids) + ->setHeaderless($request->getBool('headerless')) ->renderPanel(); if ($request->isAjax()) { return id(new AphrontAjaxResponse()) ->setContent( array( - 'panelMarkup' => $rendered_panel, + 'panelMarkup' => hsprintf('%s', $rendered_panel), )); } diff --git a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php --- a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php +++ b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php @@ -6,6 +6,16 @@ private $viewer; private $enableAsyncRendering; private $parentPanelPHIDs; + private $headerless; + + public function setHeaderless($headerless) { + $this->headerless = $headerless; + return $this; + } + + public function getHeaderless() { + return $this->headerless; + } /** * Allow the engine to render the panel via Ajax. @@ -75,9 +85,14 @@ } private function renderErrorPanel($title, $body) { - return id(new PHUIObjectBoxView()) - ->setHeaderText($title) - ->setFormErrors(array($body)); + if ($this->getHeaderless()) { + return id(new AphrontErrorView()) + ->setErrors(array($body)); + } else { + return id(new PHUIObjectBoxView()) + ->setHeaderText($title) + ->setFormErrors(array($body)); + } } private function renderAsyncPanel(PhabricatorDashboardPanel $panel) { @@ -88,16 +103,28 @@ array( 'panelID' => $panel_id, 'parentPanelPHIDs' => $this->getParentPanelPHIDs(), + 'headerless' => $this->getHeaderless(), 'uri' => '/dashboard/panel/render/'.$panel->getID().'/', )); - return id(new PHUIObjectBoxView()) - ->addSigil('dashboard-panel') - ->setMetadata(array( - 'objectPHID' => $panel->getPHID())) - ->setHeaderText($panel->getName()) - ->setID($panel_id) - ->appendChild(pht('Loading...')); + $content = pht('Loading...'); + + if ($this->headerless) { + return phutil_tag( + 'div', + array( + 'id' => $panel_id, + ), + $content); + } else { + return id(new PHUIObjectBoxView()) + ->addSigil('dashboard-panel') + ->setMetadata(array( + 'objectPHID' => $panel->getPHID())) + ->setHeaderText($panel->getName()) + ->setID($panel_id) + ->appendChild($content); + } } /** diff --git a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php --- a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php +++ b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php @@ -47,6 +47,10 @@ $content = $this->renderPanelContent($viewer, $panel, $engine); + if ($engine->getHeaderless()) { + return $content; + } + return id(new PHUIObjectBoxView()) ->addSigil('dashboard-panel') ->setMetadata(array( diff --git a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeTabs.php b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeTabs.php --- a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeTabs.php +++ b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeTabs.php @@ -91,9 +91,10 @@ ->setEnableAsyncRendering(true) ->setParentPanelPHIDs($parent_phids) ->setPanel($panel) + ->setHeaderless(true) ->renderPanel(); } else { - $panel_content = 'nope'; + $panel_content = pht('(Invalid Panel)'); } $content[] = phutil_tag( diff --git a/webroot/rsrc/js/application/dashboard/behavior-dashboard-async-panel.js b/webroot/rsrc/js/application/dashboard/behavior-dashboard-async-panel.js --- a/webroot/rsrc/js/application/dashboard/behavior-dashboard-async-panel.js +++ b/webroot/rsrc/js/application/dashboard/behavior-dashboard-async-panel.js @@ -9,8 +9,13 @@ var panel = JX.$(config.panelID); panel.style.opacity = '0.5'; + var data = { + parentPanelPHIDs: config.parentPanelPHIDs.join(','), + headerless: config.headerless ? 1 : 0 + }; + new JX.Workflow(config.uri) - .setData({parentPanelPHIDs: config.parentPanelPHIDs.join(',')}) + .setData(data) .setHandler(function(r) { JX.DOM.replace(panel, JX.$H(r.panelMarkup)); })