Changeset 9677


Ignore:
Timestamp:
Dec 6, 2009, 3:21:08 AM (12 years ago)
Author:
kjg
Message:

(trunk web) Add Select / Deselect All buttons to the file listing. Patch from Grug. Fixes #2294

Location:
trunk/web
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/index.html

    r9537 r9677  
    6464                <div id="torrent_inspector" style="display:none;">
    6565                       
    66                 <div style="display:none;" class="inspector_close" id="inspector_close"><img id="inspector_close_image" src="./images/buttons/cancel.png"/></div>
     66                        <div style="display:none;" class="inspector_close" id="inspector_close"><img id="inspector_close_image" src="./images/buttons/cancel.png"/></div>
    6767
    6868                        <div id="inspector_tabs">
     
    175175
    176176                        <div style="display:none;" class="inspector_container" id="inspector_tab_files_container">
    177                                 <div id="inspector_file_list"></div>
     177                                <div id="inspector_file_list">
     178                                        <ul id="select_all_button_container">
     179                                                <li id="files_deselect_all" class="select_all_button">Deselect All</li>
     180                                                <li id="files_select_all" class="select_all_button">Select All</li>
     181                                        </ul>
     182                                </div>
    178183                        </div><!-- id="inspector_tab_files_container" -->
    179184
  • trunk/web/javascript/torrent.js

    r9665 r9677  
    809809        },
    810810       
    811         setWanted: function(wanted) {
     811        setWanted: function(wanted, process) {
    812812                this._dirty = true;
    813813                this._wanted = wanted;
    814814                if(!iPhone)
    815815                  this.element().toggleClass( 'skip', !wanted );
    816                 var command = wanted ? 'files-wanted' : 'files-unwanted';
    817                 this._torrent._controller.changeFileCommand(command, this._torrent, this);
     816                if (process) {
     817                        var command = wanted ? 'files-wanted' : 'files-unwanted';
     818                        this._torrent._controller.changeFileCommand(command, this._torrent, this);
     819                }
    818820        },
    819821       
    820822        toggleWanted: function() {
    821823                if (this.isEditable())
    822                         this.setWanted( !this._wanted );
     824                        this.setWanted( !this._wanted, true );
    823825        },
    824826       
  • trunk/web/javascript/transmission.js

    r9537 r9677  
    5050                $('.file_wanted_control').live('click', function(e){ tr.fileWantedClicked(e, this); });
    5151                $('.file_priority_control').live('click', function(e){ tr.filePriorityClicked(e, this); });
     52                $('#files_select_all').live('click', function(e){ tr.filesSelectAllClicked(e, this); });
     53                $('#files_deselect_all').live('click', function(e){ tr.filesDeselectAllClicked(e, this); });
    5254                $('#open_link').bind('click', function(e){ tr.openTorrentClicked(e); });
    5355                $('#upload_confirm_button').bind('click', function(e){ tr.confirmUploadClicked(e); return false;});
     
    688690        },
    689691
     692        filesSelectAllClicked: function(event) {
     693                var tr = this;
     694                var ids = jQuery.map(this.getSelectedTorrents( ), function(t) { return t.id(); } );
     695                var files_list = this.toggleFilesWantedDisplay(ids, true);
     696                for (i = 0; i < ids.length; ++i) {
     697                        if (files_list[i].length)
     698                                this.remote.filesSelectAll( [ ids[i] ], files_list[i], function() { tr.refreshTorrents( ids ); } );
     699                }
     700        },
     701
     702        filesDeselectAllClicked: function(event) {
     703                var tr = this;
     704                var ids = jQuery.map(this.getSelectedTorrents( ), function(t) { return t.id(); } );
     705                var files_list = this.toggleFilesWantedDisplay(ids, false);
     706                for (i = 0; i < ids.length; ++i) {
     707                        if (files_list[i].length)
     708                                this.remote.filesDeselectAll( [ ids[i] ], files_list[i], function() { tr.refreshTorrents( ids ); } );
     709                }
     710        },
     711
    690712        extractFileFromElement: function(element) {
    691713                var match = $(element).closest('.inspector_torrent_file_list_entry').attr('id').match(/^t(\d+)f(\d+)$/);
     
    694716                var torrent = this._torrents[torrent_id];
    695717                return torrent._file_view[file_id];
     718        },
     719
     720        toggleFilesWantedDisplay: function(ids, wanted) {
     721                var i, j, k, torrent, files_list = [ ];
     722                for (i = 0; i < ids.length; ++i) {
     723                        torrent = this._torrents[ids[i]];
     724                        files_list[i] = [ ];
     725                        for (j = k = 0; j < torrent._file_view.length; ++j) {
     726                                if (torrent._file_view[j].isEditable() && torrent._file_view[j]._wanted != wanted) {
     727                                        torrent._file_view[j].setWanted(wanted, false);
     728                                        files_list[i][k++] = j;
     729                                }
     730                        }
     731                        torrent.refreshFileView;
     732                }
     733                return files_list;
    696734        },
    697735
     
    11271165        updateVisibleFileLists: function() {
    11281166                if( this.fileListIsVisible( ) === true ) {
    1129                         jQuery.each( this.getSelectedTorrents(), function() { this.showFileList(); } );
     1167                        var selected = this.getSelectedTorrents();
     1168                        jQuery.each( selected, function() { this.showFileList(); } );
    11301169                        jQuery.each( this.getDeselectedTorrents(), function() { this.hideFileList(); } );
     1170                        // Check if we need to display the select all buttions
     1171                        if ( !selected.length ) {
     1172                                if ( $("#select_all_button_container").is(':visible') )
     1173                                        $("#select_all_button_container").hide();
     1174                        } else {
     1175                                if ( !$("#select_all_button_container").is(':visible') )
     1176                                        $("#select_all_button_container").show();
     1177                        }
    11311178                }
    11321179        },
  • trunk/web/javascript/transmission.remote.js

    r9523 r9677  
    155155        },
    156156       
    157         sendTorrentActionRequests: function( method, torrent_ids, callback ) {
     157        sendTorrentSetRequests: function( method, torrent_ids, args, callback ) {
     158                if (!args) args = { };
     159                args['ids'] = torrent_ids;
    158160                var o = {
    159161                        method: method,
    160                         arguments: { ids: torrent_ids }
     162                        arguments: args
    161163                };
    162164
     
    166168        },
    167169       
     170        sendTorrentActionRequests: function( method, torrent_ids, callback ) {
     171                this.sendTorrentSetRequests( method, torrent_ids, null, callback );
     172        },
     173
    168174        startTorrents: function( torrent_ids, callback ) {
    169175                this.sendTorrentActionRequests( 'torrent-start', torrent_ids, callback );
     
    218224                        remote._controller.loadDaemonPrefs();
    219225                } );
     226        },
     227        filesSelectAll: function( torrent_ids, files, callback ) {
     228                this.sendTorrentSetRequests( 'torrent-set', torrent_ids, { 'files-wanted': files }, callback );
     229        },
     230        filesDeselectAll: function( torrent_ids, files, callback ) {
     231                this.sendTorrentSetRequests( 'torrent-set', torrent_ids, { 'files-unwanted': files }, callback );
    220232        }
    221233};
  • trunk/web/stylesheets/common.css

    r9665 r9677  
    567567}
    568568.inspector_container {
    569         margin: 3%;
     569        margin: 0 3%;
    570570        width: 96%;
    571571}
     
    602602        overflow: hidden;
    603603}
     604#inspector_file_list #select_all_button_container {
     605        margin: 0;
     606}
     607#inspector_file_list ul li.select_all_button {
     608        background: transparent url(../images/buttons/tab_backgrounds.png) repeat-x scroll left -6px;
     609        border: 1px solid #888888;
     610        cursor: pointer;
     611        float: right;
     612        list-style-type: none;
     613        margin: 2px;
     614        padding: 2px 5px;
     615}
     616
    604617ul.inspector_torrent_file_list {
    605618        width: 100%;
     
    612625        list-style: none;
    613626        list-style-image: none;
     627        clear: both;
    614628}
    615629li.inspector_torrent_file_list_entry {
     
    633647li.inspector_torrent_file_list_entry.skip>.inspector_torrent_file_list_entry_name {
    634648        color: #666;
    635 }
    636 li.inspector_torrent_file_list_entry.even {
    637         background-color: #EEEEEE;
    638649}
    639650div.inspector_torrent_file_list_entry_progress {
Note: See TracChangeset for help on using the changeset viewer.