function ImagePlaceholderImageBeforeProduceHTML($skin, Title $title, $file, $frameParams, $handlerParams, $time, &$res) { if (ImagePlaceholderIsPlaceholder($title->getText())) { $res = ImagePlaceholderMakePlaceholder($file, $frameParams, $handlerParams); return false; } return true; }
/** * Parse image options text and use it to make an image * @param Title $title * @param string $options * @param LinkHolderArray $holders * @param int $wikitextIdx */ function makeImage($title, $options, $holders = false) { wfProfileIn(__METHOD__); $wikitextIdx = RTEMarker::getDataIdx(RTEMarker::IMAGE_DATA, $options); // store wikitext for media placeholder rendering method self::$lastWikitext = RTEData::get('wikitext', $wikitextIdx); // call MW parser - image params will be populated parent::makeImage($title, $options, $holders); // maybe it's an image placeholder global $wgEnableImagePlaceholderExt; if (!empty($wgEnableImagePlaceholderExt)) { $isImagePlaceholder = ImagePlaceholderIsPlaceholder($title->getText()); // pass rendered image placeholder if ($isImagePlaceholder) { // return HTML stored by renderMediaPlaceholder() method $ret = self::$mediaPlaceholder; wfProfileOut(__METHOD__); return $ret; } } // check that given image exists $image = wfFindFile($title); $isBrokenImage = empty($image); // render broken image placeholder if ($isBrokenImage) { // handle not existing images $ret = RTELinkerHooks::makeBrokenImageLinkObj($title, '', '', '', '', false, $wikitextIdx); wfProfileOut(__METHOD__); return $ret; } // get and merge image parameters returned by Parser::makeImage $params = array_merge(self::$imageParams['frame'], self::$imageParams['handler']); // cleanup if (isset($params['title'])) { unset($params['title']); } // generate image data $data = array('type' => 'image', 'wikitext' => RTEData::get('wikitext', $wikitextIdx), 'title' => $title->getDBkey()); // try to resolve internal links in image caption (RT #90616) if (RTEData::resolveLinksInMediaCaption($data['wikitext'])) { // now resolve link markers in caption parsed to HTML if (!empty($holders)) { $holders->replace($params['caption']); } RTE::log(__METHOD__ . ': resolved internal link'); } // trigger an edgecase when image caption contains double brackets markers if (RTEData::checkWikitextForMarkers($data['wikitext'])) { RTE::$edgeCases[] = 'COMPLEX.09'; } // small fix: set value of thumbnail entry if (isset($params['thumbnail'])) { $params['thumbnail'] = true; } // keep caption only for thumbs and framed images if (!isset($params['thumbnail']) && !isset($params['framed'])) { $params['caption'] = ''; } // get "unparsed" caption from original wikitext and store parsed one as 'captionParsed' if ($params['caption'] != '') { $wikitext = trim($data['wikitext'], '[]'); $wikitextParts = self::explodeImageArgs($wikitext); // let's assume caption is the last part of image wikitext $originalCaption = end($wikitextParts); $originalCaption = htmlspecialchars_decode($originalCaption); // keep parsed caption and store its wikitext $params['captionParsed'] = $params['caption']; $params['caption'] = $originalCaption; } // pass link image parameter (BugId:6506) // this can be either link-title (internal links) or link-url (external links) if (isset($params['link-title']) && $params['link-title'] instanceof Title) { $params['link'] = $params['link-title']->getPrefixedText(); unset($params['link-title']); } else { if (isset($params['link-url'])) { $params['link'] = $params['link-url']; unset($params['link-url']); } } // parameters are cleaned up - store them in image's meta data $data['params'] = $params; RTE::log(__METHOD__, $data); // image width $imageWidth = intval($image->getWidth()); if (!empty($data['params']['width'])) { // width provided in wikitext $width = $data['params']['width']; // images with width provided should not be resized larger than the original file resolution (RT #41805) if ($imageWidth < $width) { $width = $imageWidth; } } else { if (!empty($data['params']['height'])) { $height = $data['params']['height']; $width = round($image->getWidth() * ($height / $image->getHeight())); } else { if (isset($data['params']['thumbnail'])) { // width not provided - get default for thumbs global $wgUser, $wgThumbLimits; $wopt = $wgUser->getOption('thumbsize'); if (!isset($wgThumbLimits[$wopt])) { $wopt = User::getDefaultOption('thumbsize'); } $width = $wgThumbLimits[$wopt]; // thumbed images should not be resized larger than the original file resolution if ($imageWidth < $width) { $width = $imageWidth; } } else { // full size $width = $image->getWidth(); } } } // add extra CSS classes $imgClass = array('image'); if (isset($data['params']['thumbnail'])) { $imgClass[] = 'thumb'; } if (isset($data['params']['framed'])) { $imgClass[] = 'frame'; } if (isset($data['params']['frameless'])) { $imgClass[] = 'frameless'; } if (isset($data['params']['border'])) { $imgClass[] = 'border'; } if (isset($data['params']['align'])) { $imgClass[] = 'align' . ucfirst($data['params']['align']); } if ($data['params']['caption'] != '') { $imgClass[] = 'withCaption'; } // generate image thumbnail $thumb = $image->transform(array('width' => $width)); $thumbClass = get_class($thumb); // RT #25329 if ($thumbClass == 'OggAudioDisplay') { $data['type'] = 'ogg-file'; $ret = RTEMarker::generate(RTEMarker::PLACEHOLDER, RTEData::put('placeholder', $data)); wfProfileOut(__METHOD__); return $ret; } $ret = $thumb->toHtml(array('img-class' => implode(' ', $imgClass))); // add type attribute $ret = substr($ret, 0, -2) . ' type="image" />'; RTE::log(__METHOD__, $ret); // store data and mark HTML $ret = RTEData::addIdxToTag(RTEData::put('data', $data), $ret); wfProfileOut(__METHOD__); return $ret; }