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

Revision: 65646
Author:   pdhanda
Date:     2010-04-28 23:16:52 +0000 (Wed, 28 Apr 2010)

Log Message:
-----------
Except for the cursor position in same cases and MSWord lists. Paste mostly 
works.

Modified Paths:
--------------
    trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
    trunk/extensions/UsabilityInitiative/js/plugins.combined.js
    trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js

Modified: trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2010-04-28 23:09:50 UTC (rev 65645)
+++ trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2010-04-28 23:16:52 UTC (rev 65646)
@@ -72,7 +72,7 @@
                                array( 'src' => 
'js/plugins/jquery.delayedBind.js', 'version' => 1 ),
                                array( 'src' => 
'js/plugins/jquery.suggestions.js', 'version' => 11 ),
                                array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 30 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 182 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 183 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.highlight.js', 'version' => 52 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 59 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 24 ),
@@ -82,10 +82,10 @@
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.publish.js', 'version' => 5 ),
                        ),
                        'combined' => array(
-                               array( 'src' => 'js/plugins.combined.js', 
'version' => 386 ),
+                               array( 'src' => 'js/plugins.combined.js', 
'version' => 387 ),
                        ),
                        'minified' => array(
-                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 386 ),
+                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 387 ),
                        ),
                ),
        );

Modified: trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js        
2010-04-28 23:09:50 UTC (rev 65645)
+++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js        
2010-04-28 23:16:52 UTC (rev 65646)
@@ -444,57 +444,58 @@
                                        $(this).replaceWith( this.childNodes );
                                } );
                                
+                               // If the pasted content is plain text then 
wrap it in a <p> and adjust the <br> accordingly 
                                var pasteContent = context.fn.getOffset( 
cursorPos[0] ).node;
                                var removeNextBR = false
                                while ( pasteContent != null && ! $( 
pasteContent ).hasClass( 'wikiEditor' ) ) {
                                        var currentNode = pasteContent;
                                        pasteContent = pasteContent.nextSibling;
-                                       if ( currentNode.nodeName == '#text' && 
currentNode.nodeValue == currentNode.wholeText ) {                              
-                                               $( currentNode ).wrap( $( 
'<p></p>' ) );
+                                       if ( currentNode.nodeName == '#text' && 
currentNode.nodeValue == currentNode.wholeText ) {
+                                               var pWrapper = $( '<p></p>' 
).addClass( 'wikiEditor' );
+                                               $( currentNode ).wrap( pWrapper 
);
                                                $( currentNode ).addClass( 
'wikiEditor' );
                                                removeNextBR = true;
-                                       } else if ( currentNode.nodeName == 
'SPAN' ) {
-                                               var text = $( currentNode 
).text();
-                                               if ( text.length  == 0 ) {
-                                                       $( currentNode 
).remove();
-                                               } 
+                                       } else if ( currentNode.nodeName == 
'BR' && removeNextBR ) {
+                                               $( currentNode ).remove();
                                                removeNextBR = false;
-                                       } else if ( currentNode.nodeName == 
'BR' ) {
-                                               if (removeNextBR ) {
-                                                       $( currentNode 
).remove();
-                                               } else {
-                                                       $( currentNode 
).addClass( 'wikiEditor' );
-                                               }
-                                               removeNextBR = false;
                                        } else {
                                                removeNextBR = false;
                                        }
-                               }
-                               
+                               }       
                                var $selection = context.$content.find( 
':not(.wikiEditor)' );
                                while ( $selection.length && $selection.length 
> 0 ) {
                                        var $currentElement = $selection.eq( 0 
);
                                        while ( !$currentElement.parent().is( 
'body' ) && !$currentElement.parent().is( '.wikiEditor' ) ) {
                                                $currentElement = 
$currentElement.parent();
                                        }
-                                       var html = $( '<div></div>' ).text( 
$currentElement.text().replace( /\r|\n/g, ' ' ) ).html();
-                                       if ( $currentElement.is( 'p' ) || 
$currentElement.is( 'div' ) ) {
-                                               $newElement = $( '<p></p>' )
-                                                       .addClass( 'wikiEditor' 
)
-                                                       .insertAfter( 
$currentElement );
-                                               if ( html.length ) {
-                                                       $newElement.html( html 
);
+                                       
+                                       var $newElement;
+                                       if ( $currentElement.is( 'p' ) || 
$currentElement.is( 'div' ) || $currentElement.is( 'pre' ) ) {
+                                               //Convert all <div>, <p> and 
<pre> that was pasted into a <p> element
+                                               $newElement = $( '<p></p>' );
+                                       } else {
+                                               // everything else becomes a 
<span>
+                                               $newElement = $( 
'<span></span>' ).addClass( 'wikiEditor' );
+                                       }
+                                       
+                                       // If the pasted content was html, just 
convert it into text and <br>
+                                       var text = $.trim( 
$currentElement.text() );
+                                       var pieces = text.split('\n');          
                        
+                                       for ( var i = 0; i < pieces.length; i++ 
) {
+                               if ( pieces[i] ) {
+                                                       $newElement.html( 
$newElement.html() + $.trim( pieces[i] ) );
                                                } else {
-                                                       $newElement.append( $( 
'<br>' ).addClass( 'wikiEditor' ) );
+                                                       var $brElement =  $( 
'<span></span>' ).html( '<br class = "wikiEditor" />' );
+                                                       $newElement.html( 
$newElement.html() + $brElement.html() );
                                                }
-                                               $currentElement.remove();
-                                       } else {
-                                               $newElement = $( 
'<span></span>' ).html( html ).insertAfter( $currentElement );
-                                               $newElement.replaceWith( 
$newElement[0].childNodes );
-                                               $currentElement.remove();
-                                       }
+                       }
+                                       $newElement.insertAfter( 
$currentElement );
+                                       $newElement.addClass( 'wikiEditor' );
+                                       $currentElement.remove();
+
                                        $selection = context.$content.find( 
':not(.wikiEditor)' );
                                }
+
                                context.$content.find( '.wikiEditor' 
).removeClass( 'wikiEditor' );
                                if ( $.layout.name !== 'webkit' ) {
                                        context.$content.removeClass( 'pasting' 
);

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2010-04-28 
23:09:50 UTC (rev 65645)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2010-04-28 
23:16:52 UTC (rev 65646)
@@ -7029,57 +7029,58 @@
                                        $(this).replaceWith( this.childNodes );
                                } );
                                
