3 final class PHUITwoColumnView
extends AphrontTagView
{
6 private $sideColumn = null;
14 private $propertySection = array();
17 const DISPLAY_LEFT
= 'phui-side-column-left';
18 const DISPLAY_RIGHT
= 'phui-side-column-right';
20 public function setMainColumn($main) {
21 $this->mainColumn
= $main;
25 public function setSideColumn($side) {
26 $this->sideColumn
= $side;
30 public function setNavigation($nav) {
31 $this->navigation
= $nav;
32 $this->display
= self
::DISPLAY_LEFT
;
36 public function setHeader(PHUIHeaderView
$header) {
37 $this->header
= $header;
41 public function setSubheader($subheader) {
42 $this->subheader
= $subheader;
46 public function setTabs(PHUIListView
$tabs) {
47 $tabs->setType(PHUIListView
::TABBAR_LIST
);
52 public function setFooter($footer) {
53 $this->footer
= $footer;
57 public function addPropertySection($title, $section) {
58 $this->propertySection
[] = array(
60 'content' => $section,
65 public function setCurtain(PHUICurtainView
$curtain) {
66 $this->curtain
= $curtain;
70 public function getCurtain() {
71 return $this->curtain
;
74 public function setFixed($fixed) {
75 $this->fixed
= $fixed;
79 public function setDisplay($display) {
80 $this->display
= $display;
84 private function getDisplay() {
86 return $this->display
;
88 return self
::DISPLAY_RIGHT
;
92 protected function getTagAttributes() {
94 $classes[] = 'phui-two-column-view';
95 $classes[] = $this->getDisplay();
98 $classes[] = 'phui-two-column-fixed';
102 $classes[] = 'with-tabs';
105 if ($this->subheader
) {
106 $classes[] = 'with-subheader';
109 if (!$this->header
) {
110 $classes[] = 'without-header';
114 'class' => implode(' ', $classes),
118 protected function getTagContent() {
119 require_celerity_resource('phui-two-column-view-css');
121 $main = $this->buildMainColumn();
122 $side = $this->buildSideColumn();
123 $footer = $this->buildFooter();
125 $order = array($side, $main);
127 $inner = phutil_tag_div('phui-two-column-row grouped', $order);
128 $table = phutil_tag_div('phui-two-column-content', $inner);
132 $curtain = $this->getCurtain();
134 $action_list = $curtain->getActionList();
135 $this->header
->setActionListID($action_list->getID());
138 $header = phutil_tag_div(
139 'phui-two-column-header', $this->header
);
144 $tabs = phutil_tag_div(
145 'phui-two-column-tabs', $this->tabs
);
149 if ($this->subheader
) {
150 $subheader = phutil_tag_div(
151 'phui-two-column-subheader', $this->subheader
);
157 'class' => 'phui-two-column-container',
168 private function buildMainColumn() {
171 $sections = $this->propertySection
;
174 foreach ($sections as $section) {
175 $section_header = $section['header'];
177 $section_content = $section['content'];
178 if ($section_content === null) {
182 if ($section_header instanceof PHUIHeaderView
) {
183 $header = $section_header;
185 $header = id(new PHUIHeaderView())
186 ->setHeader($section_header);
189 $view[] = id(new PHUIObjectBoxView())
191 ->setBackground(PHUIObjectBoxView
::BLUE_PROPERTY
)
192 ->appendChild($section_content);
199 'class' => 'phui-main-column',
207 private function buildSideColumn() {
210 $classes[] = 'phui-side-column';
212 if ($this->navigation
) {
213 $classes[] = 'side-has-nav';
214 $navigation = id(new PHUIObjectBoxView())
215 ->appendChild($this->navigation
);
218 $curtain = $this->getCurtain();
223 'class' => implode(' ', $classes),
232 private function buildFooter() {
234 $footer = $this->footer
;
239 'class' => 'phui-two-column-content phui-two-column-footer',