1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-19 11:11:10 +01:00
phorge-phorge/src/view/form/control/AphrontFormCountedToggleButtonsControl.php
Edward Speyer a1b98c5cb7 AphrontFormCountedToggleButtonsControl
Summary: Like AphrontFormToggleButtonsControl, but with mouseover counters.  These counters let you know how many of each thing there are in each category, which is useful when using this control for filtering a list of things in multiple dimensions.

Test Plan: `/uiexample/view/PhabricatorCountedToggleButtonsExample/`

Reviewers: epriestley

CC: aran, Korvin

Maniphest Tasks: T2094

Differential Revision: https://secure.phabricator.com/D5118
2013-03-12 09:43:36 +00:00

80 lines
1.6 KiB
PHP

<?php
final class AphrontFormCountedToggleButtonsControl extends AphrontFormControl {
private $baseURI;
private $param;
private $buttons;
private $counters = array();
public function setBaseURI(PhutilURI $uri, $param) {
$this->baseURI = $uri;
$this->param = $param;
return $this;
}
public function setButtons(array $buttons) {
$this->buttons = $buttons;
return $this;
}
public function setCounters(array $counters) {
$this->counters = $counters;
return $this;
}
protected function getCustomControlClass() {
return 'aphront-form-control-counted-togglebuttons';
}
protected function renderInput() {
if (!$this->baseURI) {
throw new Exception('Call setBaseURI() before render()!');
}
$selected = $this->getValue();
$out = array();
foreach ($this->buttons as $value => $label) {
if ($value == $selected) {
$more = ' toggle-selected toggle-fixed';
} else {
$more = null;
}
$counter = idx($this->counters, $value);
if ($counter > 0) {
$href = $this->baseURI->alter($this->param, $value);
$counter_markup = phutil_tag(
'div',
array(
'class' => 'counter',
),
$counter);
} else {
$href = null;
$counter_markup = '';
$more .= ' disabled';
}
$attributes = array(
'class' => 'toggle'.$more,
);
if ($href) {
$attributes['href'] = $href;
}
$out[] = phutil_tag(
'a',
$attributes,
array(
$counter_markup,
$label));
}
return $out;
}
}