public function getResultText(SMWQueryResult $results, $outputmode) { global $wgUser, $wgParser; $ig = new ImageGallery(); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParser($wgParser); $ig->setCaption($this->mIntro); // set caption to IQ header if ($this->params['galleryformat'] == 'carousel') { static $carouselNr = 0; // Set attributes for jcarousel $dataAttribs = array('wrap' => 'both', 'vertical' => 'false', 'rtl' => 'false'); // Use perrow parameter to determine the scroll sequence. if (empty($this->params['perrow'])) { $dataAttribs['scroll'] = 1; // default 1 } else { $dataAttribs['scroll'] = $this->params['perrow']; $dataAttribs['visible'] = $this->params['perrow']; } $attribs = array('id' => 'carousel' . ++$carouselNr, 'class' => 'jcarousel jcarousel-skin-smw', 'style' => 'display:none;'); foreach ($dataAttribs as $name => $value) { $attribs['data-' . $name] = $value; } $ig->setAttributes($attribs); // Load javascript module SMWOutputs::requireResource('ext.srf.jcarousel'); } // In case galleryformat = carousel, perrow should not be set if ($this->params['perrow'] !== '' && $this->params['galleryformat'] !== 'carousel') { $ig->setPerRow($this->params['perrow']); } if ($this->params['widths'] !== '') { $ig->setWidths($this->params['widths']); } if ($this->params['heights'] !== '') { $ig->setHeights($this->params['heights']); } $printReqLabels = array(); foreach ($results->getPrintRequests() as $printReq) { $printReqLabels[] = $printReq->getLabel(); } if ($this->params['imageproperty'] !== '' && in_array($this->params['imageproperty'], $printReqLabels)) { $this->addImageProperties($results, $ig, $this->params['imageproperty'], $this->params['captionproperty']); } else { $this->addImagePages($results, $ig); } return array($ig->toHTML(), 'nowiki' => true, 'isHTML' => true); }
public function getResultText($results, $outputmode) { global $smwgIQRunningNumber, $wgUser, $wgParser; $skin = $wgUser->getSkin(); $ig = new ImageGallery(); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParser($wgParser); $ig->useSkin($skin); $ig->setCaption($this->mIntro); // set caption to IQ header if (isset($this->m_params['perrow'])) { $ig->setPerRow($this->m_params['perrow']); } if (isset($this->m_params['widths'])) { $ig->setWidths($this->m_params['widths']); } if (isset($this->m_params['heights'])) { $ig->setHeights($this->m_params['heights']); } while ($row = $results->getNext()) { $firstField = $row[0]; $imgTitle = $firstField->getNextObject()->getTitle(); $imgCaption = ''; // Is there a property queried for display with ?property if (isset($row[1])) { $imgCaption = $row[1]->getNextObject(); if (is_object($imgCaption)) { $imgCaption = $imgCaption->getShortText(SMW_OUTPUT_HTML, $this->getLinker(true)); $imgCaption = $wgParser->recursiveTagParse($imgCaption); } } if (empty($imgCaption)) { $imgCaption = $imgTitle->getBaseText(); $imgCaption = preg_replace('#\\.[^.]+$#', '', $imgCaption); // Remove image extension } $ig->add($imgTitle, $imgCaption); // Only add real images (bug #5586) if ($imgTitle->getNamespace() == NS_IMAGE) { $wgParser->mOutput->addImage($imgTitle->getDBkey()); } } return array($ig->toHTML(), 'nowiki' => true, 'isHTML' => true); }
public function getResultText( SMWQueryResult $results, $outputmode ) { global $wgUser, $wgParser; $ig = new ImageGallery(); $ig->setShowBytes( false ); $ig->setShowFilename( false ); $ig->setParser( $wgParser ); $ig->setCaption( $this->mIntro ); // set caption to IQ header if ( $this->m_params['perrow'] !== '' ) { $ig->setPerRow( $this->m_params['perrow'] ); } if ( $this->m_params['widths'] !== '' ) { $ig->setWidths( $this->m_params['widths'] ); } if ( $this->m_params['heights'] !== '' ) { $ig->setHeights( $this->m_params['heights'] ); } $printReqLabels = array(); foreach ( $results->getPrintRequests() as /* SMWPrintRequest */ $printReq ) { $printReqLabels[] = $printReq->getLabel(); } if ( $this->m_params['imageproperty'] !== '' && in_array( $this->m_params['imageproperty'], $printReqLabels ) ) { $this->addImageProperties( $results, $ig, $this->m_params['imageproperty'], $this->m_params['captionproperty'] ); } else { $this->addImagePages( $results, $ig ); } return array( $ig->toHTML(), 'nowiki' => true, 'isHTML' => true ); }
/** * Renders an image gallery from a text with one line per image. * text labels may be given by using |-style alternative text. E.g. * Image:one.jpg|The number "1" * Image:tree.jpg|A tree * given as text will return the HTML of a gallery with two images, * labeled 'The number "1"' and * 'A tree'. */ function renderImageGallery($text, $params) { $ig = new ImageGallery(); $ig->setContextTitle($this->mTitle); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParser($this); $ig->setHideBadImages(); $ig->setAttributes(Sanitizer::validateTagAttributes($params, 'table')); $ig->useSkin($this->mOptions->getSkin()); $ig->mRevisionId = $this->mRevisionId; if (isset($params['caption'])) { $caption = $params['caption']; $caption = htmlspecialchars($caption); $caption = $this->replaceInternalLinks($caption); $ig->setCaptionHtml($caption); } if (isset($params['perrow'])) { $ig->setPerRow($params['perrow']); } if (isset($params['widths'])) { $ig->setWidths($params['widths']); } if (isset($params['heights'])) { $ig->setHeights($params['heights']); } wfRunHooks('BeforeParserrenderImageGallery', array(&$this, &$ig)); $lines = StringUtils::explode("\n", $text); foreach ($lines as $line) { # match lines like these: # Image:someimage.jpg|This is some image $matches = array(); preg_match("/^([^|]+)(\\|(.*))?\$/", $line, $matches); # Skip empty lines if (count($matches) == 0) { continue; } if (strpos($matches[0], '%') !== false) { $matches[1] = urldecode($matches[1]); } $tp = Title::newFromText($matches[1]); $nt =& $tp; if (is_null($nt)) { # Bogus title. Ignore these so we don't bomb out later. continue; } if (isset($matches[3])) { $label = $matches[3]; } else { $label = ''; } $html = $this->recursiveTagParse(trim($label)); $ig->add($nt, $html); # Only add real images (bug #5586) if ($nt->getNamespace() == NS_FILE) { $this->mOutput->addImage($nt->getDBkey()); } } return $ig->toHTML(); }
/** * Renders an image gallery from a text with one line per image. * text labels may be given by using |-style alternative text. E.g. * Image:one.jpg|The number "1" * Image:tree.jpg|A tree * given as text will return the HTML of a gallery with two images, * labeled 'The number "1"' and * 'A tree'. * * @param string $text * @param array $params * @return string HTML */ function renderImageGallery($text, $params) { $ig = new ImageGallery(); $ig->setContextTitle($this->mTitle); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParser($this); $ig->setHideBadImages(); $ig->setAttributes(Sanitizer::validateTagAttributes($params, 'table')); if (isset($params['showfilename'])) { $ig->setShowFilename(true); } else { $ig->setShowFilename(false); } if (isset($params['caption'])) { $caption = $params['caption']; $caption = htmlspecialchars($caption); $caption = $this->replaceInternalLinks($caption); $ig->setCaptionHtml($caption); } if (isset($params['perrow'])) { $ig->setPerRow($params['perrow']); } if (isset($params['widths'])) { $ig->setWidths($params['widths']); } if (isset($params['heights'])) { $ig->setHeights($params['heights']); } wfRunHooks('BeforeParserrenderImageGallery', array(&$this, &$ig)); $lines = StringUtils::explode("\n", $text); foreach ($lines as $line) { # match lines like these: # Image:someimage.jpg|This is some image $matches = array(); preg_match("/^([^|]+)(\\|(.*))?\$/", $line, $matches); # Skip empty lines if (count($matches) == 0) { continue; } if (strpos($matches[0], '%') !== false) { $matches[1] = rawurldecode($matches[1]); } $title = Title::newFromText($matches[1], NS_FILE); if (is_null($title)) { # Bogus title. Ignore these so we don't bomb out later. continue; } $label = ''; $alt = ''; $link = ''; if (isset($matches[3])) { // look for an |alt= definition while trying not to break existing // captions with multiple pipes (|) in it, until a more sensible grammar // is defined for images in galleries $matches[3] = $this->recursiveTagParse(trim($matches[3])); $parameterMatches = StringUtils::explode('|', $matches[3]); $magicWordAlt = MagicWord::get('img_alt'); $magicWordLink = MagicWord::get('img_link'); foreach ($parameterMatches as $parameterMatch) { if ($match = $magicWordAlt->matchVariableStartToEnd($parameterMatch)) { $alt = $this->stripAltText($match, false); } elseif ($match = $magicWordLink->matchVariableStartToEnd($parameterMatch)) { $link = strip_tags($this->replaceLinkHoldersText($match)); $chars = self::EXT_LINK_URL_CLASS; $prots = $this->mUrlProtocols; //check to see if link matches an absolute url, if not then it must be a wiki link. if (!preg_match("/^({$prots}){$chars}+\$/u", $link)) { $localLinkTitle = Title::newFromText($link); $link = $localLinkTitle->getLocalURL(); } } else { // concatenate all other pipes $label .= '|' . $parameterMatch; } } // remove the first pipe $label = substr($label, 1); } $ig->add($title, $label, $alt, $link); } return $ig->toHTML(); }
/** * Renders an image gallery from a text with one line per image. * text labels may be given by using |-style alternative text. E.g. * Image:one.jpg|The number "1" * Image:tree.jpg|A tree * given as text will return the HTML of a gallery with two images, * labeled 'The number "1"' and * 'A tree'. * * @param string $text * @param array $params * @return string HTML */ function renderImageGallery($text, $params) { $ig = new ImageGallery(); /* Wikia change begin - @author: Macbre */ /* Allow extensions to use different class to render image gallery */ wfRunHooks('renderImageGallerySetup', array(&$ig, &$text, &$params)); /* Wikia change end */ $ig->setContextTitle($this->mTitle); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParser($this); $ig->setHideBadImages(); $ig->setAttributes(Sanitizer::validateTagAttributes($params, 'table')); if (isset($params['showfilename'])) { $ig->setShowFilename(true); } else { $ig->setShowFilename(false); } if (isset($params['caption'])) { $caption = $params['caption']; $caption = htmlspecialchars($caption); $caption = $this->replaceInternalLinks($caption); $ig->setCaptionHtml($caption); } if (isset($params['perrow'])) { $ig->setPerRow($params['perrow']); } if (isset($params['widths'])) { $ig->setWidths($params['widths']); } if (isset($params['heights'])) { $ig->setHeights($params['heights']); } /* Wikia change begin */ /* Allow extensions to use their own "parser" for <gallery> tag content */ if (!wfRunHooks('BeforeParserrenderImageGallery', array(&$this, &$ig))) { return $ig->toHTML(); } /* Wikia change end */ $lines = StringUtils::explode("\n", $text); foreach ($lines as $line) { # match lines like these: # Image:someimage.jpg|This is some image $matches = array(); preg_match("/^([^|]+)(\\|(.*))?\$/", $line, $matches); # Skip empty lines if (count($matches) == 0) { continue; } if (strpos($matches[0], '%') !== false) { $matches[1] = rawurldecode($matches[1]); } $title = Title::newFromText($matches[1], NS_FILE); if (is_null($title)) { # Bogus title. Ignore these so we don't bomb out later. continue; } $label = ''; $alt = ''; if (isset($matches[3])) { // look for an |alt= definition while trying not to break existing // captions with multiple pipes (|) in it, until a more sensible grammar // is defined for images in galleries $matches[3] = $this->recursiveTagParse(trim($matches[3])); $altmatches = StringUtils::explode('|', $matches[3]); $magicWordAlt = MagicWord::get('img_alt'); foreach ($altmatches as $altmatch) { $match = $magicWordAlt->matchVariableStartToEnd($altmatch); if ($match) { $alt = $this->stripAltText($match, false); } else { // concatenate all other pipes $label .= '|' . $altmatch; } } // remove the first pipe $label = substr($label, 1); } $ig->add($title, $label, $alt); } return $ig->toHTML(); }
/** * @see SMWResultPrinter::getResultText * * @param $results SMWQueryResult * @param $fullParams array * @param $outputmode integer * * @return string */ public function getResultText(SMWQueryResult $results, $outputmode) { $ig = new ImageGallery(); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setCaption($this->mIntro); // set caption to IQ header // No need for a special page to use the parser but for the "normal" page // view we have to ensure caption text is parsed correctly through the parser if (!$this->isSpecialPage()) { $ig->setParser($GLOBALS['wgParser']); } // Initialize static $statNr = 0; $html = ''; $processing = ''; if ($this->params['widget'] == 'carousel') { // Carousel widget $ig->setAttributes($this->getCarouselWidget()); } elseif ($this->params['widget'] == 'slideshow') { // Slideshow widget $ig->setAttributes($this->getSlideshowWidget()); } else { // Standard gallery attributes $attribs = array('id' => uniqid(), 'class' => $this->getImageOverlay()); $ig->setAttributes($attribs); } // Only use redirects where the overlay option is not used and redirect // thumb images towards a different target if ($this->params['redirects'] !== '' && !$this->params['overlay']) { SMWOutputs::requireResource('ext.srf.gallery.redirect'); } // For the carousel widget, the perrow option should not be set if ($this->params['perrow'] !== '' && $this->params['widget'] !== 'carousel') { $ig->setPerRow($this->params['perrow']); } if ($this->params['widths'] !== '') { $ig->setWidths($this->params['widths']); } if ($this->params['heights'] !== '') { $ig->setHeights($this->params['heights']); } $printReqLabels = array(); $redirectType = ''; /** * @var SMWPrintRequest $printReq */ foreach ($results->getPrintRequests() as $printReq) { $printReqLabels[] = $printReq->getLabel(); // Get redirect type if ($this->params['redirects'] === $printReq->getLabel()) { $redirectType = $printReq->getTypeID(); } } if ($this->params['imageproperty'] !== '' && in_array($this->params['imageproperty'], $printReqLabels) || $this->params['redirects'] !== '' && in_array($this->params['redirects'], $printReqLabels)) { $this->addImageProperties($results, $ig, $this->params['imageproperty'], $this->params['captionproperty'], $this->params['redirects'], $outputmode); } else { $this->addImagePages($results, $ig); } // SRF Global settings SRFUtils::addGlobalJSVariables(); // Display a processing image as long as the DOM is no ready if ($this->params['widget'] !== '') { $processing = SRFUtils::htmlProcessingElement(); } // Beautify the class selector $class = $this->params['widget'] ? '-' . $this->params['widget'] . ' ' : ''; $class = $this->params['redirects'] !== '' && $this->params['overlay'] === false ? $class . ' srf-redirect' . ' ' : $class; $class = $this->params['class'] ? $class . ' ' . $this->params['class'] : $class; // Separate content from result output if (!$ig->isEmpty()) { $attribs = array('class' => 'srf-gallery' . $class, 'align' => 'justify', 'data-redirect-type' => $redirectType); $html = Html::rawElement('div', $attribs, $processing . $ig->toHTML()); } // If available, create a link that points to further results if ($this->linkFurtherResults($results)) { $html .= $this->getLink($results, SMW_OUTPUT_HTML)->getText(SMW_OUTPUT_HTML, $this->mLinker); } return array($html, 'nowiki' => true, 'isHTML' => true); }