Path: blob/master/src/view/phui/PHUITwoColumnView.php
12249 views
<?php12final class PHUITwoColumnView extends AphrontTagView {34private $mainColumn;5private $sideColumn = null;6private $navigation;7private $display;8private $fixed;9private $header;10private $subheader;11private $footer;12private $tabs;13private $propertySection = array();14private $curtain;1516const DISPLAY_LEFT = 'phui-side-column-left';17const DISPLAY_RIGHT = 'phui-side-column-right';1819public function setMainColumn($main) {20$this->mainColumn = $main;21return $this;22}2324public function setSideColumn($side) {25$this->sideColumn = $side;26return $this;27}2829public function setNavigation($nav) {30$this->navigation = $nav;31$this->display = self::DISPLAY_LEFT;32return $this;33}3435public function setHeader(PHUIHeaderView $header) {36$this->header = $header;37return $this;38}3940public function setSubheader($subheader) {41$this->subheader = $subheader;42return $this;43}4445public function setTabs(PHUIListView $tabs) {46$tabs->setType(PHUIListView::TABBAR_LIST);47$this->tabs = $tabs;48return $this;49}5051public function setFooter($footer) {52$this->footer = $footer;53return $this;54}5556public function addPropertySection($title, $section) {57$this->propertySection[] = array(58'header' => $title,59'content' => $section,60);61return $this;62}6364public function setCurtain(PHUICurtainView $curtain) {65$this->curtain = $curtain;66return $this;67}6869public function getCurtain() {70return $this->curtain;71}7273public function setFixed($fixed) {74$this->fixed = $fixed;75return $this;76}7778public function setDisplay($display) {79$this->display = $display;80return $this;81}8283private function getDisplay() {84if ($this->display) {85return $this->display;86} else {87return self::DISPLAY_RIGHT;88}89}9091protected function getTagAttributes() {92$classes = array();93$classes[] = 'phui-two-column-view';94$classes[] = $this->getDisplay();9596if ($this->fixed) {97$classes[] = 'phui-two-column-fixed';98}99100if ($this->tabs) {101$classes[] = 'with-tabs';102}103104if ($this->subheader) {105$classes[] = 'with-subheader';106}107108if (!$this->header) {109$classes[] = 'without-header';110}111112return array(113'class' => implode(' ', $classes),114);115}116117protected function getTagContent() {118require_celerity_resource('phui-two-column-view-css');119120$main = $this->buildMainColumn();121$side = $this->buildSideColumn();122$footer = $this->buildFooter();123124$order = array($side, $main);125126$inner = phutil_tag_div('phui-two-column-row grouped', $order);127$table = phutil_tag_div('phui-two-column-content', $inner);128129$header = null;130if ($this->header) {131$curtain = $this->getCurtain();132if ($curtain) {133$action_list = $curtain->getActionList();134$this->header->setActionListID($action_list->getID());135}136137$header = phutil_tag_div(138'phui-two-column-header', $this->header);139}140141$tabs = null;142if ($this->tabs) {143$tabs = phutil_tag_div(144'phui-two-column-tabs', $this->tabs);145}146147$subheader = null;148if ($this->subheader) {149$subheader = phutil_tag_div(150'phui-two-column-subheader', $this->subheader);151}152153return phutil_tag(154'div',155array(156'class' => 'phui-two-column-container',157),158array(159$header,160$tabs,161$subheader,162$table,163$footer,164));165}166167private function buildMainColumn() {168169$view = array();170$sections = $this->propertySection;171172if ($sections) {173foreach ($sections as $section) {174$section_header = $section['header'];175176$section_content = $section['content'];177if ($section_content === null) {178continue;179}180181if ($section_header instanceof PHUIHeaderView) {182$header = $section_header;183} else {184$header = id(new PHUIHeaderView())185->setHeader($section_header);186}187188$view[] = id(new PHUIObjectBoxView())189->setHeader($header)190->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)191->appendChild($section_content);192}193}194195return phutil_tag(196'div',197array(198'class' => 'phui-main-column',199),200array(201$view,202$this->mainColumn,203));204}205206private function buildSideColumn() {207208$classes = array();209$classes[] = 'phui-side-column';210$navigation = null;211if ($this->navigation) {212$classes[] = 'side-has-nav';213$navigation = id(new PHUIObjectBoxView())214->appendChild($this->navigation);215}216217$curtain = $this->getCurtain();218219return phutil_tag(220'div',221array(222'class' => implode(' ', $classes),223),224array(225$navigation,226$curtain,227$this->sideColumn,228));229}230231private function buildFooter() {232233$footer = $this->footer;234235return phutil_tag(236'div',237array(238'class' => 'phui-two-column-content phui-two-column-footer',239),240array(241$footer,242));243244}245}246247248