@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 PHUIBadgeView extends AphrontTagView {
4
5 private $href;
6 private $icon;
7 private $quality;
8 private $source;
9 private $header;
10 private $subhead;
11 private $bylines = array();
12
13 public function setIcon($icon) {
14 $this->icon = $icon;
15 return $this;
16 }
17
18 public function setHref($href) {
19 $this->href = $href;
20 return $this;
21 }
22
23 public function setQuality($quality) {
24 $this->quality = $quality;
25 return $this;
26 }
27
28 private function getQualityColor() {
29 return PhabricatorBadgesQuality::getQualityColor($this->quality);
30 }
31
32 private function getQualityName() {
33 return PhabricatorBadgesQuality::getQualityName($this->quality);
34 }
35
36 public function setSource($source) {
37 $this->source = $source;
38 return $this;
39 }
40
41 public function setHeader($header) {
42 $this->header = $header;
43 return $this;
44 }
45
46 public function setSubhead($subhead) {
47 $this->subhead = $subhead;
48 return $this;
49 }
50
51 public function addByline($byline) {
52 $this->bylines[] = $byline;
53 return $this;
54 }
55
56 protected function getTagName() {
57 return 'span';
58 }
59
60 protected function getTagAttributes() {
61 require_celerity_resource('phui-badge-view-css');
62 $id = celerity_generate_unique_node_id();
63
64 Javelin::initBehavior('badge-view', array());
65
66 $classes = array();
67 $classes[] = 'phui-badge-view';
68 if ($this->quality) {
69 $color = $this->getQualityColor();
70 $classes[] = 'phui-badge-view-'.$color;
71 }
72
73 return array(
74 'class' => implode(' ', $classes),
75 'sigil' => 'jx-badge-view',
76 'id' => $id,
77 'meta' => array(
78 'map' => array(
79 $id => 'card-flipped',
80 ),
81 ),
82 );
83 }
84
85 protected function getTagContent() {
86
87 $icon = id(new PHUIIconView())
88 ->setIcon($this->icon);
89
90 $illustration = phutil_tag_div('phui-badge-illustration', $icon);
91
92 $header = null;
93 if ($this->header) {
94 $header = phutil_tag(
95 ($this->href) ? 'a' : 'span',
96 array(
97 'class' => 'phui-badge-view-header',
98 'href' => $this->href,
99 ),
100 $this->header);
101 }
102
103 $subhead = null;
104 if ($this->subhead) {
105 $subhead = phutil_tag_div('phui-badge-view-subhead', $this->subhead);
106 }
107
108 $information = phutil_tag(
109 'div',
110 array(
111 'class' => 'phui-badge-view-information',
112 ),
113 array($header, $subhead));
114
115 $quality = phutil_tag_div('phui-badge-quality', $this->getQualityName());
116 $source = phutil_tag_div('phui-badge-source', $this->source);
117
118 $bylines = array();
119 if ($this->bylines) {
120 foreach ($this->bylines as $byline) {
121 $bylines[] = phutil_tag_div('phui-badge-byline', $byline);
122 }
123 }
124
125 $card_front_1 = phutil_tag(
126 'div',
127 array(
128 'class' => 'phui-badge-inner-front',
129 ),
130 array(
131 $illustration,
132 ));
133
134 $card_front_2 = phutil_tag(
135 'div',
136 array(
137 'class' => 'phui-badge-inner-front',
138 ),
139 array(
140 $information,
141 ));
142
143 $back_info = phutil_tag(
144 'div',
145 array(
146 'class' => 'phui-badge-view-information',
147 ),
148 array(
149 $quality,
150 $source,
151 $bylines,
152 ));
153
154 $card_back = phutil_tag(
155 'div',
156 array(
157 'class' => 'phui-badge-inner-back',
158 ),
159 array(
160 $back_info,
161 ));
162
163 $inner_front = phutil_tag(
164 'div',
165 array(
166 'class' => 'phui-badge-front-view',
167 ),
168 array(
169 $card_front_1,
170 $card_front_2,
171 ));
172
173 $inner_back = phutil_tag_div('phui-badge-back-view', $card_back);
174 $front = phutil_tag_div('phui-badge-card-front', $inner_front);
175 $back = phutil_tag_div('phui-badge-card-back', $inner_back);
176
177 $card = phutil_tag(
178 'div',
179 array(
180 'class' => 'phui-badge-card',
181 ),
182 array(
183 $front,
184 $back,
185 ));
186
187 return phutil_tag(
188 'div',
189 array(
190 'class' => 'phui-badge-card-container',
191 ),
192 $card);
193
194 }
195
196}