form.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. const Mn = require('backbone.marionette');
  2. const App = require('../../main');
  3. const StreamModel = require('../../../models/stream');
  4. const template = require('./form.ejs');
  5. require('jquery-serializejson');
  6. require('jquery-mask-plugin');
  7. require('selectize');
  8. module.exports = Mn.View.extend({
  9. template: template,
  10. className: 'modal-dialog',
  11. ui: {
  12. form: 'form',
  13. forwarding_host: 'input[name="forwarding_host"]',
  14. type_error: '.forward-type-error',
  15. buttons: '.modal-footer button',
  16. switches: '.custom-switch-input',
  17. cancel: 'button.cancel',
  18. save: 'button.save'
  19. },
  20. events: {
  21. 'change @ui.switches': function () {
  22. this.ui.type_error.hide();
  23. },
  24. 'click @ui.save': function (e) {
  25. e.preventDefault();
  26. if (!this.ui.form[0].checkValidity()) {
  27. $('<input type="submit">').hide().appendTo(this.ui.form).click().remove();
  28. return;
  29. }
  30. let view = this;
  31. let data = this.ui.form.serializeJSON();
  32. if (!data.tcp_forwarding && !data.udp_forwarding) {
  33. this.ui.type_error.show();
  34. return;
  35. }
  36. // Manipulate
  37. data.incoming_port = parseInt(data.incoming_port, 10);
  38. data.forwarding_port = parseInt(data.forwarding_port, 10);
  39. data.tcp_forwarding = !!data.tcp_forwarding;
  40. data.udp_forwarding = !!data.udp_forwarding;
  41. let method = App.Api.Nginx.Streams.create;
  42. let is_new = true;
  43. if (this.model.get('id')) {
  44. // edit
  45. is_new = false;
  46. method = App.Api.Nginx.Streams.update;
  47. data.id = this.model.get('id');
  48. }
  49. this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
  50. method(data)
  51. .then(result => {
  52. view.model.set(result);
  53. App.UI.closeModal(function () {
  54. if (is_new) {
  55. App.Controller.showNginxStream();
  56. }
  57. });
  58. })
  59. .catch(err => {
  60. alert(err.message);
  61. this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
  62. });
  63. }
  64. },
  65. onRender: function () {
  66. },
  67. initialize: function (options) {
  68. if (typeof options.model === 'undefined' || !options.model) {
  69. this.model = new StreamModel.Model();
  70. }
  71. }
  72. });