keeweb/app/scripts/views/generator-presets-view.js

98 lines
3.0 KiB
JavaScript
Raw Normal View History

2016-08-13 21:13:16 +02:00
'use strict';
const Backbone = require('backbone');
2016-08-13 22:19:15 +02:00
const Locale = require('../util/locale');
2016-08-13 21:13:16 +02:00
2016-08-13 22:19:15 +02:00
let GeneratorPresetsView = Backbone.View.extend({
2016-08-13 21:13:16 +02:00
template: require('templates/generator-presets.hbs'),
events: {
2016-08-13 22:19:15 +02:00
'click .back-button': 'returnToApp',
'change .gen-ps__list': 'changePreset',
'click .gen-ps__btn-create': 'createPreset',
'click .gen-ps__btn-delete': 'deletePreset',
'input #gen-ps__field-name': 'changeName'
2016-08-13 21:13:16 +02:00
},
2016-08-13 22:19:15 +02:00
selected: null,
2016-08-13 21:13:16 +02:00
initialize: function() {
this.appModel = this.model;
},
render: function() {
2016-08-13 22:19:15 +02:00
let presets = this.appModel.settings.get('generatorPresets') || [];
if (!this.selected || presets.indexOf(this.selected) < 0) {
this.selected = presets[0];
}
2016-08-13 21:13:16 +02:00
this.renderTemplate({
2016-08-13 22:19:15 +02:00
empty: !presets.length,
presets: presets,
selected: this.selected
2016-08-13 21:13:16 +02:00
}, true);
return this;
},
returnToApp: function() {
Backbone.trigger('edit-generator-presets');
2016-08-13 22:19:15 +02:00
},
changePreset: function(e) {
let id = e.target.value;
let presets = this.appModel.settings.get('generatorPresets');
this.selected = presets.filter(p => p.id === id)[0];
this.render();
},
createPreset: function() {
let presets = this.appModel.settings.get('generatorPresets') || [];
let name;
let id;
for (let i = 1; ; i++) {
let newName = Locale.genPsNew + ' ' + i;
if (!presets.filter(p => p.name === newName).length) {
name = newName;
break;
}
}
for (let i = 1; ; i++) {
let newId = 'custom' + i;
if (!presets.filter(p => p.id === newId).length) {
id = newId;
break;
}
}
let preset = { id, name };
presets.push(preset);
this.selected = preset;
this.appModel.settings.set('generatorPresets', presets);
this.render();
},
deletePreset: function() {
let presets = this.appModel.settings.get('generatorPresets');
presets = presets.filter(p => p.id !== this.selected.id);
this.appModel.settings.set('generatorPresets', presets.length ? presets : null);
this.render();
},
changeName: function(e) {
let name = $.trim(e.target.value);
if (name && name !== this.selected.name) {
let presets = this.appModel.settings.get('generatorPresets');
let another = presets.filter(p => p.name.toLowerCase() === name.toLowerCase())[0];
if (another) {
$(e.target).addClass('input--error');
return;
} else {
$(e.target).removeClass('input--error');
}
this.selected.name = name;
this.appModel.settings.set('generatorPresets', presets);
this.$el.find('.gen-ps__list option[selected]').text(name);
}
2016-08-13 21:13:16 +02:00
}
});
module.exports = GeneratorPresetsView;