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

Revision: 56220
Author:   tparscal
Date:     2009-09-12 04:46:11 +0000 (Sat, 12 Sep 2009)

Log Message:
-----------
Resotred automatic ellipsis for suggestions, added autoEllipse plugin. Also 
noticed that namespaceSelect needed to be added to list of combined and 
minified scripts. Ellipis seems a little screwy still - working on getting it 
to be more stable.

Modified Paths:
--------------
    trunk/extensions/UsabilityInitiative/SimpleSearch/SimpleSearch.js
    trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
    trunk/extensions/UsabilityInitiative/combine.sh
    trunk/extensions/UsabilityInitiative/css/combined.css
    trunk/extensions/UsabilityInitiative/css/combined.min.css
    trunk/extensions/UsabilityInitiative/css/suggestions.css
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.suggestions.js
    trunk/extensions/UsabilityInitiative/js/plugins.combined.js
    trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js

Added Paths:
-----------
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.autoEllipse.js

Modified: trunk/extensions/UsabilityInitiative/SimpleSearch/SimpleSearch.js
===================================================================
--- trunk/extensions/UsabilityInitiative/SimpleSearch/SimpleSearch.js   
2009-09-12 00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/SimpleSearch/SimpleSearch.js   
2009-09-12 04:46:11 UTC (rev 56220)
@@ -80,27 +80,28 @@
                                render: function( query ) {
                                        var perfectMatch = false;
                                        $j(this).closest( '.suggestions' 
).find( '.suggestions-results div' ).each( function() {
-                                               if ( $j(this).text() == query ) 
{
+                                               if ( $j(this).data( 'text' ) == 
query ) {
                                                        perfectMatch = true;
                                                }
                                        } );
                                        if ( perfectMatch ) {
                                                if ( $j(this).children().size() 
== 0  ) {
-                                                       $j(this).append(
-                                                               $j( '<div />' )
-                                                                       
.addClass( 'special-label' )
-                                                                       .text( 
gM( 'simplesearch-containing' ) )
-                                                       );
-                                                       $j(this).append(
-                                                               $j( '<span />' 
).addClass( 'special-query' ).text( query )
-                                                       );
                                                        $j(this).show();
+                                                       $label = $j( '<div />' )
+                                                               .addClass( 
'special-label' )
+                                                               .text( gM( 
'simplesearch-containing' ) )
+                                                               .appendTo( 
$j(this) );
+                                                       $query = $j( '<span />' 
)
+                                                               .addClass( 
'special-query' )
+                                                               .text( query )
+                                                               .appendTo( 
$j(this) );
+                                                       $query.autoEllipse();
                                                } else {
-                                                       $j(this).find( 
'.special-query' ).text( query );
+                                                       $j(this).find( 
'.special-query' ).empty().text( query ).autoEllipse();
                                                }
                                        } else {
+                                               $j(this).hide();
                                                $j(this).empty();
-                                               $j(this).hide();
                                        }
                                },
                                select: function( $textbox ) {

Modified: trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2009-09-12 00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2009-09-12 04:46:11 UTC (rev 56220)
@@ -18,10 +18,10 @@
        private static $styleFiles = array(
                'base_sets' => array(
                        'raw' => array(
-                               array( 'src' => 'css/suggestions.css', 
'version' => 5 ),
+                               array( 'src' => 'css/suggestions.css', 
'version' => 6 ),
                                array( 'src' => 'css/wikiEditor.css', 'version' 
=> 4 ),
                                array( 'src' => 'css/wikiEditor.toolbar.css', 
'version' => 5 ),
-                               array( 'src' => 'css/wikiEditor.dialogs.css', 
'version' => 2 ),
+                               array( 'src' => 'css/wikiEditor.dialogs.css', 
'version' => 1 ),
                                array( 'src' => 'css/wikiEditor.toc.css', 
'version' => 5 ),
                                array( 'src' => 
'css/vector/jquery-ui-1.7.2.css', 'version' => '1.7.2' ),
                        ),
@@ -57,22 +57,23 @@
                'base_sets' => array(
                        'raw' => array(
                                array( 'src' => 'js/plugins/jquery.async.js', 
'version' => 3 ),
+                               array( 'src' => 
'js/plugins/jquery.autoEllipse.js', 'version' => 1 ),
                                array( 'src' => 'js/plugins/jquery.browser.js', 
'version' => 3 ),
                                array( 'src' => 'js/plugins/jquery.cookie.js', 
'version' => 3 ),
-                               array( 'src' => 
'js/plugins/jquery.namespaceSelect.js', 'version' => 0 ),
-                               array( 'src' => 
'js/plugins/jquery.suggestions.js', 'version' => 2 ),
-                               array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 10 ),
+                               array( 'src' => 
'js/plugins/jquery.namespaceSelect.js', 'version' => 1 ),
+                               array( 'src' => 
'js/plugins/jquery.suggestions.js', 'version' => 1 ),
+                               array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 9 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 4 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 11 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 2 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.toc.js', 'version' => 8 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 1 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.toc.js', 'version' => 5 ),
                                array( 'src' => 'js/js2/jquery-ui-1.7.2.js', 
'version' => '1.7.2x' ),
                        ),
                        'combined' => array(
-                               array( 'src' => 'js/plugins.combined.js', 
'version' => 19 ),
+                               array( 'src' => 'js/plugins.combined.js', 
'version' => 18 ),
                        ),
                        'minified' => array(
-                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 19 ),
+                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 18 ),
                        ),
                ),
        );

