Changeset 12867


Ignore:
Timestamp:
Sep 14, 2011, 3:32:12 PM (11 years ago)
Author:
jordan
Message:

(trunk web) minor code cleanup: formatting consistency, move var declarations to the beginning of functions, fit better in 80 columns.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/javascript/transmission.js

    r12865 r12867  
    3131                // Initialize the implementation fields
    3232                this.filterText    = '';
    33                 this._torrents     = { };
    34                 this._rows         = [ ];
    35                 this.dirtyTorrents = { };
     33                this._torrents     = {};
     34                this._rows         = [];
     35                this.dirtyTorrents = {};
    3636
    3737                // Initialize the clutch preferences
     
    248248        },
    249249
    250         /*
    251          * Create the footer settings menu
    252          */
    253250        createSettingsMenu: function() {
    254251                $('#settings_menu').transMenu({
     
    277274        },
    278275
     276        getTorrentIds: function(torrents)
     277        {
     278                return $.map(torrents.slice(0), function(t) {return t.getId();});
     279        },
     280
    279281        scrollToRow: function(row)
    280282        {
     
    324326
    325327        getSelectedTorrentIds: function() {
    326                 return $.map(this.getSelectedRows(),function(r) {
    327                         return r.getTorrentId();
    328                 });
     328                return this.getTorrentIds(this.getSelectedTorrents());
    329329        },
    330330
     
    361361        },
    362362
    363         /* Select a range from this torrent to the last clicked torrent */
     363        // Select a range from this row to the last clicked torrent
    364364        selectRange: function(row)
    365365        {
     
    396396        {
    397397                if (!this.selectionChangedTimer)
    398                         this.selectionChangedTimer =
    399                                 setTimeout($.proxy(this.selectionChanged,this),200);
     398                {
     399                        var callback = $.proxy(this.selectionChanged,this),
     400                            msec = 200;
     401                        this.selectionChangedTimer = setTimeout(callback, msec);
     402                }
    400403        },
    401404
     
    467470        },
    468471
    469         keyUp: function(ev)
    470         {
     472        keyUp: function(ev) {
    471473                if (ev.keyCode === 16) // shift key pressed
    472474                        delete this._shift_index;
     
    535537        },
    536538
    537         drop: function(ev) {
    538                 if (!ev.dataTransfer || !ev.dataTransfer.types) {
     539        drop: function(ev)
     540        {
     541                var i, uri, uris=null,
     542                    types = ["text/uri-list", "text/plain"];
     543                    paused = this.shouldAddedTorrentsStart();
     544
     545                if (!ev.dataTransfer || !ev.dataTransfer.types)
    539546                        return true;
    540                 }
     547
     548                for (i=0; !uris && i<types.length; ++i)
     549                        if (ev.dataTransfer.types.contains(types[i]))
     550                                uris = ev.dataTransfer.getData(types[i]).split("\n");
     551
     552                for (i=0; uri=uris[i]; ++i) {
     553                        if (/^#/.test(uri)) // lines which start with "#" are comments
     554                                continue;
     555                        if (/^[a-z-]+:/i.test(uri)) // close enough to a url
     556                                this.remote.addTorrentByUrl(uri, paused);
     557                }
     558
    541559                ev.preventDefault();
    542                 var uris = null;
    543                 var types = ["text/uri-list", "text/plain"];
    544                 for (var i = 0; i < types.length; ++i) {
    545                         if (ev.dataTransfer.types.contains(types[i])) {
    546                                 uris = ev.dataTransfer.getData(types[i]).split("\n");
    547                                 break;
    548                         }
    549                 }
    550                 var paused = this.shouldAddedTorrentsStart();
    551                 for (i = 0; i < uris.length; ++i) {
    552                         var uri = uris[i];
    553                         if (/^#/.test(uri)) {
    554                                 // lines which start with "#" are comments
    555                                 continue;
    556                         }
    557                         if (/^[a-z-]+:/i.test(uri)) {
    558                                 // close enough to a url
    559                                 this.remote.addTorrentByUrl(uri, paused);
    560                         }
    561                 }
    562560                return false;
    563561        },
     
    581579        },
    582580
     581        // turn the periodic ajax session refresh on & off
    583582        togglePeriodicSessionRefresh: function(enabled) {
    584                 /* Turn the periodic ajax session refresh on & off */
    585583                clearInterval(this.sessionInterval);
    586584                delete this.sessionInterval;
     
    592590        },
    593591
    594         /* Turn the periodic ajax stats refresh on & off */
     592        // turn the periodic ajax stats refresh on & off
    595593        togglePeriodicStatsRefresh: function(enabled) {
    596594                clearInterval(this.statsInterval);
     
    625623                $('#stats_container').fadeIn();
    626624                this.hideMobileAddressbar();
    627                 this.updateButtonStates();
    628625                this.togglePeriodicStatsRefresh(true);
    629626        },
     
    632629                $('#stats_container').fadeOut();
    633630                this.hideMobileAddressbar();
    634                 this.updateButtonStates();
    635631                this.togglePeriodicStatsRefresh(false);
    636632        },
    637633
    638         /*
    639          * Process got some new session stats from the server
    640          */
     634        // Process new session stats from the server
    641635        updateStats: function(stats)
    642636        {
    643                 var fmt = Transmission.fmt;
    644 
    645                 var s = stats["current-stats"];
     637                var s, ratio,
     638                    fmt = Transmission.fmt;
     639
     640                s = stats["current-stats"];
     641                ratio = Math.ratio(s.uploadedBytes,s.downloadedBytes);
    646642                $('#stats_session_uploaded').html(fmt.size(s.uploadedBytes));
    647643                $('#stats_session_downloaded').html(fmt.size(s.downloadedBytes));
    648                 $('#stats_session_ratio').html(fmt.ratioString(Math.ratio(s.uploadedBytes,s.downloadedBytes)));
     644                $('#stats_session_ratio').html(fmt.ratioString(ratio));
    649645                $('#stats_session_duration').html(fmt.timeInterval(s.secondsActive));
    650646
    651                 var t = stats["cumulative-stats"];
    652                 $('#stats_total_count').html(t.sessionCount + " times");
    653                 $('#stats_total_uploaded').html(fmt.size(t.uploadedBytes));
    654                 $('#stats_total_downloaded').html(fmt.size(t.downloadedBytes));
    655                 $('#stats_total_ratio').html(fmt.ratioString(Math.ratio(t.uploadedBytes,t.downloadedBytes)));
    656                 $('#stats_total_duration').html(fmt.timeInterval(t.secondsActive));
     647                s = stats["cumulative-stats"];
     648                ratio = Math.ratio(s.uploadedBytes,s.downloadedBytes);
     649                $('#stats_total_count').html(s.sessionCount + " times");
     650                $('#stats_total_uploaded').html(fmt.size(s.uploadedBytes));
     651                $('#stats_total_downloaded').html(fmt.size(s.downloadedBytes));
     652                $('#stats_total_ratio').html(fmt.ratioString(ratio));
     653                $('#stats_total_duration').html(fmt.timeInterval(s.secondsActive));
    657654        },
    658655
     
    684681                        b = o[RPC._TurtleState];
    685682                        e = $('#turtle-button');
    686                         text = [ 'Click to ', (b?'disable':'enable'), ' Temporary Speed Limits (',
    687                                  fmt.speed(o[RPC._TurtleUpSpeedLimit]), ' up,',
    688                                  fmt.speed(o[RPC._TurtleDownSpeedLimit]), ' down)' ].join('');
     683                        text = [ 'Click to ', (b?'disable':'enable'),
     684                                 ' Temporary Speed Limits (',
     685                                 fmt.speed(o[RPC._TurtleUpSpeedLimit]),
     686                                 ' up,',
     687                                 fmt.speed(o[RPC._TurtleDownSpeedLimit]),
     688                                 ' down)' ].join('');
    689689                        e.toggleClass('enabled', b);
    690690                        e.attr('title', text);
     
    770770
    771771                        case 'unlimited_download_rate':
    772                                 o = { };
     772                                o = {};
    773773                                o[RPC._DownSpeedLimited] = false;
    774774                                remote.savePrefs(o);
     
    776776
    777777                        case 'limited_download_rate':
    778                                 o = { };
     778                                o = {};
    779779                                o[RPC._DownSpeedLimited] = true;
    780780                                remote.savePrefs(o);
     
    826826        updateFromTorrentGet: function(updates, removed_ids)
    827827        {
    828                 var i, o, t, id, needed, needinfo = [];
     828                var i, o, t, id, needed, needinfo = [],
     829                    callback, fields;
    829830
    830831                for (i=0; o=updates[i]; ++i)
     
    841842                                t = this._torrents[id] = new Torrent(o);
    842843                                this.dirtyTorrents[id] = true;
    843                                 $(t).bind('dataChanged',$.proxy(this.onTorrentChanged,this));
    844                                 // if we need them, ask for fields from the server...
     844                                callback = $.proxy(this.onTorrentChanged,this);
     845                                $(t).bind('dataChanged',callback);
     846                                // do we need more info for this torrent?
    845847                                if(!('name' in t.fields) || !('status' in t.fields))
    846848                                        needinfo.push(id);
     
    850852                if (needinfo.length) {
    851853                        // whee, new torrents! get their initial information.
    852                         this.updateTorrents(needinfo, ['id'].concat(Torrent.Fields.Metadata, Torrent.Fields.Stats));
     854                        fields = ['id'].concat(Torrent.Fields.Metadata,
     855                                               Torrent.Fields.Stats);
     856                        this.updateTorrents(needinfo, fields);
    853857                        this.refilterSoon();
    854858                }
     
    862866        updateTorrents: function(ids, fields)
    863867        {
    864                 this.remote.updateTorrents(ids, fields, this.updateFromTorrentGet, this);
     868                this.remote.updateTorrents(ids, fields,
     869                                           this.updateFromTorrentGet, this);
    865870        },
    866871
     
    876881                // schedule the next request
    877882                clearTimeout(this.refreshTorrentsTimeout);
    878                 this.refreshTorrentsTimeout = setTimeout(callback,msec);
     883                this.refreshTorrentsTimeout = setTimeout(callback, msec);
    879884        },
    880885
     
    888893        onRowClicked: function(ev)
    889894        {
    890                 var row = ev.currentTarget.row;
     895                var meta_key = ev.metaKey || ev.ctrlKey,
     896                    row = ev.currentTarget.row;
    891897
    892898                // handle the per-row "torrent_resume" button
     
    908914                $('#jqContextMenu').hide();
    909915
    910                 // 'Apple' button emulation on PC :
    911                 // Need settable meta-key and ctrl-key variables for mac emulation
    912                 var meta_key = ev.metaKey;
    913                 if (ev.ctrlKey && navigator.appVersion.toLowerCase().indexOf("mac") === -1)
    914                         meta_key = true;
    915 
    916                 // Shift-Click - selects a range from the last-clicked row to this one
    917916                if (isMobileDevice) {
    918917                        if (row.isSelected())
     
    947946        deleteTorrents: function(ids)
    948947        {
     948                var i, id;
     949
    949950                if (ids && ids.length)
    950951                {
    951                         for (var i=0, id; id=ids[i]; ++i) {
     952                        for (i=0; id=ids[i]; ++i) {
    952953                                this.dirtyTorrents[id] = true;
    953954                                delete this._torrents[id];
     
    10001001                // Submit the upload form
    10011002                } else {
    1002                         var args = { };
     1003                        var args = {};
    10031004                        var remote = this.remote;
    10041005                        var paused = !$('#torrent_auto_start').is(':checked');
     
    10891090        },
    10901091
    1091         getTorrentIds: function(torrents) {
    1092                 return $.map(torrents.slice(0), function(t) {return t.getId();});
    1093         },
    10941092        startTorrents: function(torrents, force) {
    10951093                this.remote.startTorrents(this.getTorrentIds(torrents), force,
     
    11831181                    haveActive = false,
    11841182                    havePaused = false,
    1185                     haveSelection = false,
    1186                     haveActiveSelection = false,
    1187                     havePausedSelection = false;
     1183                    haveSel = false,
     1184                    haveActiveSel = false,
     1185                    havePausedSel = false;
    11881186
    11891187                clearTimeout(this.buttonRefreshTimer);
     
    11951193                        if (!isStopped) haveActive = true;
    11961194                        if (isStopped) havePaused = true;
    1197                         if (isSelected) haveSelection = true;
    1198                         if (isSelected && !isStopped) haveActiveSelection = true;
    1199                         if (isSelected && isStopped) havePausedSelection = true;
    1200                 }
    1201 
    1202                 this.setEnabled(e.toolbar_pause_button,       haveActiveSelection);
    1203                 this.setEnabled(e.context_pause_button,       haveActiveSelection);
    1204                 this.setEnabled(e.toolbar_start_button,       havePausedSelection);
    1205                 this.setEnabled(e.context_start_button,       havePausedSelection);
    1206                 this.setEnabled(e.context_move_top_button,    haveSelection);
    1207                 this.setEnabled(e.context_move_up_button,     haveSelection);
    1208                 this.setEnabled(e.context_move_down_button,   haveSelection);
    1209                 this.setEnabled(e.context_move_bottom_button, haveSelection);
    1210                 this.setEnabled(e.context_start_now_button,   havePausedSelection);
    1211                 this.setEnabled(e.toolbar_remove_button,      haveSelection);
     1195                        if (isSelected) haveSel = true;
     1196                        if (isSelected && !isStopped) haveActiveSel = true;
     1197                        if (isSelected && isStopped) havePausedSel = true;
     1198                }
     1199
     1200                this.setEnabled(e.toolbar_pause_button,       haveActiveSel);
     1201                this.setEnabled(e.context_pause_button,       haveActiveSel);
     1202                this.setEnabled(e.toolbar_start_button,       havePausedSel);
     1203                this.setEnabled(e.context_start_button,       havePausedSel);
     1204                this.setEnabled(e.context_move_top_button,    haveSel);
     1205                this.setEnabled(e.context_move_up_button,     haveSel);
     1206                this.setEnabled(e.context_move_down_button,   haveSel);
     1207                this.setEnabled(e.context_move_bottom_button, haveSel);
     1208                this.setEnabled(e.context_start_now_button,   havePausedSel);
     1209                this.setEnabled(e.toolbar_remove_button,      haveSel);
    12121210                this.setEnabled(e.toolbar_pause_all_button,   haveActive);
    12131211                this.setEnabled(e.toolbar_start_all_button,   havePaused);
     
    12541252        filterSetup: function()
    12551253        {
    1256                 var popup = $('#filter-popup');
     1254                var tr = this,
     1255                    popup = $('#filter-popup');
     1256
    12571257                popup.dialog({
    12581258                        autoOpen: false,
     
    12631263                        width: 315
    12641264                });
    1265                 var tr = this;
     1265
    12661266                $('#filter-button').click(function() {
    12671267                        if (popup.is(":visible"))
     
    13511351                    list = this.elements.torrent_list,
    13521352                    old_sel_count = $(list).children('.selected').length;
    1353 
    13541353
    13551354                clearTimeout(this.refilterTimer);
     
    14461445                // update our implementation fields
    14471446                this._rows = rows;
    1448                 this.dirtyTorrents = { };
     1447                this.dirtyTorrents = {};
    14491448
    14501449                // jquery's even/odd starts with 1 not 0, so invert its logic
     
    14731472        refreshFilterPopup: function()
    14741473        {
    1475                 var tr = this;
     1474                var i, j, o, s, state, states, counts,
     1475                    sel_state, fragment, div,
     1476                    tor, torrents, name, names,
     1477                    trackers = this.getTrackers(),
     1478                    tr = this;
    14761479
    14771480                /***
     
    14791482                ***/
    14801483
    1481                 var counts = { };
    1482                 var states = [ Prefs._FilterAll,
    1483                                Prefs._FilterActive,
    1484                                Prefs._FilterDownloading,
    1485                                Prefs._FilterSeeding,
    1486                                Prefs._FilterPaused,
    1487                                Prefs._FilterFinished ];
    1488                 for (var i=0, state; state=states[i]; ++i)
     1484                states = [ Prefs._FilterAll,
     1485                           Prefs._FilterActive,
     1486                           Prefs._FilterDownloading,
     1487                           Prefs._FilterSeeding,
     1488                           Prefs._FilterPaused,
     1489                           Prefs._FilterFinished ];
     1490
     1491                counts = {};
     1492                for (i=0; state=states[i]; ++i)
    14891493                        counts[state] = 0;
    1490                 var torrents = this.getAllTorrents();
    1491                 for (var i=0, tor; tor=torrents[i]; ++i)
    1492                         for (var j=0, s; s=states[j]; ++j)
    1493                                 if (tor.testState(s))
    1494                                         counts[s]++;
    1495                 var sel_state = tr[Prefs._FilterMode];
    1496                 var fragment = document.createDocumentFragment();
    1497                 for (var i=0, s; s=states[i]; ++i)
    1498                 {
    1499                         var div = document.createElement('div');
     1494
     1495                torrents = this.getAllTorrents();
     1496                for (i=0; tor=torrents[i]; ++i)
     1497                        for (j=0; state=states[j]; ++j)
     1498                                if (tor.testState(state))
     1499                                        counts[state]++;
     1500
     1501                sel_state = tr[Prefs._FilterMode];
     1502                fragment = document.createDocumentFragment();
     1503                for (i=0; s=states[i]; ++i)
     1504                {
     1505                        div = document.createElement('div');
    15001506                        div.id = 'show-state-' + s;
    15011507                        div.className = 'row' + (s === sel_state ? ' selected':'');
     
    15161522                ***/
    15171523
    1518                 var trackers = this.getTrackers(),
    1519                     name, name=[],
    1520                     names = [];
     1524                names = [];
    15211525                for (name in trackers)
    15221526                        names.push (name);
    15231527                names.sort();
    15241528
    1525                 var fragment = document.createDocumentFragment();
    1526                 var div = document.createElement('div');
     1529                fragment = document.createDocumentFragment();
     1530                div = document.createElement('div');
    15271531                div.id = 'show-tracker-all';
    15281532                div.className = 'row' + (tr.filterTracker ? '' : ' selected');
     
    15351539                });
    15361540                fragment.appendChild(div);
    1537                 for (var i=0, name; name=names[i]; ++i) {
    1538                         var div = document.createElement('div');
    1539                         var o = trackers[name];
     1541                for (i=0; name=names[i]; ++i) {
     1542                        o = trackers[name];
     1543                        div = document.createElement('div');
    15401544                        div.id = 'show-tracker-' + name;
    15411545                        div.className = 'row' + (o.domain === tr.filterTracker  ? ' selected':'');
     
    15681572        setFilterTracker: function(domain)
    15691573        {
     1574                // update which tracker is selected in the popup
     1575                var key = domain ? this.getReadableDomain(domain) : 'all',
     1576                    id = '#show-tracker-' + key;
     1577                $(id).addClass('selected').siblings().removeClass('selected');
     1578
    15701579                this.filterTracker = domain;
    1571 
    1572                 // update which tracker is selected in the popup
    1573                 var key = domain ? this.getReadableDomain(domain) : 'all';
    1574                 var id = '#show-tracker-' + key;
    1575                 $(id).addClass('selected').siblings().removeClass('selected');
    1576 
    15771580                this.refilter(true);
    15781581        },
    15791582
    1580         /* example: "tracker.ubuntu.com" returns "ubuntu.com" */
     1583        // example: "tracker.ubuntu.com" returns "ubuntu.com"
    15811584        getDomainName: function(host)
    15821585        {
     
    15871590        },
    15881591
    1589         /* example: "ubuntu.com" returns "Ubuntu" */
     1592        // example: "ubuntu.com" returns "Ubuntu"
    15901593        getReadableDomain: function(name)
    15911594        {
     
    16111614                                var name = this.getReadableDomain(domain);
    16121615                                if (!(name in ret))
    1613                                         ret[name] = { 'uri': uri, 'domain': domain, 'count': 0 };
     1616                                        ret[name] = { 'uri': uri,
     1617                                                      'domain': domain,
     1618                                                      'count': 0 };
    16141619                                if (names.indexOf(name) === -1)
    16151620                                        names.push(name);
Note: See TracChangeset for help on using the changeset viewer.