@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
1<?php
2
3final class AphrontJavelinView extends AphrontView {
4 private static $renderContext = array();
5 private static function peekRenderContext() {
6 return nonempty(end(self::$renderContext), null);
7 }
8
9 private static function popRenderContext() {
10 return array_pop(self::$renderContext);
11 }
12
13 private static function pushRenderContext($token) {
14 self::$renderContext[] = $token;
15 }
16
17
18 private $name;
19 private $parameters;
20 private $celerityResource;
21
22 public function render() {
23 $id = celerity_generate_unique_node_id();
24 $placeholder = phutil_tag('span', array('id' => $id));
25
26 require_celerity_resource($this->getCelerityResource());
27
28 $render_context = self::peekRenderContext();
29 self::pushRenderContext($id);
30
31 Javelin::initBehavior('view-placeholder', array(
32 'id' => $id,
33 'view' => $this->getName(),
34 'params' => $this->getParameters(),
35 'children' => phutil_implode_html('', $this->renderChildren()),
36 'trigger_id' => $render_context,
37 ));
38
39 self::popRenderContext();
40
41 return $placeholder;
42 }
43
44
45 protected function getName() {
46 return $this->name;
47 }
48
49 public function setName($template_name) {
50 $this->name = $template_name;
51 return $this;
52 }
53
54 protected function getParameters() {
55 return $this->parameters;
56 }
57
58 public function setParameters($template_parameters) {
59 $this->parameters = $template_parameters;
60 return $this;
61 }
62
63 protected function getCelerityResource() {
64 return $this->celerityResource;
65 }
66
67 public function setCelerityResource($celerity_resource) {
68 $this->celerityResource = $celerity_resource;
69 return $this;
70 }
71}