diff --git a/UI/Cells/Edit/QualityCellEditor.js b/UI/Cells/Edit/QualityCellEditor.js new file mode 100644 index 000000000..a9bb9c856 --- /dev/null +++ b/UI/Cells/Edit/QualityCellEditor.js @@ -0,0 +1,69 @@ +'use strict'; +define( + [ + 'backgrid', + 'Settings/Quality/Profile/QualityProfileSchemaCollection' + ], function (Backgrid, QualityProfileSchemaCollection) { + return Backgrid.CellEditor.extend({ + + className: 'quality-cell-editor', + template : 'Cells/Edit/QualityCellEditorTemplate', + tagName : 'select', + + events: { + 'change': 'save', + 'blur': 'close', + 'keydown': 'close' + }, + + render: function () { + var self = this; + + var qualityProfileSchemaCollection = new QualityProfileSchemaCollection(); + var promise = qualityProfileSchemaCollection.fetch(); + + promise.done(function () { + var templateName = self.template; + self.schema = qualityProfileSchemaCollection.first(); + + var selected = _.find(self.schema.get('available'), { 'id': self.cell.cellValue.get('quality').id }); + selected.selected = true; + + self.templateFunction = Marionette.TemplateCache.get(templateName); + var data = self.schema.toJSON(); + var html = self.templateFunction(data); + self.$el.html(html); + }); + + return this; + }, + + save: function (e) { + var model = this.model; + var column = this.column; + var selected = parseInt(this.$el.val()); + + var quality = _.find(this.schema.get('available'), { 'id': selected }); + + var newQuality = { + proper: false, + quality: quality + }; + + model.set(column.get("name"), newQuality); + model.trigger("backgrid:edited", model, column, new Backgrid.Command(e)); + }, + + close: function (e) { + var model = this.model; + var column = this.column; + var command = new Backgrid.Command(e); + + model.trigger("backgrid:edited", model, column, command); + }, + + _setOptions: function (options) { + this.cell = options.cell + } + }); + }); diff --git a/UI/Cells/Edit/QualityCellEditorTemplate.html b/UI/Cells/Edit/QualityCellEditorTemplate.html new file mode 100644 index 000000000..92d3bea99 --- /dev/null +++ b/UI/Cells/Edit/QualityCellEditorTemplate.html @@ -0,0 +1,7 @@ +{{#each available}} + {{#if selected}} + + {{else}} + + {{/if}} +{{/each}} \ No newline at end of file diff --git a/UI/Cells/NzbDroneCell.js b/UI/Cells/NzbDroneCell.js index 4f23f251a..706eb058e 100644 --- a/UI/Cells/NzbDroneCell.js +++ b/UI/Cells/NzbDroneCell.js @@ -14,6 +14,12 @@ define( this.cellValue = this._getValue(); this.listenTo(this.model, 'change', this._refresh); + + this.listenTo(this.model, "backgrid:edit", function (model, column, cell, editor) { + if (column.get("name") == this.column.get("name")) { + this._startEditing(model, column, cell, editor); + } + }); }, _refresh: function () { diff --git a/UI/Cells/QualityCell.js b/UI/Cells/QualityCell.js index 65d5b28cc..0dba839aa 100644 --- a/UI/Cells/QualityCell.js +++ b/UI/Cells/QualityCell.js @@ -1,12 +1,17 @@ 'use strict'; define( [ - 'Cells/TemplatedCell' - ], function (TemplatedCell) { + 'Cells/TemplatedCell', + 'Cells/Edit/QualityCellEditor' + ], function (TemplatedCell, QualityCellEditor) { return TemplatedCell.extend({ className: 'quality-cell', - template : 'Cells/QualityCellTemplate' + template : 'Cells/QualityCellTemplate', + editor : QualityCellEditor, + _startEditing: function (model, column, cell, editor) { + editor._setOptions({ cell: cell }); + } }); }); diff --git a/UI/Cells/TemplatedCell.js b/UI/Cells/TemplatedCell.js index 1c82ef9d6..1da28d5ed 100644 --- a/UI/Cells/TemplatedCell.js +++ b/UI/Cells/TemplatedCell.js @@ -7,7 +7,6 @@ define( ], function (Marionette, NzbDroneCell) { return NzbDroneCell.extend({ - render: function () { var templateName = this.column.get('template') || this.template; @@ -17,6 +16,7 @@ define( var html = this.templateFunction(data); this.$el.html(html); + this.delegateEvents(); return this; } }); diff --git a/UI/Episode/Summary/Layout.js b/UI/Episode/Summary/Layout.js index 72f0c08b0..f47d3ae15 100644 --- a/UI/Episode/Summary/Layout.js +++ b/UI/Episode/Summary/Layout.js @@ -34,7 +34,8 @@ define( name : 'quality', label : 'Quality', cell : QualityCell, - sortable: false + sortable: false, + editable: true } ], diff --git a/UI/Settings/Quality/Profile/QualityProfileCollectionView.js b/UI/Settings/Quality/Profile/QualityProfileCollectionView.js index 2e504d1b4..7ea2e822c 100644 --- a/UI/Settings/Quality/Profile/QualityProfileCollectionView.js +++ b/UI/Settings/Quality/Profile/QualityProfileCollectionView.js @@ -4,8 +4,8 @@ define(['app', 'marionette', 'Settings/Quality/Profile/QualityProfileView', 'Settings/Quality/Profile/EditQualityProfileView', - 'Settings/Quality/Profile/QualityProfileSchemaCollection'], - function (App, Marionette, QualityProfileView, EditProfileView, ProfileCollection) { + 'Settings/Quality/Profile/QualityProfileSchemaCollection' +], function (App, Marionette, QualityProfileView, EditProfileView, ProfileCollection) { return Marionette.CompositeView.extend({ itemView : QualityProfileView, @@ -24,7 +24,6 @@ define(['app', collectionView.ui.addCard.parent('li').before(itemView.el); }, - _addProfile: function () { var self = this; var schemaCollection = new ProfileCollection();