From ab64ad1257356a679d766bc36d74b3d8445f44da Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 19 Nov 2013 17:33:55 -0800 Subject: [PATCH] Add explicit width/height controls for embedded images in Remarkup Summary: User request. See screenshot. Test Plan: doge Reviewers: btrahan, bigo Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D7610 --- .../PhabricatorRemarkupRuleEmbedFile.php | 59 ++++++++++++++----- src/docs/user/userguide/remarkup.diviner | 2 + 2 files changed, 46 insertions(+), 15 deletions(-) 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