Path: blob/master/src/view/layout/AphrontMultiColumnView.php
12241 views
<?php12final class AphrontMultiColumnView extends AphrontView {34const GUTTER_SMALL = 'msr';5const GUTTER_MEDIUM = 'mmr';6const GUTTER_LARGE = 'mlr';78private $id;9private $columns = array();10private $fluidLayout = false;11private $fluidishLayout = false;12private $gutter;13private $border;1415public function setID($id) {16$this->id = $id;17return $this;18}1920public function getID() {21return $this->id;22}2324public function addColumn(25$column,26$class = null,27$sigil = null,28$metadata = null) {29$this->columns[] = array(30'column' => $column,31'class' => $class,32'sigil' => $sigil,33'metadata' => $metadata,34);35return $this;36}3738public function setFluidlayout($layout) {39$this->fluidLayout = $layout;40return $this;41}4243public function setFluidishLayout($layout) {44$this->fluidLayout = true;45$this->fluidishLayout = $layout;46return $this;47}4849public function setGutter($gutter) {50$this->gutter = $gutter;51return $this;52}5354public function setBorder($border) {55$this->border = $border;56return $this;57}5859public function render() {60require_celerity_resource('aphront-multi-column-view-css');6162$classes = array();63$classes[] = 'aphront-multi-column-inner';64$classes[] = 'grouped';6566if ($this->fluidishLayout || $this->fluidLayout) {67// we only support seven columns for now for fluid views; see T405468if (count($this->columns) > 7) {69throw new Exception(pht('No more than 7 columns per view.'));70}71}7273$classes[] = 'aphront-multi-column-'.count($this->columns).'-up';7475$columns = array();76$i = 0;77foreach ($this->columns as $column_data) {78$column_class = array('aphront-multi-column-column');79if ($this->gutter) {80$column_class[] = $this->gutter;81}82$outer_class = array('aphront-multi-column-column-outer');83if (++$i === count($this->columns)) {84$column_class[] = 'aphront-multi-column-column-last';85$outer_class[] = 'aphront-multi-colum-column-outer-last';86}87$column = $column_data['column'];88if ($column_data['class']) {89$outer_class[] = $column_data['class'];90}91$column_sigil = idx($column_data, 'sigil');92$column_metadata = idx($column_data, 'metadata');93$column_inner = javelin_tag(94'div',95array(96'class' => implode(' ', $column_class),97'sigil' => $column_sigil,98'meta' => $column_metadata,99),100$column);101$columns[] = phutil_tag(102'div',103array(104'class' => implode(' ', $outer_class),105),106$column_inner);107}108109$view = phutil_tag(110'div',111array(112'class' => implode(' ', $classes),113),114array(115$columns,116));117118$classes = array();119$classes[] = 'aphront-multi-column-outer';120if ($this->fluidLayout) {121$classes[] = 'aphront-multi-column-fluid';122if ($this->fluidishLayout) {123$classes[] = 'aphront-multi-column-fluidish';124}125} else {126$classes[] = 'aphront-multi-column-fixed';127}128129$board = phutil_tag(130'div',131array(132'class' => implode(' ', $classes),133),134$view);135136if ($this->border) {137$board = id(new PHUIBoxView())138->setBorder(true)139->appendChild($board)140->addPadding(PHUI::PADDING_MEDIUM_TOP)141->addPadding(PHUI::PADDING_MEDIUM_BOTTOM);142}143144return javelin_tag(145'div',146array(147'class' => 'aphront-multi-column-view',148'id' => $this->getID(),149// TODO: It would be nice to convert this to an AphrontTagView and150// use addSigil() from Workboards instead of hard-coding this.151'sigil' => 'aphront-multi-column-view',152),153$board);154}155}156157158