Path: blob/master/src/view/phui/PHUICrumbsView.php
12249 views
<?php12final class PHUICrumbsView extends AphrontView {34private $crumbs = array();5private $actions = array();6private $border;78protected function canAppendChild() {9return false;10}111213/**14* Convenience method for adding a simple crumb with just text, or text and15* a link.16*17* @param string Text of the crumb.18* @param string? Optional href for the crumb.19* @return this20*/21public function addTextCrumb($text, $href = null) {22return $this->addCrumb(23id(new PHUICrumbView())24->setName($text)25->setHref($href));26}2728public function addCrumb(PHUICrumbView $crumb) {29$this->crumbs[] = $crumb;30return $this;31}3233public function addAction(PHUIListItemView $action) {34$this->actions[] = $action;35return $this;36}3738public function setBorder($border) {39$this->border = $border;40return $this;41}4243public function getActions() {44return $this->actions;45}4647public function render() {48require_celerity_resource('phui-crumbs-view-css');4950$action_view = null;51if ($this->actions) {52// TODO: This block of code takes "PHUIListItemView" objects and turns53// them into some weird abomination by reading most of their properties54// out. Some day, this workflow should render the items and CSS should55// resytle them in place without needing a wholly separate set of56// DOM nodes.5758$actions = array();59foreach ($this->actions as $action) {60if ($action->getType() == PHUIListItemView::TYPE_DIVIDER) {61$actions[] = phutil_tag(62'span',63array(64'class' => 'phui-crumb-action-divider',65));66continue;67}6869$icon = null;70if ($action->getIcon()) {71$icon_name = $action->getIcon();72if ($action->getDisabled()) {73$icon_name .= ' lightgreytext';74}7576$icon = id(new PHUIIconView())77->setIcon($icon_name);7879}8081$action_classes = $action->getClasses();82$action_classes[] = 'phui-crumbs-action';8384$name = null;85if ($action->getName()) {86$name = phutil_tag(87'span',88array(89'class' => 'phui-crumbs-action-name',90),91$action->getName());92} else {93$action_classes[] = 'phui-crumbs-action-icon';94}9596$action_sigils = $action->getSigils();97if ($action->getWorkflow()) {98$action_sigils[] = 'workflow';99}100101if ($action->getDisabled()) {102$action_classes[] = 'phui-crumbs-action-disabled';103}104105$actions[] = javelin_tag(106'a',107array(108'href' => $action->getHref(),109'class' => implode(' ', $action_classes),110'sigil' => implode(' ', $action_sigils),111'style' => $action->getStyle(),112'meta' => $action->getMetadata(),113),114array(115$icon,116$name,117));118}119120$action_view = phutil_tag(121'div',122array(123'class' => 'phui-crumbs-actions',124),125$actions);126}127128if ($this->crumbs) {129last($this->crumbs)->setIsLastCrumb(true);130}131132$classes = array();133$classes[] = 'phui-crumbs-view';134if ($this->border) {135$classes[] = 'phui-crumbs-border';136}137138return phutil_tag(139'div',140array(141'class' => implode(' ', $classes),142),143array(144$action_view,145$this->crumbs,146));147}148149}150151152