private function renderImageFile(PhabricatorFile $file, PhabricatorObjectHandle $handle, array $options) { require_celerity_resource('lightbox-attachment-css'); $attrs = array(); $image_class = 'phabricator-remarkup-embed-image'; $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']) { case 'full': $attrs += array('src' => $file->getBestURI(), 'height' => $file->getImageHeight(), 'width' => $file->getImageWidth()); $image_class = 'phabricator-remarkup-embed-image-full'; break; // Displays "full" in normal Remarkup, "wide" in Documents // Displays "full" in normal Remarkup, "wide" in Documents case 'wide': $attrs += array('src' => $file->getBestURI(), 'width' => $file->getImageWidth()); $image_class = 'phabricator-remarkup-embed-image-wide'; break; case 'thumb': default: $preview_key = PhabricatorFileThumbnailTransform::TRANSFORM_PREVIEW; $xform = PhabricatorFileTransform::getTransformByKey($preview_key); $existing_xform = $file->getTransform($preview_key); if ($existing_xform) { $xform_uri = $existing_xform->getCDNURI(); } else { $xform_uri = $file->getURIForTransform($xform); } $attrs['src'] = $xform_uri; $dimensions = $xform->getTransformedDimensions($file); if ($dimensions) { list($x, $y) = $dimensions; $attrs['width'] = $x; $attrs['height'] = $y; } break; } } if (isset($options['alt'])) { $attrs['alt'] = $options['alt']; } $img = phutil_tag('img', $attrs); $embed = javelin_tag('a', array('href' => $file->getBestURI(), 'class' => $image_class, 'sigil' => 'lightboxable', 'meta' => array('phid' => $file->getPHID(), 'uri' => $file->getBestURI(), 'dUri' => $file->getDownloadURI(), 'viewable' => true)), $img); switch ($options['layout']) { case 'right': case 'center': case 'inline': case 'left': $layout_class = 'phabricator-remarkup-embed-layout-' . $options['layout']; break; default: $layout_class = 'phabricator-remarkup-embed-layout-left'; break; } if ($options['float']) { switch ($options['layout']) { case 'center': case 'inline': break; case 'right': $layout_class .= ' phabricator-remarkup-embed-float-right'; break; case 'left': default: $layout_class .= ' phabricator-remarkup-embed-float-left'; break; } } return phutil_tag($options['layout'] == 'inline' ? 'span' : 'div', array('class' => $layout_class), $embed); }