Changeset 8526


Ignore:
Timestamp:
May 25, 2009, 7:33:59 AM (12 years ago)
Author:
charles
Message:

(trunk web) bind globally instead of to each individual transfer.

Location:
trunk/web/javascript
Files:
2 edited

Legend:

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

    r8525 r8526  
    4141
    4242                // Create a new <li> element
    43                 var top_e = document.createElement( 'li' );
    44                 top_e.className = 'torrent';
    45                 top_e.id = 'torrent_' + data.id;
    46                 var element = $(top_e);
     43                var element = document.createElement( 'li' );
     44                element.className = 'torrent';
     45                element.id = 'torrent_' + data.id;
    4746                element._torrent = this;
    4847                this._element = element;
     
    5352                var e = document.createElement( 'div' );
    5453                e.className = 'torrent_name';
    55                 top_e.appendChild( e );
     54                element.appendChild( e );
    5655                element._name_container = e;
    5756               
     
    5958                e = document.createElement( 'div' );
    6059                e.className = 'torrent_progress_details';
    61                 top_e.appendChild( e );
     60                element.appendChild( e );
    6261                element._progress_details_container = e;
    6362
     
    6665                e.className = 'torrent_progress_bar incomplete';
    6766                e.style.width = '0%';
    68                 top_e.appendChild( e );
     67                element.appendChild( e );
    6968                element._progress_complete_container = e;
    7069                       
     
    7372                e.className = 'torrent_progress_bar incomplete';
    7473                e.style.display = 'none';
    75                 top_e.appendChild( e );
     74                element.appendChild( e );
    7675                element._progress_incomplete_container = e;
    7776               
     
    8382                e = document.createElement( 'a' );
    8483                e.appendChild( image );
    85                 top_e.appendChild( e );
     84                element.appendChild( e );
    8685                element._pause_resume_button_image = image;
    87                 if (!iPhone) $(e).bind('click', {element: element}, this.clickPauseResumeButton);
    8886               
    8987                // Create the 'peer details' <div>
    9088                e = document.createElement( 'div' );
    9189                e.className = 'torrent_peer_details';
    92                 top_e.appendChild( e );
     90                element.appendChild( e );
    9391                element._peer_details_container = e;
    94                
    95                 // Set the torrent click observer
    96                 element.bind('click', {element: element}, this.clickTorrent);
    97                 if (!iPhone) element.bind('contextmenu', {element: element}, this.rightClickTorrent);           
    9892               
    9993                // Safari hack - first torrent needs to be moved down for some reason. Seems to be ok when
     
    119113               
    120114                // insert the element
    121                 transferListParent.appendChild(top_e);
     115                transferListParent.appendChild(element);
    122116        },
    123117       
     
    202196        hideFileList: function() { this.fileList().hide(); },
    203197       
    204         /*--------------------------------------------
    205          *
    206          *  E V E N T   F U N C T I O N S
    207          *
    208          *--------------------------------------------*/
    209        
    210         /*
    211          * Process a right-click event on this torrent
    212          */
    213         rightClickTorrent: function(event)
    214         {
    215                 // don't stop the event! need it for the right-click menu
    216                
    217                 var t = event.data.element._torrent;
    218                 if ( !t.isSelected( ) )
    219                         t._controller.setSelectedTorrent( t );
    220         },
    221        
    222         /*
    223          * Process a click event on this torrent
    224          */
    225         clickTorrent: function( event )
    226         {
    227                 // Prevents click carrying to parent element
    228                 // which deselects all on click
    229                 event.stopPropagation();
    230                 var torrent = event.data.element._torrent;
    231                
    232                 // 'Apple' button emulation on PC :
    233                 // Need settable meta-key and ctrl-key variables for mac emulation
    234                 var meta_key = event.metaKey;
    235                 var ctrl_key = event.ctrlKey;
    236                 if (event.ctrlKey && navigator.appVersion.toLowerCase().indexOf("mac") == -1) {
    237                         meta_key = true;
    238                         ctrl_key = false;
    239                 }
    240                
    241                 // Shift-Click - Highlight a range between this torrent and the last-clicked torrent
    242                 if (iPhone) {
    243                         torrent._controller.setSelectedTorrent( torrent, true );
    244                
    245                 } else if (event.shiftKey) {
    246                         torrent._controller.selectRange( torrent, true );
    247                         // Need to deselect any selected text
    248                         window.focus();
    249                
    250                 // Apple-Click, not selected
    251                 } else if (!torrent.isSelected() && meta_key) {
    252                         torrent._controller.selectTorrent( torrent, true );
    253                        
    254                 // Regular Click, not selected
    255                 } else if (!torrent.isSelected()) {
    256                         torrent._controller.setSelectedTorrent( torrent, true );
    257                
    258                 // Apple-Click, selected       
    259                 } else if (torrent.isSelected() && meta_key) {
    260                         torrent._controller.deselectTorrent( torrent, true );
    261                        
    262                 // Regular Click, selected
    263                 } else if (torrent.isSelected()) {
    264                         torrent._controller.setSelectedTorrent( torrent, true );
    265                 }
    266                
    267                 torrent._controller.setLastTorrentClicked(torrent);
    268         },
    269 
    270         /*
    271          * Process a click event on the pause/resume button
    272          */
    273         clickPauseResumeButton: function( event )
    274         {
    275                 // prevent click event resulting in selection of torrent
    276                 event.stopPropagation();
    277 
    278                 // either stop or start the torrent
    279                 var torrent = event.data.element._torrent;
    280                 if( torrent.isActive( ) )
    281                         torrent._controller.stopTorrent( torrent );
    282                 else
    283                         torrent._controller.startTorrent( torrent );
    284         },
    285 
    286198        /*--------------------------------------------
    287199         *
     
    500412         */
    501413        isSelected: function() {
    502                 return this.element()[0].className.indexOf('selected') != -1;
     414                return this.element().className.indexOf('selected') != -1;
    503415        },
    504416
  • trunk/web/javascript/transmission.js

    r8524 r8526  
    6161                $('.file_wanted_control').live('click', function(e){ tr.fileWantedClicked(e, this); });
    6262                $('.file_priority_control').live('click', function(e){ tr.filePriorityClicked(e, this); });
     63                $('.torrent_list > .torrent').live('click', function(e){ tr.torrentClicked(e, this); });
    6364                if (iPhone) {
    6465                        $('#torrent_inspector').bind('click', function(e){ tr.hideInspector(); });
    6566                        $('#preferences_link').bind('click', function(e){ tr.releaseClutchPreferencesButton(e); });
    6667                } else {
     68                        $('.torrent_resume').live('click', function(e){ tr.torrentResumeClicked(e, this); });
     69                        $('.torrent_pause').live('click', function(e){ tr.torrentPauseClicked(e, this); });
    6770                        $(document).bind('keydown',  function(e){ tr.keyDown(e); });
    68                         $('#torrent_container').bind('click', function(e){ tr.deselectAll( true ); });
     71                        //$('#torrent_container').bind('click', function(e){ tr.deselectAll( true ); });
    6972                        $('#open_link').bind('click', function(e){ tr.openTorrentClicked(e); });
    7073                        $('#filter_toggle_link').bind('click', function(e){ tr.toggleFilterClicked(e); });
     
    289292                        boundingElement:   $('div#torrent_container'),
    290293                        boundingRightPad:  20,
    291                         boundingBottomPad: 5
     294                        boundingBottomPad: 5,
     295                        onContextMenu:     function(e) {
     296                                tr.setSelectedElement( $(e.target).closest('.torrent')[0], true );
     297                                return true;
     298                        }
    292299                });
    293300        },
     
    324331                var torrents = [ ];
    325332                for( var i=0, row; row=this._rows[i]; ++i )
    326                         if( row._torrent && ( row[0].style.display != 'none' ) )
     333                        if( row._torrent && ( row.style.display != 'none' ) )
    327334                                torrents.push( row._torrent );
    328335                return torrents;
     
    354361                var rows = [ ];
    355362                for( var i=0, row; row=this._rows[i]; ++i )
    356                         if( row[0].style.display != 'none' )
     363                        if( row.style.display != 'none' )
    357364                                rows.push( row );
    358365                return rows;
     
    375382        scrollToElement: function( e )
    376383        {
    377                 if( iPhone )
    378                         return;
    379 
    380                 var container = $('#torrent_container');
    381                 var scrollTop = container.scrollTop( );
    382                 var innerHeight = container.innerHeight( );
    383 
    384                 var offsetTop = e[0].offsetTop;
    385                 var offsetHeight = e.outerHeight( );
    386 
    387                 if( offsetTop < scrollTop )
    388                         container.scrollTop( offsetTop );
    389                 else if( innerHeight + scrollTop < offsetTop + offsetHeight )
    390                         container.scrollTop( offsetTop + offsetHeight - innerHeight );
     384                if( !iPhone )
     385                {
     386                        var container = $('#torrent_container');
     387                        var scrollTop = container.scrollTop( );
     388                        var innerHeight = container.innerHeight( );
     389
     390                        var offsetTop = e.offsetTop;
     391                        var offsetHeight = $(e).outerHeight( );
     392
     393                        if( offsetTop < scrollTop )
     394                                container.scrollTop( offsetTop );
     395                        else if( innerHeight + scrollTop < offsetTop + offsetHeight )
     396                                container.scrollTop( offsetTop + offsetHeight - innerHeight );
     397                }
    391398        },
    392399
     
    397404         *--------------------------------------------*/
    398405
    399         setSelectedTorrent: function( torrent, doUpdate ) {
     406        setSelectedElement: function( element, doUpdate ) {
    400407                this.deselectAll( );
    401                 this.selectTorrent( torrent, doUpdate );
     408                this.selectElement( element, doUpdate );
    402409        },
    403410
    404411        selectElement: function( e, doUpdate ) {
    405                 $.className.add( e[0], 'selected' );
    406412                this.scrollToElement( e );
     413                $.className.add( e, 'selected' );
    407414                if( doUpdate )
    408415                        this.selectionChanged( );
    409                 $.className.add( e[0], 'selected' );
    410         },
    411         selectRow: function( rowIndex, doUpdate ) {
    412                 this.selectElement( this._rows[rowIndex], doUpdate );
    413         },
    414         selectTorrent: function( torrent, doUpdate ) {
    415                 if( torrent._element )
    416                         this.selectElement( torrent._element, doUpdate );
    417416        },
    418417
    419418        deselectElement: function( e, doUpdate ) {
    420                 $.className.remove( e[0], 'selected' );
     419                $.className.remove( e, 'selected' );
    421420                if( doUpdate )
    422421                        this.selectionChanged( );
    423         },
    424         deselectTorrent: function( torrent, doUpdate ) {
    425                 if( torrent._element )
    426                         this.deselectElement( torrent._element, doUpdate );
    427422        },
    428423
     
    438433                for( var i=0, row; row=tr._rows[i]; ++i )
    439434                        tr.deselectElement( row );
    440                 tr._last_torrent_clicked = null;
     435                tr._last_element_clicked = null;
    441436                if( doUpdate )
    442437                        tr.selectionChanged( );
     
    446441         * Select a range from this torrent to the last clicked torrent
    447442         */
    448         selectRange: function( torrent, doUpdate )
    449         {
    450                 if( !this._last_torrent_clicked )
    451                 {
    452                         this.selectTorrent( torrent );
    453                 }
    454                 else // select the range between the prevous & current
    455                 {
    456                         var rows = this.getVisibleRows( );
    457                         var i = this.getTorrentIndex( rows, this._last_torrent_clicked );
    458                         var end = this.getTorrentIndex( rows, torrent );
    459                         var step = i < end ? 1 : -1;
    460                         for( ; i!=end; i+=step )
    461                                 this.selectRow( i );
    462                         this.selectRow( i );
     443        selectRange: function( element, doUpdate )
     444        {
     445                if( !this._last_element_clicked )
     446                        this.selectElement( element );
     447                else { // select the range between the prevous & current
     448                        var a = this._rows.indexOf( this._last_element_clicked );
     449                        var b = this._rows.indexOf( element );
     450                        var begin = a < b ? a : b;
     451                        var end = a > b ? a : b;
     452                        for( var i=begin; i<=end; ++i )
     453                                this.selectElement( this._rows[i] );
    463454                }
    464455
     
    504495                }
    505496
    506                 if( 0<=i && i<rows.length ) {
    507                         tr.deselectAll( );
    508                         tr.selectRow( i, true );
    509                 }
     497                if( 0<=i && i<rows.length )
     498                        this.setSelectedElement (this._rows[i]);
    510499        },
    511500   
     
    650639       
    651640                this.updateVisibleFileLists();
     641        },
     642
     643        torrentClicked: function(event, element)
     644        {
     645                var torrent = element._torrent;
     646                var isSelected = element.className.indexOf('selected') != -1;
     647
     648       
     649//console.log ('torrent clicked. meta ' + event.metaKey + ' ctrl ' + event.ctrlKey + ' shift ' + event.shiftKey );     
     650                // 'Apple' button emulation on PC:
     651                // TODO: Need settable meta-key and ctrl-key variables for mac emulation
     652                var meta_key = event.metaKey;
     653                var ctrl_key = event.ctrlKey;
     654                if (event.ctrlKey && navigator.appVersion.toLowerCase().indexOf("mac") == -1) {
     655                        meta_key = true;
     656                        ctrl_key = false;
     657                }
     658               
     659                // Shift-Click - Highlight a range between this torrent and the last-clicked torrent
     660                if (iPhone) {
     661                        this.setSelectedElement( element, true );
     662                } else if (event.shiftKey) {
     663                        this.selectRange( element, true );
     664                        // Need to deselect any selected text
     665                        window.focus();
     666               
     667                } else if (!isSelected && meta_key) { // Apple-Click, not selected
     668                        this.selectElement( element, true );
     669                } else if (!isSelected) { // Regular Click, not selected
     670                        this.setSelectedElement( element, true );
     671                } else if (isSelected && meta_key) { // Apple-Click, selected   
     672                        this.deselectElement( element, true );
     673                } else if (isSelected) { // Regular Click, selected
     674                        this.setSelectedElement( element, true );
     675                }
     676               
     677                this._last_element_clicked = element;
     678
     679                // Prevents click carrying to parent element
     680                // which deselects all on click
     681                event.stopPropagation();
     682        },
     683
     684        torrentPauseClicked: function (event, element) {
     685                var row = element.parentNode.parentNode;
     686                console.log ('pause clicked');
     687                this.stopTorrent (row._torrent);
     688                event.stopPropagation ();
     689        },
     690
     691        torrentResumeClicked: function (event, element) {
     692                var row = element.parentNode.parentNode;
     693                console.log ('resume clicked');
     694                this.startTorrent (row._torrent);
     695                event.stopPropagation ();
    652696        },
    653697
     
    901945        },
    902946
    903         setLastTorrentClicked: function( torrent )
    904         {
    905                 this._last_torrent_clicked = torrent;
    906         },
    907    
    908947        /*
    909948         * Update the inspector with the latest data for the selected torrents
     
    12501289                var rows = this.getVisibleRows( );
    12511290                for( var i=0, row; row=rows[i]; ++i ) {
    1252                         var wasEven = row[0].className.indexOf('even') != -1;
     1291                        var wasEven = row.className.indexOf('even') != -1;
    12531292                        var isEven = ((i+1) % 2 == 0);
    12541293                        if( wasEven != isEven )
    1255                                 row.toggleClass('even', isEven);
     1294                                $(row).toggleClass('even', isEven);
    12561295                }
    12571296        },
     
    14581497                for( var i=keep.length, e; e=this._rows[i]; ++i ) {
    14591498                        delete e._torrent;
    1460                         e[0].style.display = 'none';
     1499                        e.style.display = 'none';
    14611500                }
    14621501
     
    14651504                for( var i=0, len=keep.length; i<len; ++i ) {
    14661505                        var e = this._rows[i];
    1467                         e[0].style.display = 'block';
     1506                        e.style.display = 'block';
    14681507                        var t = keep[i];
    14691508                        t.setElement( e );
Note: See TracChangeset for help on using the changeset viewer.