jenkins-bot has submitted this change and it was merged.

Change subject: Update VE core submodule to master (ae30d71)
......................................................................


Update VE core submodule to master (ae30d71)

New changes:
f58ddea DiffElement: Use document slices with full internal lists
83800c0 DebugBar: Remove hard-coded i18n
b4f89e1 Update OOjs UI to v0.18.1
40c7bf6 Factor out active node functionality from SectionNode for captions
2d967be Move 'mode' property to surface, rename target property to 'defaultMode'
5d8c214 wrapAllNodes in sourcefragment
dd3d9e5 Refactor ve.dm.Transaction
9d61aca Use canonical ve.dm.TransactionBuilder.static.newFrom* methods
df4f72a Make table caption node an active node
b79f72d Core source mode
7533ac4 Localisation updates from https://translatewiki.net.
ae30d71 SourceSurfaceFragment: Check range is not collapsed

Local changes:
Get edit mode from surface where possible

Depends-On: Iec758c1892d518ad4bc2c0d1aaf6ca00fa354323
Change-Id: Ifaf6a26078b2731b374aaad2cb40c08928de9c84
---
M .jsduck/categories.json
M .jsduck/eg-iframe.html
M extension.json
M lib/ve
M modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
M modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
M modules/ve-mw/init/ve.init.mw.ArticleTarget.js
M modules/ve-mw/init/ve.init.mw.Target.js
M modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
M modules/ve-mw/ui/tools/ve.ui.MWMetaDialogTool.js
10 files changed, 63 insertions(+), 42 deletions(-)

Approvals:
  Jforrester: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/.jsduck/categories.json b/.jsduck/categories.json
index 3f7204d..ab7c5e4 100644
--- a/.jsduck/categories.json
+++ b/.jsduck/categories.json
@@ -114,6 +114,7 @@
                                        "ve.dm.*SurfaceFragment",
                                        "ve.dm.*Selection",
                                        "ve.dm.Transaction",
+                                       "ve.dm.TransactionBuilder",
                                        "ve.dm.Change",
                                        "ve.dm.TransactionProcessor",
                                        "ve.dm.TransactionProcessor.*",
diff --git a/.jsduck/eg-iframe.html b/.jsduck/eg-iframe.html
index 495c611..1ec68dd 100644
--- a/.jsduck/eg-iframe.html
+++ b/.jsduck/eg-iframe.html
@@ -13,6 +13,7 @@
 
                <!-- visualEditor.core.build -->
                <link rel=stylesheet 
href="lib/ve/src/ce/styles/nodes/ve.ce.FocusableNode.css" class="stylesheet-ve">
+               <link rel=stylesheet 
href="lib/ve/src/ce/styles/nodes/ve.ce.ActiveNode.css" class="stylesheet-ve">
                <link rel=stylesheet 
href="lib/ve/src/ce/styles/nodes/ve.ce.AlienNode.css" class="stylesheet-ve">
                <link rel=stylesheet 
href="lib/ve/src/ce/styles/nodes/ve.ce.BranchNode.css" class="stylesheet-ve">
                <link rel=stylesheet 
href="lib/ve/src/ce/styles/nodes/ve.ce.ContentBranchNode.css" 
class="stylesheet-ve">
@@ -196,6 +197,7 @@
                <script src="lib/ve/src/dm/ve.dm.TableMatrix.js"></script>
                <script 
src="lib/ve/src/dm/ve.dm.TransactionProcessor.js"></script>
                <script src="lib/ve/src/dm/ve.dm.Transaction.js"></script>
+               <script 
src="lib/ve/src/dm/ve.dm.TransactionBuilder.js"></script>
                <script src="lib/ve/src/dm/ve.dm.Selection.js"></script>
                <script src="lib/ve/src/dm/ve.dm.Surface.js"></script>
                <script src="lib/ve/src/dm/ve.dm.SurfaceFragment.js"></script>
@@ -306,6 +308,7 @@
                <script 
src="lib/ve/src/ce/keydownhandlers/ve.ce.TableEnterKeyDownHandler.js"></script>
                <script 
src="lib/ve/src/ce/keydownhandlers/ve.ce.LinearTabKeyDownHandler.js"></script>
                <script 
