diff --git a/src/applications/files/remarkup/PhabricatorRemarkupRuleEmbedFile.php b/src/applications/files/remarkup/PhabricatorRemarkupRuleEmbedFile.php index 9eb21eef41..fbf30d7cb9 100644 --- a/src/applications/files/remarkup/PhabricatorRemarkupRuleEmbedFile.php +++ b/src/applications/files/remarkup/PhabricatorRemarkupRuleEmbedFile.php @@ -50,9 +50,11 @@ final class PhabricatorRemarkupRuleEmbedFile private function getFileOptions($option_string) { $options = array( - 'size' => 'thumb', + 'size' => null, 'layout' => 'left', 'float' => false, + 'width' => null, + 'height' => null, ); if ($option_string) { @@ -73,23 +75,40 @@ final class PhabricatorRemarkupRuleEmbedFile $attrs = array(); $image_class = null; - switch ((string)$options['size']) { - case 'full': + + $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' => $file->getImageWidth(), - 'height' => $file->getImageHeight(), + 'width' => $width, + 'height' => $height, ); - break; - case 'thumb': - default: - $attrs['src'] = $file->getPreview220URI(); - $dimensions = - PhabricatorImageTransformer::getPreviewDimensions($file, 220); - $attrs['width'] = $dimensions['sdx']; - $attrs['height'] = $dimensions['sdy']; - $image_class = 'phabricator-remarkup-embed-image'; - break; + } + } + + if ($use_size) { + switch ((string)$options['size']) { + case 'full': + $attrs += array( + 'src' => $file->getBestURI(), + 'width' => $file->getImageWidth(), + 'height' => $file->getImageHeight(), + ); + break; + case 'thumb': + default: + $attrs['src'] = $file->getPreview220URI(); + $dimensions = + PhabricatorImageTransformer::getPreviewDimensions($file, 220); + $attrs['width'] = $dimensions['sdx']; + $attrs['height'] = $dimensions['sdy']; + $image_class = 'phabricator-remarkup-embed-image'; + break; + } } $img = phutil_tag('img', $attrs); @@ -186,4 +205,14 @@ final class PhabricatorRemarkupRuleEmbedFile ->setFileViewable($options['viewable']); } + private function parseDimension($string) { + $string = trim($string); + + if (preg_match('/^(?:\d*\\.)?\d+%?$/', $string)) { + return $string; + } + + return null; + } + } diff --git a/src/docs/user/userguide/remarkup.diviner b/src/docs/user/userguide/remarkup.diviner index a3d23619f7..8b4c0e39b2 100644 --- a/src/docs/user/userguide/remarkup.diviner +++ b/src/docs/user/userguide/remarkup.diviner @@ -345,6 +345,8 @@ Valid options are: - **size** thumb (default), full - **name** with `layout=link` or for non-images, use this name for the link text + - **width** Scale image to a specific width. + - **height** Scale image to a specific height. == Embedding Countdowns