Changeset View
Changeset View
Standalone View
Standalone View
src/view/layout/PhabricatorSourceCodeView.php
<?php | <?php | ||||
final class PhabricatorSourceCodeView extends AphrontView { | final class PhabricatorSourceCodeView extends AphrontView { | ||||
private $lines; | private $lines; | ||||
private $uri; | private $uri; | ||||
private $highlights = array(); | private $highlights = array(); | ||||
private $canClickHighlight = true; | private $canClickHighlight = true; | ||||
private $truncatedFirstBytes = false; | private $truncatedFirstBytes = false; | ||||
private $truncatedFirstLines = false; | private $truncatedFirstLines = false; | ||||
private $symbolMetadata; | |||||
public function setLines(array $lines) { | public function setLines(array $lines) { | ||||
$this->lines = $lines; | $this->lines = $lines; | ||||
return $this; | return $this; | ||||
} | } | ||||
public function setURI(PhutilURI $uri) { | public function setURI(PhutilURI $uri) { | ||||
$this->uri = $uri; | $this->uri = $uri; | ||||
Show All 15 Lines | public function setTruncatedFirstBytes($truncated_first_bytes) { | ||||
return $this; | return $this; | ||||
} | } | ||||
public function setTruncatedFirstLines($truncated_first_lines) { | public function setTruncatedFirstLines($truncated_first_lines) { | ||||
$this->truncatedFirstLines = $truncated_first_lines; | $this->truncatedFirstLines = $truncated_first_lines; | ||||
return $this; | return $this; | ||||
} | } | ||||
public function setSymbolMetadata(array $symbol_metadata) { | |||||
$this->symbolMetadata = $symbol_metadata; | |||||
return $this; | |||||
} | |||||
public function getSymbolMetadata() { | |||||
return $this->symbolMetadata; | |||||
} | |||||
public function render() { | public function render() { | ||||
require_celerity_resource('phabricator-source-code-view-css'); | require_celerity_resource('phabricator-source-code-view-css'); | ||||
require_celerity_resource('syntax-highlighting-css'); | require_celerity_resource('syntax-highlighting-css'); | ||||
Javelin::initBehavior('phabricator-oncopy', array()); | Javelin::initBehavior('phabricator-oncopy', array()); | ||||
if ($this->canClickHighlight) { | if ($this->canClickHighlight) { | ||||
Javelin::initBehavior('phabricator-line-linker'); | Javelin::initBehavior('phabricator-line-linker'); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | foreach ($lines as $line) { | ||||
$line_number++; | $line_number++; | ||||
} | } | ||||
$classes = array(); | $classes = array(); | ||||
$classes[] = 'phabricator-source-code-view'; | $classes[] = 'phabricator-source-code-view'; | ||||
$classes[] = 'remarkup-code'; | $classes[] = 'remarkup-code'; | ||||
$classes[] = 'PhabricatorMonospaced'; | $classes[] = 'PhabricatorMonospaced'; | ||||
$symbol_metadata = $this->getSymbolMetadata(); | |||||
$sigils = array(); | |||||
$sigils[] = 'phabricator-source'; | |||||
$sigils[] = 'has-symbols'; | |||||
Javelin::initBehavior('repository-crossreference'); | |||||
return phutil_tag_div( | return phutil_tag_div( | ||||
'phabricator-source-code-container', | 'phabricator-source-code-container', | ||||
javelin_tag( | javelin_tag( | ||||
'table', | 'table', | ||||
array( | array( | ||||
'class' => implode(' ', $classes), | 'class' => implode(' ', $classes), | ||||
'sigil' => 'phabricator-source', | 'sigil' => implode(' ', $sigils), | ||||
'meta' => array( | 'meta' => array( | ||||
'uri' => (string)$this->uri, | 'uri' => (string)$this->uri, | ||||
'symbols' => $symbol_metadata, | |||||
), | ), | ||||
), | ), | ||||
phutil_implode_html('', $rows))); | phutil_implode_html('', $rows))); | ||||
} | } | ||||
} | } |