1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-15 03:12:41 +01:00
phorge-phorge/src/view/phui/PHUIBadgeView.php
Chad Little 26faa8f1f6 PHUIBadgeView
Summary: Resonable sketchout of a "Badge" UI for Profiles/Projects/Achievements.

Test Plan:
weee

{F602729}

Reviewers: btrahan, epriestley

Reviewed By: epriestley

Subscribers: epriestley, Korvin

Maniphest Tasks: T7992

Differential Revision: https://secure.phabricator.com/D13615
2015-07-09 15:12:11 -07:00

215 lines
4.4 KiB
PHP

<?php
final class PHUIBadgeView extends AphrontTagView {
private $href;
private $icon;
private $quality;
private $source;
private $header;
private $subhead;
private $bylines = array();
// Yes, World of Warcraft Item Quality
const POOR = 'grey';
const COMMON = 'white';
const UNCOMMON = 'green';
const RARE = 'blue';
const EPIC = 'indigo';
const LEGENDARY = 'orange';
const HEIRLOOM = 'yellow';
public function setIcon($icon) {
$this->icon = $icon;
return $this;
}
public function setHref($href) {
$this->href = $href;
return $this;
}
public function setQuality($quality) {
$this->quality = $quality;
return $this;
}
public function setSource($source) {
$this->source = $source;
return $this;
}
public function setHeader($header) {
$this->header = $header;
return $this;
}
public function setSubhead($subhead) {
$this->subhead = $subhead;
return $this;
}
public function addByline($byline) {
$this->bylines[] = $byline;
return $this;
}
private function getQualityTitle() {
switch ($this->quality) {
case self::POOR:
return pht('Poor');
case self::COMMON:
return pht('Common');
case self::UNCOMMON:
return pht('Uncommon');
case self::RARE:
return pht('Rare');
case self::EPIC:
return pht('Epic');
case self::LEGENDARY:
return pht('Legendary');
case self::HEIRLOOM:
return pht('Heirloom');
}
}
protected function getTagName() {
return 'span';
}
protected function getTagAttributes() {
require_celerity_resource('phui-badge-view-css');
$id = celerity_generate_unique_node_id();
$classes = array();
$classes[] = 'phui-badge-view';
if ($this->quality) {
$classes[] = 'phui-badge-view-'.$this->quality;
}
return array(
'class' => implode(' ', $classes),
'sigil' => 'jx-toggle-class',
'id' => $id,
'meta' => array(
'map' => array(
$id => 'card-flipped',
),
),
);
}
protected function getTagContent() {
$icon = id(new PHUIIconView())
->setIconFont($this->icon);
$illustration = phutil_tag_div('phui-badge-illustration', $icon);
$header = null;
if ($this->header) {
$header = phutil_tag(
($this->href) ? 'a' : 'span',
array(
'class' => 'phui-badge-view-header',
'href' => $this->href,
),
$this->header);
}
$subhead = null;
if ($this->subhead) {
$subhead = phutil_tag_div('phui-badge-view-subhead', $this->subhead);
}
$information = phutil_tag(
'div',
array(
'class' => 'phui-badge-view-information',
),
array($header, $subhead));
$quality = phutil_tag_div('phui-badge-quality', $this->getQualityTitle());
$source = phutil_tag_div('phui-badge-source', $this->source);
$bylines = array();
if ($this->bylines) {
foreach ($this->bylines as $byline) {
$bylines[] = phutil_tag_div('phui-badge-byline', $byline);
}
}
$card_front_1 = phutil_tag(
'div',
array(
'class' => 'phui-badge-inner-front',
),
array(
$illustration,
));
$card_front_2 = phutil_tag(
'div',
array(
'class' => 'phui-badge-inner-front',
),
array(
$information,
));
$back_info = phutil_tag(
'div',
array(
'class' => 'phui-badge-view-information',
),
array(
$quality,
$source,
$bylines,
));
$card_back = phutil_tag(
'div',
array(
'class' => 'phui-badge-inner-back',
),
array(
$back_info,
));
$inner_front = phutil_tag(
'div',
array(
'class' => 'phui-badge-front-view',
),
array(
$card_front_1,
$card_front_2,
));
$inner_back = phutil_tag_div('phui-badge-back-view', $card_back);
$front = phutil_tag_div('phui-badge-card-front', $inner_front);
$back = phutil_tag_div('phui-badge-card-back', $inner_back);
$card = phutil_tag(
'div',
array(
'class' => 'phui-badge-card',
),
array(
$front,
$back,
));
return phutil_tag(
'div',
array(
'class' => 'phui-badge-card-container',
),
$card);
}
}