[MediaWiki-commits] [Gerrit] Create base MWExtensionNode for simple extension support - change (mediawiki...VisualEditor)
jenkins-bot has submitted this change and it was merged. Change subject: Create base MWExtensionNode for simple extension support .. Create base MWExtensionNode for simple extension support MWMath and other simple extensions all behave in a similar way, e.g. tagnameForeign syntax/tagname. This creates a base class that should make supporting such extensions, and editing their contents in a plain text box, very simple. Change-Id: Icc0acb33fe32704f71dacb552d9dfa3142eaef2b --- M VisualEditor.php A modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js M modules/ve-mw/ce/nodes/ve.ce.MWMathNode.js A modules/ve-mw/dm/nodes/ve.dm.MWExtensionNode.js M modules/ve-mw/dm/nodes/ve.dm.MWMathNode.js A modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js M modules/ve-mw/ui/inspectors/ve.ui.MWMathInspector.js 7 files changed, 335 insertions(+), 233 deletions(-) Approvals: Catrope: Looks good to me, approved jenkins-bot: Verified diff --git a/VisualEditor.php b/VisualEditor.php index c222525..822b4fc 100644 --- a/VisualEditor.php +++ b/VisualEditor.php @@ -711,8 +711,11 @@ 'ext.visualEditor.experimental' = $wgVisualEditorResourceTemplate + array( 'scripts' = array( + 've-mw/dm/nodes/ve.dm.MWExtensionNode.js', + 've-mw/ce/nodes/ve.ce.MWExtensionNode.js', 've-mw/dm/nodes/ve.dm.MWMathNode.js', 've-mw/ce/nodes/ve.ce.MWMathNode.js', + 've-mw/ui/inspectors/ve.ui.MWExtensionInspector.js', 've-mw/ui/inspectors/ve.ui.MWMathInspector.js', 've-mw/ui/tools/buttons/ve.ui.MWMathButtonTool.js', 've/dm/annotations/ve.dm.LanguageAnnotation.js', diff --git a/modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js b/modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js new file mode 100644 index 000..b0d17fa --- /dev/null +++ b/modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js @@ -0,0 +1,97 @@ +/*! + * VisualEditor ContentEditable MWExtensionNode class. + * + * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt + * @license The MIT License (MIT); see LICENSE.txt + */ + +/*global mw */ + +/** + * ContentEditable MediaWiki extension node. + * + * @class + * @abstract + * @extends ve.ce.LeafNode + * @mixins ve.ce.FocusableNode + * @mixins ve.ce.ProtectedNode + * @mixins ve.ce.GeneratedContentNode + * + * @constructor + * @param {ve.dm.MWExtensionNode} model Model to observe + * @param {Object} [config] Config options + */ +ve.ce.MWExtensionNode = function VeCeMWExtensionNode( model, config ) { + // Parent constructor + ve.ce.LeafNode.call( this, model, config ); + + // Mixin constructors + ve.ce.FocusableNode.call( this ); + ve.ce.ProtectedNode.call( this ); + ve.ce.GeneratedContentNode.call( this ); + + // Events + this.model.connect( this, { 'update': 'onUpdate' } ); + this.$.on( 'click', ve.bind( this.onClick, this ) ); + + // DOM Changes + this.$.addClass( 've-ce-mwExtensionNode' ); +}; + +/* Inheritance */ + +ve.inheritClass( ve.ce.MWExtensionNode, ve.ce.LeafNode ); + +ve.mixinClass( ve.ce.MWExtensionNode, ve.ce.FocusableNode ); +ve.mixinClass( ve.ce.MWExtensionNode, ve.ce.ProtectedNode ); +ve.mixinClass( ve.ce.MWExtensionNode, ve.ce.GeneratedContentNode ); + +/* Methods */ + +/** */ +ve.ce.MWExtensionNode.prototype.generateContents = function () { + var deferred = $.Deferred(); + $.ajax( { + 'url': mw.util.wikiScript( 'api' ), + 'data': { + 'action': 'visualeditor', + 'paction': 'parsefragment', + 'page': mw.config.get( 'wgRelevantPageName' ), + 'wikitext': + '' + this.getModel().constructor.static.extensionName + '' + + this.getModel().getAttribute( 'mw' ).body.extsrc + + '/' + this.getModel().constructor.static.extensionName + '', + 'token': mw.user.tokens.get( 'editToken' ), + 'format': 'json' + }, + 'dataType': 'json', + 'type': 'POST', + // Wait up to 100 seconds before giving up + 'timeout': 10, + 'cache': 'false', + 'success': ve.bind( this.onParseSuccess, this, deferred ), + 'error': ve.bind( this.onParseError, this, deferred ) + } ); + return deferred.promise(); +}; + +/** + * Handle a successful response from the parser for the wikitext fragment. + * + * @param {jQuery.Deferred} deferred The Deferred object created by generateContents + * @param {Object} response Response data + */ +ve.ce.MWExtensionNode.prototype.onParseSuccess = function ( deferred, response ) { + var
[MediaWiki-commits] [Gerrit] Create base MWExtensionNode for simple extension support - change (mediawiki...VisualEditor)
Esanders has uploaded a new change for review. https://gerrit.wikimedia.org/r/77507 Change subject: Create base MWExtensionNode for simple extension support .. Create base MWExtensionNode for simple extension support MWMath and other simple extensions all behave in a similar way, e.g. tagnameForeign syntax/tagname. This creates a base class that should make supporting such extensions, and editing their contents in a plain text box, very simple. Change-Id: Icc0acb33fe32704f71dacb552d9dfa3142eaef2b --- M VisualEditor.php A modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js M modules/ve-mw/ce/nodes/ve.ce.MWMathNode.js A modules/ve-mw/dm/nodes/ve.dm.MWExtensionNode.js M modules/ve-mw/dm/nodes/ve.dm.MWMathNode.js A modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js M modules/ve-mw/ui/inspectors/ve.ui.MWMathInspector.js 7 files changed, 361 insertions(+), 231 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor refs/changes/07/77507/1 diff --git a/VisualEditor.php b/VisualEditor.php index ba067d3..9a32d10 100644 --- a/VisualEditor.php +++ b/VisualEditor.php @@ -709,8 +709,11 @@ 'ext.visualEditor.experimental' = $wgVisualEditorResourceTemplate + array( 'scripts' = array( + 've-mw/dm/nodes/ve.dm.MWExtensionNode.js', + 've-mw/ce/nodes/ve.ce.MWExtensionNode.js', 've-mw/dm/nodes/ve.dm.MWMathNode.js', 've-mw/ce/nodes/ve.ce.MWMathNode.js', + 've-mw/ui/inspectors/ve.ui.MWExtensionInspector.js', 've-mw/ui/inspectors/ve.ui.MWMathInspector.js', 've-mw/ui/tools/buttons/ve.ui.MWMathButtonTool.js', 've/dm/annotations/ve.dm.LanguageAnnotation.js', diff --git a/modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js b/modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js new file mode 100644 index 000..b1cbe71 --- /dev/null +++ b/modules/ve-mw/ce/nodes/ve.ce.MWExtensionNode.js @@ -0,0 +1,125 @@ +/*! + * VisualEditor ContentEditable MWExtensionNode class. + * + * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt + * @license The MIT License (MIT); see LICENSE.txt + */ + +/*global mw */ + +/** + * ContentEditable MediaWiki extension node. + * + * @class + * @abstract + * @extends ve.ce.LeafNode + * @mixins ve.ce.FocusableNode + * @mixins ve.ce.ProtectedNode + * @mixins ve.ce.GeneratedContentNode + * + * @constructor + * @param {ve.dm.MWExtensionNode} model Model to observe + * @param {Object} [config] Config options + */ +ve.ce.MWExtensionNode = function VeCeMWExtensionNode( model, config ) { + // Parent constructor + ve.ce.LeafNode.call( this, model, config ); + + // Mixin constructors + ve.ce.FocusableNode.call( this ); + ve.ce.ProtectedNode.call( this ); + ve.ce.GeneratedContentNode.call( this ); + + // Events + this.model.connect( this, { 'update': 'onUpdate' } ); + this.$.on( 'click', ve.bind( this.onClick, this ) ); + + // DOM Changes + this.$.addClass( 've-ce-mwExtensionNode' ); +}; + +/* Inheritance */ + +ve.inheritClass( ve.ce.MWExtensionNode, ve.ce.LeafNode ); + +ve.mixinClass( ve.ce.MWExtensionNode, ve.ce.FocusableNode ); +ve.mixinClass( ve.ce.MWExtensionNode, ve.ce.ProtectedNode ); +ve.mixinClass( ve.ce.MWExtensionNode, ve.ce.GeneratedContentNode ); + +/* Static Properties */ + +ve.ce.MWExtensionNode.static.name = 'mwExtension'; + +/* Methods */ + +/** */ +ve.ce.MWExtensionNode.prototype.generateContents = function () { + var deferred = $.Deferred(); + $.ajax( { + 'url': mw.util.wikiScript( 'api' ), + 'data': { + 'action': 'visualeditor', + 'paction': 'parsefragment', + 'page': mw.config.get( 'wgRelevantPageName' ), + 'wikitext': + '' + this.constructor.static.extensionTagWrapper + '' + + this.getModel().getAttribute( 'mw' ).body.extsrc + + '/' + this.constructor.static.extensionTagWrapper + '', + 'token': mw.user.tokens.get( 'editToken' ), + 'format': 'json' + }, + 'dataType': 'json', + 'type': 'POST', + // Wait up to 100 seconds before giving up + 'timeout': 10, + 'cache': 'false', + 'success': ve.bind( this.onParseSuccess, this, deferred ), + 'error': ve.bind( this.onParseError, this, deferred ) + } ); + return deferred.promise(); +}; + +/** + * Handle a successful response from the parser for the wikitext fragment. + * + * @param {jQuery.Deferred} deferred The Deferred object created by generateContents + * @param