@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
at upstream/main 196 lines 4.1 kB view raw
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}