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

Revision: 83587
Author:   catrope
Date:     2011-03-09 14:27:13 +0000 (Wed, 09 Mar 2011)
Log Message:
-----------
Fix r83586 (drag and drop support for placeholder plugin) to work in IE, whose 
drag&drop API is surprisingly similar to Firefox's but with slight differences

Modified Paths:
--------------
    trunk/phase3/resources/jquery/jquery.placeholder.js

Modified: trunk/phase3/resources/jquery/jquery.placeholder.js
===================================================================
--- trunk/phase3/resources/jquery/jquery.placeholder.js 2011-03-09 13:54:02 UTC 
(rev 83586)
+++ trunk/phase3/resources/jquery/jquery.placeholder.js 2011-03-09 14:27:13 UTC 
(rev 83587)
@@ -41,9 +41,26 @@
                        // already focused when the events were bound
                        .bind( 'focus drop keydown paste', function( e ) {
                                if ( $input.hasClass( 'placeholder' ) ) {
-                                       // Support for drag&drop in Firefox
                                        if ( e.type == 'drop' && 
e.originalEvent.dataTransfer ) {
-                                               this.value = 
e.originalEvent.dataTransfer.getData( 'text/plain' );
+                                               // Support for drag&drop. 
Instead of inserting the dropped
+                                               // text somewhere in the middle 
of the placeholder string,
+                                               // we want to set the contents 
of the search box to the
+                                               // dropped text.
+                                               
+                                               // IE wants getData( 'text' ) 
but Firefox wants getData( 'text/plain' )
+                                               // Firefox fails gracefully 
with an empty string, IE barfs with an error
+                                               try {
+                                                       // Try the Firefox way
+                                                       this.value = 
e.originalEvent.dataTransfer.getData( 'text/plain' );
+                                               } catch ( exception ) {
+                                                       // Got an exception, so 
use the IE way
+                                                       this.value = 
e.originalEvent.dataTransfer.getData( 'text' );
+                                               }
+                                               
+                                               // On Firefox, drop fires after 
the dropped text has been inserted,
+                                               // but on IE it fires before. 
If we don't prevent the default action,
+                                               // IE will insert the dropped 
text twice.
+                                               e.preventDefault();
                                        } else {
                                                this.value = '';
                                        }


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

Reply via email to