238 private const SPECULATIVE_FIELDS = [
239 'speculativePageIdUsed',
241 'revisionTimestampUsed'
263 '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#s';
283 public function __construct( $text =
'', $languageLinks = [], $categoryLinks = [],
284 $unused =
false, $titletext =
''
286 $this->mText = $text;
287 $this->mLanguageLinks = $languageLinks;
288 $this->mCategories = $categoryLinks;
289 $this->mTitleText = $titletext;
303 return ( $this->mText !==
null );
315 if ( $this->mText ===
null ) {
316 throw new LogicException(
'This ParserOutput contains no text!' );
351 'enableSectionEditLinks' =>
true,
354 'deduplicateStyles' =>
true,
359 Hooks::runner()->onParserOutputPostCacheTransform( $this, $text, $options );
361 if ( $options[
'wrapperDivClass'] !==
'' && !$options[
'unwrap'] ) {
362 $text = Html::rawElement(
'div', [
'class' => $options[
'wrapperDivClass'] ], $text );
365 if ( $options[
'enableSectionEditLinks'] ) {
367 $skin = $options[
'skin'] ?: RequestContext::getMain()->getSkin();
369 $text = preg_replace_callback(
370 self::EDITSECTION_REGEX,
371 function ( $m ) use ( $skin ) {
372 $editsectionPage = Title::newFromText( htmlspecialchars_decode( $m[1] ) );
373 $editsectionSection = htmlspecialchars_decode( $m[2] );
374 $editsectionContent = isset( $m[4] ) ? Sanitizer::decodeCharReferences( $m[3] ) :
null;
376 if ( !is_object( $editsectionPage ) ) {
377 LoggerFactory::getInstance(
'Parser' )
379 'ParserOutput::getText(): bad title in editsection placeholder',
381 'placeholder' => $m[0],
382 'editsectionPage' => $m[1],
390 return $skin->doEditSectionLink(
400 $text = preg_replace( self::EDITSECTION_REGEX,
'', $text );
403 if ( $options[
'allowTOC'] ) {
404 $text = str_replace( [ Parser::TOC_START, Parser::TOC_END ],
'', $text );
406 $text = preg_replace(
407 '#' . preg_quote( Parser::TOC_START,
'#' ) .
'.*?' . preg_quote( Parser::TOC_END,
'#' ) .
'#s',
413 if ( $options[
'deduplicateStyles'] ) {
415 $text = preg_replace_callback(
416 '#<style\s+([^>]*data-mw-deduplicate\s*=[^>]*)>.*?</style>#s',
417 function ( $m ) use ( &$seen ) {
418 $attr = Sanitizer::decodeTagAttributes( $m[1] );
419 if ( !isset( $attr[
'data-mw-deduplicate'] ) ) {
423 $key = $attr[
'data-mw-deduplicate'];
424 if ( !isset( $seen[$key] ) ) {
433 return Html::element(
'link', [
434 'rel' =>
'mw-deduplicated-inline-style',
443 $text = preg_replace_callback(
444 '#<mw:slotheader>(.*?)</mw:slotheader>#',
446 $role = htmlspecialchars_decode( $m[1] );
462 $this->mWrapperDivClasses[$class] =
true;
470 $this->mWrapperDivClasses = [];
481 return implode(
' ', array_keys( $this->mWrapperDivClasses ) );
489 $this->mSpeculativeRevId = $id;
497 return $this->mSpeculativeRevId;
505 $this->speculativePageIdUsed = $id;
513 return $this->speculativePageIdUsed;
521 $this->revisionTimestampUsed = $timestamp;
529 return $this->revisionTimestampUsed;
537 if ( $hash ===
null ) {
542 $this->revisionUsedSha1Base36 !==
null &&
543 $this->revisionUsedSha1Base36 !== $hash
545 $this->revisionUsedSha1Base36 =
'';
547 $this->revisionUsedSha1Base36 = $hash;
556 return $this->revisionUsedSha1Base36;
560 return $this->mLanguageLinks;
564 return $this->mInterwikiLinks;
568 return array_keys( $this->mCategories );
572 return $this->mCategories;
580 return $this->mIndicators;
584 return $this->mTitleText;
588 return $this->mSections;
592 return $this->mLinks;
600 return $this->mLinksSpecial;
604 return $this->mTemplates;
608 return $this->mTemplateIds;
612 return $this->mImages;
616 return $this->mFileSearchOptions;
620 return $this->mExternalLinks;
624 $this->mNoGallery = (bool)$value;
628 return $this->mNoGallery;
632 return $this->mHeadItems;
636 return $this->mModules;
640 return $this->mModuleStyles;
648 return $this->mJsConfigVars;
652 return (array)$this->mOutputHooks;
656 return array_keys( $this->mWarnings );
660 return $this->mIndexPolicy;
664 return $this->mTOCHTML;
671 return $this->mTimestamp;
675 return $this->mLimitReportData;
679 return $this->mLimitReportJSData;
683 return $this->mEnableOOUI;
692 return $this->mExtraDefaultSrcs;
701 return $this->mExtraScriptSrcs;
710 return $this->mExtraStyleSrcs;
714 return wfSetVar( $this->mText, $text );
718 return wfSetVar( $this->mLanguageLinks, $ll );
722 return wfSetVar( $this->mCategories, $cl );
730 return wfSetVar( $this->mSections, $toc );
734 return wfSetVar( $this->mIndexPolicy, $policy );
738 return wfSetVar( $this->mTOCHTML, $tochtml );
742 return wfSetVar( $this->mTimestamp, $timestamp );
746 $this->mCategories[$c] = $sort;
766 $this->mEnableOOUI = $enable;
770 $this->mLanguageLinks[] =
$t;
774 $this->mWarnings[
$s] = 1;
778 $this->mOutputHooks[] = [ $hook, $data ];
782 $this->mNewSection = (bool)$value;
786 $this->mHideNewSection = (bool)$value;
790 return (
bool)$this->mHideNewSection;
794 return (
bool)$this->mNewSection;
805 return (
bool)preg_match(
'/^' .
806 # If server is proto relative, check also
for http/https links
807 ( substr( $internal, 0, 2 ) ===
'//' ?
'(?:https?:)?' :
'' ) .
808 preg_quote( $internal,
'/' ) .
809 # check
for query/path/anchor or end of link in each
case
816 # We don't register links pointing to our own server, unless... :-)
819 # Replace unnecessary URL escape codes with the referenced character
820 # This prevents spammers from hiding links from the filters
821 $url = Parser::normalizeLinkUrl( $url );
823 $registerExternalLink =
true;
825 $registerExternalLink = !self::isLinkInternal(
$wgServer, $url );
827 if ( $registerExternalLink ) {
828 $this->mExternalLinks[$url] = 1;
839 if (
$title->isExternal() ) {
844 $ns =
$title->getNamespace();
845 $dbk =
$title->getDBkey();
852 $this->mLinksSpecial[$dbk] = 1;
854 } elseif ( $dbk ===
'' ) {
858 if ( !isset( $this->mLinks[$ns] ) ) {
859 $this->mLinks[$ns] = [];
861 if ( $id ===
null ) {
862 $id =
$title->getArticleID();
864 $this->mLinks[$ns][$dbk] = $id;
873 public function addImage( $name, $timestamp =
null, $sha1 =
null ) {
874 $this->mImages[$name] = 1;
875 if ( $timestamp !==
null && $sha1 !==
null ) {
876 $this->mFileSearchOptions[$name] = [
'time' => $timestamp,
'sha1' => $sha1 ];
887 $ns =
$title->getNamespace();
888 $dbk =
$title->getDBkey();
889 if ( !isset( $this->mTemplates[$ns] ) ) {
890 $this->mTemplates[$ns] = [];
892 $this->mTemplates[$ns][$dbk] = $page_id;
893 if ( !isset( $this->mTemplateIds[$ns] ) ) {
894 $this->mTemplateIds[$ns] = [];
896 $this->mTemplateIds[$ns][$dbk] = $rev_id;
904 if ( !
$title->isExternal() ) {
905 throw new MWException(
'Non-interwiki link passed, internal parser error.' );
907 $prefix =
$title->getInterwiki();
908 if ( !isset( $this->mInterwikiLinks[$prefix] ) ) {
909 $this->mInterwikiLinks[$prefix] = [];
911 $this->mInterwikiLinks[$prefix][
$title->getDBkey()] = 1;
922 if ( $tag !==
false ) {
923 $this->mHeadItems[$tag] = $section;
925 $this->mHeadItems[] = $section;
934 $this->mModules = array_merge( $this->mModules, (array)
$modules );
942 $this->mModuleStyles = array_merge( $this->mModuleStyles, (array)
$modules );
953 if ( is_array(
$keys ) ) {
954 foreach (
$keys as $key => $value ) {
955 $this->mJsConfigVars[$key] = $value;
960 $this->mJsConfigVars[
$keys] = $value;
994 if (
$title->isSpecialPage() ) {
995 wfDebug( __METHOD__ .
": Not adding tracking category $msg to special page!" );
1002 ->inContentLanguage()
1005 # Allow tracking categories to be disabled by setting them to "-"
1006 if ( $cat ===
'-' ) {
1010 $containerCategory = Title::makeTitleSafe(
NS_CATEGORY, $cat );
1011 if ( $containerCategory ) {
1012 $this->
addCategory( $containerCategory->getDBkey(), $this->getProperty(
'defaultsort' ) ?:
'' );
1015 wfDebug( __METHOD__ .
": [[MediaWiki:$msg]] is not a valid title!" );
1058 $this->mFlags[$flag] =
true;
1066 return isset( $this->mFlags[$flag] );
1074 return array_keys( $this->mFlags );
1138 $this->mProperties[$name] = $value;
1150 return $this->mProperties[$name] ??
false;
1154 unset( $this->mProperties[$name] );
1158 if ( !isset( $this->mProperties ) ) {
1159 $this->mProperties = [];
1161 return $this->mProperties;
1170 if ( !isset( $this->mAccessedOptions ) ) {
1173 return array_keys( $this->mAccessedOptions );
1189 $this->mAccessedOptions[$option] =
true;
1233 if ( $value ===
null ) {
1234 unset( $this->mExtensionData[$key] );
1236 $this->mExtensionData[$key] = $value;
1252 return $this->mExtensionData[$key] ??
null;
1257 if ( !$clock || $clock ===
'wall' ) {
1258 $ret[
'wall'] = microtime(
true );
1260 if ( !$clock || $clock ===
'cpu' ) {
1261 $ru = getrusage( 0 );
1262 $ret[
'cpu'] = $ru[
'ru_utime.tv_sec'] + $ru[
'ru_utime.tv_usec'] / 1e6;
1263 $ret[
'cpu'] += $ru[
'ru_stime.tv_sec'] + $ru[
'ru_stime.tv_usec'] / 1e6;
1273 $this->mParseStartTime = self::getTimes();
1288 if ( !isset( $this->mParseStartTime[$clock] ) ) {
1292 $end = self::getTimes( $clock );
1293 return $end[$clock] - $this->mParseStartTime[$clock];
1316 $this->mLimitReportData[$key] = $value;
1318 if ( is_array( $value ) ) {
1319 if ( array_keys( $value ) === [ 0, 1 ]
1320 && is_numeric( $value[0] )
1321 && is_numeric( $value[1] )
1323 $data = [
'value' => $value[0],
'limit' => $value[1] ];
1331 if ( strpos( $key,
'-' ) ) {
1332 list( $ns, $name ) = explode(
'-', $key, 2 );
1333 $this->mLimitReportJSData[$ns][$name] = $data;
1335 $this->mLimitReportJSData[$key] = $data;
1363 return wfSetVar( $this->mPreventClickjacking, $flag );
1373 $this->mMaxAdaptiveExpiry = min( $ttl, $this->mMaxAdaptiveExpiry );
1387 $this->mExtraDefaultSrcs[] = $src;
1397 $this->mExtraStyleSrcs[] = $src;
1409 $this->mExtraScriptSrcs[] = $src;
1418 if ( is_infinite( $this->mMaxAdaptiveExpiry ) ) {
1423 if ( is_float( $runtime ) ) {
1424 $slope = ( self::SLOW_AR_TTL - self::FAST_AR_TTL )
1425 / ( self::PARSE_SLOW_SEC - self::PARSE_FAST_SEC );
1427 $point = self::SLOW_AR_TTL - self::PARSE_SLOW_SEC * $slope;
1430 max( $slope * $runtime + $point, self::MIN_AR_TTL ),
1431 $this->mMaxAdaptiveExpiry
1438 return array_filter( array_keys( get_object_vars( $this ) ),
1439 function ( $field ) {
1440 if ( $field ===
'mParseStartTime' ) {
1442 } elseif ( strpos( $field,
"\0" ) !==
false ) {
1461 $this->mOutputHooks = self::mergeList( $this->mOutputHooks,
$source->getOutputHooks() );
1462 $this->mWarnings = self::mergeMap( $this->mWarnings,
$source->mWarnings );
1463 $this->mTimestamp = $this->
useMaxValue( $this->mTimestamp,
$source->getTimestamp() );
1465 foreach ( self::SPECULATIVE_FIELDS as $field ) {
1466 if ( $this->$field &&
$source->$field && $this->$field !==
$source->$field ) {
1467 wfLogWarning( __METHOD__ .
": inconsistent '$field' properties!" );
1473 $this->mParseStartTime,
1477 $this->mFlags = self::mergeMap( $this->mFlags,
$source->mFlags );
1478 $this->mAccessedOptions = self::mergeMap( $this->mAccessedOptions,
$source->mAccessedOptions );
1481 if ( empty( $this->mLimitReportData ) ) {
1482 $this->mLimitReportData =
$source->mLimitReportData;
1484 if ( empty( $this->mLimitReportJSData ) ) {
1485 $this->mLimitReportJSData =
$source->mLimitReportJSData;
1498 $this->mHeadItems = self::mergeMixedList( $this->mHeadItems,
$source->getHeadItems() );
1499 $this->mModules = self::mergeList( $this->mModules,
$source->getModules() );
1500 $this->mModuleStyles = self::mergeList( $this->mModuleStyles,
$source->getModuleStyles() );
1501 $this->mJsConfigVars = self::mergeMap( $this->mJsConfigVars,
$source->getJsConfigVars() );
1502 $this->mMaxAdaptiveExpiry = min( $this->mMaxAdaptiveExpiry,
$source->mMaxAdaptiveExpiry );
1503 $this->mExtraStyleSrcs = self::mergeList(
1504 $this->mExtraStyleSrcs,
1505 $source->getExtraCSPStyleSrcs()
1507 $this->mExtraScriptSrcs = self::mergeList(
1508 $this->mExtraScriptSrcs,
1509 $source->getExtraCSPScriptSrcs()
1511 $this->mExtraDefaultSrcs = self::mergeList(
1512 $this->mExtraDefaultSrcs,
1513 $source->getExtraCSPDefaultSrcs()
1517 if ( $this->mIndexPolicy ===
'noindex' ||
$source->mIndexPolicy ===
'noindex' ) {
1518 $this->mIndexPolicy =
'noindex';
1519 } elseif ( $this->mIndexPolicy !==
'index' ) {
1520 $this->mIndexPolicy =
$source->mIndexPolicy;
1524 $this->mNewSection = $this->mNewSection ||
$source->getNewSection();
1525 $this->mHideNewSection = $this->mHideNewSection ||
$source->getHideNewSection();
1526 $this->mNoGallery = $this->mNoGallery ||
$source->getNoGallery();
1527 $this->mEnableOOUI = $this->mEnableOOUI ||
$source->getEnableOOUI();
1528 $this->mPreventClickjacking = $this->mPreventClickjacking ||
$source->preventClickjacking();
1531 $this->mSections = array_merge( $this->mSections,
$source->getSections() );
1532 $this->mTOCHTML .=
$source->mTOCHTML;
1536 if ( $this->mTitleText ===
null || $this->mTitleText ===
'' ) {
1537 $this->mTitleText =
$source->mTitleText;
1541 $this->mWrapperDivClasses = self::mergeMap(
1542 $this->mWrapperDivClasses,
1547 $this->mIndicators = self::mergeMap( $this->mIndicators,
$source->getIndicators() );
1552 $this->mExtensionData = self::mergeMap(
1553 $this->mExtensionData,
1566 $this->mLanguageLinks = self::mergeList( $this->mLanguageLinks,
$source->getLanguageLinks() );
1567 $this->mCategories = self::mergeMap( $this->mCategories,
$source->getCategories() );
1568 $this->mLinks = self::merge2D( $this->mLinks,
$source->getLinks() );
1569 $this->mTemplates = self::merge2D( $this->mTemplates,
$source->getTemplates() );
1570 $this->mTemplateIds = self::merge2D( $this->mTemplateIds,
$source->getTemplateIds() );
1571 $this->mImages = self::mergeMap( $this->mImages,
$source->getImages() );
1572 $this->mFileSearchOptions = self::mergeMap(
1573 $this->mFileSearchOptions,
1574 $source->getFileSearchOptions()
1576 $this->mExternalLinks = self::mergeMap( $this->mExternalLinks,
$source->getExternalLinks() );
1577 $this->mInterwikiLinks = self::merge2D(
1578 $this->mInterwikiLinks,
1584 $this->mProperties = self::mergeMap( $this->mProperties,
$source->getProperties() );
1589 $this->mExtensionData = self::mergeMap(
1590 $this->mExtensionData,
1596 return array_unique( array_merge( $a, $b ), SORT_REGULAR );
1600 return array_values( array_unique( array_merge( $a, $b ), SORT_REGULAR ) );
1603 private static function mergeMap( array $a, array $b ) {
1604 return array_replace( $a, $b );
1607 private static function merge2D( array $a, array $b ) {
1609 $keys = array_merge( array_keys( $a ), array_keys( $b ) );
1611 foreach (
$keys as $k ) {
1612 if ( empty( $a[$k] ) ) {
1613 $values[$k] = $b[$k];
1614 } elseif ( empty( $b[$k] ) ) {
1615 $values[$k] = $a[$k];
1616 } elseif ( is_array( $a[$k] ) && is_array( $b[$k] ) ) {
1617 $values[$k] = array_replace( $a[$k], $b[$k] );
1619 $values[$k] = $b[$k];
1628 $keys = array_merge( array_keys( $a ), array_keys( $b ) );
1630 foreach (
$keys as $k ) {
1631 if ( is_array( $a[$k] ??
null ) && is_array( $b[$k] ??
null ) ) {
1632 $values[$k] = self::useEachMinValue( $a[$k], $b[$k] );
1634 $values[$k] = self::useMinValue( $a[$k] ??
null, $b[$k] ??
null );
1642 if ( $a ===
null ) {
1646 if ( $b ===
null ) {
1650 return min( $a, $b );
1654 if ( $a ===
null ) {
1658 if ( $b ===
null ) {
1662 return max( $a, $b );
$wgRegisterInternalExternals
By default MediaWiki does not register links pointing to same server in externallinks dataset,...
$wgParserCacheExpireTime
The expiry time for the parser cache, in seconds.
$wgServer
URL of the server.
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
wfUrlencode( $s)
We want some things to be included as literal characters in our title URLs for prettiness,...
wfSetVar(&$dest, $source, $force=false)
Sets dest to source and returns the original value of dest If source is NULL, it just returns the val...
wfLogWarning( $msg, $callerOffset=1, $level=E_USER_WARNING)
Send a warning as a PHP error and the debug log.
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
Parser cache specific expiry check.
updateCacheExpiry( $seconds)
Sets the number of seconds after which this object should expire.
getCacheExpiry()
Returns the number of seconds after which this object should expire.
This is one of the Core classes and should be read at least once by any new developers.
getJsConfigVars()
Get the javascript config vars to include on this page.
getHeadItemsArray()
Get an array of head items.
getModules( $filter=false, $position=null, $param='mModules', $type=ResourceLoaderModule::TYPE_COMBINED)
Get the list of modules to include on this page.
getPreventClickjacking()
Get the prevent-clickjacking flag.
getModuleStyles( $filter=false, $position=null)
Get the list of style-only modules to load on this page.
static mergeMap(array $a, array $b)
addOutputPageMetadata(OutputPage $out)
Copy items from the OutputPage object into this one.
array $mModuleStyles
Modules of which only the CSSS will be loaded by ResourceLoader.
static getTimes( $clock=null)
array $mFlags
Generic flags.
bool $mPreventClickjacking
Whether to emit X-Frame-Options: DENY.
getSpeculativeRevIdUsed()
array $mTemplateIds
2-D map of NS/DBK to rev ID for the template references.
int null $mSpeculativeRevId
Assumed rev ID for {{REVISIONID}} if no revision is set.
addOutputHook( $hook, $data=false)
const SUPPORTS_UNWRAP_TRANSFORM
mergeHtmlMetaDataFrom(ParserOutput $source)
Merges HTML metadata such as head items, JS config vars, and HTTP cache control info from $source int...
static useEachMinValue(array $a, array $b)
setDisplayTitle( $text)
Override the title to be used for display.
addJsConfigVars( $keys, $value=null)
Add one or more variables to be set in mw.config in JavaScript.
setIndicator( $id, $content)
static useMaxValue( $a, $b)
addExtraCSPScriptSrc( $src)
Add an extra value to Content-Security-Policy script-src directive.
array $mJsConfigVars
JavaScript config variable for mw.config combined with this page.
bool $mHideNewSection
Hide the new section link?
array $mTemplates
2-D map of NS/DBK to ID for the template references.
setRevisionUsedSha1Base36( $hash)
static merge2D(array $a, array $b)
hasText()
Returns true if text was passed to the constructor, or set using setText().
string $mTOCHTML
HTML of the TOC.
static mergeList(array $a, array $b)
addInterwikiLink( $title)
setRevisionTimestampUsed( $timestamp)
array $mLimitReportData
Parser limit report data.
setEnableOOUI( $enable=false)
Enables OOUI, if true, in any OutputPage instance this ParserOutput object is added to.
$mWrapperDivClasses
string CSS classes to use for the wrapping div, stored in the array keys.
getDisplayTitle()
Get the title to be used for display.
addWrapperDivClass( $class)
Add a CSS class to use for the wrapping div.
int[][] $mLinks
2-D map of NS/DBK to ID for the links in the document.
addTrackingCategory( $msg, $title)
Add a tracking category, getting the title from a system message, or print a debug message if the tit...
finalizeAdaptiveCacheExpiry()
Call this when parsing is done to lower the TTL based on low parse times.
addTemplate( $title, $page_id, $rev_id)
Register a template dependency for this output.
bool $mNewSection
Show a new section link?
array $mImages
DB keys of the images used, in the array key only.
string $mTimestamp
Timestamp of the revision.
addLink(Title $title, $id=null)
Record a local or interwiki inline link for saving in future link tables.
resetParseStartTime()
Resets the parse start timestamps for future calls to getTimeSinceStart()
static mergeMixedList(array $a, array $b)
preventClickjacking( $flag=null)
Get or set the prevent-clickjacking flag.
bool $mEnableOOUI
Whether OOUI should be enabled.
mergeTrackingMetaDataFrom(ParserOutput $source)
Merges dependency tracking metadata such as backlinks, images used, and extension data from $source i...
setProperty( $name, $value)
Set a property to be stored in the page_props database table.
getRevisionTimestampUsed()
getExtraCSPStyleSrcs()
Get extra Content-Security-Policy 'style-src' directives.
recordOption( $option)
Tags a parser option for use in the cache key for this parser output.
addHeadItem( $section, $tag=false)
Add some text to the "<head>".
hasDynamicContent()
Check whether the cache TTL was lowered due to dynamic content.
array $mExternalLinks
External link URLs, in the key only.
getExtraCSPScriptSrcs()
Get extra Content-Security-Policy 'script-src' directives.
array $mInterwikiLinks
2-D map of prefix/DBK (in keys only) for the inline interwiki links in the document.
array $mIndicators
Page status indicators, usually displayed in top-right corner.
static useMinValue( $a, $b)
getExtensionData( $key)
Gets extensions data previously attached to this ParserOutput using setExtensionData().
array $mExtraScriptSrcs
Extra script-src for CSP.
clearWrapperDivClass()
Clears the CSS class to use for the wrapping div, effectively disabling the wrapper div until addWrap...
array $mExtraDefaultSrcs
Extra default-src for CSP [Everything but script and style].
getText( $options=[])
Get the output HTML.
array $mExtensionData
extra data used by extensions.
true[] $mAccessedOptions
List of ParserOptions (stored in the keys).
int null $revisionTimestampUsed
Assumed rev timestamp for {{REVISIONTIMESTAMP}} if no revision is set.
getExtraCSPDefaultSrcs()
Get extra Content-Security-Policy 'default-src' directives.
string $mTitleText
Title text of the chosen language variant, as HTML.
getRawText()
Get the cacheable text with <mw:editsection> markers still in it.
addImage( $name, $timestamp=null, $sha1=null)
Register a file dependency for this output.
updateRuntimeAdaptiveExpiry( $ttl)
Lower the runtime adaptive TTL to at most this value.
getRevisionUsedSha1Base36()
array $mOutputHooks
Hook tags as per $wgParserOutputHooks.
getSpeculativePageIdUsed()
getUsedOptions()
Returns the options from its ParserOptions which have been taken into account to produce this output.
const SUPPORTS_STATELESS_TRANSFORMS
Feature flags to indicate to extensions that MediaWiki core supports and uses getText() stateless tra...
array $mCategories
Map of category names to sort keys.
array $mSections
Table of contents.
array $mLinksSpecial
Keys are DBKs for the links to special pages in the document.
setLimitReportData( $key, $value)
Sets parser limit report data for a key.
bool $mNoGallery
No gallery on category page? (NOGALLERY).
int null $speculativePageIdUsed
Assumed page ID for {{PAGEID}} if no revision is set.
setExtensionData( $key, $value)
Attaches arbitrary data to this ParserObject.
setTimestamp( $timestamp)
array $mHeadItems
Items to put in the <head> section.
array $mLanguageLinks
List of the full text of language links, in the order they appear.
setSpeculativeRevIdUsed( $id)
__construct( $text='', $languageLinks=[], $categoryLinks=[], $unused=false, $titletext='')
array $mModules
Modules to be loaded by ResourceLoader.
setSpeculativePageIdUsed( $id)
static isLinkInternal( $internal, $url)
Checks, if a url is pointing to the own server.
addExtraCSPDefaultSrc( $src)
Add an extra value to Content-Security-Policy default-src directive.
array $mProperties
Name/value pairs to be cached in the DB.
array $mWarnings
Warning text to be returned to the user.
array $mLimitReportJSData
Parser limit report data for JSON.
mergeInternalMetaDataFrom(ParserOutput $source)
Merges internal metadata such as flags, accessed options, and profiling info from $source into this P...
addModuleStyles( $modules)
getTimeSinceStart( $clock)
Returns the time since resetParseStartTime() was last called.
addExtraCSPStyleSrc( $src)
Add an extra value to Content-Security-Policy style-src directive.
string $mIndexPolicy
'index' or 'noindex'? Any other value will result in no change.
getWrapperDivClass()
Returns the class (or classes) to be used with the wrapper div for this otuput.
setFlag( $flag)
Attach a flag to the output so that it can be checked later to handle special cases.
array $mFileSearchOptions
DB keys of the images used mapped to sha1 and MW timestamp.
array $mParseStartTime
Timestamps for getTimeSinceStart().
string null $revisionUsedSha1Base36
SHA-1 base 36 hash of any self-transclusion.
array $mExtraStyleSrcs
Extra style-src for CSP.
int $mMaxAdaptiveExpiry
Upper bound of expiry based on parse duration.
Represents a title within MediaWiki.