src="lib/ve/src/ce/nodes/ve.ce.GeneratedContentNode.js"></script>
+               <script src="lib/ve/src/ce/nodes/ve.ce.ActiveNode.js"></script>
                <script src="lib/ve/src/ce/nodes/ve.ce.AlienNode.js"></script>
                <script src="lib/ve/src/ce/nodes/ve.ce.ArticleNode.js"></script>
                <script 
src="lib/ve/src/ce/nodes/ve.ce.BlockquoteNode.js"></script>
diff --git a/extension.json b/extension.json
index 987cf43..2350b93 100644
--- a/extension.json
+++ b/extension.json
@@ -590,6 +590,7 @@
                                "lib/ve/src/dm/ve.dm.TableMatrix.js",
                                "lib/ve/src/dm/ve.dm.TransactionProcessor.js",
                                "lib/ve/src/dm/ve.dm.Transaction.js",
+                               "lib/ve/src/dm/ve.dm.TransactionBuilder.js",
                                "lib/ve/src/dm/ve.dm.Selection.js",
                                "lib/ve/src/dm/ve.dm.Surface.js",
                                "lib/ve/src/dm/ve.dm.SurfaceFragment.js",
@@ -699,6 +700,7 @@
                                
"lib/ve/src/ce/keydownhandlers/ve.ce.TableEnterKeyDownHandler.js",
                                
"lib/ve/src/ce/keydownhandlers/ve.ce.LinearTabKeyDownHandler.js",
                                
"lib/ve/src/ce/nodes/ve.ce.GeneratedContentNode.js",
+                               "lib/ve/src/ce/nodes/ve.ce.ActiveNode.js",
                                "lib/ve/src/ce/nodes/ve.ce.AlienNode.js",
                                "lib/ve/src/ce/nodes/ve.ce.ArticleNode.js",
                                "lib/ve/src/ce/nodes/ve.ce.BlockquoteNode.js",
@@ -855,6 +857,7 @@
                        ],
                        "styles": [
                                
"lib/ve/src/ce/styles/nodes/ve.ce.FocusableNode.css",
+                               
"lib/ve/src/ce/styles/nodes/ve.ce.ActiveNode.css",
                                
"lib/ve/src/ce/styles/nodes/ve.ce.AlienNode.css",
                                
"lib/ve/src/ce/styles/nodes/ve.ce.BranchNode.css",
                                
"lib/ve/src/ce/styles/nodes/ve.ce.ContentBranchNode.css",
@@ -950,6 +953,13 @@
                                "visualeditor-content-select-all",
                                "visualeditor-contextitemwidget-label-remove",
                                
"visualeditor-contextitemwidget-label-secondary",
+                               "visualeditor-debugbar-close",
+                               "visualeditor-debugbar-inputdebug",
+                               "visualeditor-debugbar-logrange",
+                               "visualeditor-debugbar-showmodel",
+                               "visualeditor-debugbar-startfilibuster",
+                               "visualeditor-debugbar-stopfilibuster",
+                               "visualeditor-debugbar-updatemodel",
                                "visualeditor-dialog-action-apply",
                                "visualeditor-dialog-action-cancel",
                                "visualeditor-dialog-action-done",
diff --git a/lib/ve b/lib/ve
index 9625e8f..ae30d71 160000
--- a/lib/ve
+++ b/lib/ve
@@ -1 +1 @@
-Subproject commit 9625e8fdc3726e187e7ed9b9927a1e478de31902
+Subproject commit ae30d7101756379805ab99d24bbc1a62b660c69e
diff --git a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js 
b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
index 64a1ccf..7ba7b2a 100644
--- a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
+++ b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
@@ -275,7 +275,7 @@
                                // and altered, re-attach immediately after
                                init.$loading.detach();
                                // If target was already loaded, ensure the 
mode is correct
-                               target.setMode( mode );
+                               target.setDefaultMode( mode );
                                activatePromise = target.activate( dataPromise 
);
                                $( '#content' ).prepend( init.$loading );
                                return activatePromise;
@@ -577,7 +577,7 @@
                        }
                        if ( active ) {
                                targetPromise.done( function ( target ) {
-                                       if ( mode === 'visual' && target.mode 
=== 'source' ) {
+                                       if ( mode === 'visual' && 
target.getDefaultMode() === 'source' ) {
                                                target.switchToVisualEditor();
                                        }
                                } );
diff --git a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js 
b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
index 29c9e80..8a4420a 100644
--- a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
+++ b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.js
@@ -270,7 +270,7 @@
                } );
        }
 