Modified: trunk/extensions/UsabilityInitiative/combine.sh
===================================================================
--- trunk/extensions/UsabilityInitiative/combine.sh     2009-09-12 00:22:24 UTC 
(rev 56219)
+++ trunk/extensions/UsabilityInitiative/combine.sh     2009-09-12 04:46:11 UTC 
(rev 56220)
@@ -5,7 +5,7 @@
 echo "Merging raw scripts and styles"
 # Explicitly including scripts is important, because loading order is important
 cat js/js2/jquery-1.3.2.js js/js2/jquery-ui-1.7.2.js js/js2/js2.js > 
js/js2.combined.js
-cat js/plugins/jquery.async.js js/plugins/jquery.browser.js 
js/plugins/jquery.cookie.js js/plugins/jquery.suggestions.js 
js/plugins/jquery.textSelection.js js/plugins/jquery.wikiEditor.js 
js/plugins/jquery.wikiEditor.dialogs.js js/plugins/jquery.wikiEditor.toolbar.js 
js/plugins/jquery.wikiEditor.toc.js > js/plugins.combined.js
+cat js/plugins/jquery.async.js js/plugins/jquery.autoEllipse.js 
js/plugins/jquery.browser.js js/plugins/jquery.cookie.js 
js/plugins/jquery.namespaceSelect.js js/plugins/jquery.suggestions.js 
js/plugins/jquery.textSelection.js js/plugins/jquery.wikiEditor.js 
js/plugins/jquery.wikiEditor.dialogs.js js/plugins/jquery.wikiEditor.toolbar.js 
js/plugins/jquery.wikiEditor.toc.js > js/plugins.combined.js
 # Styles can be loaded in any order
 cat css/*.css > css/combined.css
 # For more info on JSMin, see: http://www.crockford.com/javascript/jsmin.html

Modified: trunk/extensions/UsabilityInitiative/css/combined.css
===================================================================
--- trunk/extensions/UsabilityInitiative/css/combined.css       2009-09-12 
00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/css/combined.css       2009-09-12 
04:46:11 UTC (rev 56220)
@@ -39,6 +39,7 @@
        padding: 0.25em 0.25em;
        line-height: 1.25em;
        margin: 0;
+       width: 100%;
 }
 .suggestions-result-current {
        background-color: #4C59A6;

Modified: trunk/extensions/UsabilityInitiative/css/combined.min.css
===================================================================
--- trunk/extensions/UsabilityInitiative/css/combined.min.css   2009-09-12 
00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/css/combined.min.css   2009-09-12 
04:46:11 UTC (rev 56220)
@@ -37,6 +37,7 @@
 padding:0.25em 0.25em;
 line-height:1.25em;
 margin:0;
+width:100%;
 }
 .suggestions-result-current{
 background-color:#4C59A6;
@@ -445,4 +446,4 @@
 background-color:white;
 text-decoration:none;
 border-color:#a8d7f9;
-}
\ No newline at end of file
+}

Modified: trunk/extensions/UsabilityInitiative/css/suggestions.css
===================================================================
--- trunk/extensions/UsabilityInitiative/css/suggestions.css    2009-09-12 
00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/css/suggestions.css    2009-09-12 
04:46:11 UTC (rev 56220)
@@ -39,6 +39,7 @@
        padding: 0.25em 0.25em;
        line-height: 1.25em;
        margin: 0;
+       width: 100%;
 }
 .suggestions-result-current {
        background-color: #4C59A6;

Added: trunk/extensions/UsabilityInitiative/js/plugins/jquery.autoEllipse.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins/jquery.autoEllipse.js       
                        (rev 0)
+++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.autoEllipse.js       
2009-09-12 04:46:11 UTC (rev 56220)
@@ -0,0 +1,21 @@
+/**
+ * Plugin that automatically truncates the plain text contents of an element 
and adds an ellipsis 
+ */
+( function( $ ) {
+
+$.fn.autoEllipse = function() {
+       $(this).each( function() {
+               var text = $(this).text();
+               var $text = $( '<span />' ).text( text ).css( 'whiteSpace', 
'nowrap' );
+               $(this).empty().append( $text );
+               if ( $text.outerWidth() > $(this).outerWidth() ) {
+                       var i = text.length;
+                       while ( $text.outerWidth() > $(this).outerWidth() && i 
> 0 ) {
+                               $text.text( text.substr( 0, i ) + '...' );
+                               i--;
+                       }
+               }
+       } );
+};
+
+} )( jQuery );
\ No newline at end of file

