Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157<?php
final class AphrontMultiColumnView extends AphrontView {
const GUTTER_SMALL = 'msr'; const GUTTER_MEDIUM = 'mmr'; const GUTTER_LARGE = 'mlr';
private $id; private $columns = array(); private $fluidLayout = false; private $fluidishLayout = false; private $gutter; private $border;
public function setID($id) { $this->id = $id; return $this; }
public function getID() { return $this->id; }
public function addColumn( $column, $class = null, $sigil = null, $metadata = null) { $this->columns[] = array( 'column' => $column, 'class' => $class, 'sigil' => $sigil, 'metadata' => $metadata, ); return $this; }
public function setFluidlayout($layout) { $this->fluidLayout = $layout; return $this; }
public function setFluidishLayout($layout) { $this->fluidLayout = true; $this->fluidishLayout = $layout; return $this; }
public function setGutter($gutter) { $this->gutter = $gutter; return $this; }
public function setBorder($border) { $this->border = $border; return $this; }
public function render() { require_celerity_resource('aphront-multi-column-view-css');
$classes = array(); $classes[] = 'aphront-multi-column-inner'; $classes[] = 'grouped';
if ($this->fluidishLayout || $this->fluidLayout) { // we only support seven columns for now for fluid views; see T4054 if (count($this->columns) > 7) { throw new Exception(pht('No more than 7 columns per view.')); } }
$classes[] = 'aphront-multi-column-'.count($this->columns).'-up';
$columns = array(); $i = 0; foreach ($this->columns as $column_data) { $column_class = array('aphront-multi-column-column'); if ($this->gutter) { $column_class[] = $this->gutter; } $outer_class = array('aphront-multi-column-column-outer'); if (++$i === count($this->columns)) { $column_class[] = 'aphront-multi-column-column-last'; $outer_class[] = 'aphront-multi-colum-column-outer-last'; } $column = $column_data['column']; if ($column_data['class']) { $outer_class[] = $column_data['class']; } $column_sigil = idx($column_data, 'sigil'); $column_metadata = idx($column_data, 'metadata'); $column_inner = javelin_tag( 'div', array( 'class' => implode(' ', $column_class), 'sigil' => $column_sigil, 'meta' => $column_metadata, ), $column); $columns[] = phutil_tag( 'div', array( 'class' => implode(' ', $outer_class), ), $column_inner); }
$view = phutil_tag( 'div', array( 'class' => implode(' ', $classes), ), array( $columns, ));
$classes = array(); $classes[] = 'aphront-multi-column-outer'; if ($this->fluidLayout) { $classes[] = 'aphront-multi-column-fluid'; if ($this->fluidishLayout) { $classes[] = 'aphront-multi-column-fluidish'; } } else { $classes[] = 'aphront-multi-column-fixed'; }
$board = phutil_tag( 'div', array( 'class' => implode(' ', $classes), ), $view);
if ($this->border) { $board = id(new PHUIBoxView()) ->setBorder(true) ->appendChild($board) ->addPadding(PHUI::PADDING_MEDIUM_TOP) ->addPadding(PHUI::PADDING_MEDIUM_BOTTOM); }
return javelin_tag( 'div', array( 'class' => 'aphront-multi-column-view', 'id' => $this->getID(), // TODO: It would be nice to convert this to an AphrontTagView and // use addSigil() from Workboards instead of hard-coding this. 'sigil' => 'aphront-multi-column-view', ), $board); }}