[ Index ]
 

Code source de Kupu-1.3.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/common/ -> kupubeforeunload.js (source)

   1  /* BeforeUnload form processing */
   2  if (!window.beforeunload) (function() {
   3      var BeforeUnloadHandler = function() {
   4          var self = this;
   5  
   6          this.message = "Your form has not been saved. All changes you have made will be lost";
   7          if (window._) {
   8              this.message = _("Your form has not been saved. All changes you have made will be lost");
   9          };
  10          this.forms = [];
  11          this.chkId = [];
  12          this.chkType = new this.CheckType();
  13          this.handlers = [this.isAnyFormChanged];
  14          this.submitting = false;
  15  
  16          this.execute = function(event) {
  17              if (self.submitting) return;
  18              if (!event) event = window.event;
  19  
  20              for (var i = 0; i < self.handlers.length; i++) {
  21                  var fn = self.handlers[i];
  22                  var message = message || fn.apply(self);
  23              }
  24              if (message===true) message = self.message;
  25              if (message===false) message = undefined;
  26              if (event && message) event.returnValue = message;
  27              return message;
  28          }
  29          this.execute.tool = this;
  30      }
  31      var Class = BeforeUnloadHandler.prototype;
  32  
  33      // form checking code
  34      Class.isAnyFormChanged = function() {
  35          for (var i=0; i < this.forms.length; i++) {
  36              var form = this.forms[i];
  37              if (this.isElementChanged(form)) {
  38                  return true;
  39              }
  40          }
  41          return false;
  42      }
  43      Class.addHandler = function(fn) {
  44          this.handlers.push(fn);
  45      }
  46      Class.onsubmit = function() {
  47          var tool = window.onbeforeunload && window.onbeforeunload.tool;
  48          tool.submitting = true;
  49      }
  50      Class.addForm = function(form) {
  51          for (var i = 0; i < this.forms.length; i++) {
  52              if (this.forms[i]==form) return;
  53          }
  54          this.forms.push(form);
  55          form.onsubmit = this.onsubmit;
  56          var elements = form.getElementsByTagName('input');
  57          for (var j = 0; j < elements.length; j++) {
  58              var ele = elements[j];
  59              if (ele.type=='hidden') {
  60                  ele.setAttribute('originalValue', ele.defaultValue);
  61              }
  62          }
  63      }
  64      Class.addForms = function() {
  65          for (var i = 0; i < arguments.length; i++) {
  66              var element = arguments[i];
  67              if (!element) continue;
  68              if (element.tagName=='FORM') {
  69                  this.addForm(element);
  70              }
  71              else {
  72                  var forms = element.getElementsByTagName('form');
  73                  for (var j = 0; j < forms.length; j++) {
  74                      this.addForm(forms[j]);
  75                  }
  76              }
  77          }
  78      }
  79      Class.removeForms = function() {
  80          for (var i = 0; i < arguments.length; i++) {
  81              var element = arguments[i];
  82              if (!element) continue;
  83              if (element.tagName=='FORM') {
  84                  for (var j = 0; j < arguments.length; j++) {
  85                      if (this.forms[j] == element) {
  86                          this.forms.splice(j--, 1);
  87                          element.onsubmit=null;
  88                      }
  89                  }
  90              } else {
  91                  var forms = element.getElementsByTagName('form');
  92                  for (var j = 0; j < forms.length; j++) {
  93                      this.removeForms(forms[j]);
  94                  }
  95              }
  96          }
  97      }
  98  
  99      Class.CheckType = function() {};
 100      var c = Class.CheckType.prototype;
 101      c.checkbox = c.radio = function(ele) {
 102          return ele.checked != ele.defaultChecked;
 103      }
 104      c.password = c.textarea = c.text = function(ele) {
 105          return ele.value != ele.defaultValue;
 106      }
 107      // hidden: cannot tell on Mozilla without special treatment
 108      c.hidden = function(ele) {
 109          var orig = ele.getAttribute("originalValue");
 110          return orig && (ele.value != orig);
 111      }
 112  
 113      c['select-one'] = function(ele) {
 114          for (var i=0 ; i < ele.length; i++) {
 115              var opt = ele.options[i];
 116              if ( opt.selected != opt.defaultSelected) {
 117                  if (i===0 && opt.selected) continue; /* maybe no default */
 118                  return true;
 119              }
 120          }
 121          return false;
 122      }
 123  
 124      c['select-multiple'] = function(ele) {
 125          for (var i=0 ; i < ele.length; i++) {
 126              var opt = ele.options[i];
 127              if ( opt.selected != opt.defaultSelected) {
 128                  return true;
 129              }
 130          }
 131          return false;
 132      }
 133  
 134      Class.chk_form = function(form) {
 135          var elements = form.elements;
 136          for (var i=0; i < elements.length; i++ ) {
 137              var element = elements[i];
 138              if (this.isElementChanged(element)) {
 139                  return true;
 140              }
 141          }
 142          return false;
 143      }
 144  
 145      Class.isElementChanged = function(ele) {
 146          var method = ele.id && this.chkId[ele.id];
 147          if (!method && ele.type && ele.name)
 148              method = this.chkType[ele.type];
 149          if (!method && ele.tagName)
 150              method = this['chk_'+ele.tagName.toLowerCase()];
 151  
 152          return method? method.apply(this, [ele]) : false;
 153      };
 154  
 155      window.onbeforeunload = new BeforeUnloadHandler().execute;
 156  })();


Généré le : Sun Feb 25 15:30:41 2007 par Balluche grâce à PHPXref 0.7