From b4e264076e4118c157254762128490212fc08071 Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Tue, 30 Aug 2016 14:36:47 +0200 Subject: [PATCH] Revert "EditPage: Use context instead of globals (3/4)" This reverts commit 27fd11095213eaf2b3b5d2e21a93b6ee03c3b004. Change-Id: I23480a49d69fbede292a1d41f1c5e783b6366852 --- includes/EditPage.php | 206 +++++++++++++++++++++--------------------- 1 file changed, 101 insertions(+), 105 deletions(-) diff --git a/includes/EditPage.php b/includes/EditPage.php index 1a75c02cce..a01f25b8ef 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -2161,12 +2161,13 @@ class EditPage { * Register the change of watch status */ protected function updateWatchlist() { - $user = $this->context->getUser(); + global $wgUser; - if ( !$user->isLoggedIn() ) { + if ( !$wgUser->isLoggedIn() ) { return; } + $user = $wgUser; $title = $this->mTitle; $watch = $this->watchthis; // Do this in its own transaction to reduce contention... @@ -2281,32 +2282,29 @@ class EditPage { } function setHeaders() { - global $wgAjaxEditStash; - - $out = $this->context->getOutput(); - $user = $this->context->getUser(); + global $wgOut, $wgUser, $wgAjaxEditStash; - $out->addModules( 'mediawiki.action.edit' ); - $out->addModuleStyles( 'mediawiki.action.edit.styles' ); + $wgOut->addModules( 'mediawiki.action.edit' ); + $wgOut->addModuleStyles( 'mediawiki.action.edit.styles' ); - if ( $user->getOption( 'showtoolbar' ) ) { + if ( $wgUser->getOption( 'showtoolbar' ) ) { // The addition of default buttons is handled by getEditToolbar() which // has its own dependency on this module. The call here ensures the module // is loaded in time (it has position "top") for other modules to register // buttons (e.g. extensions, gadgets, user scripts). - $out->addModules( 'mediawiki.toolbar' ); + $wgOut->addModules( 'mediawiki.toolbar' ); } - if ( $user->getOption( 'uselivepreview' ) ) { - $out->addModules( 'mediawiki.action.edit.preview' ); + if ( $wgUser->getOption( 'uselivepreview' ) ) { + $wgOut->addModules( 'mediawiki.action.edit.preview' ); } - if ( $user->getOption( 'useeditwarning' ) ) { - $out->addModules( 'mediawiki.action.edit.editWarning' ); + if ( $wgUser->getOption( 'useeditwarning' ) ) { + $wgOut->addModules( 'mediawiki.action.edit.editWarning' ); } # Enabled article-related sidebar, toplinks, etc. - $out->setArticleRelated( true ); + $wgOut->setArticleRelated( true ); $contextTitle = $this->getContextTitle(); if ( $this->isConflict ) { @@ -2329,10 +2327,10 @@ class EditPage { if ( $displayTitle === false ) { $displayTitle = $contextTitle->getPrefixedText(); } - $out->setPageTitle( wfMessage( $msg, $displayTitle ) ); + $wgOut->setPageTitle( wfMessage( $msg, $displayTitle ) ); # Transmit the name of the message to JavaScript for live preview # Keep Resources.php/mediawiki.action.edit.preview in sync with the possible keys - $out->addJsConfigVars( [ + $wgOut->addJsConfigVars( [ 'wgEditMessage' => $msg, 'wgAjaxEditStash' => $wgAjaxEditStash, ] ); @@ -2342,16 +2340,16 @@ class EditPage { * Show all applicable editing introductions */ protected function showIntro() { + global $wgOut, $wgUser; if ( $this->suppressIntro ) { return; } - $out = $this->context->getOutput(); $namespace = $this->mTitle->getNamespace(); if ( $namespace == NS_MEDIAWIKI ) { # Show a warning if editing an interface message - $out->wrapWikiMsg( "
\n$1\n
", 'editinginterface' ); + $wgOut->wrapWikiMsg( "
\n$1\n
", 'editinginterface' ); # If this is a default message (but not css or js), # show a hint that it is translatable on translatewiki.net if ( !$this->mTitle->hasContentModel( CONTENT_MODEL_CSS ) @@ -2359,7 +2357,7 @@ class EditPage { ) { $defaultMessageText = $this->mTitle->getDefaultMessageText(); if ( $defaultMessageText !== false ) { - $out->wrapWikiMsg( "
\n$1\n
", + $wgOut->wrapWikiMsg( "
\n$1\n
", 'translateinterface' ); } } @@ -2371,11 +2369,11 @@ class EditPage { # there must be a description url to show a hint to shared repo if ( $descUrl ) { if ( !$this->mTitle->exists() ) { - $out->wrapWikiMsg( "
\n$1\n
", [ + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'sharedupload-desc-create', $file->getRepo()->getDisplayName(), $descUrl ] ); } else { - $out->wrapWikiMsg( "
\n$1\n
", [ + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'sharedupload-desc-edit', $file->getRepo()->getDisplayName(), $descUrl ] ); } @@ -2391,12 +2389,12 @@ class EditPage { $ip = User::isIP( $username ); $block = Block::newFromTarget( $user, $user ); if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist - $out->wrapWikiMsg( "
\n$1\n
", + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ] ); } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked LogEventsList::showLogExtract( - $out, + $wgOut, 'block', MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget(), '', @@ -2416,8 +2414,8 @@ class EditPage { $helpLink = wfExpandUrl( Skin::makeInternalOrExternalUrl( wfMessage( 'helppage' )->inContentLanguage()->text() ) ); - if ( $this->context->getUser()->isLoggedIn() ) { - $out->wrapWikiMsg( + if ( $wgUser->isLoggedIn() ) { + $wgOut->wrapWikiMsg( // Suppress the external link icon, consider the help url an internal one "
\n$1\n
", [ @@ -2426,7 +2424,7 @@ class EditPage { ] ); } else { - $out->wrapWikiMsg( + $wgOut->wrapWikiMsg( // Suppress the external link icon, consider the help url an internal one "
\n$1\n
", [ @@ -2438,7 +2436,7 @@ class EditPage { } # Give a notice if the user is editing a deleted/moved page... if ( !$this->mTitle->exists() ) { - LogEventsList::showLogExtract( $out, [ 'delete', 'move' ], $this->mTitle, + LogEventsList::showLogExtract( $wgOut, [ 'delete', 'move' ], $this->mTitle, '', [ 'lim' => 10, @@ -2459,8 +2457,9 @@ class EditPage { if ( $this->editintro ) { $title = Title::newFromText( $this->editintro ); if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) { + global $wgOut; // Added using template syntax, to take 's into account. - $this->context->getOutput()->addWikiTextTitleTidy( + $wgOut->addWikiTextTitleTidy( '
{{:' . $title->getFullText() . '}}
', $this->mTitle ); @@ -2542,6 +2541,8 @@ class EditPage { * use the EditPage::showEditForm:fields hook instead. */ function showEditForm( $formCallback = null ) { + global $wgOut, $wgUser; + # need to parse the preview early so that we know which templates are used, # otherwise users with "show preview after edit box" will get a blank list # we parse this near the beginning so that setHeaders can do the title @@ -2551,8 +2552,7 @@ class EditPage { $previewOutput = $this->getPreviewText(); } - $out = $this->context->getOutput(); - Hooks::run( 'EditPage::showEditForm:initial', [ &$this, &$out ] ); + Hooks::run( 'EditPage::showEditForm:initial', [ &$this, &$wgOut ] ); $this->setHeaders(); @@ -2560,14 +2560,13 @@ class EditPage { return; } - $out->addHTML( $this->editFormPageTop ); + $wgOut->addHTML( $this->editFormPageTop ); - $user = $this->context->getUser(); - if ( $user->getOption( 'previewontop' ) ) { + if ( $wgUser->getOption( 'previewontop' ) ) { $this->displayPreviewArea( $previewOutput, true ); } - $out->addHTML( $this->editFormTextTop ); + $wgOut->addHTML( $this->editFormTextTop ); $showToolbar = true; if ( $this->wasDeletedSinceLastEdit() ) { @@ -2576,14 +2575,14 @@ class EditPage { // Add an confirmation checkbox and explanation. $showToolbar = false; } else { - $out->wrapWikiMsg( "
\n$1\n
", + $wgOut->wrapWikiMsg( "
\n$1\n
", 'deletedwhileediting' ); } } // @todo add EditForm plugin interface and use it here! // search for textarea1 and textares2, and allow EditForm to override all uses. - $out->addHTML( Html::openElement( + $wgOut->addHTML( Html::openElement( 'form', [ 'id' => self::EDITFORM_ID, @@ -2596,11 +2595,11 @@ class EditPage { if ( is_callable( $formCallback ) ) { wfWarn( 'The $formCallback parameter to ' . __METHOD__ . 'is deprecated' ); - call_user_func_array( $formCallback, [ &$out ] ); + call_user_func_array( $formCallback, [ &$wgOut ] ); } // Add an empty field to trip up spambots - $out->addHTML( + $wgOut->addHTML( Xml::openElement( 'div', [ 'id' => 'antispam-container', 'style' => 'display: none;' ] ) . Html::rawElement( 'label', @@ -2619,7 +2618,7 @@ class EditPage { . Xml::closeElement( 'div' ) ); - Hooks::run( 'EditPage::showEditForm:fields', [ &$this, &$out ] ); + Hooks::run( 'EditPage::showEditForm:fields', [ &$this, &$wgOut ] ); // Put these up at the top to ensure they aren't lost on early form submission $this->showFormBeforeText(); @@ -2633,7 +2632,7 @@ class EditPage { $key = $comment === '' ? 'confirmrecreate-noreason' : 'confirmrecreate'; - $out->addHTML( + $wgOut->addHTML( '
' . wfMessage( $key, $username, "$comment" )->parse() . Xml::checkLabel( wfMessage( 'recreate' )->text(), 'wpRecreate', 'wpRecreate', false, @@ -2645,7 +2644,7 @@ class EditPage { # When the summary is hidden, also hide them on preview/show changes if ( $this->nosummary ) { - $out->addHTML( Html::hidden( 'nosummary', true ) ); + $wgOut->addHTML( Html::hidden( 'nosummary', true ) ); } # If a blank edit summary was previously provided, and the appropriate @@ -2656,15 +2655,15 @@ class EditPage { # For a bit more sophisticated detection of blank summaries, hash the # automatic one and pass that in the hidden field wpAutoSummary. if ( $this->missingSummary || ( $this->section == 'new' && $this->nosummary ) ) { - $out->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) ); + $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) ); } if ( $this->undidRev ) { - $out->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) ); + $wgOut->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) ); } if ( $this->selfRedirect ) { - $out->addHTML( Html::hidden( 'wpIgnoreSelfRedirect', true ) ); + $wgOut->addHTML( Html::hidden( 'wpIgnoreSelfRedirect', true ) ); } if ( $this->hasPresetSummary ) { @@ -2675,27 +2674,27 @@ class EditPage { } $autosumm = $this->autoSumm ? $this->autoSumm : md5( $this->summary ); - $out->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) ); + $wgOut->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) ); - $out->addHTML( Html::hidden( 'oldid', $this->oldid ) ); - $out->addHTML( Html::hidden( 'parentRevId', $this->getParentRevId() ) ); + $wgOut->addHTML( Html::hidden( 'oldid', $this->oldid ) ); + $wgOut->addHTML( Html::hidden( 'parentRevId', $this->getParentRevId() ) ); - $out->addHTML( Html::hidden( 'format', $this->contentFormat ) ); - $out->addHTML( Html::hidden( 'model', $this->contentModel ) ); + $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) ); + $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) ); if ( $this->section == 'new' ) { $this->showSummaryInput( true, $this->summary ); - $out->addHTML( $this->getSummaryPreview( true, $this->summary ) ); + $wgOut->addHTML( $this->getSummaryPreview( true, $this->summary ) ); } - $out->addHTML( $this->editFormTextBeforeContent ); + $wgOut->addHTML( $this->editFormTextBeforeContent ); - if ( !$this->isCssJsSubpage && $showToolbar && $user->getOption( 'showtoolbar' ) ) { - $out->addHTML( EditPage::getEditToolbar( $this->mTitle ) ); + if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) { + $wgOut->addHTML( EditPage::getEditToolbar( $this->mTitle ) ); } if ( $this->blankArticle ) { - $out->addHTML( Html::hidden( 'wpIgnoreBlankArticle', true ) ); + $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankArticle', true ) ); } if ( $this->isConflict ) { @@ -2713,7 +2712,7 @@ class EditPage { $this->showContentForm(); } - $out->addHTML( $this->editFormTextAfterContent ); + $wgOut->addHTML( $this->editFormTextAfterContent ); $this->showStandardInputs(); @@ -2723,19 +2722,19 @@ class EditPage { $this->showEditTools(); - $out->addHTML( $this->editFormTextAfterTools . "\n" ); + $wgOut->addHTML( $this->editFormTextAfterTools . "\n" ); - $out->addHTML( Html::rawElement( 'div', [ 'class' => 'templatesUsed' ], + $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'templatesUsed' ], Linker::formatTemplates( $this->getTemplates(), $this->preview, $this->section != '' ) ) ); - $out->addHTML( Html::rawElement( 'div', [ 'class' => 'hiddencats' ], + $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'hiddencats' ], Linker::formatHiddenCategories( $this->page->getHiddenCategories() ) ) ); if ( $this->mParserOutput ) { - $out->setLimitReportData( $this->mParserOutput->getLimitReportData() ); + $wgOut->setLimitReportData( $this->mParserOutput->getLimitReportData() ); } - $out->addModules( 'mediawiki.action.edit.collapsibleFooter' ); + $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' ); if ( $this->isConflict ) { try { @@ -2748,7 +2747,7 @@ class EditPage { $this->contentFormat, $ex->getMessage() ); - $out->addWikiText( '
' . $msg->text() . '
' ); + $wgOut->addWikiText( '
' . $msg->text() . '
' ); } } @@ -2762,14 +2761,14 @@ class EditPage { } else { $mode = 'text'; } - $out->addHTML( Html::hidden( 'mode', $mode, [ 'id' => 'mw-edit-mode' ] ) ); + $wgOut->addHTML( Html::hidden( 'mode', $mode, [ 'id' => 'mw-edit-mode' ] ) ); // Marker for detecting truncated form data. This must be the last // parameter sent in order to be of use, so do not move me. - $out->addHTML( Html::hidden( 'wpUltimateParam', true ) ); - $out->addHTML( $this->editFormTextBottom . "\n\n" ); + $wgOut->addHTML( Html::hidden( 'wpUltimateParam', true ) ); + $wgOut->addHTML( $this->editFormTextBottom . "\n\n" ); - if ( !$user->getOption( 'previewontop' ) ) { + if ( !$wgUser->getOption( 'previewontop' ) ) { $this->displayPreviewArea( $previewOutput, false ); } @@ -2795,23 +2794,21 @@ class EditPage { * @return bool */ protected function showHeader() { - global $wgMaxArticleSize, $wgAllowUserCss, $wgAllowUserJs; - - $out = $this->context->getOutput(); - $user = $this->context->getUser(); + global $wgOut, $wgUser, $wgMaxArticleSize, $wgLang; + global $wgAllowUserCss, $wgAllowUserJs; if ( $this->mTitle->isTalkPage() ) { - $out->addWikiMsg( 'talkpagetext' ); + $wgOut->addWikiMsg( 'talkpagetext' ); } // Add edit notices $editNotices = $this->mTitle->getEditNotices( $this->oldid ); if ( count( $editNotices ) ) { - $out->addHTML( implode( "\n", $editNotices ) ); + $wgOut->addHTML( implode( "\n", $editNotices ) ); } else { $msg = wfMessage( 'editnotice-notext' ); if ( !$msg->isDisabled() ) { - $out->addHTML( + $wgOut->addHTML( '
' . $msg->parseAsBlock() . '
' @@ -2820,14 +2817,14 @@ class EditPage { } if ( $this->isConflict ) { - $out->wrapWikiMsg( "
\n$1\n
", 'explainconflict' ); + $wgOut->wrapWikiMsg( "
\n$1\n
", 'explainconflict' ); $this->editRevId = $this->page->getLatest(); } else { if ( $this->section != '' && !$this->isSectionEditSupported() ) { // We use $this->section to much before this and getVal('wgSection') directly in other places // at this point we can't reset $this->section to '' to fallback to non-section editing. // Someone is welcome to try refactoring though - $out->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' ); + $wgOut->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' ); return false; } @@ -2841,31 +2838,31 @@ class EditPage { } if ( $this->missingComment ) { - $out->wrapWikiMsg( "
\n$1\n
", 'missingcommenttext' ); + $wgOut->wrapWikiMsg( "
\n$1\n
", 'missingcommenttext' ); } if ( $this->missingSummary && $this->section != 'new' ) { - $out->wrapWikiMsg( "
\n$1\n
", 'missingsummary' ); + $wgOut->wrapWikiMsg( "
\n$1\n
", 'missingsummary' ); } if ( $this->missingSummary && $this->section == 'new' ) { - $out->wrapWikiMsg( "
\n$1\n
", 'missingcommentheader' ); + $wgOut->wrapWikiMsg( "
\n$1\n
", 'missingcommentheader' ); } if ( $this->blankArticle ) { - $out->wrapWikiMsg( "
\n$1\n
", 'blankarticle' ); + $wgOut->wrapWikiMsg( "
\n$1\n
", 'blankarticle' ); } if ( $this->selfRedirect ) { - $out->wrapWikiMsg( "
\n$1\n
", 'selfredirect' ); + $wgOut->wrapWikiMsg( "
\n$1\n
", 'selfredirect' ); } if ( $this->hookError !== '' ) { - $out->addWikiText( $this->hookError ); + $wgOut->addWikiText( $this->hookError ); } if ( !$this->checkUnicodeCompliantBrowser() ) { - $out->addWikiMsg( 'nonunicodebrowser' ); + $wgOut->addWikiMsg( 'nonunicodebrowser' ); } if ( $this->section != 'new' ) { @@ -2873,13 +2870,13 @@ class EditPage { if ( $revision ) { // Let sysop know that this will make private content public if saved - if ( !$revision->userCan( Revision::DELETED_TEXT, $user ) ) { - $out->wrapWikiMsg( + if ( !$revision->userCan( Revision::DELETED_TEXT, $wgUser ) ) { + $wgOut->wrapWikiMsg( "\n", 'rev-deleted-text-permission' ); } elseif ( $revision->isDeleted( Revision::DELETED_TEXT ) ) { - $out->wrapWikiMsg( + $wgOut->wrapWikiMsg( "\n", 'rev-deleted-text-view' ); @@ -2887,25 +2884,25 @@ class EditPage { if ( !$revision->isCurrent() ) { $this->mArticle->setOldSubtitle( $revision->getId() ); - $out->addWikiMsg( 'editingold' ); + $wgOut->addWikiMsg( 'editingold' ); } } elseif ( $this->mTitle->exists() ) { // Something went wrong - $out->wrapWikiMsg( "
\n$1\n
\n", + $wgOut->wrapWikiMsg( "
\n$1\n
\n", [ 'missing-revision', $this->oldid ] ); } } } if ( wfReadOnly() ) { - $out->wrapWikiMsg( + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'readonlywarning', wfReadOnlyReason() ] ); - } elseif ( $user->isAnon() ) { + } elseif ( $wgUser->isAnon() ) { if ( $this->formtype != 'preview' ) { - $out->wrapWikiMsg( + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'anoneditwarning', // Log-in link @@ -2919,7 +2916,7 @@ class EditPage { ] ); } else { - $out->wrapWikiMsg( "
\n$1
", + $wgOut->wrapWikiMsg( "
\n$1
", 'anonpreviewwarning' ); } @@ -2927,25 +2924,25 @@ class EditPage { if ( $this->isCssJsSubpage ) { # Check the skin exists if ( $this->isWrongCaseCssJsPage ) { - $out->wrapWikiMsg( + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() ] ); } - if ( $this->getTitle()->isSubpageOf( $user->getUserPage() ) ) { - $out->wrapWikiMsg( '
$1
', + if ( $this->getTitle()->isSubpageOf( $wgUser->getUserPage() ) ) { + $wgOut->wrapWikiMsg( '
$1
', $this->isCssSubpage ? 'usercssispublic' : 'userjsispublic' ); if ( $this->formtype !== 'preview' ) { if ( $this->isCssSubpage && $wgAllowUserCss ) { - $out->wrapWikiMsg( + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'usercssyoucanpreview' ] ); } if ( $this->isJsSubpage && $wgAllowUserJs ) { - $out->wrapWikiMsg( + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'userjsyoucanpreview' ] ); @@ -2965,7 +2962,7 @@ class EditPage { # Then it must be protected based on static groups (regular) $noticeMsg = 'protectedpagewarning'; } - LogEventsList::showLogExtract( $out, 'protect', $this->mTitle, '', + LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '', [ 'lim' => 1, 'msgKey' => [ $noticeMsg ] ] ); } if ( $this->mTitle->isCascadeProtected() ) { @@ -2981,10 +2978,10 @@ class EditPage { } } $notice .= '
'; - $out->wrapWikiMsg( $notice, [ 'cascadeprotectedwarning', $cascadeSourcesCount ] ); + $wgOut->wrapWikiMsg( $notice, [ 'cascadeprotectedwarning', $cascadeSourcesCount ] ); } if ( !$this->mTitle->exists() && $this->mTitle->getRestrictions( 'create' ) ) { - LogEventsList::showLogExtract( $out, 'protect', $this->mTitle, '', + LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '', [ 'lim' => 1, 'showIfEmpty' => false, 'msgKey' => [ 'titleprotectedwarning' ], @@ -2995,21 +2992,20 @@ class EditPage { $this->contentLength = strlen( $this->textbox1 ); } - $lang = $this->context->getLanguage(); if ( $this->tooBig || $this->contentLength > $wgMaxArticleSize * 1024 ) { - $out->wrapWikiMsg( "
\n$1\n
", + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'longpageerror', - $lang->formatNum( round( $this->contentLength / 1024, 3 ) ), - $lang->formatNum( $wgMaxArticleSize ) + $wgLang->formatNum( round( $this->contentLength / 1024, 3 ) ), + $wgLang->formatNum( $wgMaxArticleSize ) ] ); } else { if ( !wfMessage( 'longpage-hint' )->isDisabled() ) { - $out->wrapWikiMsg( "
\n$1\n
", + $wgOut->wrapWikiMsg( "
\n$1\n
", [ 'longpage-hint', - $lang->formatSize( strlen( $this->textbox1 ) ), + $wgLang->formatSize( strlen( $this->textbox1 ) ), strlen( $this->textbox1 ) ] ); -- 2.20.1