/** * Builds the HTML code for this component * * @return String the HTML code */ public function getHtml() { $element = $this->getDomElement(); if ($element === null) { return ''; } $msgKey = $element->getAttribute('message'); $menuFactory = new MenuFactory(); if (empty($msgKey)) { $text = $element->textContent; $menu = $menuFactory->getMenuFromMessageText($text); } else { $menu = $menuFactory->getMenuFromMessage($msgKey); } $menu->setMenuItemFormatter(function ($href, $text, $depth, $subitems) { $href = \Sanitizer::cleanUrl($href); $text = htmlspecialchars($text); if ($depth === 1 && !empty($subitems)) { return "<li class=\"dropdown\"><a class=\"dropdown-toggle\" href=\"#\" data-toggle=\"dropdown\">{$text}<b class=\"caret\"></b></a>{$subitems}</li>"; } else { return "<li><a href=\"{$href}\">{$text}</a>{$subitems}</li>"; } }); $menu->setItemListFormatter(function ($rawItemsHtml, $depth) { if ($depth === 0) { return $rawItemsHtml; } elseif ($depth === 1) { return "<ul class=\"dropdown-menu\">{$rawItemsHtml}</ul>"; } else { return "<ul>{$rawItemsHtml}</ul>"; } }); return $menu->getHtml(); }
} ?> </tr> <?php foreach ($content as $item) { ?> <tr class="insights-list-item"> <td class="insights-list-item-page insights-list-cell insights-list-first-column"> <a class="insights-list-item-title <?php echo Sanitizer::encodeAttribute($item['link']['classes']); ?> " title="<?php echo Sanitizer::encodeAttribute($item['link']['title']); ?> " href="<?php echo Sanitizer::cleanUrl($item['link']['url']); ?> "><?php echo Sanitizer::escapeHtmlAllowEntities($item['link']['text']); ?> </a> <?php if (isset($item['metadata'])) { ?> <p class="insights-list-item-metadata"> <?php if (isset($item['metadata']['lastRevision'])) { ?> <?php echo wfMessage('insights-last-edit')->rawParams(Xml::element('a', ['href' => $item['metadata']['lastRevision']['userpage']], $item['metadata']['lastRevision']['username']), date('F j, Y', $item['metadata']['lastRevision']['timestamp']))->escaped(); ?>
/** * Replace external links (REL) * * Note: this is all very hackish and the order of execution matters a lot. * Make sure to run tests/parserTests.php if you change this code. * * @private * * @param $text string * * @throws MWException * @return string */ function replaceExternalLinks($text) { wfProfileIn(__METHOD__); $bits = preg_split($this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE); if ($bits === false) { wfProfileOut(__METHOD__); throw new MWException("PCRE needs to be compiled with --enable-unicode-properties in order for MediaWiki to function"); } $s = array_shift($bits); $i = 0; while ($i < count($bits)) { $url = $bits[$i++]; $i++; // protocol $text = $bits[$i++]; $trail = $bits[$i++]; # The characters '<' and '>' (which were escaped by # removeHTMLtags()) should not be included in # URLs, per RFC 2396. $m2 = array(); if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) { $text = substr($url, $m2[0][1]) . ' ' . $text; $url = substr($url, 0, $m2[0][1]); } # If the link text is an image URL, replace it with an <img> tag # This happened by accident in the original parser, but some people used it extensively $img = $this->maybeMakeExternalImage($text); if ($img !== false) { $text = $img; } $dtrail = ''; # Set linktype for CSS - if URL==text, link is essentially free $linktype = $text === $url ? 'free' : 'text'; # No link text, e.g. [http://domain.tld/some.link] if ($text == '') { # Autonumber $langObj = $this->getTargetLanguage(); $text = '[' . $langObj->formatNum(++$this->mAutonumber) . ']'; $linktype = 'autonumber'; } else { # Have link text, e.g. [http://domain.tld/some.link text]s # Check for trail list($dtrail, $trail) = Linker::splitTrail($trail); } $text = $this->getConverterLanguage()->markNoConversion($text); $url = Sanitizer::cleanUrl($url); # Use the encoded URL # This means that users can paste URLs directly into the text # Funny characters like ö aren't valid in URLs anyway # This was changed in August 2004 $s .= Linker::makeExternalLink($url, $text, false, $linktype, $this->getExternalLinkAttribs($url)) . $dtrail . $trail; # Register link in the output object. # Replace unnecessary URL escape codes with the referenced character # This prevents spammers from hiding links from the filters $pasteurized = self::replaceUnusualEscapes($url); $this->mOutput->addExternalLink($pasteurized); } wfProfileOut(__METHOD__); return $s; }
/** * Replace anything that looks like a URL with a link * @private */ function replaceFreeExternalLinks($text) { global $wgContLang; $fname = 'Parser::replaceFreeExternalLinks'; wfProfileIn($fname); $bits = preg_split('/(\\b(?:' . wfUrlProtocols() . '))/S', $text, -1, PREG_SPLIT_DELIM_CAPTURE); $s = array_shift($bits); $i = 0; $sk = $this->mOptions->getSkin(); while ($i < count($bits)) { $protocol = $bits[$i++]; $remainder = $bits[$i++]; $m = array(); if (preg_match('/^(' . self::EXT_LINK_URL_CLASS . '+)(.*)$/s', $remainder, $m)) { # Found some characters after the protocol that look promising $url = $protocol . $m[1]; $trail = $m[2]; # special case: handle urls as url args: # http://www.example.com/foo?=http://www.example.com/bar if (strlen($trail) == 0 && isset($bits[$i]) && preg_match('/^' . wfUrlProtocols() . '$/S', $bits[$i]) && preg_match('/^(' . self::EXT_LINK_URL_CLASS . '+)(.*)$/s', $bits[$i + 1], $m)) { # add protocol, arg $url .= $bits[$i] . $m[1]; # protocol, url as arg to previous link $i += 2; $trail = $m[2]; } # The characters '<' and '>' (which were escaped by # removeHTMLtags()) should not be included in # URLs, per RFC 2396. $m2 = array(); if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) { $trail = substr($url, $m2[0][1]) . $trail; $url = substr($url, 0, $m2[0][1]); } # Move trailing punctuation to $trail $sep = ',;\\.:!?'; # If there is no left bracket, then consider right brackets fair game too if (strpos($url, '(') === false) { $sep .= ')'; } $numSepChars = strspn(strrev($url), $sep); if ($numSepChars) { $trail = substr($url, -$numSepChars) . $trail; $url = substr($url, 0, -$numSepChars); } $url = Sanitizer::cleanUrl($url); # Is this an external image? $text = $this->maybeMakeExternalImage($url); if ($text === false) { # Not an image, make a link $text = $sk->makeExternalLink($url, $wgContLang->markNoConversion($url), true, 'free', $this->mTitle->getNamespace()); # Register it in the output object... # Replace unnecessary URL escape codes with their equivalent characters $pasteurized = Parser::replaceUnusualEscapes($url); $this->mOutput->addExternalLink($pasteurized); } $s .= $text . $trail; } else { $s .= $protocol . $remainder; } } wfProfileOut($fname); return $s; }
/** * Replace external links (REL) * * Note: this is all very hackish and the order of execution matters a lot. * Make sure to run maintenance/parserTests.php if you change this code. * * @private * * @param $text string * * @return string */ function replaceExternalLinks($text) { wfProfileIn(__METHOD__); $bits = preg_split($this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE); $s = array_shift($bits); $i = 0; while ($i < count($bits)) { $url = $bits[$i++]; $protocol = $bits[$i++]; $text = $bits[$i++]; $trail = $bits[$i++]; # The characters '<' and '>' (which were escaped by # removeHTMLtags()) should not be included in # URLs, per RFC 2396. $m2 = array(); if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) { $text = substr($url, $m2[0][1]) . ' ' . $text; $url = substr($url, 0, $m2[0][1]); } # If the link text is an image URL, replace it with an <img> tag # This happened by accident in the original parser, but some people used it extensively $img = $this->maybeMakeExternalImage($text); if ($img !== false) { $text = $img; } $dtrail = ''; # Set linktype for CSS - if URL==text, link is essentially free $linktype = $text === $url ? 'free' : 'text'; # RTE (Rich Text Editor) - begin # @author: Inez Korczyński global $wgRTEParserEnabled; if (!empty($wgRTEParserEnabled)) { $RTE_wikitextIdx = RTEMarker::getDataIdx(RTEMarker::EXTERNAL_WIKITEXT, $trail); $wasblank = $text == ''; } # RTE - end # No link text, e.g. [http://domain.tld/some.link] if ($text == '') { # Autonumber $langObj = $this->getTargetLanguage(); $text = '[' . $langObj->formatNum(++$this->mAutonumber) . ']'; $linktype = 'autonumber'; } else { # Have link text, e.g. [http://domain.tld/some.link text]s # Check for trail list($dtrail, $trail) = Linker::splitTrail($trail); } $text = $this->getConverterLanguage()->markNoConversion($text); $url = Sanitizer::cleanUrl($url); # Use the encoded URL # This means that users can paste URLs directly into the text # Funny characters like ö aren't valid in URLs anyway # This was changed in August 2004 # RTE (Rich Text Editor) - begin # @author: Inez Korczyński if (!empty($wgRTEParserEnabled)) { $text = RTEMarker::generate(RTEMarker::EXTERNAL_DATA, RTEData::put('data', array('type' => 'external', 'wikitextIdx' => $RTE_wikitextIdx, 'text' => $text, 'link' => $url, 'linktype' => $linktype, 'wasblank' => $wasblank))) . $text; } # RTE - end $s .= Linker::makeExternalLink($url, $text, false, $linktype, $this->getExternalLinkAttribs($url)) . $dtrail . $trail; # Register link in the output object. # Replace unnecessary URL escape codes with the referenced character # This prevents spammers from hiding links from the filters $pasteurized = self::replaceUnusualEscapes($url); $this->mOutput->addExternalLink($pasteurized); } wfProfileOut(__METHOD__); return $s; }
/** * Replace external links (REL) * * Note: this is all very hackish and the order of execution matters a lot. * Make sure to run maintenance/parserTests.php if you change this code. * * @private */ function replaceExternalLinks($text) { global $wgContLang; wfProfileIn(__METHOD__); $sk = $this->mOptions->getSkin(); $bits = preg_split($this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE); $s = array_shift($bits); $i = 0; while ($i < count($bits)) { $url = $bits[$i++]; $protocol = $bits[$i++]; $text = $bits[$i++]; $trail = $bits[$i++]; # The characters '<' and '>' (which were escaped by # removeHTMLtags()) should not be included in # URLs, per RFC 2396. $m2 = array(); if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) { $text = substr($url, $m2[0][1]) . ' ' . $text; $url = substr($url, 0, $m2[0][1]); } # If the link text is an image URL, replace it with an <img> tag # This happened by accident in the original parser, but some people used it extensively $img = $this->maybeMakeExternalImage($text); if ($img !== false) { $text = $img; } $dtrail = ''; # Set linktype for CSS - if URL==text, link is essentially free $linktype = $text === $url ? 'free' : 'text'; # No link text, e.g. [http://domain.tld/some.link] if ($text == '') { # Autonumber if allowed. See bug #5918 if (strpos(wfUrlProtocols(), substr($protocol, 0, strpos($protocol, ':'))) !== false) { $langObj = $this->getFunctionLang(); $text = '[' . $langObj->formatNum(++$this->mAutonumber) . ']'; $linktype = 'autonumber'; } else { # Otherwise just use the URL $text = htmlspecialchars($url); $linktype = 'free'; } } else { # Have link text, e.g. [http://domain.tld/some.link text]s # Check for trail list($dtrail, $trail) = Linker::splitTrail($trail); } $text = $wgContLang->markNoConversion($text); $url = Sanitizer::cleanUrl($url); if ($this->mOptions->mExternalLinkTarget) { $attribs = array('target' => $this->mOptions->mExternalLinkTarget); } else { $attribs = array(); } # Use the encoded URL # This means that users can paste URLs directly into the text # Funny characters like ö aren't valid in URLs anyway # This was changed in August 2004 $s .= $sk->makeExternalLink($url, $text, false, $linktype, $this->getExternalLinkAttribs()) . $dtrail . $trail; # Register link in the output object. # Replace unnecessary URL escape codes with the referenced character # This prevents spammers from hiding links from the filters $pasteurized = self::replaceUnusualEscapes($url); $this->mOutput->addExternalLink($pasteurized); } wfProfileOut(__METHOD__); return $s; }
</th> </tr> <?php foreach ($flagTypes as $flagTypeId => $flag) { ?> <?php $title = Title::newFromText($flag['flag_view'], NS_TEMPLATE); ?> <tr class="flags-special-list-item"> <td class="flags-special-list-item-name"><?php echo $flag['flag_name']; ?> </td> <td class="flags-special-list-item-template"> <a class="flags-special-list-item-template-link" href="<?php echo Sanitizer::cleanUrl($title->getFullURL()); ?> " target="_blank"> <?php echo $flag['flag_view']; ?> </a> </td> <td class="flags-special-list-item-params"> <?php $paramsNames = json_decode($flag['flag_params_names'], true); if (is_array($paramsNames)) { ?> <?php foreach ($paramsNames as $name => $description) { ?>