lidarr/src/UI/Settings/Profile/Delay/DelayProfileLayout.js
2015-02-14 19:12:32 +01:00

101 lines
No EOL
2.8 KiB
JavaScript

var $ = require('jquery');
var _ = require('underscore');
var vent = require('vent');
var AppLayout = require('../../../AppLayout');
var Marionette = require('marionette');
var Backbone = require('backbone');
var DelayProfileCollectionView = require('./DelayProfileCollectionView');
var EditView = require('./Edit/DelayProfileEditView');
var Model = require('./DelayProfileModel');
module.exports = Marionette.Layout.extend({
template : 'Settings/Profile/Delay/DelayProfileLayoutTemplate',
regions : {
delayProfiles : '.x-rows'
},
events : {
'click .x-add' : '_add'
},
initialize : function(options) {
this.collection = options.collection;
this._updateOrderedCollection();
this.listenTo(this.collection, 'sync', this._updateOrderedCollection);
this.listenTo(this.collection, 'add', this._updateOrderedCollection);
this.listenTo(this.collection, 'remove', function() {
this.collection.fetch();
});
},
onRender : function() {
this.sortableListView = new DelayProfileCollectionView({
sortable : true,
collection : this.orderedCollection,
sortableOptions : {
handle : '.x-drag-handle'
},
sortableModelsFilter : function(model) {
return model.get('id') !== 1;
}
});
this.delayProfiles.show(this.sortableListView);
this.listenTo(this.sortableListView, 'sortStop', this._updateOrder);
},
_updateOrder : function() {
var self = this;
this.collection.forEach(function(model) {
if (model.get('id') === 1) {
return;
}
var orderedModel = self.orderedCollection.get(model);
var order = self.orderedCollection.indexOf(orderedModel) + 1;
if (model.get('order') !== order) {
model.set('order', order);
model.save();
}
});
},
_add : function() {
var model = new Model({
enableUsenet : true,
enableTorrent : true,
preferredProtocol : 'usenet',
usenetDelay : 0,
torrentDelay : 0,
order : this.collection.length,
tags : []
});
model.collection = this.collection;
var view = new EditView({
model : model,
targetCollection : this.collection
});
AppLayout.modalRegion.show(view);
},
_updateOrderedCollection : function() {
if (!this.orderedCollection) {
this.orderedCollection = new Backbone.Collection();
}
this.orderedCollection.reset(_.sortBy(this.collection.models, function(model) {
return model.get('order');
}));
}
});