Explorar el Código

Refactor changeform js

Denis K hace 8 años
padre
commit
1d0d0cdba8
Se han modificado 1 ficheros con 34 adiciones y 18 borrados
  1. 34 18
      jet/static/jet/js/src/features/changeform.js

+ 34 - 18
jet/static/jet/js/src/features/changeform.js

@@ -1,34 +1,50 @@
 var $ = require('jquery');
 
-var initUnsavedChangesWarning = function() {
-    var $changeform = $('.change-form #content-main form');
+var ChangeForm = function($changeForm) {
+    this.$changeForm = $changeForm;
+};
 
-    if ($changeform.length) {
-        var $inputs = $changeform.find('input, textarea, select');
-        var bound = false;
+ChangeForm.prototype = {
+    changeDetected: false,
+    onWindowBeforeUnload: function() {
+        return django.gettext('Warning: you have unsaved changes');
+    },
+    onFormInputChanged: function($inputs) {
+        $inputs.off('change', this.onFormInputChanged);
 
-        var onBeforeUnload = function() {
-            return django.gettext('Warning: you have unsaved changes');
-        };
+        if (!self.changeDetected) {
+            $(window).bind('beforeunload', this.onWindowBeforeUnload);
+        }
 
-        var onChange = function() {
-            $inputs.off('change', onChange);
+        this.changeDetected = true;
+    },
+    initUnsavedChangesWarning: function($changeForm) {
+        var self = this;
+        var $form = $changeForm.find('#content-main form');
 
-            if (!bound) {
-                $(window).bind('beforeunload', onBeforeUnload);
+        if ($form.length == 0) {
+            return;
+        }
 
-                bound = true;
-            }
-        };
+        var $inputs = $form.find('input, textarea, select');
 
         $(document).on('submit', 'form', function() {
-            $(window).off('beforeunload', onBeforeUnload);
+            $(window).off('beforeunload', self.onWindowBeforeUnload);
         });
 
-        $inputs.on('change', onChange);
+        $inputs.on('change', $.proxy(this.onFormInputChanged, this, $inputs));
+    },
+    run: function() {
+        try {
+            this.initUnsavedChangesWarning(this.$changeForm);
+        } catch (e) {
+            console.error(e, e.stack);
+        }
     }
 };
 
 $(document).ready(function() {
-    initUnsavedChangesWarning();
+    $('.change-form').each(function() {
+        new ChangeForm($(this)).run();
+    });
 });