decide.nolog.cz/app/controllers/create/settings.js
2015-07-27 17:57:50 +02:00

178 lines
5.5 KiB
JavaScript

import Ember from "ember";
import EmberValidations from 'ember-validations';
/* global moment */
export default Ember.Controller.extend(EmberValidations.Mixin, {
actions: {
save: function(){
// check if answer type is selected
if (this.get('model.answerType') === null) {
return;
}
// save poll
var self = this;
this.get('model').save().then(function(model){
// reload as workaround for bug: duplicated records after save
model.reload().then(function(model){
// redirect to new poll
self.get('target').send('transitionToPoll', model);
});
});
},
submit: function(){
var self = this;
this.validate().then(function() {
self.send('save');
}).catch(function(){
Ember.$.each(Ember.View.views, function(id, view) {
if(view.isEasyForm) {
view.focusOut();
}
});
});
}
},
// proxy needed for validation
anonymousUser: function() {
return this.get('model.anonymousUser');
}.property('model.anonymousUser'),
// proxy needed for validation
answerType: function() {
return this.get('model.answerType');
}.property('model.answerType'),
answerTypes: function() {
return [
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id : "YesNo",
labelTranslation : "answerTypes.yesNo.label",
answers : [
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: "yes",
labelTranslation: "answerTypes.yes.label",
icon: "glyphicon glyphicon-thumbs-up"
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: "no",
labelTranslation: "answerTypes.no.label",
icon: "glyphicon glyphicon-thumbs-down"
})
]
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id : "YesNoMaybe",
labelTranslation : "answerTypes.yesNoMaybe.label",
answers : [
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: "yes",
labelTranslation: "answerTypes.yes.label",
icon: "glyphicon glyphicon-thumbs-up"
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: "maybe",
labelTranslation: "answerTypes.maybe.label",
icon: "glyphicon glyphicon-hand-right"
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: "no",
labelTranslation: "answerTypes.no.label",
icon: "glyphicon glyphicon-thumbs-down"
})
]
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id : "FreeText",
labelTranslation : "answerTypes.freeText.label",
answers : []
})
];
}.property(),
expirationDuration: 'P3M',
expirationDurations: function() {
return [
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: 'P7D',
labelTranslation: 'create.settings.expirationDurations.P7D'
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: 'P1M',
labelTranslation: 'create.settings.expirationDurations.P1M'
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: 'P3M',
labelTranslation: 'create.settings.expirationDurations.P3M'
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: 'P6M',
labelTranslation: 'create.settings.expirationDurations.P6M'
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: 'P1Y',
labelTranslation: 'create.settings.expirationDurations.P1Y'
}),
Ember.Object.extend(Ember.I18n.TranslateableProperties, {}).create({
id: '',
labelTranslation: 'create.settings.expirationDurations.never'
})
];
}.property(),
forceAnswer: function() {
return this.get('model.forceAnswer');
}.property('model.forceAnswer'),
/*
* set answers depending on selected answer type
*/
updateAnswers: function(){
var selectedAnswer = this.get('model.answerType'),
answers = [],
answerTypes = this.get('answerTypes');
if (selectedAnswer !== null) {
for (var i=0; i < answerTypes.length; i++) {
if (answerTypes[i].id === selectedAnswer) {
answers = answerTypes[i].answers;
}
}
this.set('model.answers', answers);
}
}.observes('model.answerType'),
updateExpirationDate: function() {
var expirationDuration = this.get('expirationDuration');
if(Ember.isEmpty(expirationDuration)) {
this.set('model.expirationDate', '');
}
else {
this.set('model.expirationDate',
moment().add(
moment.duration(expirationDuration)
).toISOString()
);
}
}.observes('expirationDuration'),
validations: {
anonymousUser: {
presence: true
},
answerType: {
presence: true,
inclusion: {
in: ["YesNo", "YesNoMaybe", "FreeText"]
}
},
forceAnswer: {
presence: true
}
}
});