-       if ( this.mode === 'source' ) {
+       if ( surface.getMode() === 'source' ) {
                // HACK: Replace source button with VE button. This should be 
via the registry,
                // or we should have a toggle tool.
                actionGroups = ve.copy( this.constructor.static.actionGroups );
@@ -1022,7 +1022,7 @@
                                return;
                        }
 
-                       if ( target.getSurface() && !target.deactivating && 
target.mode !== 'source' ) {
+                       if ( target.getSurface() && !target.deactivating && 
target.getDefaultMode() !== 'source' ) {
                                target.editSource();
 
                                if ( 
target.getSurface().getModel().hasBeenModified() || target.fromEditedState ) {
@@ -1159,7 +1159,7 @@
  */
 ve.init.mw.DesktopArticleTarget.prototype.updateHistoryState = function () {
        var uri,
-               veaction = this.mode === 'visual' ? 'edit' : 'editsource';
+               veaction = this.getDefaultMode() === 'visual' ? 'edit' : 
'editsource';
 
        // Push veaction=edit(source) url in history (if not already. If we got 
here by a veaction=edit(source)
        // permalink then it will be there already and the constructor called 
#activate)
@@ -1263,10 +1263,10 @@
        veaction = this.currentUri.query.veaction;
 
        if ( ve.init.target.isModeAvailable( 'source' ) && this.active ) {
-               if ( veaction === 'editsource' && this.mode === 'visual' ) {
+               if ( veaction === 'editsource' && this.getDefaultMode() === 
'visual' ) {
                        this.actFromPopState = true;
                        this.switchToWikitextEditor();
-               } else if ( veaction === 'edit' && this.mode === 'source' ) {
+               } else if ( veaction === 'edit' && this.getDefaultMode() === 
'source' ) {
                        this.actFromPopState = true;
                        this.switchToVisualEditor();
                }
@@ -1528,7 +1528,7 @@
                                return response;
                        } );
                }
-               this.setMode( 'source' );
+               this.setDefaultMode( 'source' );
                this.reloadSurface( dataPromise );
        } else {
                oldid = this.currentUri.query.oldid || $( 
'input[name=parentRevId]' ).val();
@@ -1586,7 +1586,7 @@
                        .then( function ( data ) {
                                if ( data && data.action === 'discard' ) {
                                        target.section = null;
-                                       target.setMode( 'visual' );
+                                       target.setDefaultMode( 'visual' );
                                        target.reloadSurface();
                                }
                                windowManager.destroy();
@@ -1600,7 +1600,7 @@
                        this.getDocToSave()
                );
 
-               this.setMode( 'visual' );
+               this.setDefaultMode( 'visual' );
                this.reloadSurface( dataPromise );
        }
 };
@@ -1615,7 +1615,7 @@
        // Create progress - will be discarded when surface is destroyed.
        this.getSurface().createProgress(
                $.Deferred().promise(),
-               ve.msg( this.mode === 'source' ? 
'visualeditor-mweditmodesource-progress' : 'visualeditor-mweditmodeve-progress' 
),
+               ve.msg( this.getSurface().getMode() === 'source' ? 
'visualeditor-mweditmodesource-progress' : 'visualeditor-mweditmodeve-progress' 
),
                true /* non-cancellable */
        );
        this.activating = true;
diff --git a/modules/ve-mw/init/ve.init.mw.ArticleTarget.js 
b/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
index ebae4e7..bffbe4f 100644
--- a/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
+++ b/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
@@ -194,16 +194,16 @@
 /**
  * @inheritdoc
  */
-ve.init.mw.ArticleTarget.prototype.setMode = function () {
-       var oldMode = this.mode;
+ve.init.mw.ArticleTarget.prototype.setDefaultMode = function () {
+       var oldDefaultMode = this.defaultMode;
        // Parent method
-       ve.init.mw.ArticleTarget.super.prototype.setMode.apply( this, arguments 
);
+       ve.init.mw.ArticleTarget.super.prototype.setDefaultMode.apply( this, 
arguments );
 
-       if ( this.mode !== oldMode ) {
+       if ( this.defaultMode !== oldDefaultMode ) {
                this.updateTabs( true );
                if ( mw.libs.ve.setEditorPreference ) {
                        // only set up by DAT.init
-                       mw.libs.ve.setEditorPreference( this.mode === 'visual' 
? 'visualeditor' : 'wikitext' );
+                       mw.libs.ve.setEditorPreference( this.defaultMode === 
'visual' ? 'visualeditor' : 'wikitext' );
                }
        }
 };
@@ -223,8 +223,8 @@
 
        if ( editing ) {
                if ( $( '#ca-ve-edit' ).length ) {
-                       selectVe = this.mode === 'visual';
-                       selectEdit = this.mode === 'source';
+                       selectVe = this.getDefaultMode() === 'visual';
+                       selectEdit = this.getDefaultMode() === 'source';
                } else {
                        // Single edit tab
                        selectEdit = true;
@@ -259,7 +259,7 @@
                this.etag = data.etag;
                this.fromEditedState = data.fromEditedState;
                this.switched = data.switched || 'wteswitched' in new mw.Uri( 
location.href ).query;
-               this.doc = this.parseDocument( this.originalHtml );
+               this.doc = this.parseDocument( this.originalHtml, 
this.getDefaultMode() );
 
                this.remoteNotices = ve.getObjectValues( data.notices );
                this.protectedClasses = data.protectedClasses;
@@ -1087,7 +1087,7 @@
        mw.libs.ve.activationStart = null;
 
        this.loading = dataPromise || mw.libs.ve.targetLoader.requestPageData(
-               this.mode,
+               this.getDefaultMode(),
                this.pageName,
                this.section,
                this.requestedRevId,
@@ -1151,14 +1151,17 @@
 /**
  * Create a document to save
  *
+ * TODO: Move this code to the surface?
+ *
  * @return {Object} Document to save
  */
 ve.init.mw.ArticleTarget.prototype.createDocToSave = function () {
-       var i, l, text, data;
+       var i, l, text, data,
+               surface = this.getSurface();
 
-       if ( this.mode === 'source' ) {
+       if ( surface.getMode() === 'source' ) {
                text = '';
-               data = this.getSurface().getModel().getDocument().data.data;
+               data = surface.getModel().getDocument().data.data;
                for ( i = 0, l = data.length; i < l; i++ ) {
                        if ( data[ i ].type === '/paragraph' && data[ i + 1 
].type === 'paragraph' ) {
                                text += '\n';
@@ -1169,7 +1172,7 @@
 
                return text;
        }
-       return this.getSurface().getDom();
+       return surface.getDom();
 };
 
 /**
@@ -1199,7 +1202,7 @@
                start = ve.now(),
                target = this;
 
-       if ( this.mode === 'source' ) {
+       if ( this.getSurface().getMode() === 'source' ) {
                return;
        }
 
@@ -1303,7 +1306,7 @@
        var data, postData, preparedCacheKey,
                target = this;
 
-       if ( this.mode === 'source' ) {
+       if ( this.getSurface().getMode() === 'source' ) {
                data = {
                        wikitext: doc,
                        format: 'json'
@@ -1831,10 +1834,11 @@
  * @method
  */
 ve.init.mw.ArticleTarget.prototype.restoreEditSection = function () {
-       var surfaceView, $documentNode, $section, headingNode;
+       var surface = this.getSurface(),
+               surfaceView, $documentNode, $section, headingNode;
 
-       if ( this.mode === 'visual' && this.section !== null && this.section > 
0 ) {
-               surfaceView = this.getSurface().getView();
+       if ( surface.getMode() === 'visual' && this.section !== null && 
this.section > 0 ) {
+               surfaceView = surface.getView();
                $documentNode = 
surfaceView.getDocument().getDocumentNode().$element;
                $section = $documentNode.find( 'h1, h2, h3, h4, h5, h6' ).eq( 
this.section - 1 );
                headingNode = $section.data( 'view' );
@@ -1946,7 +1950,7 @@
                                this.welcomeDialog,
                                {
                                        switchable: 
this.constructor.static.trackingName !== 'mobile',
-                                       editor: this.mode
+                                       editor: this.getDefaultMode()
                                }
                        )
                                .then( function ( opened ) {
diff --git a/modules/ve-mw/init/ve.init.mw.Target.js 
b/modules/ve-mw/init/ve.init.mw.Target.js
index 149e54f..499dde8 100644
--- a/modules/ve-mw/init/ve.init.mw.Target.js
+++ b/modules/ve-mw/init/ve.init.mw.Target.js
@@ -157,11 +157,13 @@
  * Parse document string into an HTML document
  *
  * @param {string} documentString Document
+ * @param {string} mode Editing mode
  * @return {HTMLDocument} HTML document
  */
-ve.init.mw.Target.prototype.parseDocument = function ( documentString ) {
+ve.init.mw.Target.prototype.parseDocument = function ( documentString, mode ) {
        var doc;
-       if ( this.mode === 'source' ) {
+       if ( mode === 'source' ) {
+               // Parse as plain text in source mode
                doc = ve.createDocumentFromHtml( '' );
 
                documentString.split( '\n' ).forEach( function ( line ) {
@@ -256,7 +258,7 @@
  * @inheritdoc
  */
 ve.init.mw.Target.prototype.createTargetWidget = function ( config ) {
-       if ( this.mode === 'source' ) {
+       if ( this.getSurface().getMode() === 'source' ) {
                // Reset to visual mode for target widgets
                return new ve.ui.MWTargetWidget( ve.extendObject( {
                        commandRegistry: ve.ui.commandRegistry,
@@ -274,17 +276,17 @@
 ve.init.mw.Target.prototype.createSurface = function ( dmDoc, config ) {
        var importRules, surface, surfaceView, $documentNode;
 
-       if ( this.mode === 'source' && !( config && config.inTargetWidget ) ) {
+       if ( config && config.mode === 'source' ) {
                importRules = ve.copy( this.constructor.static.importRules );
                importRules.all = importRules.all || {};
                // Preserve empty linebreaks on paste in source editor
                importRules.all.keepEmptyContentBranches = true;
-               config = this.getSurfaceConfig( {
+               config = this.getSurfaceConfig( ve.extendObject( {}, config, {
                        commandRegistry: ve.ui.wikitextCommandRegistry,
                        sequenceRegistry: ve.ui.wikitextSequenceRegistry,
                        dataTransferHandlerFactory: 
ve.ui.wikitextDataTransferHandlerFactory,
                        importRules: importRules
-               } );
+               } ) );
                return new ve.ui.MWDesktopWikitextSurface( dmDoc, config );
        }
 
@@ -308,13 +310,14 @@
  * Create a document model from an HTML document.
  *
  * @param {HTMLDocument} doc HTML document
+ * @param {string} mode Editing mode
  * @return {ve.dm.Document} Document model
  */
-ve.init.mw.Target.prototype.createModelFromDom = function ( doc ) {
+ve.init.mw.Target.prototype.createModelFromDom = function ( doc, mode ) {
        var i, l, children, data,
                conf = mw.config.get( 'wgVisualEditor' );
 
-       if ( this.mode === 'source' ) {
+       if ( mode === 'source' ) {
                children = doc.body.children;
                data = [];
 
@@ -348,7 +351,7 @@
                var dmDoc;
 
                target.track( 'trace.convertModelFromDom.enter' );
-               dmDoc = target.createModelFromDom( doc );
+               dmDoc = target.createModelFromDom( doc, target.getDefaultMode() 
);
                target.track( 'trace.convertModelFromDom.exit' );
 
                // Build DM tree now (otherwise it gets lazily built when 
building the CE tree)
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
index 4147338..676dfa4 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
@@ -261,7 +261,7 @@
 
        // Only show preview in source mode
        this.actions.forEach( { actions: 'preview' }, function ( action ) {
-               action.toggle( ve.init.target.mode === 'source' );
+               action.toggle( ve.init.target.getSurface().mode === 'source' );
        } );
 
        mw.hook( 've.saveDialog.stateChanged' ).fire();
diff --git a/modules/ve-mw/ui/tools/ve.ui.MWMetaDialogTool.js 
b/modules/ve-mw/ui/tools/ve.ui.MWMetaDialogTool.js
index 1597ec7..f1cf7e3 100644
--- a/modules/ve-mw/ui/tools/ve.ui.MWMetaDialogTool.js
+++ b/modules/ve-mw/ui/tools/ve.ui.MWMetaDialogTool.js
@@ -22,7 +22,7 @@
        ve.ui.MWVeOnlyDialogTool.super.prototype.onUpdateState.apply( this, 
arguments );
 
        // Meta tools are not supported in source mode (yet?)
-       this.setDisabled( ve.init.target.mode === 'source' );
+       this.setDisabled( !this.toolbar.getSurface() || 
this.toolbar.getSurface().getMode() === 'source' );
 };
 
 /**

-- 
To view, visit https://gerrit.wikimedia.org/r/324423
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifaf6a26078b2731b374aaad2cb40c08928de9c84
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>
Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org>
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