main.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const Mn = require('backbone.marionette');
  2. const App = require('../../main');
  3. const template = require('./main.ejs');
  4. require('jquery-serializejson');
  5. require('selectize');
  6. module.exports = Mn.View.extend({
  7. template: template,
  8. className: 'modal-dialog',
  9. ui: {
  10. form: 'form',
  11. buttons: '.modal-footer button',
  12. cancel: 'button.cancel',
  13. save: 'button.save',
  14. options: '.option-item',
  15. value: 'input[name="value"]',
  16. redirect: '.redirect-input',
  17. html: '.html-content'
  18. },
  19. events: {
  20. 'change @ui.value': function (e) {
  21. let val = this.ui.value.filter(':checked').val();
  22. this.ui.options.hide();
  23. this.ui.options.filter('.option-' + val).show();
  24. },
  25. 'click @ui.save': function (e) {
  26. e.preventDefault();
  27. let val = this.ui.value.filter(':checked').val();
  28. // Clear redirect field before validation
  29. if (val !== 'redirect') {
  30. this.ui.redirect.val('').attr('required', false);
  31. } else {
  32. this.ui.redirect.attr('required', true);
  33. }
  34. this.ui.html.attr('required', val === 'html');
  35. if (!this.ui.form[0].checkValidity()) {
  36. $('<input type="submit">').hide().appendTo(this.ui.form).click().remove();
  37. return;
  38. }
  39. let view = this;
  40. let data = this.ui.form.serializeJSON();
  41. data.id = this.model.get('id');
  42. this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
  43. App.Api.Settings.update(data)
  44. .then(result => {
  45. view.model.set(result);
  46. App.UI.closeModal();
  47. })
  48. .catch(err => {
  49. alert(err.message);
  50. this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
  51. });
  52. }
  53. },
  54. onRender: function () {
  55. this.ui.value.trigger('change');
  56. }
  57. });