Path: blob/master/src/applications/diffusion/view/DiffusionView.php
12242 views
<?php12abstract class DiffusionView extends AphrontView {34private $diffusionRequest;56final public function setDiffusionRequest(DiffusionRequest $request) {7$this->diffusionRequest = $request;8return $this;9}1011final public function getDiffusionRequest() {12return $this->diffusionRequest;13}1415final public function linkHistory($path) {16$href = $this->getDiffusionRequest()->generateURI(17array(18'action' => 'history',19'path' => $path,20));2122return $this->renderHistoryLink($href);23}2425final public function linkBranchHistory($branch) {26$href = $this->getDiffusionRequest()->generateURI(27array(28'action' => 'history',29'branch' => $branch,30));3132return $this->renderHistoryLink($href);33}3435final public function linkTagHistory($tag) {36$href = $this->getDiffusionRequest()->generateURI(37array(38'action' => 'history',39'commit' => $tag,40));4142return $this->renderHistoryLink($href);43}4445private function renderHistoryLink($href) {46return javelin_tag(47'a',48array(49'href' => $href,50'class' => 'diffusion-link-icon',51'sigil' => 'has-tooltip',52'meta' => array(53'tip' => pht('History'),54'align' => 'E',55),56),57id(new PHUIIconView())->setIcon('fa-history bluegrey'));58}5960final public function linkBrowse(61$path,62array $details = array(),63$button = false) {64require_celerity_resource('diffusion-icons-css');65Javelin::initBehavior('phabricator-tooltips');6667$file_type = idx($details, 'type');68unset($details['type']);6970$display_name = idx($details, 'name');71unset($details['name']);7273if ($display_name !== null && strlen($display_name)) {74$display_name = phutil_tag(75'span',76array(77'class' => 'diffusion-browse-name',78),79$display_name);80}8182if (isset($details['external'])) {83$params = array(84'uri' => idx($details, 'external'),85'id' => idx($details, 'hash'),86);8788$href = new PhutilURI('/diffusion/external/', $params);89$tip = pht('Browse External');90} else {91$href = $this->getDiffusionRequest()->generateURI(92$details + array(93'action' => 'browse',94'path' => $path,95));96$tip = pht('Browse');97}9899$icon = DifferentialChangeType::getIconForFileType($file_type);100$color = DifferentialChangeType::getIconColorForFileType($file_type);101$icon_view = id(new PHUIIconView())102->setIcon($icon.' '.$color);103104// If we're rendering a file or directory name, don't show the tooltip.105if ($display_name !== null) {106$sigil = null;107$meta = null;108} else {109$sigil = 'has-tooltip';110$meta = array(111'tip' => $tip,112'align' => 'E',113);114}115116if ($button) {117return id(new PHUIButtonView())118->setTag('a')119->setIcon('fa-code')120->setHref($href)121->setToolTip(pht('Browse'))122->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE);123}124125return javelin_tag(126'a',127array(128'href' => $href,129'class' => 'diffusion-link-icon',130'sigil' => $sigil,131'meta' => $meta,132),133array(134$icon_view,135$display_name,136));137}138139final public static function linkCommit(140PhabricatorRepository $repository,141$commit,142$summary = '') {143144$commit_name = $repository->formatCommitName($commit, $local = true);145146if (strlen($summary)) {147$commit_name .= ': '.$summary;148}149150return phutil_tag(151'a',152array(153'href' => $repository->getCommitURI($commit),154),155$commit_name);156}157158final public static function linkDetail(159PhabricatorRepository $repository,160$commit,161$detail) {162163return phutil_tag(164'a',165array(166'href' => $repository->getCommitURI($commit),167),168$detail);169}170171final public static function renderName($name) {172$email = new PhutilEmailAddress($name);173if ($email->getDisplayName() && $email->getDomainName()) {174Javelin::initBehavior('phabricator-tooltips', array());175require_celerity_resource('aphront-tooltip-css');176return javelin_tag(177'span',178array(179'sigil' => 'has-tooltip',180'meta' => array(181'tip' => $email->getAddress(),182'align' => 'S',183'size' => 'auto',184),185),186$email->getDisplayName());187}188return hsprintf('%s', $name);189}190191final protected function renderBuildable(192HarbormasterBuildable $buildable,193$type = null) {194Javelin::initBehavior('phabricator-tooltips');195196$icon = $buildable->getStatusIcon();197$color = $buildable->getStatusColor();198$name = $buildable->getStatusDisplayName();199200if ($type == 'button') {201return id(new PHUIButtonView())202->setTag('a')203->setText($name)204->setIcon($icon)205->setColor($color)206->setHref('/'.$buildable->getMonogram())207->addClass('mmr')208->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE)209->addClass('diffusion-list-build-status');210}211212return id(new PHUIIconView())213->setIcon($icon.' '.$color)214->addSigil('has-tooltip')215->setHref('/'.$buildable->getMonogram())216->setMetadata(217array(218'tip' => $name,219));220221}222223final protected function loadBuildables(array $commits) {224assert_instances_of($commits, 'PhabricatorRepositoryCommit');225226if (!$commits) {227return array();228}229230$viewer = $this->getUser();231232$harbormaster_app = 'PhabricatorHarbormasterApplication';233$have_harbormaster = PhabricatorApplication::isClassInstalledForViewer(234$harbormaster_app,235$viewer);236237if ($have_harbormaster) {238$buildables = id(new HarbormasterBuildableQuery())239->setViewer($viewer)240->withBuildablePHIDs(mpull($commits, 'getPHID'))241->withManualBuildables(false)242->execute();243$buildables = mpull($buildables, null, 'getBuildablePHID');244} else {245$buildables = array();246}247248return $buildables;249}250251}252253254