Differential D20397 Diff 48688 src/applications/dashboard/paneltype/PhabricatorDashboardTabsPanelType.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/dashboard/paneltype/PhabricatorDashboardTabsPanelType.php
| Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | final class PhabricatorDashboardTabsPanelType | ||||
| public function renderPanelContent( | public function renderPanelContent( | ||||
| PhabricatorUser $viewer, | PhabricatorUser $viewer, | ||||
| PhabricatorDashboardPanel $panel, | PhabricatorDashboardPanel $panel, | ||||
| PhabricatorDashboardPanelRenderingEngine $engine) { | PhabricatorDashboardPanelRenderingEngine $engine) { | ||||
| $is_edit = $engine->isEditMode(); | $is_edit = $engine->isEditMode(); | ||||
| $config = $this->getPanelConfiguration($panel); | $config = $this->getPanelConfiguration($panel); | ||||
| $context_object = $engine->getContextObject(); | |||||
| if (!$context_object) { | |||||
| $context_object = $panel; | |||||
| } | |||||
| $context_phid = $context_object->getPHID(); | |||||
| $list = id(new PHUIListView()) | $list = id(new PHUIListView()) | ||||
| ->setType(PHUIListView::NAVBAR_LIST); | ->setType(PHUIListView::NAVBAR_LIST); | ||||
| $node_ids = array(); | |||||
| foreach ($config as $idx => $tab_spec) { | |||||
| $node_ids[$idx] = celerity_generate_unique_node_id(); | |||||
| } | |||||
| $ids = ipull($config, 'panelID'); | $ids = ipull($config, 'panelID'); | ||||
| if ($ids) { | if ($ids) { | ||||
| $panels = id(new PhabricatorDashboardPanelQuery()) | $panels = id(new PhabricatorDashboardPanelQuery()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->withIDs($ids) | ->withIDs($ids) | ||||
| ->execute(); | ->execute(); | ||||
| } else { | } else { | ||||
| $panels = array(); | $panels = array(); | ||||
| } | } | ||||
| $id = $panel->getID(); | $id = $panel->getID(); | ||||
| $add_uri = urisprintf('/dashboard/panel/tabs/%d/add/', $id); | $add_uri = urisprintf('/dashboard/panel/tabs/%d/add/', $id); | ||||
| $add_uri = new PhutilURI($add_uri); | $add_uri = id(new PhutilURI($add_uri)) | ||||
| ->replaceQueryParam('contextPHID', $context_phid); | |||||
| $remove_uri = urisprintf('/dashboard/panel/tabs/%d/remove/', $id); | $remove_uri = urisprintf('/dashboard/panel/tabs/%d/remove/', $id); | ||||
| $remove_uri = new PhutilURI($remove_uri); | $remove_uri = id(new PhutilURI($remove_uri)) | ||||
| ->replaceQueryParam('contextPHID', $context_phid); | |||||
| $rename_uri = urisprintf('/dashboard/panel/tabs/%d/rename/', $id); | $rename_uri = urisprintf('/dashboard/panel/tabs/%d/rename/', $id); | ||||
| $rename_uri = new PhutilURI($rename_uri); | $rename_uri = id(new PhutilURI($rename_uri)) | ||||
| ->replaceQueryParam('contextPHID', $context_phid); | |||||
| $selected = 0; | $selected = 0; | ||||
| $last_idx = null; | $last_idx = null; | ||||
| foreach ($config as $idx => $tab_spec) { | foreach ($config as $idx => $tab_spec) { | ||||
| $panel_id = idx($tab_spec, 'panelID'); | $panel_id = idx($tab_spec, 'panelID'); | ||||
| $subpanel = idx($panels, $panel_id); | $subpanel = idx($panels, $panel_id); | ||||
| $name = idx($tab_spec, 'name'); | $name = idx($tab_spec, 'name'); | ||||
| if (!strlen($name)) { | if (!strlen($name)) { | ||||
| if ($subpanel) { | if ($subpanel) { | ||||
| $name = $subpanel->getName(); | $name = $subpanel->getName(); | ||||
| } | } | ||||
| } | } | ||||
| if (!strlen($name)) { | if (!strlen($name)) { | ||||
| $name = pht('Unnamed Tab'); | $name = pht('Unnamed Tab'); | ||||
| } | } | ||||
| $tab_view = id(new PHUIListItemView()) | $tab_view = id(new PHUIListItemView()) | ||||
| ->setHref('#') | ->setHref('#') | ||||
| ->setSelected($idx == $selected) | ->setSelected($idx == $selected) | ||||
| ->addSigil('dashboard-tab-panel-tab') | ->addSigil('dashboard-tab-panel-tab') | ||||
| ->setMetadata(array('idx' => $idx)) | ->setMetadata(array('panelKey' => $idx)) | ||||
| ->setName($name); | ->setName($name); | ||||
| if ($is_edit) { | if ($is_edit) { | ||||
| $dropdown_menu = id(new PhabricatorActionListView()) | $dropdown_menu = id(new PhabricatorActionListView()) | ||||
| ->setViewer($viewer); | ->setViewer($viewer); | ||||
| $remove_tab_uri = id(clone $remove_uri) | $remove_tab_uri = id(clone $remove_uri) | ||||
| ->replaceQueryParam('target', $idx); | ->replaceQueryParam('target', $idx); | ||||
| ▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | public function renderPanelContent( | ||||
| // TODO: Currently, we'll load all the panels on page load. It would be | // TODO: Currently, we'll load all the panels on page load. It would be | ||||
| // vaguely nice to load hidden panels only when the user selects them. | // vaguely nice to load hidden panels only when the user selects them. | ||||
| // TODO: Maybe we should persist which panel the user selected, so it | // TODO: Maybe we should persist which panel the user selected, so it | ||||
| // remains selected across page loads. | // remains selected across page loads. | ||||
| $content = array(); | $content = array(); | ||||
| $panel_list = array(); | |||||
| $no_headers = PhabricatorDashboardPanelRenderingEngine::HEADER_MODE_NONE; | $no_headers = PhabricatorDashboardPanelRenderingEngine::HEADER_MODE_NONE; | ||||
| foreach ($config as $idx => $tab_spec) { | foreach ($config as $idx => $tab_spec) { | ||||
| $panel_id = idx($tab_spec, 'panelID'); | $panel_id = idx($tab_spec, 'panelID'); | ||||
| $subpanel = idx($panels, $panel_id); | $subpanel = idx($panels, $panel_id); | ||||
| if ($subpanel) { | if ($subpanel) { | ||||
| $panel_content = id(new PhabricatorDashboardPanelRenderingEngine()) | $panel_content = id(new PhabricatorDashboardPanelRenderingEngine()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->setEnableAsyncRendering(true) | ->setEnableAsyncRendering(true) | ||||
| ->setContextObject($context_object) | |||||
| ->setParentPanelPHIDs($parent_phids) | ->setParentPanelPHIDs($parent_phids) | ||||
| ->setPanel($subpanel) | ->setPanel($subpanel) | ||||
| ->setPanelPHID($subpanel->getPHID()) | ->setPanelPHID($subpanel->getPHID()) | ||||
| ->setHeaderMode($no_headers) | ->setHeaderMode($no_headers) | ||||
| ->setMovable(false) | ->setMovable(false) | ||||
| ->renderPanel(); | ->renderPanel(); | ||||
| } else { | } else { | ||||
| $panel_content = pht('(Invalid Panel)'); | $panel_content = pht('(Invalid Panel)'); | ||||
| } | } | ||||
| $content_id = celerity_generate_unique_node_id(); | |||||
| $content[] = phutil_tag( | $content[] = phutil_tag( | ||||
| 'div', | 'div', | ||||
| array( | array( | ||||
| 'id' => $node_ids[$idx], | 'id' => $content_id, | ||||
| 'style' => ($idx == $selected) ? null : 'display: none', | 'style' => ($idx == $selected) ? null : 'display: none', | ||||
| ), | ), | ||||
| $panel_content); | $panel_content); | ||||
| $panel_list[] = array( | |||||
| 'panelKey' => (string)$idx, | |||||
| 'panelContentID' => $content_id, | |||||
| ); | |||||
| } | } | ||||
| if (!$content) { | if (!$content) { | ||||
| if ($is_edit) { | if ($is_edit) { | ||||
| $message = pht( | $message = pht( | ||||
| 'This tab panel does not have any tabs yet. Use "Add Tab" to '. | 'This tab panel does not have any tabs yet. Use "Add Tab" to '. | ||||
| 'create or place a tab.'); | 'create or place a tab.'); | ||||
| } else { | } else { | ||||
| Show All 15 Lines | public function renderPanelContent( | ||||
| Javelin::initBehavior('dashboard-tab-panel'); | Javelin::initBehavior('dashboard-tab-panel'); | ||||
| return javelin_tag( | return javelin_tag( | ||||
| 'div', | 'div', | ||||
| array( | array( | ||||
| 'sigil' => 'dashboard-tab-panel-container', | 'sigil' => 'dashboard-tab-panel-container', | ||||
| 'meta' => array( | 'meta' => array( | ||||
| 'panels' => $node_ids, | 'panels' => $panel_list, | ||||
| ), | ), | ||||
| ), | ), | ||||
| array( | array( | ||||
| $list, | $list, | ||||
| $content, | $content, | ||||
| )); | )); | ||||
| } | } | ||||
| } | } | ||||