Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/73965


Change subject: Create MWResizeableNode mixin to control defaultSize flag
......................................................................

Create MWResizeableNode mixin to control defaultSize flag

Previously wasn't being updated to 'false' after a width/height
attribute change.

Bug: 50645
Change-Id: Id5dcd6998e0125757238426f8052505d131d712d
---
M VisualEditor.php
M modules/ve-mw/ce/nodes/ve.ce.MWBlockImageNode.js
M modules/ve-mw/ce/nodes/ve.ce.MWInlineImageNode.js
A modules/ve-mw/ce/ve.ce.MWResizeableNode.js
M modules/ve-mw/dm/nodes/ve.dm.MWInlineImageNode.js
M modules/ve-mw/test/index.php
M modules/ve/ce/ve.ce.ResizableNode.js
7 files changed, 78 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/65/73965/1

diff --git a/VisualEditor.php b/VisualEditor.php
index 679f77e..de25b36 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -413,6 +413,8 @@
                        've/ce/nodes/ve.ce.TableSectionNode.js',
                        've/ce/nodes/ve.ce.TextNode.js',
 
+                       've-mw/ce/ve.ce.MWResizeableNode.js',
+
                        've-mw/ce/nodes/ve.ce.MWEntityNode.js',
                        've-mw/ce/nodes/ve.ce.MWHeadingNode.js',
                        've-mw/ce/nodes/ve.ce.MWPreformattedNode.js',
diff --git a/modules/ve-mw/ce/nodes/ve.ce.MWBlockImageNode.js 
b/modules/ve-mw/ce/nodes/ve.ce.MWBlockImageNode.js
index 5811fa1..e52dfbc 100644
--- a/modules/ve-mw/ce/nodes/ve.ce.MWBlockImageNode.js
+++ b/modules/ve-mw/ce/nodes/ve.ce.MWBlockImageNode.js
@@ -11,6 +11,9 @@
  * @class
  * @extends ve.ce.BranchNode
  * @mixins ve.ce.ProtectedNode
+ * @mixins ve.ce.FocusableNode
+ * @mixins ve.ce.RelocatableNode
+ * @mixins ve.ce.MWResizableNode
  *
  * @constructor
  * @param {ve.dm.MWBlockImageNode} model Model to observe
@@ -26,7 +29,7 @@
        ve.ce.ProtectedNode.call( this );
        ve.ce.FocusableNode.call( this );
        ve.ce.RelocatableNode.call( this );
-       ve.ce.ResizableNode.call( this );
+       ve.ce.MWResizableNode.call( this );
 
        type = this.model.getAttribute( 'type' );
 
@@ -94,8 +97,11 @@
 
 ve.mixinClass( ve.ce.MWBlockImageNode, ve.ce.RelocatableNode );
 
+// Need to mixin base class as well
 ve.mixinClass( ve.ce.MWBlockImageNode, ve.ce.ResizableNode );
 
+ve.mixinClass( ve.ce.MWBlockImageNode, ve.ce.MWResizableNode );
+
 /* Static Properties */
 
 ve.ce.MWBlockImageNode.static.name = 'mwBlockImage';
