http://www.mediawiki.org/wiki/Special:Code/MediaWiki/100741

Revision: 100741
Author:   tparscal
Date:     2011-10-25 20:42:15 +0000 (Tue, 25 Oct 2011)
Log Message:
-----------
Fixed logic for set/clear and invert and use of name instead of key in 
attribute processing and added tests for attribute changes.

Modified Paths:
--------------
    trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js
    trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js

Modified: trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js   2011-10-25 
20:37:20 UTC (rev 100740)
+++ trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js   2011-10-25 
20:42:15 UTC (rev 100741)
@@ -93,15 +93,15 @@
                if ( element.type === undefined ) {
                        throw 'Invalid element error. Can not set attributes on 
non-element data.';
                }
-               if ( op.method === 'set' || ( op.method === 'clear' && invert ) 
) {
+               if ( ( op.method === 'set' && !invert ) || ( op.method === 
'clear' && invert ) ) {
                        // Automatically initialize attributes object
                        if ( !element.attributes ) {
                                element.attributes = {};
                        }
-                       element.attributes[op.name] = op.value;
-               } else if ( op.method === 'clear' || ( op.method === 'set' && 
invert ) ) {
+                       element.attributes[op.key] = op.value;
+               } else if ( ( op.method === 'clear' && !invert ) || ( op.method 
=== 'set' && invert ) ) {
                        if ( element.attributes ) {
-                               delete element.attributes[op.name];
+                               delete element.attributes[op.key];
                        }
                        // Automatically clean up attributes object
                        var empty = true;

Modified: trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js
===================================================================
--- trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js   2011-10-25 
20:37:20 UTC (rev 100740)
+++ trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js   2011-10-25 
20:42:15 UTC (rev 100741)
@@ -502,11 +502,43 @@
 test( 'es.DocumentModel.commit, es.DocumentModel.rollback', 6, function() {
        var documentModel = es.DocumentModel.newFromPlainObject( obj );
 
+       var elementAttributeChange = 
documentModel.prepareElementAttributeChange(
+               0, 'set', 'test', 1
+       );
+
+       // Test 1
+       documentModel.commit( elementAttributeChange );
+       deepEqual(
+               documentModel.getData( new es.Range( 0, 5 ) ),
+               [
+                       { 'type': 'paragraph', 'attributes': { 'test': 1 } },
+                       'a',
+                       ['b', { 'type': 'bold', 'hash': '#bold' }],
+                       ['c', { 'type': 'italic', 'hash': '#italic' }],
+                       { 'type': '/paragraph' }
+               ],
+               'commit applies an element attribute change transaction to the 
content'
+       );
+
+       // Test 2
+       documentModel.rollback( elementAttributeChange );
+       deepEqual(
+               documentModel.getData( new es.Range( 0, 5 ) ),
+               [
+                       { 'type': 'paragraph' },
+                       'a',
+                       ['b', { 'type': 'bold', 'hash': '#bold' }],
+                       ['c', { 'type': 'italic', 'hash': '#italic' }],
+                       { 'type': '/paragraph' }
+               ],
+               'rollback reverses the effect of an element attribute change 
transaction on the content'
+       );
+
        var contentAnnotation = documentModel.prepareContentAnnotation(
                new es.Range( 1, 4 ), 'set', { 'type': 'bold' }
        );
 
-       // Test 1
+       // Test 3
        documentModel.commit( contentAnnotation );
        deepEqual(
                documentModel.getData( new es.Range( 0, 5 ) ),
@@ -520,7 +552,7 @@
                'commit applies a content annotation transaction to the content'
        );
 
-       // Test 2
+       // Test 4
        documentModel.rollback( contentAnnotation );
        deepEqual(
                documentModel.getData( new es.Range( 0, 5 ) ),
@@ -536,7 +568,7 @@
 
        var insertion = documentModel.prepareInsertion( 4, ['d'] );
 
-       // Test 3
+       // Test 5
        documentModel.commit( insertion );
        deepEqual(
                documentModel.getData( new es.Range( 0, 6 ) ),
@@ -551,7 +583,7 @@
                'commit applies an insertion transaction to the content'
        );
 
-       // Test 4
+       // Test 6
        documentModel.rollback( insertion );
        deepEqual(
                documentModel.getData( new es.Range( 0, 5 ) ),
@@ -567,7 +599,7 @@
 
        var removal = documentModel.prepareRemoval( new es.Range( 2, 4 ) );
 
-       // Test 5
+       // Test 7
        documentModel.commit( removal );
        deepEqual(
                documentModel.getData( new es.Range( 0, 3 ) ),
@@ -579,7 +611,7 @@
                'commit applies a removal transaction to the content'
        );
 
-       // Test 6
+       // Test 8
        documentModel.rollback( removal );
        deepEqual(
                documentModel.getData( new es.Range( 0, 5 ) ),


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to