mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-14 02:42:40 +01:00
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
This commit is contained in:
parent
bf6e87da24
commit
302d5bcec5
6 changed files with 59 additions and 21 deletions
|
@ -358,7 +358,7 @@ return array(
|
||||||
'rsrc/js/application/conpherence/behavior-pontificate.js' => '53f6f2dd',
|
'rsrc/js/application/conpherence/behavior-pontificate.js' => '53f6f2dd',
|
||||||
'rsrc/js/application/conpherence/behavior-widget-pane.js' => '40b1ff90',
|
'rsrc/js/application/conpherence/behavior-widget-pane.js' => '40b1ff90',
|
||||||
'rsrc/js/application/countdown/timer.js' => '889c96f3',
|
'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/dashboard/behavior-dashboard-move-panels.js' => 'fa187a68',
|
||||||
'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => 'f2441746',
|
'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => 'f2441746',
|
||||||
'rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js' => '533a187b',
|
'rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js' => '533a187b',
|
||||||
|
@ -553,7 +553,7 @@ return array(
|
||||||
'javelin-behavior-conpherence-widget-pane' => '40b1ff90',
|
'javelin-behavior-conpherence-widget-pane' => '40b1ff90',
|
||||||
'javelin-behavior-countdown-timer' => '889c96f3',
|
'javelin-behavior-countdown-timer' => '889c96f3',
|
||||||
'javelin-behavior-dark-console' => 'e9fdb5e5',
|
'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-dashboard-move-panels' => 'fa187a68',
|
||||||
'javelin-behavior-device' => '03d6ed07',
|
'javelin-behavior-device' => '03d6ed07',
|
||||||
'javelin-behavior-differential-add-reviewers-and-ccs' => '533a187b',
|
'javelin-behavior-differential-add-reviewers-and-ccs' => '533a187b',
|
||||||
|
@ -1965,6 +1965,12 @@ return array(
|
||||||
0 => 'javelin-install',
|
0 => 'javelin-install',
|
||||||
1 => 'javelin-util',
|
1 => 'javelin-util',
|
||||||
),
|
),
|
||||||
|
'f1375ea5' =>
|
||||||
|
array(
|
||||||
|
0 => 'javelin-behavior',
|
||||||
|
1 => 'javelin-dom',
|
||||||
|
2 => 'javelin-workflow',
|
||||||
|
),
|
||||||
'f2441746' =>
|
'f2441746' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-dom',
|
0 => 'javelin-dom',
|
||||||
|
@ -2033,12 +2039,6 @@ return array(
|
||||||
0 => 'phabricator-busy',
|
0 => 'phabricator-busy',
|
||||||
1 => 'javelin-behavior',
|
1 => 'javelin-behavior',
|
||||||
),
|
),
|
||||||
'fd965b41' =>
|
|
||||||
array(
|
|
||||||
0 => 'javelin-behavior',
|
|
||||||
1 => 'javelin-dom',
|
|
||||||
2 => 'javelin-workflow',
|
|
||||||
),
|
|
||||||
'fe2e0ba4' =>
|
'fe2e0ba4' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-behavior',
|
0 => 'javelin-behavior',
|
||||||
|
|
|
@ -37,13 +37,14 @@ final class PhabricatorDashboardPanelRenderController
|
||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->setPanel($panel)
|
->setPanel($panel)
|
||||||
->setParentPanelPHIDs($parent_phids)
|
->setParentPanelPHIDs($parent_phids)
|
||||||
|
->setHeaderless($request->getBool('headerless'))
|
||||||
->renderPanel();
|
->renderPanel();
|
||||||
|
|
||||||
if ($request->isAjax()) {
|
if ($request->isAjax()) {
|
||||||
return id(new AphrontAjaxResponse())
|
return id(new AphrontAjaxResponse())
|
||||||
->setContent(
|
->setContent(
|
||||||
array(
|
array(
|
||||||
'panelMarkup' => $rendered_panel,
|
'panelMarkup' => hsprintf('%s', $rendered_panel),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,16 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject {
|
||||||
private $viewer;
|
private $viewer;
|
||||||
private $enableAsyncRendering;
|
private $enableAsyncRendering;
|
||||||
private $parentPanelPHIDs;
|
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.
|
* Allow the engine to render the panel via Ajax.
|
||||||
|
@ -75,10 +85,15 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject {
|
||||||
}
|
}
|
||||||
|
|
||||||
private function renderErrorPanel($title, $body) {
|
private function renderErrorPanel($title, $body) {
|
||||||
|
if ($this->getHeaderless()) {
|
||||||
|
return id(new AphrontErrorView())
|
||||||
|
->setErrors(array($body));
|
||||||
|
} else {
|
||||||
return id(new PHUIObjectBoxView())
|
return id(new PHUIObjectBoxView())
|
||||||
->setHeaderText($title)
|
->setHeaderText($title)
|
||||||
->setFormErrors(array($body));
|
->setFormErrors(array($body));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private function renderAsyncPanel(PhabricatorDashboardPanel $panel) {
|
private function renderAsyncPanel(PhabricatorDashboardPanel $panel) {
|
||||||
$panel_id = celerity_generate_unique_node_id();
|
$panel_id = celerity_generate_unique_node_id();
|
||||||
|
@ -88,16 +103,28 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject {
|
||||||
array(
|
array(
|
||||||
'panelID' => $panel_id,
|
'panelID' => $panel_id,
|
||||||
'parentPanelPHIDs' => $this->getParentPanelPHIDs(),
|
'parentPanelPHIDs' => $this->getParentPanelPHIDs(),
|
||||||
|
'headerless' => $this->getHeaderless(),
|
||||||
'uri' => '/dashboard/panel/render/'.$panel->getID().'/',
|
'uri' => '/dashboard/panel/render/'.$panel->getID().'/',
|
||||||
));
|
));
|
||||||
|
|
||||||
|
$content = pht('Loading...');
|
||||||
|
|
||||||
|
if ($this->headerless) {
|
||||||
|
return phutil_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'id' => $panel_id,
|
||||||
|
),
|
||||||
|
$content);
|
||||||
|
} else {
|
||||||
return id(new PHUIObjectBoxView())
|
return id(new PHUIObjectBoxView())
|
||||||
->addSigil('dashboard-panel')
|
->addSigil('dashboard-panel')
|
||||||
->setMetadata(array(
|
->setMetadata(array(
|
||||||
'objectPHID' => $panel->getPHID()))
|
'objectPHID' => $panel->getPHID()))
|
||||||
->setHeaderText($panel->getName())
|
->setHeaderText($panel->getName())
|
||||||
->setID($panel_id)
|
->setID($panel_id)
|
||||||
->appendChild(pht('Loading...'));
|
->appendChild($content);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -47,6 +47,10 @@ abstract class PhabricatorDashboardPanelType extends Phobject {
|
||||||
|
|
||||||
$content = $this->renderPanelContent($viewer, $panel, $engine);
|
$content = $this->renderPanelContent($viewer, $panel, $engine);
|
||||||
|
|
||||||
|
if ($engine->getHeaderless()) {
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
return id(new PHUIObjectBoxView())
|
return id(new PHUIObjectBoxView())
|
||||||
->addSigil('dashboard-panel')
|
->addSigil('dashboard-panel')
|
||||||
->setMetadata(array(
|
->setMetadata(array(
|
||||||
|
|
|
@ -91,9 +91,10 @@ final class PhabricatorDashboardPanelTypeTabs
|
||||||
->setEnableAsyncRendering(true)
|
->setEnableAsyncRendering(true)
|
||||||
->setParentPanelPHIDs($parent_phids)
|
->setParentPanelPHIDs($parent_phids)
|
||||||
->setPanel($panel)
|
->setPanel($panel)
|
||||||
|
->setHeaderless(true)
|
||||||
->renderPanel();
|
->renderPanel();
|
||||||
} else {
|
} else {
|
||||||
$panel_content = 'nope';
|
$panel_content = pht('(Invalid Panel)');
|
||||||
}
|
}
|
||||||
|
|
||||||
$content[] = phutil_tag(
|
$content[] = phutil_tag(
|
||||||
|
|
|
@ -9,8 +9,13 @@ JX.behavior('dashboard-async-panel', function(config) {
|
||||||
var panel = JX.$(config.panelID);
|
var panel = JX.$(config.panelID);
|
||||||
panel.style.opacity = '0.5';
|
panel.style.opacity = '0.5';
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
parentPanelPHIDs: config.parentPanelPHIDs.join(','),
|
||||||
|
headerless: config.headerless ? 1 : 0
|
||||||
|
};
|
||||||
|
|
||||||
new JX.Workflow(config.uri)
|
new JX.Workflow(config.uri)
|
||||||
.setData({parentPanelPHIDs: config.parentPanelPHIDs.join(',')})
|
.setData(data)
|
||||||
.setHandler(function(r) {
|
.setHandler(function(r) {
|
||||||
JX.DOM.replace(panel, JX.$H(r.panelMarkup));
|
JX.DOM.replace(panel, JX.$H(r.panelMarkup));
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue