From b4c6284fae00c2036bb6625539d4961550e65d5d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 8 Dec 2014 23:40:06 -0800 Subject: [PATCH] New: Shift-click range selection for Series Editor --- src/UI/Cells/EpisodeMonitoredCell.js | 6 +-- src/UI/Cells/SelectAllCell.js | 49 ++++++++++++++++++++++ src/UI/Series/Editor/SeriesEditorLayout.js | 4 +- src/UI/app.js | 2 +- 4 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 src/UI/Cells/SelectAllCell.js diff --git a/src/UI/Cells/EpisodeMonitoredCell.js b/src/UI/Cells/EpisodeMonitoredCell.js index 5f6c7f689..e88f1626f 100644 --- a/src/UI/Cells/EpisodeMonitoredCell.js +++ b/src/UI/Cells/EpisodeMonitoredCell.js @@ -27,7 +27,7 @@ define( return; } - if (e.shiftKey) { + if (e.shiftKey && this.model.episodeCollection.lastToggled) { this._selectRange(); return; @@ -41,10 +41,6 @@ define( var episodeCollection = this.model.episodeCollection; var lastToggled = episodeCollection.lastToggled; - if (!lastToggled) { - return; - } - var currentIndex = episodeCollection.indexOf(this.model); var lastIndex = episodeCollection.indexOf(lastToggled); diff --git a/src/UI/Cells/SelectAllCell.js b/src/UI/Cells/SelectAllCell.js new file mode 100644 index 000000000..cb70e059f --- /dev/null +++ b/src/UI/Cells/SelectAllCell.js @@ -0,0 +1,49 @@ +'use strict'; +define( + [ + 'jquery', + 'underscore', + 'backgrid.selectall' + ], function ($, _, BackgridSelectAll) { + return BackgridSelectAll.extend({ + + enterEditMode: function (e) { + if (e.shiftKey && this.model.collection.lastToggled) { + this._selectRange(); + } + + var checked = $(e.target).prop('checked'); + + this.model.collection.lastToggled = this.model; + this.model.collection.checked = checked; + }, + + onChange: function (e) { + var checked = $(e.target).prop('checked'); + this.$el.parent().toggleClass('selected', checked); + this.model.trigger('backgrid:selected', this.model, checked); + }, + + _selectRange: function () { + var collection = this.model.collection; + var lastToggled = collection.lastToggled; + var checked = collection.checked; + + var currentIndex = collection.indexOf(this.model); + var lastIndex = collection.indexOf(lastToggled); + + var low = Math.min(currentIndex, lastIndex); + var high = Math.max(currentIndex, lastIndex); + var range = _.range(low + 1, high); + + _.each(range, function (index) { + var model = collection.at(index); + + model.trigger('backgrid:select', model, checked); + }); + + this.model.collection.lastToggled = undefined; + this.model.collection.checked = undefined; + } + }); + }); diff --git a/src/UI/Series/Editor/SeriesEditorLayout.js b/src/UI/Series/Editor/SeriesEditorLayout.js index 38257a593..0c58ed506 100644 --- a/src/UI/Series/Editor/SeriesEditorLayout.js +++ b/src/UI/Series/Editor/SeriesEditorLayout.js @@ -10,6 +10,7 @@ define( 'Cells/ProfileCell', 'Cells/SeriesStatusCell', 'Cells/SeasonFolderCell', + 'Cells/SelectAllCell', 'Shared/Toolbar/ToolbarLayout', 'Series/Editor/SeriesEditorFooterView', 'Mixins/backbone.signalr.mixin' @@ -22,6 +23,7 @@ define( ProfileCell, SeriesStatusCell, SeasonFolderCell, + SelectAllCell, ToolbarLayout, FooterView) { return Marionette.Layout.extend({ @@ -48,7 +50,7 @@ define( [ { name : '', - cell : 'select-row', + cell : SelectAllCell, headerCell : 'select-all', sortable : false }, diff --git a/src/UI/app.js b/src/UI/app.js index 17294eaf9..4512b854d 100644 --- a/src/UI/app.js +++ b/src/UI/app.js @@ -221,7 +221,7 @@ require.config({ }, 'backgrid.selectall' : { - exports: 'Backgrid.Extension.SelectAll', + exports: 'Backgrid.Extension.SelectRowCell', deps: [