Dotclear

source: admin/js/confirm-close.js @ 0:54703be25dd6

Revision 0:54703be25dd6, 2.5 KB checked in by Dsls <dsls@…>, 14 years ago (diff)

2.3 branch (trunk) first checkin

RevLine 
[0]1function confirmClose() {
2     
3     if (arguments.length > 0) {
4          for (var i=0; i<arguments.length; i++) {
5               this.forms_id.push(arguments[i]);
6          }
7     }
8};
9
10confirmClose.prototype = {
11     prompt: 'You have unsaved changes.',
12     forms_id: new Array(),
13     forms: new Array(),
14     formSubmit: false,
15     
16     getCurrentForms: function() {
17          var formsInPage = this.getForms();
18          var f;
19          var This = this;
20          for (var i=0; i<formsInPage.length; i++) {
21               f = formsInPage[i];
22               var tmpForm = new Array();
23               for (var j=0; j<f.elements.length; j++) {
24                    tmpForm.push(this.getFormElementValue(f[j]));
25               }
26               this.forms.push(tmpForm);
27               
28               chainHandler(f,'onsubmit',function() {
29                    This.formSubmit = true;
30               });
31          }
32     },
33     
34     compareForms: function() {
35          if (this.forms.length == 0) {
36               return true;
37          }
38         
39          var formsInPage = this.getForms();
40          var f;
41          for (var i=0; i<formsInPage.length; i++) {
42               f = formsInPage[i];
43               for (var j=0; j<f.elements.length; j++) {
44                    if (this.forms[i][j] != this.getFormElementValue(f[j])) {
45                         return false;
46                    }
47               }
48          }
49         
50          return true;
51     },
52     
53     getForms: function() {
54          if (!document.getElementsByTagName || !document.getElementById) {
55               return new Array();
56          }
57         
58          if (this.forms_id.length > 0) {
59               var res = new Array();
60               var f;
61               for (var i=0; i<this.forms_id.length; i++) {
62                    f = document.getElementById(this.forms_id[i]);
63                    if (f != undefined) {
64                         res.push(f);
65                    }
66               }
67               return res;
68          } else {
69               return document.getElementsByTagName('form');
70          }
71         
72          return new Array();
73     },
74     
75     getFormElementValue: function(e) {
76          if (e.type != undefined && e.type == 'radio') {
77               return this.getFormRadioValue(e);
78          } else if (e.type != undefined && e.type == 'checkbox') {
79               return this.getFormCheckValue(e);
80          } else if (e.value != undefined) {
81               return e.value;
82          } else {
83               return null;
84          }
85     },
86     
87     getFormCheckValue: function(e) {
88          if (e.checked) {
89               return e.value;
90          }
91          return null;
92     },
93     
94     getFormRadioValue: function(e) {
95          for (var i=0; i <e.length; i++) {
96               if (e[i].checked) {
97                    return e[i].value;
98               } else {
99                    return null;
100               }
101          }
102          return null;
103     }
104};
105
106var confirmClosePage = new confirmClose();
107
108chainHandler(window,'onload',function() {
109     confirmClosePage.getCurrentForms();
110});
111
112chainHandler(window,'onbeforeunload',function(event_) {
113     if (event_ == undefined && window.event) {
114          event_ = window.event;
115     }
116     
117     if (!confirmClosePage.formSubmit && !confirmClosePage.compareForms()) {
118          event_.returnValue = confirmClosePage.prompt;
119          return confirmClosePage.prompt;
120     }
121     return false;
122});
Note: See TracBrowser for help on using the repository browser.

Sites map