jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/342279 )
Change subject: Support new wikitext editor for edit helper ...................................................................... Support new wikitext editor for edit helper Register a hook for when VE is finished initializing to select the error section, just like the textbox-based editor. Use the BeforePageDisplay hook so it runs on VE page loads too. Bug: T160102 Change-Id: I59a7e0a3e8be32e4689cbf41c4904970902c4dff --- M .jshintrc M extension.json M includes/Hooks.php M modules/ext.linter.edit.js 4 files changed, 40 insertions(+), 11 deletions(-) Approvals: jenkins-bot: Verified Jforrester: Looks good to me, approved diff --git a/.jshintrc b/.jshintrc index 66e3d48..fa96cd8 100644 --- a/.jshintrc +++ b/.jshintrc @@ -19,6 +19,7 @@ "globals": { "mediaWiki": false, + "ve": false, "OO": false } } diff --git a/extension.json b/extension.json index 8931304..533253f 100644 --- a/extension.json +++ b/extension.json @@ -26,7 +26,7 @@ }, "Hooks": { "LoadExtensionSchemaUpdates": "MediaWiki\\Linter\\Hooks::onLoadExtensionSchemaUpdates", - "EditFormInitialText": "MediaWiki\\Linter\\Hooks::onEditFormInitialText", + "BeforePageDisplay": "MediaWiki\\Linter\\Hooks::onBeforePageDisplay", "APIQuerySiteInfoGeneralInfo": "MediaWiki\\Linter\\Hooks::onAPIQuerySiteInfoGeneralInfo", "InfoAction": "MediaWiki\\Linter\\Hooks::onInfoAction", "WikiPageDeletionUpdates": "MediaWiki\\Linter\\Hooks::onWikiPageDeletionUpdates" diff --git a/includes/Hooks.php b/includes/Hooks.php index 5626e1e..6498eeb 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -23,9 +23,9 @@ use ApiQuerySiteInfo; use Content; use DatabaseUpdater; -use EditPage; use IContextSource; use MWCallableUpdate; +use OutputPage; use WikiPage; class Hooks { @@ -38,21 +38,23 @@ } /** - * Hook: EditFormInitialText + * Hook: BeforePageDisplay * * If there is a lintid parameter, look up that error in the database * and setup and output our client-side helpers * - * @param EditPage $editPage + * @param OutputPage &$out */ - public static function onEditFormInitialText( EditPage $editPage ) { - $context = $editPage->getContext(); - $request = $context->getRequest(); + public static function onBeforePageDisplay( OutputPage &$out ) { + $request = $out->getRequest(); $lintId = $request->getInt( 'lintid' ); if ( !$lintId ) { return; } - $title = $editPage->getTitle(); + $title = $out->getTitle(); + if ( !$title ) { + return; + } $lintError = ( new Database( $title->getArticleID() ) )->getFromId( $lintId ); if ( !$lintError ) { @@ -60,7 +62,6 @@ return; } - $out = $context->getOutput(); $out->addJsConfigVars( [ 'wgLinterErrorCategory' => $lintError->category, 'wgLinterErrorLocation' => $lintError->location, diff --git a/modules/ext.linter.edit.js b/modules/ext.linter.edit.js index 5162219..fa13f98 100644 --- a/modules/ext.linter.edit.js +++ b/modules/ext.linter.edit.js @@ -1,8 +1,35 @@ ( function ( mw, $ ) { $( function () { - var location = mw.config.get( 'wgLinterErrorLocation' ); + var location = mw.config.get( 'wgLinterErrorLocation' ), + $textbox = $( '#wpTextbox1' ); + + /** + * Convert the normal offset for one that is usable + * by VE's DOM that changes newlines into <p> + * + * @param {ve.ui.Surface} surface + * @param {int} offset + * @return {int} + */ + function fixOffset( surface, offset ) { + return ( surface.getDom().slice( 0, offset ).match( /\n/g ) || [] ).length + 1 + offset; + } + if ( location ) { - $( '#wpTextbox1' ).focus().textSelection( 'setSelection', { start: location[ 0 ], end: location[ 1 ] } ); + if ( $textbox.length ) { + $textbox.focus().textSelection( 'setSelection', { start: location[ 0 ], end: location[ 1 ] } ); + } + // Register NWE code should it be loaded + // TODO: We should somehow force source mode if VE is opened + mw.hook( 've.activationComplete' ).add( function () { + var range, + surface = ve.init.target.getSurface(); + + if ( surface.getMode() === 'source' ) { + range = new ve.Range( fixOffset( surface, location[ 0 ] ), fixOffset( surface, location[ 1 ] ) ); + surface.getModel().setLinearSelection( range ); + } + } ); } } ); }( mediaWiki, jQuery ) ); -- To view, visit https://gerrit.wikimedia.org/r/342279 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I59a7e0a3e8be32e4689cbf41c4904970902c4dff Gerrit-PatchSet: 4 Gerrit-Project: mediawiki/extensions/Linter Gerrit-Branch: master Gerrit-Owner: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: Esanders <esand...@wikimedia.org> Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org> Gerrit-Reviewer: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: Schnark <listenle...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits