Path: blob/master/src/view/formation/PHUIFormationView.php
12249 views
<?php12final class PHUIFormationView3extends AphrontAutoIDView {45private $items = array();67public function newFlankColumn() {8$item = $this->newItem(new PHUIFormationFlankView());9return $item->getColumn();10}1112public function newContentColumn() {13$item = $this->newItem(new PHUIFormationContentView());14return $item->getColumn();15}1617private function newItem(PHUIFormationColumnView $column) {18$item = id(new PHUIFormationColumnItem())19->setColumn($column);2021$column->setColumnItem($item);2223$this->items[] = $item;2425return $item;26}2728public function render() {29require_celerity_resource('phui-formation-view-css');3031$items = $this->items;3233$items = $this->generateControlBindings($items);34$items = $this->generateExpanders($items);35$items = $this->generateResizers($items);3637$cells = array();38foreach ($items as $item) {39$style = array();4041$column = $item->getColumn();4243$width = $column->getWidth();44if ($width !== null) {45$style[] = sprintf('width: %dpx;', $width);46}4748if (!$column->getIsVisible()) {49$style[] = 'display: none;';50}5152$classes = array();53if ($column->getIsDesktopOnly()) {54$classes[] = 'phui-formation-desktop-only';55}5657$cells[] = phutil_tag(58'td',59array(60'id' => $item->getID(),61'style' => implode(' ', $style),62'class' => implode(' ', $classes),63),64array(65$column,66$item->getExpanders(),67));68}6970$phuix_items = array();71foreach ($items as $item) {72$phuix_items[] = $item->newClientProperties();73}7475$table_row = phutil_tag('tr', array(), $cells);76$table_body = phutil_tag('tbody', array(), $table_row);77$table = javelin_tag(78'table',79array(80'id' => $this->getID(),81'class' => 'phui-formation-view',82'sigil' => 'phuix-formation-view',83'meta' => array(84'items' => $phuix_items,85),86),87$table_body);8889return $table;90}9192private function newColumnExpanderView() {93return new PHUIFormationExpanderView();94}9596private function newResizerItem() {97return $this->newItem(new PHUIFormationResizerView());98}99100private function generateControlBindings(array $items) {101$count = count($items);102103if (!$count) {104return $items;105}106107$last_control = null;108109for ($ii = 0; $ii < $count; $ii++) {110$item = $items[$ii];111$column = $item->getColumn();112113$is_control = $column->getIsControlColumn();114if ($is_control) {115$last_control = $ii;116}117}118119if ($last_control === null) {120return $items;121}122123for ($ii = ($count - 1); $ii >= 0; $ii--) {124$item = $items[$ii];125$column = $item->getColumn();126127$is_control = $column->getIsControlColumn();128if ($is_control) {129$last_control = $ii;130continue;131}132133$is_right = ($last_control < $ii);134135$item136->setControlItem($items[$last_control])137->setIsRightAligned($is_right);138}139140return $items;141}142143private function generateResizers(array $items) {144$result = array();145foreach ($items as $item) {146$column = $item->getColumn();147148$resizer_item = null;149if ($column->getIsResizable()) {150$resizer_item = $this->newResizerItem();151$item->setResizerItem($resizer_item);152153$resizer_item->getColumn()154->setIsDesktopOnly($column->getIsDesktopOnly())155->setIsVisible($column->getIsVisible());156}157158if (!$resizer_item) {159$result[] = $item;160} else if ($item->getIsRightAligned()) {161$result[] = $resizer_item;162$result[] = $item;163} else {164$result[] = $item;165$result[] = $resizer_item;166}167}168169return $result;170}171172private function generateExpanders(array $items) {173foreach ($items as $item) {174$control_item = $item->getControlItem();175if (!$control_item) {176continue;177}178179$expander = $this->newColumnExpanderView();180181$tip = $item->getColumn()->getExpanderTooltip();182$expander->setTooltip($tip);183184$expander->setColumnItem($item);185$item->setExpander($expander);186187$control_item->appendExpander($expander);188}189190return $items;191}192193public function setFooter($footer) {194foreach ($this->items as $item) {195if ($item->getColumn() instanceof PHUIFormationContentView) {196$item->getColumn()->appendChild($footer);197return $this;198}199}200201throw new Exception(202pht('Unable to find a content column to place the footer inside.'));203}204205}206207208