@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
3abstract class AphrontBarView extends AphrontView {
4
5 private $color;
6 private $caption = '';
7
8 const COLOR_DEFAULT = 'default';
9 const COLOR_WARNING = 'warning';
10 const COLOR_DANGER = 'danger';
11
12 const COLOR_AUTO_BADNESS = 'auto_badness'; // more = bad! :(
13 const COLOR_AUTO_GOODNESS = 'auto_goodness'; // more = good! :)
14
15 const THRESHOLD_DANGER = 0.85;
16 const THRESHOLD_WARNING = 0.75;
17
18 abstract protected function getRatio();
19
20 abstract protected function getDefaultColor();
21
22 final public function setColor($color) {
23 $this->color = $color;
24 return $this;
25 }
26
27 final public function setCaption($text) {
28 $this->caption = $text;
29 return $this;
30 }
31
32 final protected function getColor() {
33 $color = $this->color;
34 if (!$color) {
35 $color = $this->getDefaultColor();
36 }
37
38 switch ($color) {
39 case self::COLOR_DEFAULT:
40 case self::COLOR_WARNING:
41 case self::COLOR_DANGER:
42 return $color;
43 }
44
45 $ratio = $this->getRatio();
46 if ($color === self::COLOR_AUTO_GOODNESS) {
47 $ratio = 1.0 - $ratio;
48 }
49
50 if ($ratio >= self::THRESHOLD_DANGER) {
51 return self::COLOR_DANGER;
52 } else if ($ratio >= self::THRESHOLD_WARNING) {
53 return self::COLOR_WARNING;
54 } else {
55 return self::COLOR_DEFAULT;
56 }
57 }
58
59 final protected function getCaption() {
60 return $this->caption;
61 }
62
63}