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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164<?php
/** * View which renders down to a single tag, and provides common access for tag * attributes (setting classes, sigils, IDs, etc). */abstract class AphrontTagView extends AphrontView {
private $id; private $classes = array(); private $sigils = array(); private $style; private $metadata; private $mustCapture; private $workflow;
public function setWorkflow($workflow) { $this->workflow = $workflow; return $this; }
public function getWorkflow() { return $this->workflow; }
public function setMustCapture($must_capture) { $this->mustCapture = $must_capture; return $this; }
public function getMustCapture() { return $this->mustCapture; }
final public function setMetadata(array $metadata) { $this->metadata = $metadata; return $this; }
final public function getMetadata() { return $this->metadata; }
final public function setStyle($style) { $this->style = $style; return $this; }
final public function getStyle() { return $this->style; }
final public function addSigil($sigil) { $this->sigils[] = $sigil; return $this; }
final public function getSigils() { return $this->sigils; }
public function addClass($class) { $this->classes[] = $class; return $this; }
public function getClasses() { return $this->classes; }
public function setID($id) { $this->id = $id; return $this; }
public function getID() { return $this->id; }
protected function getTagName() { return 'div'; }
protected function getTagAttributes() { return array(); }
protected function getTagContent() { return $this->renderChildren(); }
final public function render() { $this->willRender();
// A tag view may render no tag at all. For example, the HandleListView is // a container which renders a tag in HTML mode, but can also render in // text mode without producing a tag. When a tag view has no tag name, just // return the tag content as though the view did not exist. $tag_name = $this->getTagName(); if ($tag_name === null) { return $this->getTagContent(); }
$attributes = $this->getTagAttributes();
$implode = array('class', 'sigil'); foreach ($implode as $attr) { if (isset($attributes[$attr])) { if (is_array($attributes[$attr])) { $attributes[$attr] = implode(' ', $attributes[$attr]); } } }
if (!is_array($attributes)) { $class = get_class($this); throw new Exception( pht("View '%s' did not return an array from getTagAttributes()!", $class)); }
$sigils = $this->sigils; if ($this->workflow) { $sigils[] = 'workflow'; }
$tag_view_attributes = array( 'id' => $this->id,
'class' => implode(' ', $this->classes), 'style' => $this->style,
'meta' => $this->metadata, 'sigil' => $sigils ? implode(' ', $sigils) : null, 'mustcapture' => $this->mustCapture, );
foreach ($tag_view_attributes as $key => $value) { if ($value === null) { continue; } if (!isset($attributes[$key])) { $attributes[$key] = $value; continue; } switch ($key) { case 'class': case 'sigil': $attributes[$key] = $attributes[$key].' '.$value; break; default: // Use the explicitly set value rather than the tag default value. $attributes[$key] = $value; break; } }
return javelin_tag( $tag_name, $attributes, $this->getTagContent()); }}