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