diff --git a/src/applications/uiexample/examples/PhabricatorTimelineExample.php b/src/applications/uiexample/examples/PhabricatorTimelineExample.php index 645ec347fc..68e6878999 100644 --- a/src/applications/uiexample/examples/PhabricatorTimelineExample.php +++ b/src/applications/uiexample/examples/PhabricatorTimelineExample.php @@ -98,13 +98,13 @@ final class PhabricatorTimelineExample extends PhabricatorUIExample { $events[] = id(new PhabricatorTimelineEventView()) ->setUserHandle($handle) - ->setTitle(phutil_escape_html("Colorless")) + ->setTitle("Colorless") ->setIcon('lock'); foreach ($colors as $color) { $events[] = id(new PhabricatorTimelineEventView()) ->setUserHandle($handle) - ->setTitle(phutil_escape_html("Color '{$color}'")) + ->setTitle("Color '{$color}'") ->setIcon('lock') ->setColor($color); } diff --git a/src/view/AphrontView.php b/src/view/AphrontView.php index e1bf757429..bfe6f9d624 100644 --- a/src/view/AphrontView.php +++ b/src/view/AphrontView.php @@ -74,6 +74,19 @@ abstract class AphrontView extends Phobject { } } + final protected function isEmptyContent($content) { + if (is_array($content)) { + foreach ($content as $element) { + if (!$this->isEmptyContent($element)) { + return false; + } + } + return true; + } else { + return !strlen((string)$content); + } + } + abstract public function render(); } diff --git a/src/view/layout/PhabricatorAnchorView.php b/src/view/layout/PhabricatorAnchorView.php index 4650a91b98..44e8f33730 100644 --- a/src/view/layout/PhabricatorAnchorView.php +++ b/src/view/layout/PhabricatorAnchorView.php @@ -39,7 +39,7 @@ final class PhabricatorAnchorView extends AphrontView { ), ''); - return $marker.$anchor; + return $this->renderHTMLView(array($marker, $anchor)); } } diff --git a/src/view/layout/PhabricatorTimelineEventView.php b/src/view/layout/PhabricatorTimelineEventView.php index 792c71da92..97c1970d61 100644 --- a/src/view/layout/PhabricatorTimelineEventView.php +++ b/src/view/layout/PhabricatorTimelineEventView.php @@ -100,10 +100,10 @@ final class PhabricatorTimelineEventView extends AphrontView { } public function render() { - $content = $this->renderChildren(); + $content = $this->renderHTMLChildren(); $title = $this->title; - if (($title === null) && !strlen($content)) { + if (($title === null) && $this->isEmptyContent($content)) { $title = ''; } @@ -131,14 +131,14 @@ final class PhabricatorTimelineEventView extends AphrontView { '')); } - $title = phutil_render_tag( + $title = phutil_tag( 'div', array( 'class' => implode(' ', $title_classes), ), - $title.$extra); + array($title, $extra)); - $title = $icon.$title; + $title = $this->renderHTMLView(array($icon, $title)); } $wedge = phutil_tag( @@ -165,32 +165,34 @@ final class PhabricatorTimelineEventView extends AphrontView { $classes[] = 'phabricator-timeline-border'; if ($content) { $classes[] = 'phabricator-timeline-major-event'; - $content = phutil_render_tag( + $content = phutil_tag( 'div', array( 'class' => implode(' ', $content_classes), ), - phutil_render_tag( + phutil_tag( 'div', array( 'class' => 'phabricator-timeline-inner-content', ), - $title. - phutil_render_tag( - 'div', - array( - 'class' => 'phabricator-timeline-core-content', - ), - $content))); - $content = $image.$wedge.$content; + array( + $title, + phutil_tag( + 'div', + array( + 'class' => 'phabricator-timeline-core-content', + ), + $content), + ))); + $content = array($image, $wedge, $content); } else { $classes[] = 'phabricator-timeline-minor-event'; - $content = phutil_render_tag( + $content = phutil_tag( 'div', array( 'class' => implode(' ', $content_classes), ), - $image.$wedge.$title); + array($image, $wedge, $title)); } $outer_classes = $this->classes; @@ -209,7 +211,7 @@ final class PhabricatorTimelineEventView extends AphrontView { ); } - return javelin_render_tag( + return javelin_tag( 'div', array( 'class' => implode(' ', $outer_classes), @@ -217,7 +219,7 @@ final class PhabricatorTimelineEventView extends AphrontView { 'sigil' => $sigil, 'meta' => $meta, ), - phutil_render_tag( + phutil_tag( 'div', array( 'class' => implode(' ', $classes), @@ -273,25 +275,28 @@ final class PhabricatorTimelineEventView extends AphrontView { ->setAnchorName($this->anchor) ->render(); - $date = $anchor.phutil_tag( - 'a', - array( - 'href' => '#'.$this->anchor, - ), - $date); + $date = $this->renderHTMLView( + array( + $anchor, + phutil_tag( + 'a', + array( + 'href' => '#'.$this->anchor, + ), + $date), + )); } $extra[] = $date; } } - $extra = implode(' · ', $extra); if ($extra) { - $extra = phutil_render_tag( + $extra = phutil_tag( 'span', array( 'class' => 'phabricator-timeline-extra', ), - $extra); + array_interleave(" \xC2\xB7 ", $extra)); } return $extra;