http://www.mediawiki.org/wiki/Special:Code/MediaWiki/94188
Revision: 94188
Author: inez
Date: 2011-08-10 19:20:58 +0000 (Wed, 10 Aug 2011)
Log Message:
-----------
Deleting content across multiple items in lists with adopting orphaned items
Modified Paths:
--------------
trunk/parsers/wikidom/lib/es/es.ListBlock.js
Modified: trunk/parsers/wikidom/lib/es/es.ListBlock.js
===================================================================
--- trunk/parsers/wikidom/lib/es/es.ListBlock.js 2011-08-10 19:18:45 UTC
(rev 94187)
+++ trunk/parsers/wikidom/lib/es/es.ListBlock.js 2011-08-10 19:20:58 UTC
(rev 94188)
@@ -75,51 +75,82 @@
locationEnd = this.list.getLocationFromOffset( range.end );
if ( locationStart.item == locationEnd.item ) {
+
+ // delete content within one item
locationStart.item.content.remove(
new es.Range( locationStart.offset,
locationStart.offset + range.getLength() )
);
} else {
- var contentToAppend = locationEnd.item.flow.content.getContent(
+
+ // delete content across multiple items
+
+ // delete selected content in first selected item
+ locationStart.item.content.remove(
new es.Range(
+ locationStart.offset,
+ locationStart.item.content.getLength()
+ )
+ );
+
+ // grab not selected content from last selected item..
+ var toAppend = locationEnd.item.content.getContent(
+ new es.Range(
locationEnd.offset,
- locationEnd.item.flow.content.getLength()
+ locationEnd.item.content.getLength()
)
);
- locationStart.item.flow.content.remove(
- new es.Range( locationStart.offset,
locationStart.item.flow.content.getLength() )
- );
- locationStart.item.flow.content.insert( locationStart.offset,
contentToAppend.data );
+
+ // ..and insert it at the end of first selected item
+ locationStart.item.content.insert( locationStart.offset,
toAppend.data );
- var itemsToDelete;
+ var toDelete = [],
+ toAdopt = [],
+ newParents = [],
+ toDeleteCollecting = false,
+ toAdoptCollecting = false;
+
this.traverseItems( function( item, index ) {
- if ( $.isArray( itemsToDelete ) ) {
- itemsToDelete.push( item );
+
+ if ( toDeleteCollecting === false && toDelete.length
=== 0 ) {
+ newParents[ item.getLevel() ] = item;
}
- if ( item == locationEnd.item ) {
- return false;
+
+ if ( toDeleteCollecting ) {
+ toDelete.push( item );
}
+
if ( item == locationStart.item ) {
- itemsToDelete = [];
+ toDeleteCollecting = true;
+ }
+
+ if ( item == locationEnd.item ) {
+ toDeleteCollecting = false;
+ toAdoptCollecting = true;
+ return true;
}
- } );
- for ( var i = itemsToDelete.length - 1; i >= 0; i-- ) {
- if ( itemsToDelete[i].getLength() - 1 ===
itemsToDelete[i].flow.content.getLength() ) {
- itemsToDelete[i].list.remove(itemsToDelete[i]);
- } else {
- itemsToDelete[i].flow.content.remove( new
es.Range( 0, itemsToDelete[i].flow.content.getLength() ) );
+ if ( toAdoptCollecting ) {
+ if( toDelete.indexOf ( item.list.item ) !== -1
) {
+ toAdopt.push( item );
+ }
}
- }
- /*
- var start = locationEnd.item;
- while(start) {
- start = start.list.item;
- console.log("-")
+ } );
+
+ var toAdoptLevel,
+ newParent;
+
+ for ( var i = toAdopt.length - 1; i >= 0; i-- ) {
+ toAdoptLevel = toAdopt[i].getLevel();
+ newParent = newParents[ toAdoptLevel ] ? newParents[
toAdoptLevel ] : newParents[ newParents.length - 1 ];
+ newParent.lists[0].prepend( toAdopt[i] );
}
- */
+
+ for ( var i = toDelete.length - 1; i >= 0; i-- ) {
+ toDelete[i].list.remove(toDelete[i]);
+ }
}
};
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs