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

Reply via email to