@ -570,7 +570,6 @@ function rcube_init_mail_ui()
rcmail . addEventListener ( 'responseaftergetunread' , rcube _render _mailboxlist ) ;
rcmail . addEventListener ( 'responseaftergetunread' , rcube _render _mailboxlist ) ;
rcmail . addEventListener ( 'responseaftercheck-recent' , rcube _render _mailboxlist ) ;
rcmail . addEventListener ( 'responseaftercheck-recent' , rcube _render _mailboxlist ) ;
rcmail . addEventListener ( 'aftercollapse-folder' , rcube _render _mailboxlist ) ;
rcmail . addEventListener ( 'aftercollapse-folder' , rcube _render _mailboxlist ) ;
rcube _render _mailboxlist ( ) ;
}
}
if ( rcmail . env . action == 'compose' )
if ( rcmail . env . action == 'compose' )
@ -592,12 +591,16 @@ function iframe_events()
// Abbreviate mailbox names to fit width of the container
// Abbreviate mailbox names to fit width of the container
function rcube _render _mailboxlist ( )
function rcube _render _mailboxlist ( )
{
{
if ( bw . ie6 ) // doesn't work well on IE6
var list = $ ( '#mailboxlist > li a, #mailboxlist ul:visible > li a' ) ;
// it's too slow with really big number of folders, especially on IE
if ( list . length > 500 * ( bw . ie ? 0.2 : 1 ) )
return ;
return ;
$ ( '#mailboxlist > li a, #mailboxlist ul:visible > li a' ) . each ( function ( ) {
list . each ( function ( ) {
var elem = $ ( this ) ;
var elem = $ ( this ) ,
var text = elem . data ( 'text' ) ;
text = elem . data ( 'text' ) ;
if ( ! text ) {
if ( ! text ) {
text = elem . text ( ) . replace ( /\s+\(.+$/ , '' ) ;
text = elem . text ( ) . replace ( /\s+\(.+$/ , '' ) ;
elem . data ( 'text' , text ) ;
elem . data ( 'text' , text ) ;
@ -615,23 +618,35 @@ function rcube_render_mailboxlist()
// inspired by https://gist.github.com/24261/7fdb113f1e26111bd78c0c6fe515f6c0bf418af5
// inspired by https://gist.github.com/24261/7fdb113f1e26111bd78c0c6fe515f6c0bf418af5
function fit _string _to _size ( str , elem , len )
function fit _string _to _size ( str , elem , len )
{
{
var result = str ;
var w , span , result = str , ellip = '...' ;
var ellip = '...' ;
var span = $ ( '<b>' ) . css ( { visibility : 'hidden' , padding : '0px' } ) . appendTo ( elem ) . get ( 0 ) ;
// on first run, check if string fits into the length already.
if ( ! rcmail . env . tmp _span ) {
// it should be appended to elem to use the same css style
// but for performance reasons we'll append it to body (once)
span = $ ( '<b>' ) . css ( { visibility : 'hidden' , padding : '0px' } )
. appendTo ( $ ( 'body' , document ) ) . get ( 0 ) ;
rcmail . env . tmp _span = span ;
}
else {
span = rcmail . env . tmp _span ;
}
span . innerHTML = result ;
span . innerHTML = result ;
if ( span . offsetWidth > len ) {
var cut = Math . max ( 1 , Math . floor ( str . length * ( ( span . offsetWidth - len ) / span . offsetWidth ) / 2 ) ) ,
// on first run, check if string fits into the length already.
mid = Math . floor ( str . length / 2 ) ;
w = span . offsetWidth ;
var offLeft = mid , offRight = mid ;
if ( w > len ) {
var cut = Math . max ( 1 , Math . floor ( str . length * ( ( w - len ) / w ) / 2 ) ) ,
mid = Math . floor ( str . length / 2 ) ,
offLeft = mid ,
offRight = mid ;
while ( true ) {
while ( true ) {
offLeft = mid - cut ;
offLeft = mid - cut ;
offRight = mid + cut ;
offRight = mid + cut ;
span . innerHTML = str . substring ( 0 , offLeft ) + ellip + str . substring ( offRight ) ;
span . innerHTML = str . substring ( 0 , offLeft ) + ellip + str . substring ( offRight ) ;
// break loop if string fits size
// break loop if string fits size
if ( span . offsetWidth <= len || offLeft < 3 )
if ( offLeft < 3 || span . offsetWidth )
break ;
break ;
cut ++ ;
cut ++ ;
@ -641,7 +656,6 @@ function fit_string_to_size(str, elem, len)
result = str . substring ( 0 , offLeft ) + ellip + str . substring ( offRight ) ;
result = str . substring ( 0 , offLeft ) + ellip + str . substring ( offRight ) ;
}
}
span . parentNode . removeChild ( span ) ;
return result ;
return result ;
}
}