Changeset 12742


Ignore:
Timestamp:
Aug 25, 2011, 10:23:19 AM (10 years ago)
Author:
jordan
Message:

(trunk web) #4271 "selecting multiple files with shift-arrow doesn't work" -- fixed.

File:
1 edited

Legend:

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

    r12741 r12742  
    7373                } else {
    7474                        $(document).bind('keydown',  function(e) { tr.keyDown(e); });
     75                        $(document).bind('keyup',  function(e) { tr.keyUp(e); });
    7576                        $('#torrent_container').click(function() { tr.deselectAll(true); });
    7677                        $('#inspector_link').click(function(e) { tr.toggleInspectorClicked(e); });
     
    443444        },
    444445
     446        indexOfLastTorrent: function() {
     447                for (var i=0, r; r=this._rows[i]; ++i)
     448                        if (r.getTorrent().getId() === this._last_torrent_clicked)
     449                                return i;
     450                return -1;
     451        },
     452
    445453        /* Select a range from this torrent to the last clicked torrent */
    446454        selectRange: function(row)
    447455        {
    448                 if (!this._last_torrent_clicked) {
     456                var last = this.indexOfLastTorrent();
     457
     458                if (last === -1)
     459                {
    449460                        this.selectRow(row);
    450                 } else { // select the range between the prevous & current
    451 
    452                         var prev = null;
    453                         var next = null;
    454                         for (var i=0, r; r=this._rows[i]; ++i) {
    455                                 if (r.getTorrent().getId() === this._last_torrent_clicked)
    456                                         prev = i;
    457                                 if (r === row)
    458                                         next = i;
    459                         }
    460                         if ((prev!==null) && (next!==null)) {
    461                                 var min = Math.min(prev, next);
    462                                 var max = Math.max(prev, next);
    463                                 for (i=min; i<=max; ++i)
    464                                         this.selectRow(this._rows[i]);
    465                         }
    466                 }
    467 
    468                 //this._last_row_clicked = row
     461                }
     462                else // select the range between the prevous & current
     463                {
     464                        var next = this._rows.indexOf(row);
     465                        var min = Math.min(last, next);
     466                        var max = Math.max(last, next);
     467                        for (var i=min; i<=max; ++i)
     468                                this.selectRow(this._rows[i]);
     469                }
     470
    469471                this.callSelectionChangedSoon();
    470472        },
     
    502504                var up = ev.keyCode === 38; // up key pressed
    503505                var dn = ev.keyCode === 40; // down key pressed
     506                var shift = ev.keyCode === 16; // shift key pressed
    504507
    505508                if (up || dn)
     
    507510                        var rows = this._rows;
    508511
    509                         // find the first selected row
    510                         for (var i=0, row; row=rows[i]; ++i)
    511                                 if (row.isSelected())
    512                                         break;
    513 
    514                         if (i == rows.length) // no selection yet
     512                        var last = this.indexOfLastTorrent();
     513                        var i = last;
     514
     515                        if (i === -1) // no selection yet
    515516                                i = 0;
    516517                        else if (dn)
     
    518519                        else if (up)
    519520                                i = (i || rows.length) - 1;
    520 
    521                         this.setSelectedRow(rows[i]);
    522                         this.scrollToRow(rows[i]);
    523                 }
     521                        r = rows[i];
     522
     523                        if (this._shift_index >= 0)
     524                        {
     525                                // user is extending the selection with the shift + arrow keys...
     526                                if (   ((this._shift_index <= last) && (last < i))
     527                                    || ((this._shift_index >= last) && (last > i)))
     528                                {
     529                                        this.selectRow(r);
     530                                }
     531                                else if (((this._shift_index >= last) && (i > last))
     532                                      || ((this._shift_index <= last) && (last > i)))
     533                                {
     534                                        this.deselectRow(rows[last]);
     535                                }
     536                        }
     537                        else
     538                        {
     539                                if (ev.shiftKey)
     540                                        this.selectRange(r);
     541                                else
     542                                        this.setSelectedRow(r);
     543                        }
     544                        this._last_torrent_clicked = r.getTorrent().getId();
     545                        this.scrollToRow(r);
     546                }
     547                else if (shift)
     548                {
     549                        this._shift_index = this.indexOfLastTorrent();
     550                }
     551        },
     552
     553        keyUp: function(ev)
     554        {
     555                if (ev.keyCode === 16) // shift key pressed
     556                        delete this._shift_index;
    524557        },
    525558
Note: See TracChangeset for help on using the changeset viewer.