Changeset 10822


Ignore:
Timestamp:
Jun 22, 2010, 10:30:58 PM (12 years ago)
Author:
Longinus00
Message:

#3298:Prettier formating of percentages

Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/remote.c

    r10818 r10822  
    113113static const double MiB = 1024.0 * 1024.0;
    114114static const double GiB = 1024.0 * 1024.0 * 1024.0;
     115
     116static char*
     117strlpercent( char * buf, double x, size_t buflen )
     118{
     119    return tr_strpercent( buf, x, buflen );
     120}
    115121
    116122static char*
     
    786792              && tr_bencDictFindInt( t, "leftUntilDone", &j ) )
    787793            {
    788                 strlratio( buf, 100.0 * ( i - j ), i, sizeof( buf ) );
     794                strlpercent( buf, 100.0 * ( i - j ) / i, sizeof( buf ) );
    789795                printf( "  Percent Done: %s%%\n", buf );
    790796            }
     
    812818                {
    813819                    j += i - k;
    814                     printf( "  Availability: %.1f%%\n", ( 100 * j ) / (double) i );
     820                    strlpercent( buf, 100.0 * j / i, sizeof( buf ) );
     821                    printf( "  Availability: %s%%\n", buf );
    815822                }
    816823                if( tr_bencDictFindInt( t, "totalSize", &j ) )
  • trunk/gtk/details.c

    r10698 r10822  
    797797            str = none;
    798798        else {
    799             char unver[64], total[64];
     799            char buf2[32], unver[64], total[64];
    800800            const double ratio = 100.0 * ( leftUntilDone ? ( haveValid + haveUnchecked ) / sizeWhenDone : 1 );
     801            tr_strlpercent( buf2, ratio, sizeof( buf2 ) );
    801802            tr_strlsize( total, haveUnchecked + haveValid, sizeof( total ) );
    802803            tr_strlsize( unver, haveUnchecked,             sizeof( unver ) );
    803804            if( haveUnchecked )
    804                 g_snprintf( buf, sizeof( buf ), _( "%1$s (%2$.1f%%); %3$s Unverified" ), total, tr_truncd( ratio, 1 ), unver );
     805                g_snprintf( buf, sizeof( buf ), _( "%1$s (%2$s%%); %3$s Unverified" ), total, buf2, unver );
    805806            else
    806                 g_snprintf( buf, sizeof( buf ), _( "%1$s (%2$.1f%%)" ), total, tr_truncd( ratio, 1 ) );
     807                g_snprintf( buf, sizeof( buf ), _( "%1$s (%2$s%%)" ), total, buf2 );
    807808            str = buf;
    808809        }
     
    814815        str = none;
    815816    else {
     817        char buf2[32];
    816818        const double d = ( 100.0 * available ) / sizeWhenDone;
    817         g_snprintf( buf, sizeof( buf ), _( "%1$.1f%%" ),  d );
     819        tr_strlpercent( buf2, d, sizeof( buf2 ) );
     820        g_snprintf( buf, sizeof( buf ), _( "%1$s%%" ), buf2 );
    818821        str = buf;
    819822    }
  • trunk/gtk/torrent-cell-renderer.c

    r10505 r10822  
    5050    const uint64_t haveTotal = torStat->haveUnchecked + torStat->haveValid;
    5151    const int      isSeed = torStat->haveValid >= info->totalSize;
    52     char           buf1[32], buf2[32], buf3[32], buf4[32], buf5[32];
     52    char           buf1[32], buf2[32], buf3[32], buf4[32], buf5[32], buf6[32];
    5353    char *         str;
    5454    double         seedRatio;
     
    6060            /* %1$s is how much we've got,
    6161               %2$s is how much we'll have when done,
    62                %3$.2f%% is a percentage of the two */
    63             _( "%1$s of %2$s (%3$.2f%%)" ),
     62               %3$s%% is a percentage of the two */
     63            _( "%1$s of %2$s (%3$s%%)" ),
    6464            tr_strlsize( buf1, haveTotal, sizeof( buf1 ) ),
    6565            tr_strlsize( buf2, torStat->sizeWhenDone, sizeof( buf2 ) ),
    66             tr_truncd( torStat->percentDone * 100.0, 2 ) );
     66            tr_strlpercent( buf3, torStat->percentDone * 100.0, sizeof( buf3 ) ) );
    6767    }
    6868    else if( !isSeed ) /* partial seeds */
     
    7373                /* %1$s is how much we've got,
    7474                   %2$s is the torrent's total size,
    75                    %3$.2f%% is a percentage of the two,
     75                   %3$s%% is a percentage of the two,
    7676                   %4$s is how much we've uploaded,
    7777                   %5$s is our upload-to-download ratio,
    7878                   %6$s is the ratio we want to reach before we stop uploading */
    79                 _( "%1$s of %2$s (%3$.2f%%), uploaded %4$s (Ratio: %5$s Goal: %6$s)" ),
     79                _( "%1$s of %2$s (%3$s%%), uploaded %4$s (Ratio: %5$s Goal: %6$s)" ),
    8080                tr_strlsize( buf1, haveTotal, sizeof( buf1 ) ),
    8181                tr_strlsize( buf2, info->totalSize, sizeof( buf2 ) ),
    82                 tr_truncd( torStat->percentComplete * 100.0, 2 ),
    83                 tr_strlsize( buf3, torStat->uploadedEver, sizeof( buf3 ) ),
    84                 tr_strlratio( buf4, torStat->ratio, sizeof( buf4 ) ),
    85                 tr_strlratio( buf5, seedRatio, sizeof( buf5 ) ) );
     82                tr_strlpercent( buf3, torStat->percentComplete * 100.0, sizeof( buf3 ) ),
     83                tr_strlsize( buf4, torStat->uploadedEver, sizeof( buf4 ) ),
     84                tr_strlratio( buf5, torStat->ratio, sizeof( buf5 ) ),
     85                tr_strlratio( buf6, seedRatio, sizeof( buf6 ) ) );
    8686        }
    8787        else
     
    9090                /* %1$s is how much we've got,
    9191                   %2$s is the torrent's total size,
    92                    %3$.2f%% is a percentage of the two,
     92                   %3$s%% is a percentage of the two,
    9393                   %4$s is how much we've uploaded,
    9494                   %5$s is our upload-to-download ratio */
    95                 _( "%1$s of %2$s (%3$.2f%%), uploaded %4$s (Ratio: %5$s)" ),
     95                _( "%1$s of %2$s (%3$s%%), uploaded %4$s (Ratio: %5$s)" ),
    9696                tr_strlsize( buf1, haveTotal, sizeof( buf1 ) ),
    9797                tr_strlsize( buf2, info->totalSize, sizeof( buf2 ) ),
    98                 tr_truncd( torStat->percentComplete * 100.0, 2 ),
    99                 tr_strlsize( buf3, torStat->uploadedEver, sizeof( buf3 ) ),
    100                 tr_strlratio( buf4, torStat->ratio, sizeof( buf4 ) ) );
     98                tr_strlpercent( buf3, torStat->percentComplete * 100.0, sizeof( buf3 ) ),
     99                tr_strlsize( buf4, torStat->uploadedEver, sizeof( buf4 ) ),
     100                tr_strlratio( buf5, torStat->ratio, sizeof( buf5 ) ) );
    101101        }
    102102    }
  • trunk/gtk/util.c

    r10818 r10822  
    104104{
    105105    return tr_strratio( buf, buflen, ratio, gtr_get_unicode_string( GTR_UNICODE_INF ) );
     106}
     107
     108char*
     109tr_strlpercent( char * buf, double x, size_t buflen )
     110{
     111    return tr_strpercent( buf, x, buflen );
    106112}
    107113
  • trunk/gtk/util.h

    r10698 r10822  
    4040const char * gtr_get_unicode_string( int );
    4141
     42/* return a percent formatted string of either x.xx, xx.x or xxx */
     43char* tr_strlpercent( char * buf, double x, size_t buflen );
    4244
    4345/* return a human-readable string for the size given in bytes. */
  • trunk/libtransmission/utils.c

    r10819 r10822  
    13661366
    13671367char*
     1368tr_strpercent( char * buf, double x, size_t buflen )
     1369{
     1370    if( x < 10.0 )
     1371        tr_strtruncd( buf, x, 2, buflen );
     1372    else if( x < 100.0 )
     1373        tr_strtruncd( buf, x, 1, buflen );
     1374    else
     1375        tr_strtruncd( buf, x, 0, buflen );
     1376    return buf;
     1377}
     1378
     1379char*
    13681380tr_strratio( char * buf, size_t buflen, double ratio, const char * infinity )
    13691381{
     
    13721384    else if( (int)ratio == TR_RATIO_INF )
    13731385        tr_strlcpy( buf, infinity, buflen );
    1374     else if( ratio < 10.0 )
    1375         tr_snprintf( buf, buflen, "%.2f", tr_truncd( ratio, 2 ) );
    1376     else if( ratio < 100.0 )
    1377         tr_snprintf( buf, buflen, "%.1f", tr_truncd( ratio, 1 ) );
    13781386    else
    1379         tr_snprintf( buf, buflen, "%'.0f", ratio );
     1387        tr_strpercent( buf, ratio, buflen );
     1388    return buf;
     1389}
     1390
     1391char*
     1392tr_strtruncd( char * buf, double x, int precision, size_t buflen )
     1393{
     1394    tr_snprintf( buf, buflen, "%.*f", precision, tr_truncd( x, precision ) );
     1395
    13801396    return buf;
    13811397}
  • trunk/libtransmission/utils.h

    r10819 r10822  
    495495double tr_truncd( double x, int decimal_places );
    496496
     497/* return a percent formatted string of either x.xx, xx.x or xxx */
     498char* tr_strpercent( char * buf, double x, size_t buflen );
     499
    497500/**
    498501 * @param buf the buffer to write the string to
     
    502505 */
    503506char* tr_strratio( char * buf, size_t buflen, double ratio, const char * infinity ) TR_GNUC_NONNULL(1,4);
     507
     508/* return a truncated double as a string */
     509char* tr_strtruncd( char * buf, double x, int precision, size_t buflen );
    504510
    505511/** @brief Portability wrapper for localtime_r() that uses the system implementation if available */
  • trunk/qt/details.cc

    r10796 r10822  
    2727#include <QHeaderView>
    2828#include <QLabel>
    29 #include <QLocale>
    3029#include <QPushButton>
    3130#include <QRadioButton>
     
    234233Details :: refresh( )
    235234{
    236     QLocale locale;
    237235    const int n = myIds.size( );
    238236    const bool single = n == 1;
     
    311309        else {
    312310            const double d = 100.0 * ( sizeWhenDone ? ( sizeWhenDone - leftUntilDone ) / sizeWhenDone : 1 );
    313             QString pct = locale.toString( d, 'f', 2 );
     311            QString pct = Utils::percentToString( d );
    314312            if( !haveUnverified )
    315313                string = tr( "%1 (%2%)" )
     
    326324
    327325    // myAvailabilityLabel
    328     if( sizeWhenDone < 1 )
    329         string = none;
    330     else
    331         string.sprintf( "%'.1f%%", ( 100.0 * available ) / sizeWhenDone );
     326    if( torrents.empty( ) )
     327        string = none;
     328    else {
     329        if( sizeWhenDone == 0 )
     330            string = none;
     331        else
     332            string = QString( "%1%" ).arg( Utils::percentToString( ( 100.0 * available ) / sizeWhenDone ) );
     333    }
    332334    myAvailabilityLabel->setText( string );
    333335
     
    860862            item->setText( COL_UP, peer.rateToPeer.isZero() ? "" : Utils::speedToString( peer.rateToPeer ) );
    861863            item->setText( COL_DOWN, peer.rateToClient.isZero() ? "" : Utils::speedToString( peer.rateToClient ) );
    862             item->setText( COL_PERCENT, peer.progress > 0 ? QString( "%1%" ).arg( locale.toString((int)(peer.progress*100.0))) : "" );
     864            item->setText( COL_PERCENT, peer.progress > 0 ? QString( "%1%" ).arg( (int)( peer.progress * 100.0 ) ) : "" );
    863865            item->setText( COL_STATUS, code );
    864866            item->setToolTip( COL_STATUS, codeTip );
  • trunk/qt/torrent-delegate.cc

    r10779 r10822  
    7575        /* %1 is the percentage of torrent metadata downloaded */
    7676        str = tr( "Magnetized transfer - retrieving metadata (%1%)" )
    77             .arg( tor.metadataPercentDone() * 100.0, 0, 'f', 2 );
     77            .arg( Utils::percentToString( tor.metadataPercentDone() * 100.0 ) );
    7878    }
    7979    else if( !isDone ) // downloading
     
    8484        str = tr( "%1 of %2 (%3%)" ).arg( Utils::sizeToString( haveTotal ) )
    8585                                    .arg( Utils::sizeToString( tor.sizeWhenDone( ) ) )
    86                                     .arg( tor.percentDone( ) * 100.0, 0, 'f', 2 );
     86                                    .arg( Utils::percentToString( tor.percentDone( ) * 100.0 ) );
    8787    }
    8888    else if( !isSeed ) // partial seed
     
    9999                  .arg( Utils::sizeToString( haveTotal ) )
    100100                  .arg( Utils::sizeToString( tor.totalSize( ) ) )
    101                   .arg( tor.percentComplete( ) * 100.0, 0, 'f', 2 )
     101                  .arg( Utils::percentToString( tor.percentComplete( ) * 100.0 ) )
    102102                  .arg( Utils::sizeToString( tor.uploadedEver( ) ) )
    103103                  .arg( Utils::ratioToString( tor.ratio( ) ) )
     
    114114                  .arg( Utils::sizeToString( haveTotal ) )
    115115                  .arg( Utils::sizeToString( tor.totalSize( ) ) )
    116                   .arg( tor.percentComplete( ) * 100.0, 0, 'f', 2 )
     116                  .arg( Utils::percentToString( tor.percentComplete( ) * 100.0 ) )
    117117                  .arg( Utils::sizeToString( tor.uploadedEver( ) ) )
    118118                  .arg( Utils::ratioToString( tor.ratio( ) ) );
     
    191191    {
    192192        case TR_STATUS_CHECK:
    193             str = tr( "Verifying local data (%1% tested)" ).arg( tor.getVerifyProgress()*100.0, 0, 'f', 1 );
     193            str = tr( "Verifying local data (%1% tested)" ).arg( Utils::percentToString( tor.getVerifyProgress()*100.0 ) );
    194194            break;
    195195
     
    232232            else
    233233                str = tr( "Downloading metadata from %n peer(s) (%1% done)", 0, tor.peersWeAreDownloadingFrom( ) )
    234                         .arg( int(100.0 * tor.metadataPercentDone( ) ) );
     234                        .arg( Utils::percentToString( 100.0 * tor.metadataPercentDone( ) ) );
    235235            break;
    236236
  • trunk/qt/utils.cc

    r10818 r10822  
    4848
    4949QString
    50 Utils :: sizeToString( double  bytes )
     50Utils :: sizeToString( double bytes )
    5151{
    5252    if( !bytes )
     
    7272
    7373QString
     74Utils :: percentToString( double x )
     75{
     76    char buf[128];
     77    return QString( tr_strpercent( buf, x, sizeof(buf) ) );
     78}
     79
     80QString
    7481Utils :: ratioToString( double ratio )
    7582{
    76     QString buf;
    77 
    78     if( (int)ratio == TR_RATIO_NA )
    79         buf = tr( "None" );
    80     else if( (int)ratio == TR_RATIO_INF )
    81         buf = QString::fromUtf8( "\xE2\x88\x9E" );
    82     else
    83     {
    84         QStringList temp;
    85 
    86         temp = QString().sprintf( "%f", ratio ).split( "." );
    87         if( ratio < 100.0 )
    88         {
    89             if( ratio < 10.0 )
    90                 temp[1].truncate( 2 );
    91             else
    92                 temp[1].truncate( 1 );
    93             buf = temp.join( "." );
    94         }
    95         else
    96             buf = QString( temp[0] );
    97     }
    98 
    99     return buf;
    100 
     83    char buf[128];
     84    return QString::fromUtf8( tr_strratio( buf, sizeof(buf), ratio, "\xE2\x88\x9E" ) );
    10185}
    10286
  • trunk/qt/utils.h

    r10818 r10822  
    3131        static QString sizeToString( double bytes );
    3232        static QString speedToString( const Speed& speed );
     33        static QString percentToString( double x );
    3334        static QString ratioToString( double ratio );
    3435        static QString timeToString( int seconds );
  • trunk/web/javascript/common.js

    r10812 r10822  
    117117 */
    118118Math.roundWithPrecision = function(floatnum, precision) {
    119         return Math.round ( floatnum * Math.pow ( 10, precision ) ) / Math.pow ( 10, precision );
    120 };
    121 
     119        return Math.round( floatnum * Math.pow ( 10, precision ) ) / Math.pow( 10, precision );
     120};
    122121
    123122/*
    124123 *   Given a numerator and denominator, return a ratio string
    125124 */
    126 Math.ratio = function( numerator, denominator )
    127 {
     125Math.ratio = function( numerator, denominator ) {
    128126        var result = Math.floor(100 * numerator / denominator) / 100;
    129127
    130128        // check for special cases
    131         if (isNaN(result)) result = 0;
    132         if (result=="Infinity") result = "&infin;";
    133 
    134         // Add the decimals if this is an integer
    135         if ((result % 1) == 0)
    136                 result = result + '.00';
     129        if(result==Number.POSITIVE_INFINITY || result==Number.NEGATIVE_INFINITY) result = -2;
     130        else if(isNaN(result)) result = -1;
    137131
    138132        return result;
    139133};
     134
     135/*
     136 *   Truncate a float to a specified number of decimal
     137 *   places, stripping trailing zeroes
     138 *
     139 *   @param float floatnum
     140 *   @param integer precision
     141 *   @returns float
     142 */
     143Math.truncateWithPrecision = function(floatnum, precision) {
     144        return Math.floor( floatnum * Math.pow ( 10, precision ) ) / Math.pow( 10, precision );
     145};
     146
     147/*
     148 *   Round a string of a number to a specified number of decimal
     149 *   places
     150 */
     151Number.prototype.toTruncFixed = function( place ) {
     152        var ret = Math.truncateWithPrecision( this, place );
     153        return ret.toFixed( place );
     154}
    140155
    141156/*
  • trunk/web/javascript/formatter.js

    r10812 r10822  
    1818                MODE_IEC: 1,
    1919                MODE_SI: 2,
     20
     21                /*
     22                 *   Format a percentage to a string
     23                 */
     24                percentString: function( x ) {
     25                        if( x < 10.0 )
     26                                return x.toTruncFixed( 2 );
     27                        else if( x < 100.0 )
     28                                return x.toTruncFixed( 1 );
     29                        else
     30                                return x.toTruncFixed( 0 );
     31                },
     32
     33                /*
     34                 *   Format a ratio to a string
     35                 */
     36                ratioString: function( x ) {
     37                        if( x ==  -1 )
     38                                return "None";
     39                        else if( x == -2 )
     40                                return '&infin;';
     41                        else
     42                                return this.percentString( x );
     43                },
    2044
    2145                setMode: function( mode ) {
  • trunk/web/javascript/torrent.js

    r10812 r10822  
    247247        },
    248248        getPercentDoneStr: function() {
    249                 return Math.floor(100 * Math.ratio( 100 * ( this._sizeWhenDone - this._leftUntilDone ),
    250                                            this._sizeWhenDone )) / 100;
     249                return Transmission.fmt.percentString( 100 * this.getPercentDone() );
    251250        },
    252251        size: function() { return this._size; },
     
    493492                                // 'Verifying local data (40% tested)'
    494493                                c = 'Verifying local data (';
    495                                 c += Math.roundWithPrecision( 100.0 * this._recheckProgress, 0 );
     494                                c += Transmission.fmt.percentString( 100.0 * this._recheckProgress );
    496495                                c += '% tested)';
    497496                                break;
     
    530529
    531530                if( this.needsMetaData() ){
    532                         var metaPercentComplete = this._metadataPercentComplete * 1000 / 100
     531                        var metaPercentComplete = this._metadataPercentComplete * 100;
    533532                        progress_details = "Magnetized transfer - retrieving metadata (";
    534                         progress_details += metaPercentComplete;
     533                        progress_details += Transmission.fmt.percentString( metaPercentComplete );
    535534                        progress_details += "%)";
    536535
     
    544543                        root._progress_incomplete_container.className = 'torrent_progress_bar incomplete compact meta'+compact;
    545544                        root._progress_incomplete_container.style.display = 'block';
    546 
    547545                }
    548546                else if( notDone )
     
    571569
    572570                        // Figure out the percent completed
    573                         var css_completed_width = Math.floor( this.getPercentDone() * 100 * MaxBarWidth ) / 100;
     571                        var css_completed_width = ( this.getPercentDone() * MaxBarWidth ).toTruncFixed( 2 );
    574572
    575573                        // Update the 'in progress' bar
     
    601599
    602600                        // Create the 'progress details' label
    603                         // Eg: '698.05 MiB, uploaded 8.59 GiB (Ratio: 12.3)'
    604                         c = Transmission.fmt.size( this._size );
     601                        // Partial seed
     602                        if( this._size != this._sizeWhenDone ) {
     603                                // Eg: '127.21 MiB of 698.05 MiB (18.2%)'
     604                                c = Transmission.fmt.size( this._sizeWhenDone );
     605                                c += ' of ';
     606                                c += Transmission.fmt.size( this._size );
     607                                c += ' (';
     608                                c += Transmission.fmt.percentString( 100.0 * this._sizeWhenDone / this._size );
     609                                c += '%)';
     610                        }
     611                        // Regular seed
     612                        else {
     613                                // Eg: '698.05 MiB'
     614                                c = Transmission.fmt.size( this._size );
     615                        }
     616                        // Eg:', uploaded 8.59 GiB (Ratio: 12.3)'
    605617                        c += ', uploaded ';
    606618                        c += Transmission.fmt.size( this._upload_total );
    607619                        c += ' (Ratio ';
    608                         if(this._upload_ratio > -1)
    609                                 c += Math.round(this._upload_ratio*100)/100;
    610                         else if(this._upload_ratio == -2)
    611                                 c += 'Inf';
    612                         else
    613                                 c += '0';
     620                        c += Transmission.fmt.ratioString( this._upload_ratio );
    614621                        c += ')';
    615622                        c += eta;
     
    962969                c += Transmission.fmt.size(this._size);
    963970                c += ' (';
    964                 c += Math.ratio(100 * this._done, this._size);
     971                c += this._size ? Transmission.fmt.percentString(100 * this._done / this._size) : '100';
    965972                c += '%)';
    966973                setInnerHTML(this._progress[0], c);
  • trunk/web/javascript/transmission.js

    r10812 r10822  
    10051005                setInnerHTML( $('#stats_session_uploaded')[0], Transmission.fmt.size(session["uploadedBytes"]) );
    10061006                setInnerHTML( $('#stats_session_downloaded')[0], Transmission.fmt.size(session["downloadedBytes"]) );
    1007                 setInnerHTML( $('#stats_session_ratio')[0], Math.ratio(session["uploadedBytes"],session["downloadedBytes"]));
     1007                setInnerHTML( $('#stats_session_ratio')[0], Transmission.fmt.ratioString(Math.ratio(session["uploadedBytes"],session["downloadedBytes"])));
    10081008                setInnerHTML( $('#stats_session_duration')[0], Transmission.fmt.timeInterval(session["secondsActive"]) );
    10091009                setInnerHTML( $('#stats_total_count')[0], total["sessionCount"] + " times" );
    10101010                setInnerHTML( $('#stats_total_uploaded')[0], Transmission.fmt.size(total["uploadedBytes"]) );
    10111011                setInnerHTML( $('#stats_total_downloaded')[0], Transmission.fmt.size(total["downloadedBytes"]) );
    1012                 setInnerHTML( $('#stats_total_ratio')[0], Math.ratio(total["uploadedBytes"],total["downloadedBytes"]));
     1012                setInnerHTML( $('#stats_total_ratio')[0], Transmission.fmt.ratioString(Math.ratio(total["uploadedBytes"],total["downloadedBytes"])));
    10131013                setInnerHTML( $('#stats_total_duration')[0], Transmission.fmt.timeInterval(total["secondsActive"]) );
    10141014        },
     
    12681268                setInnerHTML( tab.uploaded, torrents.length ? Transmission.fmt.size( total_upload ) : na );
    12691269                setInnerHTML( tab.downloaded, torrents.length ? Transmission.fmt.size( total_download ) : na );
    1270                 setInnerHTML( tab.availability, torrents.length ? Math.ratio( total_availability*100, sizeWhenDone ) + '%' : na );
    1271                 setInnerHTML( tab.ratio, torrents.length ? Math.ratio( total_upload, total_download ) : na );
     1270                setInnerHTML( tab.availability, torrents.length ? Transmission.fmt.percentString(Math.ratio( total_availability*100, sizeWhenDone )) + '%' : na );
     1271                setInnerHTML( tab.ratio, torrents.length ? Transmission.fmt.ratioString(Math.ratio( total_upload, total_download )) : na );
    12721272                setInnerHTML( tab.have, torrents.length ? Transmission.fmt.size(total_completed) + ' (' + Transmission.fmt.size(total_verified) + ' verified)' : na );
    12731273                setInnerHTML( tab.upload_to, torrents.length ? total_upload_peers : na );
     
    12751275                setInnerHTML( tab.secure, private_string );
    12761276                setInnerHTML( tab.creator_date, date_created );
    1277                 setInnerHTML( tab.progress, torrents.length ? Math.ratio( sizeDone*100, sizeWhenDone ) + '%' : na );
     1277                setInnerHTML( tab.progress, torrents.length ? Transmission.fmt.percentString(Math.ratio( sizeDone*100, sizeWhenDone )) + '%' : na );
    12781278                setInnerHTML( tab.comment, comment == na ? comment : comment.replace(/\//g, '/&#8203;') );
    12791279                setInnerHTML( tab.creator, creator );
Note: See TracChangeset for help on using the changeset viewer.