Modified: trunk/extensions/UsabilityInitiative/js/plugins/jquery.suggestions.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins/jquery.suggestions.js       
2009-09-12 00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.suggestions.js       
2009-09-12 04:46:11 UTC (rev 56220)
@@ -125,14 +125,15 @@
                                                        $result = $( '<div />' )
                                                                .addClass( 
'suggestions-result' )
                                                                .attr( 'rel', i 
)
-                                                               .data( 'text', 
context.config.suggestions[i] );
+                                                               .data( 'text', 
context.config.suggestions[i] )
+                                                               .appendTo( 
$results );
                                                        // Allow custom 
rendering
                                                        if ( typeof 
context.config.result.render == 'function' ) {
                                                                
context.config.result.render.call( $result, context.config.suggestions[i] );
                                                        } else {
                                                                $result.text( 
context.config.suggestions[i] );
+                                                               
$result.autoEllipse();
                                                        }
-                                                       $results.append( 
$result );
                                                }
                                                // Update the size and position 
of the list
                                                context.data.$container.css( {

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2009-09-12 
00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2009-09-12 
04:46:11 UTC (rev 56220)
@@ -76,8 +76,28 @@
 
 })(jQuery);
 
-/*
+/**
+ * Plugin that automatically truncates the plain text contents of an element 
and adds an ellipsis 
+ */
+( function( $ ) {
 
+$.fn.autoEllipse = function() {
+       $(this).each( function() {
+               var text = $(this).text();
+               var $text = $( '<span />' ).text( text ).css( 'whiteSpace', 
'nowrap' );
+               $(this).empty().append( $text );
+               if ( $text.outerWidth() > $(this).outerWidth() ) {
+                       var i = text.length;
+                       while ( $text.outerWidth() > $(this).outerWidth() && i 
> 0 ) {
+                               $text.text( text.substr( 0, i ) + '...' );
+                               i--;
+                       }
+               }
+       } );
+};
+
+} )( jQuery );/*
+
 jQuery Browser Plugin
        * Version 2.3
        * 2008-09-17 19:27:05
@@ -256,6 +276,26 @@
 };
 
 /**
+ * Plugin that fills a <select> with namespaces
+ */
+
+(function ($) {
+$.fn.namespaceSelector = function( defaultNS ) {
+       if ( typeof defaultNS == 'undefined' )
+               defaultNS = 0;
+       return this.each( function() {
+               for ( var id in wgFormattedNamespaces ) {
+                       var opt = $( '<option />' )
+                               .attr( 'value', id )
+                               .text( wgFormattedNamespaces[id] );
+                       if ( id == defaultNS )
+                               opt.attr( 'selected', 'selected' );
+                       opt.appendTo( $(this) );
+               }
+       });
+};})(jQuery);
+
+/**
  * This plugin provides a generic way to add suggestions to a text box.
  * 
  * Usage:
@@ -382,14 +422,15 @@
                                                        $result = $( '<div />' )
                                                                .addClass( 
'suggestions-result' )
                                                                .attr( 'rel', i 
)
-                                                               .data( 'text', 
context.config.suggestions[i] );
+                                                               .data( 'text', 
context.config.suggestions[i] )
+                                                               .appendTo( 
$results );
                                                        // Allow custom 
rendering
                                                        if ( typeof 
context.config.result.render == 'function' ) {
                                                                
context.config.result.render.call( $result, context.config.suggestions[i] );
                                                        } else {
                                                                $result.text( 
context.config.suggestions[i] );
+                                                               
$result.autoEllipse();
                                                        }
-                                                       $results.append( 
$result );
                                                }
                                                // Update the size and position 
of the list
                                                context.data.$container.css( {

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2009-09-12 00:22:24 UTC (rev 56219)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2009-09-12 04:46:11 UTC (rev 56220)
@@ -11,19 +11,20 @@
 {var 
i=0,l=array.length,loop=opts.loop||function(){};$.whileAsync($.extend(opts,{test:function(){return
 i<l;},loop:function()
 {var val=array[i];return loop.call(val,i++,val);}}));}
 $.fn.eachAsync=function(opts)
-{$.eachAsync(this,opts);return 
this;}})(jQuery);(function($){$.browserTest=function(a,z){var 
u='unknown',x='X',m=function(r,h){for(var 
i=0;i<h.length;i=i+1){r=r.replace(h[i][0],h[i][1]);}
+{$.eachAsync(this,opts);return 
this;}})(jQuery);(function($){$.fn.autoEllipse=function(){$(this).each(function(){var
 text=$(this).text();var $text=$('<span 
/>').text(text).css('whiteSpace','nowrap');$(this).empty().append($text);if($text.outerWidth()>$(this).outerWidth()){var
 
i=text.length;while($text.outerWidth()>$(this).outerWidth()&&i>0){$text.text(text.substr(0,i)+'...');i--;}}});};})(jQuery);(function($){$.browserTest=function(a,z){var
 u='unknown',x='X',m=function(r,h){for(var 
i=0;i<h.length;i=i+1){r=r.replace(h[i][0],h[i][1]);}
 return r;},c=function(i,a,b,c){var 
r={name:m((a.exec(i)||[u,u])[1],b)};r[r.name]=true;r.version=(c.exec(i)||[x,x,x,x])[3];if(r.name.match(/safari/)&&r.version>400){r.version='2.0';}
 if(r.name==='presto'){r.version=($.browser.version>9.27)?'futhark':'linear_b';}
 
r.versionNumber=parseFloat(r.version,10)||0;r.versionX=(r.version!==x)?(r.version+'').substr(0,1):x;r.className=r.name+r.versionX;return
 
r;};a=(a.match(/Opera|Navigator|Minefield|KHTML|Chrome/)?m(a,[[/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/,''],['Chrome
 
Safari','Chrome'],['KHTML','Konqueror'],['Minefield','Firefox'],['Navigator','Netscape']]):a).toLowerCase();$.browser=$.extend((!z)?$.browser:{},c(a,/(camino|chrome|firefox|netscape|konqueror|lynx|msie|opera|safari)/,[],/(camino|chrome|firefox|netscape|netscape6|opera|version|konqueror|lynx|msie|safari)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/));$.layout=c(a,/(gecko|konqueror|msie|opera|webkit)/,[['konqueror','khtml'],['msie','trident'],['opera','presto']],/(applewebkit|rv|konqueror|msie)(\:|\/|\s)([a-z0-9\.]*?)(\;|\)|\s)/);$.os={name:(/(win|mac|linux|sunos|solaris|iphone)/.exec(navigator.platform.toLowerCase())||[u])[0].replace('sunos','solaris')};if(!z){$('html').addClass([$.os.name,$.browser.name,$.browser.className,$.layout.name,$.layout.className].join('
 
'));}};$.browserTest(navigator.userAgent);})(jQuery);jQuery.cookie=function(name,value,options){if(typeof
 
value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}
 var expires='';if(options.expires&&(typeof 
options.expires=='number'||options.expires.toUTCString)){var date;if(typeof 
options.expires=='number'){date=new 
Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}
 expires='; expires='+date.toUTCString();}
 var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; 
domain='+(options.domain):'';var secure=options.secure?'; 
secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var
 cookieValue=null;if(document.cookie&&document.cookie!=''){var 
cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var 
cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}
-return 
cookieValue;}};(function($){$.suggestions={cancel:function(context){if(context.data.timerID!=null){clearTimeout(context.data.timerID);}
+return 
cookieValue;}};(function($){$.fn.namespaceSelector=function(defaultNS){if(typeof
 defaultNS=='undefined')
+defaultNS=0;return this.each(function(){for(var id in 
wgFormattedNamespaces){var opt=$('<option 
/>').attr('value',id).text(wgFormattedNamespaces[id]);if(id==defaultNS)
+opt.attr('selected','selected');opt.appendTo($(this));}});};})(jQuery);(function($){$.suggestions={cancel:function(context){if(context.data.timerID!=null){clearTimeout(context.data.timerID);}
 if(typeof 
context.config.cancel=='function'){context.config.cancel.call(context.data.$textbox);}},restore:function(context){context.data.$textbox.val(context.data.prevText);},update:function(context,delayed){function
 
maybeFetch(){if(context.data.$textbox.val()!==context.data.prevText){context.data.prevText=context.data.$textbox.val();if(typeof
 
context.config.fetch=='function'){context.config.fetch.call(context.data.$textbox,context.data.$textbox.val());}}}
 if(context.data.timerID!=null){clearTimeout(context.data.timerID);}
 
if(delayed){context.data.timerID=setTimeout(maybeFetch,context.config.delay);}else{maybeFetch();}
-$.suggestions.special(context);},special:function(context){if(typeof 
context.config.special.render=='function'){setTimeout(function(){$special=context.data.$container.find('.suggestions-special');context.config.special.render.call($special,context.data.$textbox.val());},1);}},configure:function(context,property,value){switch(property){case'fetch':case'cancel':case'special':case'result':case'$region':context.config[property]=value;break;case'suggestions':context.config[property]=value;if(typeof
 
context.data!=='undefined'){if(context.config.suggestions.length==0){context.data.$container.hide();}else{context.data.$container.show();var
 
$results=context.data.$container.children('.suggestions-results');$results.empty();for(var
 i=0;i<context.config.suggestions.length;i++){$result=$('<div 
/>').addClass('suggestions-result').attr('rel',i).data('text',context.config.suggestions[i]);if(typeof
 
context.config.result.render=='function'){context.config.result.render.call($result,context.config.suggestions[i]);}else{$result.text(context.config.suggestions[i]);}
-$results.append($result);}
+$.suggestions.special(context);},special:function(context){if(typeof 
context.config.special.render=='function'){setTimeout(function(){$special=context.data.$container.find('.suggestions-special');context.config.special.render.call($special,context.data.$textbox.val());},1);}},configure:function(context,property,value){switch(property){case'fetch':case'cancel':case'special':case'result':case'$region':context.config[property]=value;break;case'suggestions':context.config[property]=value;if(typeof
 
context.data!=='undefined'){if(context.config.suggestions.length==0){context.data.$container.hide();}else{context.data.$container.show();var
 
$results=context.data.$container.children('.suggestions-results');$results.empty();for(var
 i=0;i<context.config.suggestions.length;i++){$result=$('<div 
/>').addClass('suggestions-result').attr('rel',i).data('text',context.config.suggestions[i]).appendTo($results);if(typeof
 
context.config.result.render=='function'){context.config.result.render.call($result,context.config.suggestions[i]);}else{$result.text(context.config.suggestions[i]);$result.autoEllipse();}}
 
context.data.$container.css({'top':context.config.$region.offset().top+context.config.$region.outerHeight(),'bottom':'auto','width':context.config.$region.outerWidth(),'height':'auto','left':context.config.$region.offset().left,'right':'auto'});}}
 
break;case'maxRows':context.config[property]=Math.max(1,Math.min(100,value));break;case'delay':context.config[property]=Math.max(0,Math.min(12000,value));break;case'submitOnClick':context.config[property]=value?true:false;break;}},highlight:function(context,result,updateTextbox){var
 selected=context.data.$container.find('.suggestions-result-current')
 
if(!result.get||selected.get(0)!=result.get(0)){if(result=='prev'){result=selected.prev();}else
 if(result=='next'){if(selected.size()==0)



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

Reply via email to