+                               // If the pasted content is plain text then 
wrap it in a <p> and adjust the <br> accordingly 
                                var pasteContent = context.fn.getOffset( 
cursorPos[0] ).node;
                                var removeNextBR = false
                                while ( pasteContent != null && ! $( 
pasteContent ).hasClass( 'wikiEditor' ) ) {
                                        var currentNode = pasteContent;
                                        pasteContent = pasteContent.nextSibling;
-                                       if ( currentNode.nodeName == '#text' && 
currentNode.nodeValue == currentNode.wholeText ) {                              
-                                               $( currentNode ).wrap( $( 
'<p></p>' ) );
+                                       if ( currentNode.nodeName == '#text' && 
currentNode.nodeValue == currentNode.wholeText ) {
+                                               var pWrapper = $( '<p></p>' 
).addClass( 'wikiEditor' );
+                                               $( currentNode ).wrap( pWrapper 
);
                                                $( currentNode ).addClass( 
'wikiEditor' );
                                                removeNextBR = true;
-                                       } else if ( currentNode.nodeName == 
'SPAN' ) {
-                                               var text = $( currentNode 
).text();
-                                               if ( text.length  == 0 ) {
-                                                       $( currentNode 
).remove();
-                                               } 
+                                       } else if ( currentNode.nodeName == 
'BR' && removeNextBR ) {
+                                               $( currentNode ).remove();
                                                removeNextBR = false;
-                                       } else if ( currentNode.nodeName == 
'BR' ) {
-                                               if (removeNextBR ) {
-                                                       $( currentNode 
).remove();
-                                               } else {
-                                                       $( currentNode 
).addClass( 'wikiEditor' );
-                                               }
-                                               removeNextBR = false;
                                        } else {
                                                removeNextBR = false;
                                        }
-                               }
-                               
+                               }       
                                var $selection = context.$content.find( 
':not(.wikiEditor)' );
                                while ( $selection.length && $selection.length 
> 0 ) {
                                        var $currentElement = $selection.eq( 0 
);
                                        while ( !$currentElement.parent().is( 
'body' ) && !$currentElement.parent().is( '.wikiEditor' ) ) {
                                                $currentElement = 
$currentElement.parent();
                                        }
-                                       var html = $( '<div></div>' ).text( 
$currentElement.text().replace( /\r|\n/g, ' ' ) ).html();
-                                       if ( $currentElement.is( 'p' ) || 
$currentElement.is( 'div' ) ) {
-                                               $newElement = $( '<p></p>' )
-                                                       .addClass( 'wikiEditor' 
)
-                                                       .insertAfter( 
$currentElement );
-                                               if ( html.length ) {
-                                                       $newElement.html( html 
);
+                                       
+                                       var $newElement;
+                                       if ( $currentElement.is( 'p' ) || 
$currentElement.is( 'div' ) || $currentElement.is( 'pre' ) ) {
+                                               //Convert all <div>, <p> and 
<pre> that was pasted into a <p> element
+                                               $newElement = $( '<p></p>' );
+                                       } else {
+                                               // everything else becomes a 
<span>
+                                               $newElement = $( 
'<span></span>' ).addClass( 'wikiEditor' );
+                                       }
+                                       
+                                       // If the pasted content was html, just 
convert it into text and <br>
+                                       var text = $.trim( 
$currentElement.text() );
+                                       var pieces = text.split('\n');          
                        
+                                       for ( var i = 0; i < pieces.length; i++ 
) {
+                               if ( pieces[i] ) {
+                                                       $newElement.html( 
$newElement.html() + $.trim( pieces[i] ) );
                                                } else {
-                                                       $newElement.append( $( 
'<br>' ).addClass( 'wikiEditor' ) );
+                                                       var $brElement =  $( 
'<span></span>' ).html( '<br class = "wikiEditor" />' );
+                                                       $newElement.html( 
$newElement.html() + $brElement.html() );
                                                }
-                                               $currentElement.remove();
-                                       } else {
-                                               $newElement = $( 
'<span></span>' ).html( html ).insertAfter( $currentElement );
-                                               $newElement.replaceWith( 
$newElement[0].childNodes );
-                                               $currentElement.remove();
-                                       }
+                       }
+                                       $newElement.insertAfter( 
$currentElement );
+                                       $newElement.addClass( 'wikiEditor' );
+                                       $currentElement.remove();
+
                                        $selection = context.$content.find( 
':not(.wikiEditor)' );
                                }
+
                                context.$content.find( '.wikiEditor' 
).removeClass( 'wikiEditor' );
                                if ( $.layout.name !== 'webkit' ) {
                                        context.$content.removeClass( 'pasting' 
);

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2010-04-28 23:09:50 UTC (rev 65645)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2010-04-28 23:16:52 UTC (rev 65646)
@@ -468,13 +468,11 @@
 return true;},'delayedChange':function(event){event.data.scope='division';var 
newHTML=context.$content.html();if(context.oldDelayedHTML!=newHTML){context.oldDelayedHTML=newHTML;event.data.scope='realchange';var
 cursorPos=context.fn.getCaretPosition();var 
t=context.fn.getOffset(cursorPos[0]);if(t&&t.node.nodeName=='#text'&&t.node.parentNode.nodeName.toLowerCase()=='body'){$(t.node).wrap("<p></p>");context.fn.purgeOffsets();context.fn.setSelection({start:cursorPos[0],end:cursorPos[1]});}}
 context.fn.updateHistory(event.data.scope=='realchange');return 
true;},'cut':function(event){setTimeout(function(){context.$content.find('br').each(function(){if($(this).parent().is('body')){$(this).wrap($('<p></p>'));}});},100);return
 true;},'paste':function(event){var cursorPos=context.fn.getCaretPosition();var 
oldLength=context.fn.getContents().length-(cursorPos[1]-cursorPos[0]);context.$content.find(':not(.wikiEditor)').addClass('wikiEditor');if($.layout.name!=='webkit'){context.$content.addClass('pasting');}
 
setTimeout(function(){context.$content.find('script,style,img,input,select,textarea,hr,button,link,meta').remove();context.$content.find('*').each(function(){if($(this).children().length==0&&this.childNodes.length>0){$(this).text($(this).text());}});context.$content.find('p:not(.wikiEditor)
 p:not(.wikiEditor)').each(function(){var 
outerParent=$(this).parent();outerParent.replaceWith(outerParent.childNodes);});context.$content.find('span.Apple-style-span').each(function(){$(this).replaceWith(this.childNodes);});var
 pasteContent=context.fn.getOffset(cursorPos[0]).node;var removeNextBR=false
-while(pasteContent!=null&&!$(pasteContent).hasClass('wikiEditor')){var 
currentNode=pasteContent;pasteContent=pasteContent.nextSibling;if(currentNode.nodeName=='#text'&&currentNode.nodeValue==currentNode.wholeText){$(currentNode).wrap($('<p></p>'));$(currentNode).addClass('wikiEditor');removeNextBR=true;}else
 if(currentNode.nodeName=='SPAN'){var 
text=$(currentNode).text();if(text.length==0){$(currentNode).remove();}
-removeNextBR=false;}else 
if(currentNode.nodeName=='BR'){if(removeNextBR){$(currentNode).remove();}else{$(currentNode).addClass('wikiEditor');}
-removeNextBR=false;}else{removeNextBR=false;}}
+while(pasteContent!=null&&!$(pasteContent).hasClass('wikiEditor')){var 
currentNode=pasteContent;pasteContent=pasteContent.nextSibling;if(currentNode.nodeName=='#text'&&currentNode.nodeValue==currentNode.wholeText){var
 
pWrapper=$('<p></p>').addClass('wikiEditor');$(currentNode).wrap(pWrapper);$(currentNode).addClass('wikiEditor');removeNextBR=true;}else
 
if(currentNode.nodeName=='BR'&&removeNextBR){$(currentNode).remove();removeNextBR=false;}else{removeNextBR=false;}}
 var 
$selection=context.$content.find(':not(.wikiEditor)');while($selection.length&&$selection.length>0){var
 
$currentElement=$selection.eq(0);while(!$currentElement.parent().is('body')&&!$currentElement.parent().is('.wikiEditor')){$currentElement=$currentElement.parent();}
-var html=$('<div></div>').text($currentElement.text().replace(/\r|\n/g,' 
')).html();if($currentElement.is('p')||$currentElement.is('div')){$newElement=$('<p></p>').addClass('wikiEditor').insertAfter($currentElement);if(html.length){$newElement.html(html);}else{$newElement.append($('<br>').addClass('wikiEditor'));}
-$currentElement.remove();}else{$newElement=$('<span></span>').html(html).insertAfter($currentElement);$newElement.replaceWith($newElement[0].childNodes);$currentElement.remove();}
-$selection=context.$content.find(':not(.wikiEditor)');}
+var 
$newElement;if($currentElement.is('p')||$currentElement.is('div')||$currentElement.is('pre')){$newElement=$('<p></p>');}else{$newElement=$('<span></span>').addClass('wikiEditor');}
+var text=$.trim($currentElement.text());var pieces=text.split('\n');for(var 
i=0;i<pieces.length;i++){if(pieces[i]){$newElement.html($newElement.html()+$.trim(pieces[i]));}else{var
 $brElement=$('<span></span>').html('<br class = "wikiEditor" 
/>');$newElement.html($newElement.html()+$brElement.html());}}
+$newElement.insertAfter($currentElement);$newElement.addClass('wikiEditor');$currentElement.remove();$selection=context.$content.find(':not(.wikiEditor)');}
 
context.$content.find('.wikiEditor').removeClass('wikiEditor');if($.layout.name!=='webkit'){context.$content.removeClass('pasting');}
 context.fn.purgeOffsets();var newLength=context.fn.getContents().length;var 
restoreTo=cursorPos[0]+newLength-oldLength;context.fn.setSelection({start:restoreTo,end:restoreTo});},0);return
 
true;},'ready':function(event){context.history.push({'html':context.$content.html(),'sel':context.fn.getCaretPosition()});return
 true;}};context.fn={'trigger':function(name,event){if(typeof 
event=='undefined'){event={'type':'custom'};}
 if(typeof event.data=='undefined'){event.data={};}



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

Reply via email to