[MediaWiki-commits] [Gerrit] Create base MWExtensionNode for simple extension support - change (mediawiki...VisualEditor)

2013-08-07 Thread jenkins-bot (Code Review)
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)

2013-08-03 Thread Esanders (Code Review)
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