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

Revision: 56198
Author:   catrope
Date:     2009-09-11 18:19:20 +0000 (Fri, 11 Sep 2009)

Log Message:
-----------
EditToolbar: Automatically resize dialogs to fit their content without breaking 
lines. This doesn't work perfectly yet, but it's pretty close.

Modified Paths:
--------------
    trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-09-11 18:15:52 UTC (rev 56197)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-09-11 18:19:20 UTC (rev 56198)
@@ -936,7 +936,6 @@
                        });
                },
                dialog: {
-                       width: 550, // FIXME: autoresize width
                        buttons: {
                                'edittoolbar-tool-link-insert': function() {
                                        function escapeInternalText( s ) {
@@ -1069,7 +1068,6 @@
                        $j( '#edittoolbar-table-dimensions-columns' ).val( 2 );
                },
                dialog: {
-                       width: 350, // FIXME: autoresize
                        buttons: {
                                'edittoolbar-tool-table-insert': function() {
                                        var rows = parseInt( $j( 
'#edittoolbar-table-dimensions-rows' ).val() );
@@ -1139,7 +1137,6 @@
                        });
                },
                dialog: {
-                       width: 350, // FIXME: autoresize width
                        buttons: {
                                'edittoolbar-tool-replace-button': function() {
                                        var searchStr = $j( 
'#edittoolbar-replace-search' ).val();

Modified: 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js
===================================================================
--- 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js    
    2009-09-11 18:15:52 UTC (rev 56197)
+++ 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js    
    2009-09-11 18:19:20 UTC (rev 56198)
@@ -67,9 +67,51 @@
                                        .data( 'context', context )
                                        .appendTo( $( 'body' ) )
                                        .each( module.init )
-                                       .dialog( configuration );
+                                       .dialog( configuration )
+                                       .bind( 'dialogopen', 
$.wikiEditor.modules.dialogs.fn.resize )
+                                       .find( '.ui-tabs' ).bind( 'tabsshow', 
function() {
+                                               $(this).closest( 
'.ui-dialog-content' ).each(
+                                                       
$.wikiEditor.modules.dialogs.fn.resize );
+                                       });
                        }
                }
+       },
+       
+       /**
+        * Resize a dialog so its contents fit
+        *
+        * Usage: dialog.each( resize ); or dialog.bind( 'blah', resize );
+        */
+       resize: function() {
+               var wrapper = $(this).closest( '.ui-dialog' );
+               // Make sure elements don't wrapped so we get an accurate idea
+               // of whether they really fit. Also temporarily show hidden
+               // elements.
+               
+               // Work around jQuery bug where <div style="display:inline;" />
+               // inside a dialog is both :visible and :hidden 
+               var oldHidden = $(this).find( '*' ).not( ':visible' );
+               
+               // Save the style attributes of the hidden elements to restore
+               // them later. Calling hide() after show() messes up for
+               // elements hidden with a class
+               oldHidden.each( function() {
+                       $(this).data( 'oldstyle', $(this).attr( 'style' ) );
+               });
+               oldHidden.show();
+               var oldWS = $(this).css( 'white-space' );
+               $(this).css( 'white-space', 'nowrap' );
+               
+               if ( wrapper.width() <= $(this).get(0).scrollWidth ) {
+                       $(this).width( $(this).get(0).scrollWidth );
+                       wrapper.width( wrapper.get(0).scrollWidth );
+                       $(this).dialog( { 'width': wrapper.width() } );
+               }
+               
+               $(this).css( 'white-space', oldWS );
+               oldHidden.each( function() {
+                       $(this).attr( 'style', $(this).data( 'oldstyle' ) );
+               });
        }
 },
 'modules': {}



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to