Changeset View
Changeset View
Standalone View
Standalone View
src/applications/files/remarkup/PhabricatorRemarkupRuleEmbedFile.php
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | if ($is_viewable_image && !$force_link) { | ||||
return $this->renderAudioFile($object, $handle, $options); | return $this->renderAudioFile($object, $handle, $options); | ||||
} else { | } else { | ||||
return $this->renderFileLink($object, $handle, $options); | return $this->renderFileLink($object, $handle, $options); | ||||
} | } | ||||
} | } | ||||
private function getFileOptions($option_string) { | private function getFileOptions($option_string) { | ||||
$options = array( | $options = array( | ||||
'size' => 'thumb', | 'size' => null, | ||||
'layout' => 'left', | 'layout' => 'left', | ||||
'float' => false, | 'float' => false, | ||||
'width' => null, | |||||
'height' => null, | |||||
); | ); | ||||
if ($option_string) { | if ($option_string) { | ||||
$option_string = trim($option_string, ', '); | $option_string = trim($option_string, ', '); | ||||
$parser = new PhutilSimpleOptions(); | $parser = new PhutilSimpleOptions(); | ||||
$options = $parser->parse($option_string) + $options; | $options = $parser->parse($option_string) + $options; | ||||
} | } | ||||
return $options; | return $options; | ||||
} | } | ||||
private function renderImageFile( | private function renderImageFile( | ||||
PhabricatorFile $file, | PhabricatorFile $file, | ||||
PhabricatorObjectHandle $handle, | PhabricatorObjectHandle $handle, | ||||
array $options) { | array $options) { | ||||
require_celerity_resource('lightbox-attachment-css'); | require_celerity_resource('lightbox-attachment-css'); | ||||
$attrs = array(); | $attrs = array(); | ||||
$image_class = null; | $image_class = null; | ||||
$use_size = true; | |||||
if (!$options['size']) { | |||||
$width = $this->parseDimension($options['width']); | |||||
$height = $this->parseDimension($options['height']); | |||||
if ($width || $height) { | |||||
$use_size = false; | |||||
$attrs += array( | |||||
'src' => $file->getBestURI(), | |||||
'width' => $width, | |||||
'height' => $height, | |||||
); | |||||
} | |||||
} | |||||
if ($use_size) { | |||||
switch ((string)$options['size']) { | switch ((string)$options['size']) { | ||||
case 'full': | case 'full': | ||||
$attrs += array( | $attrs += array( | ||||
'src' => $file->getBestURI(), | 'src' => $file->getBestURI(), | ||||
'width' => $file->getImageWidth(), | 'width' => $file->getImageWidth(), | ||||
'height' => $file->getImageHeight(), | 'height' => $file->getImageHeight(), | ||||
); | ); | ||||
break; | break; | ||||
case 'thumb': | case 'thumb': | ||||
default: | default: | ||||
$attrs['src'] = $file->getPreview220URI(); | $attrs['src'] = $file->getPreview220URI(); | ||||
$dimensions = | $dimensions = | ||||
PhabricatorImageTransformer::getPreviewDimensions($file, 220); | PhabricatorImageTransformer::getPreviewDimensions($file, 220); | ||||
$attrs['width'] = $dimensions['sdx']; | $attrs['width'] = $dimensions['sdx']; | ||||
$attrs['height'] = $dimensions['sdy']; | $attrs['height'] = $dimensions['sdy']; | ||||
$image_class = 'phabricator-remarkup-embed-image'; | $image_class = 'phabricator-remarkup-embed-image'; | ||||
break; | break; | ||||
} | } | ||||
} | |||||
$img = phutil_tag('img', $attrs); | $img = phutil_tag('img', $attrs); | ||||
$embed = javelin_tag( | $embed = javelin_tag( | ||||
'a', | 'a', | ||||
array( | array( | ||||
'href' => $file->getBestURI(), | 'href' => $file->getBestURI(), | ||||
'class' => $image_class, | 'class' => $image_class, | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | private function renderFileLink( | ||||
return id(new PhabricatorFileLinkView()) | return id(new PhabricatorFileLinkView()) | ||||
->setFilePHID($file->getPHID()) | ->setFilePHID($file->getPHID()) | ||||
->setFileName($options['name']) | ->setFileName($options['name']) | ||||
->setFileDownloadURI($file->getDownloadURI()) | ->setFileDownloadURI($file->getDownloadURI()) | ||||
->setFileViewURI($file->getBestURI()) | ->setFileViewURI($file->getBestURI()) | ||||
->setFileViewable($options['viewable']); | ->setFileViewable($options['viewable']); | ||||
} | } | ||||
private function parseDimension($string) { | |||||
$string = trim($string); | |||||
if (preg_match('/^(?:\d*\\.)?\d+%?$/', $string)) { | |||||
return $string; | |||||
} | |||||
return null; | |||||
} | |||||
} | } |