2013-03-30 17:51:35 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class PhabricatorWorkboardView extends AphrontView {
|
|
|
|
|
|
|
|
private $panels = array();
|
|
|
|
private $flexLayout = false;
|
2013-03-31 21:28:50 +02:00
|
|
|
private $actions = array();
|
2013-03-30 17:51:35 +01:00
|
|
|
|
|
|
|
public function addPanel(PhabricatorWorkpanelView $panel) {
|
|
|
|
$this->panels[] = $panel;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setFlexLayout($layout) {
|
|
|
|
$this->flexLayout = $layout;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-03-31 21:28:50 +02:00
|
|
|
public function addAction(PhabricatorWorkboardActionView $action) {
|
|
|
|
$this->actions[] = $action;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-03-30 17:51:35 +01:00
|
|
|
public function render() {
|
|
|
|
require_celerity_resource('phabricator-workboard-view-css');
|
|
|
|
|
|
|
|
$classes = array();
|
|
|
|
$classes[] = 'phabricator-workboard-view-inner';
|
|
|
|
|
|
|
|
if (count($this->panels) > 6) {
|
|
|
|
throw new Exception("No more than 6 panels per workboard.");
|
|
|
|
}
|
|
|
|
|
2013-03-31 21:28:50 +02:00
|
|
|
$action_list = null;
|
|
|
|
if (!empty($this->actions)) {
|
|
|
|
$items = array();
|
|
|
|
foreach ($this->actions as $action) {
|
|
|
|
$items[] = phutil_tag(
|
|
|
|
'li',
|
|
|
|
array(
|
|
|
|
'class' => 'phabricator-workboard-action-item'
|
|
|
|
),
|
|
|
|
$action);
|
|
|
|
}
|
|
|
|
$action_list = phutil_tag(
|
|
|
|
'ul',
|
|
|
|
array(
|
|
|
|
'class' => 'phabricator-workboard-action-list'
|
|
|
|
),
|
|
|
|
$items);
|
|
|
|
}
|
|
|
|
|
2013-03-30 17:51:35 +01:00
|
|
|
$classes[] = 'workboard-'.count($this->panels).'-up';
|
|
|
|
|
|
|
|
$view = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => implode(' ', $classes),
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
$this->panels,
|
|
|
|
));
|
|
|
|
|
|
|
|
$classes = array();
|
|
|
|
$classes[] = 'phabricator-workboard-view-outer';
|
|
|
|
if ($this->flexLayout) {
|
|
|
|
$classes[] = 'phabricator-workboard-flex';
|
|
|
|
} else {
|
|
|
|
$classes[] = 'phabricator-workboard-fixed';
|
|
|
|
}
|
|
|
|
|
2013-03-31 21:28:50 +02:00
|
|
|
$board = phutil_tag(
|
2013-03-30 17:51:35 +01:00
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => implode(' ', $classes)
|
|
|
|
),
|
|
|
|
$view);
|
2013-03-31 21:28:50 +02:00
|
|
|
|
|
|
|
return phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phabricator-workboard-view'
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
$action_list,
|
|
|
|
$board
|
|
|
|
));
|
2013-03-30 17:51:35 +01:00
|
|
|
}
|
|
|
|
}
|