diff --git a/modules/ve-mw/ce/nodes/ve.ce.MWInlineImageNode.js 
b/modules/ve-mw/ce/nodes/ve.ce.MWInlineImageNode.js
index f373163..56818a2 100644
--- a/modules/ve-mw/ce/nodes/ve.ce.MWInlineImageNode.js
+++ b/modules/ve-mw/ce/nodes/ve.ce.MWInlineImageNode.js
@@ -1,5 +1,5 @@
 /*!
- * VisualEditor ContentEditable MWEntityNode class.
+ * VisualEditor ContentEditable MWInlineImageNode class.
  *
  * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
  * @license The MIT License (MIT); see LICENSE.txt
@@ -10,6 +10,9 @@
  *
  * @class
  * @extends ve.ce.LeafNode
+ * @mixins ve.ce.ProtectedNode
+ * @mixins ve.ce.FocusableNode
+ * @mixins ve.ce.RelocatableNode
  *
  * @constructor
  * @param {ve.dm.MWInlineImageNode} model Model to observe
diff --git a/modules/ve-mw/ce/ve.ce.MWResizeableNode.js 
b/modules/ve-mw/ce/ve.ce.MWResizeableNode.js
new file mode 100644
index 0000000..8196a2a
--- /dev/null
+++ b/modules/ve-mw/ce/ve.ce.MWResizeableNode.js
@@ -0,0 +1,41 @@
+/*!
+ * VisualEditor ContentEditable MWResizableNode class.
+ *
+ * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * ContentEditable MediaWiki resizable node.
+ *
+ * @class
+ * @abstract
+ * @extends {ve.ce.Resizeablenode}
+ *
+ * @constructor
+ * @param {jQuery} [$resizable=this.$] Resizable DOM element
+ */
+ve.ce.MWResizableNode = function VeCeMwResizableNode( $resizable ) {
+       ve.ce.ResizableNode.call( this, $resizable );
+};
+
+/* Inheritance */
+
+ve.inheritClass( ve.ce.MWResizableNode, ve.ce.ResizableNode );
+
+/**
+ * Generate an object of attributes changes from the new width and height.
+ *
+ * If either property changes, clear the defaultSize flag.
+ *
+ * @param {number} width New image width
+ * @param {number} height New image height
+ * @returns {Object} Attribute changes
+ */
+ve.ce.MWResizableNode.prototype.getAttributeChanges = function ( width, height 
) {
+       var attrChanges = 
ve.ce.ResizableNode.prototype.getAttributeChanges.call( this, width, height );
+       if ( !ve.isEmptyObject( attrChanges ) ) {
+               attrChanges.defaultSize = false;
+       }
+       return attrChanges;
+};
\ No newline at end of file
diff --git a/modules/ve-mw/dm/nodes/ve.dm.MWInlineImageNode.js 
b/modules/ve-mw/dm/nodes/ve.dm.MWInlineImageNode.js
index 923f52e..43c23f9 100644
--- a/modules/ve-mw/dm/nodes/ve.dm.MWInlineImageNode.js
+++ b/modules/ve-mw/dm/nodes/ve.dm.MWInlineImageNode.js
@@ -1,5 +1,5 @@
 /*!
- * VisualEditor DataModel MWEntityNode class.
+ * VisualEditor DataModel MWInlineImage class.
  *
  * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
  * @license The MIT License (MIT); see LICENSE.txt
diff --git a/modules/ve-mw/test/index.php b/modules/ve-mw/test/index.php
index c30f562..58ecb49 100644
--- a/modules/ve-mw/test/index.php
+++ b/modules/ve-mw/test/index.php
@@ -180,6 +180,7 @@
                <script src="../../ve/ce/nodes/ve.ce.TableRowNode.js"></script>
                <script 
src="../../ve/ce/nodes/ve.ce.TableSectionNode.js"></script>
                <script src="../../ve/ce/nodes/ve.ce.TextNode.js"></script>
+               <script src="../../ve-mw/ce/ve.ce.MWResizeableNode.js"></script>
                <script 
src="../../ve-mw/ce/nodes/ve.ce.MWEntityNode.js"></script>
                <script 
src="../../ve-mw/ce/nodes/ve.ce.MWHeadingNode.js"></script>
                <script 
src="../../ve-mw/ce/nodes/ve.ce.MWPreformattedNode.js"></script>
diff --git a/modules/ve/ce/ve.ce.ResizableNode.js 
b/modules/ve/ce/ve.ce.ResizableNode.js
index aa8e8fb..62cea43 100644
--- a/modules/ve/ce/ve.ce.ResizableNode.js
+++ b/modules/ve/ce/ve.ce.ResizableNode.js
@@ -258,25 +258,20 @@
  * @method
  */
 ve.ce.ResizableNode.prototype.onDocumentMouseUp = function () {
-       var offset = this.model.getOffset(),
+       var attrChanges,
+               offset = this.model.getOffset(),
                width = this.$resizeHandles.outerWidth(),
                height = this.$resizeHandles.outerHeight(),
                surfaceModel = this.getRoot().getSurface().getModel(),
                documentModel = surfaceModel.getDocument(),
-               selection = surfaceModel.getSelection(),
-               attrChanges = {};
+               selection = surfaceModel.getSelection();
 
        this.$resizeHandles.removeClass( 've-ui-resizableNode-handles-resizing' 
);
        $( this.getElementDocument() ).off( '.ve-ce-resizableNode' );
        this.resizing = false;
 
        // Apply changes to the model
-       if ( this.model.getAttribute( 'width' ) !== width ) {
-               attrChanges.width = width;
-       }
-       if ( this.model.getAttribute( 'height' ) !== height ) {
-               attrChanges.height = height;
-       }
+       attrChanges = this.getAttributeChanges( width, height );
        if ( !ve.isEmptyObject( attrChanges ) ) {
                surfaceModel.change(
                        ve.dm.Transaction.newFromAttributeChanges( 
documentModel, offset, attrChanges ),
@@ -286,3 +281,21 @@
 
        this.emit( 'resize' );
 };
+
+/**
+ * Generate an object of attributes changes from the new width and height.
+ *
+ * @param {number} width New image width
+ * @param {number} height New image height
+ * @returns {Object} Attribute changes
+ */
+ve.ce.ResizableNode.prototype.getAttributeChanges = function ( width, height ) 
{
+       var attrChanges = {};
+       if ( this.model.getAttribute( 'width' ) !== width ) {
+               attrChanges.width = width;
+       }
+       if ( this.model.getAttribute( 'height' ) !== height ) {
+               attrChanges.height = height;
+       }
+       return attrChanges;
+};
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id5dcd6998e0125757238426f8052505d131d712d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to