Something went wrong. Try again.
@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
Something went wrong. Try again.
6.3 kB · 255 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256<?php
abstract class DiffusionView extends AphrontView {
private $diffusionRequest;
final public function setDiffusionRequest(DiffusionRequest $request) { $this->diffusionRequest = $request; return $this; }
final public function getDiffusionRequest() { return $this->diffusionRequest; }
final public function linkHistory($path) { $href = $this->getDiffusionRequest()->generateURI( array( 'action' => 'history', 'path' => $path, ));
return $this->renderHistoryLink($href); }
final public function linkBranchHistory($branch) { $href = $this->getDiffusionRequest()->generateURI( array( 'action' => 'history', 'branch' => $branch, ));
return $this->renderHistoryLink($href); }
final public function linkTagHistory($tag) { $href = $this->getDiffusionRequest()->generateURI( array( 'action' => 'history', 'commit' => $tag, ));
return $this->renderHistoryLink($href); }
private function renderHistoryLink($href) { return javelin_tag( 'a', array( 'href' => $href, 'class' => 'diffusion-link-icon', 'sigil' => 'has-tooltip', 'meta' => array( 'tip' => pht('History'), 'align' => 'E', ), ), id(new PHUIIconView())->setIcon('fa-history bluegrey')); }
final public function linkBrowse( $path, array $details = array(), $button = false) { require_celerity_resource('diffusion-icons-css'); Javelin::initBehavior('phabricator-tooltips');
$file_type = idx($details, 'type'); unset($details['type']);
$display_name = idx($details, 'name'); unset($details['name']);
if (phutil_nonempty_string($display_name)) { $display_name = phutil_tag( 'span', array( 'class' => 'diffusion-browse-name', ), $display_name); }
if (isset($details['external'])) { $params = array( 'uri' => idx($details, 'external'), 'id' => idx($details, 'hash'), );
$href = new PhutilURI('/diffusion/external/', $params); $tip = pht('Browse External'); } else { $href = $this->getDiffusionRequest()->generateURI( $details + array( 'action' => 'browse', 'path' => $path, )); $tip = pht('Browse'); }
$icon = DifferentialChangeType::getIconForFileType($file_type); $color = DifferentialChangeType::getIconColorForFileType($file_type); $icon_view = id(new PHUIIconView()) ->setIcon($icon.' '.$color);
// If we're rendering a file or directory name, don't show the tooltip. if ($display_name !== null) { $sigil = null; $meta = null; } else { $sigil = 'has-tooltip'; $meta = array( 'tip' => $tip, 'align' => 'E', ); }
if ($button) { return id(new PHUIButtonView()) ->setTag('a') ->setIcon('fa-code') ->setHref($href) ->setToolTip(pht('Browse')) ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE); }
return javelin_tag( 'a', array( 'href' => $href, 'class' => 'diffusion-link-icon', 'sigil' => $sigil, 'meta' => $meta, ), array( $icon_view, $display_name, )); }
final public static function linkCommit( PhabricatorRepository $repository, $commit, $summary = '') {
$commit_name = $repository->formatCommitName($commit, $local = true);
if (strlen($summary)) { $commit_name .= ': '.$summary; }
return phutil_tag( 'a', array( 'href' => $repository->getCommitURI($commit), ), $commit_name); }
final public static function linkDetail( PhabricatorRepository $repository, $commit, $detail) {
return phutil_tag( 'a', array( 'href' => $repository->getCommitURI($commit), ), $detail); }
final public static function renderName($name) { $email = new PhutilEmailAddress($name); if ($email->getDisplayName() && $email->getDomainName()) { Javelin::initBehavior('phabricator-tooltips', array()); require_celerity_resource('aphront-tooltip-css'); return javelin_tag( 'span', array( 'sigil' => 'has-tooltip', 'meta' => array( 'tip' => $email->getAddress(), 'align' => 'S', 'size' => 'auto', ), ), $email->getDisplayName()); } return hsprintf('%s', $name); }
final protected function renderBuildable( HarbormasterBuildable $buildable, $type = null) { Javelin::initBehavior('phabricator-tooltips');
$icon = $buildable->getStatusIcon(); $color = $buildable->getStatusColor(); $name = $buildable->getStatusDisplayName();
if ($type == 'button') { return id(new PHUIButtonView()) ->setTag('a') ->setText($name) ->setIcon($icon) ->setColor($color) ->setHref('/'.$buildable->getMonogram()) ->addClass('mmr') ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE) ->addClass('diffusion-list-build-status'); }
return id(new PHUIIconView()) ->setIcon($icon.' '.$color) ->addSigil('has-tooltip') ->setHref('/'.$buildable->getMonogram()) ->setMetadata( array( 'tip' => $name, ));
}
/** * @param array<PhabricatorRepositoryCommit> $commits */ final protected function loadBuildables(array $commits) { assert_instances_of($commits, PhabricatorRepositoryCommit::class);
if (!$commits) { return array(); }
$viewer = $this->getUser();
$harbormaster_app = PhabricatorHarbormasterApplication::class; $have_harbormaster = PhabricatorApplication::isClassInstalledForViewer( $harbormaster_app, $viewer);
if ($have_harbormaster) { $buildables = id(new HarbormasterBuildableQuery()) ->setViewer($viewer) ->withBuildablePHIDs(mpull($commits, 'getPHID')) ->withManualBuildables(false) ->execute(); $buildables = mpull($buildables, null, 'getBuildablePHID'); } else { $buildables = array(); }
return $buildables; }
}