bugfix.
[Plinn.git] / skins / ajax_scripts / ajax_form_manager.js
index 8b51b2e..6f6748e 100644 (file)
@@ -1,4 +1,4 @@
-// (c) Benoît PIN 2006-2007
+// (c) Benoît PIN 2006-2014
 // http://plinn.org
 // Licence GPL
 // 
@@ -8,12 +8,13 @@ var FormManager;
 
 (function(){
        
-FormManager = function(form, responseTextDest, lazy) {
+FormManager = function(form, responseTextDest, lazy, noHistory) {
        if (form.elements.namedItem("noAjax")) {return;}
        
        this.form = form;
        this.responseTextDest = responseTextDest;
        this.lazy = lazy;
+       this.noHistory = noHistory;
        var thisManager = this;
        this.form.onsubmit = function(evt) { thisManager.submit(evt); };
        this.form.onclick = function(evt) { thisManager.click(evt); };
@@ -99,16 +100,11 @@ FormManager.prototype.submit = function(evt) {
                query += submitButton.name + '=' + submitButton.value + '&';
        }
        
-       if (window.AJAX_CONFIG && ((AJAX_CONFIG & 1) === 1)) {
-               if (form.method.toLowerCase() === 'post') {
-                       this._post(query);
-               }
-               else {
-                       this._get(query);
-               }
+       if (form.method.toLowerCase() === 'post') {
+               this._post(query);
        }
        else {
-               this._post(query);
+               this._get(query);
        }
        
        try {disableDefault(evt);}
@@ -144,10 +140,9 @@ FormManager.prototype._post = function(query) {
 };
 
 FormManager.prototype._get = function(query) {
-       // send form by browser location
        var url = this.form.action;
        url += '?' + query;
-       linkHandler.loadUrl(url);
+       AjaxLinkHandler.prototype.loadUrl(url);
 };
 
 
@@ -391,19 +386,30 @@ FormManager.prototype.loadResponse = function(req) {
                                        return;
                                }
                                var fragments = req.responseXML.documentElement.childNodes;
-                               var fragment, dest;
-                               var i;
-                               for (i=0 ; i<fragments.length ; i++) {
-                                       fragment = fragments[i];
-                                       if (fragment.nodeName === 'fragment') {
-                                               dest = document.getElementById(fragment.getAttribute('id'));
-                                               dest.innerHTML = fragment.firstChild.nodeValue;
-                       
-                                               scripts = dest.getElementsByTagName('script');
-                                               var j;
-                                               for (j=0 ; j < scripts.length ; j++) {
-                                                       globalScriptRegistry.loadScript(scripts[j]);
-                                               }
+                               var element, dest, i, j;
+                               for (i=0 ; i < fragments.length ; i++) {
+                                       element = fragments[i];
+                                       switch (element.nodeName) {
+                                               case 'fragment' :
+                                                       dest = document.getElementById(element.getAttribute('id'));
+                                                       if(dest) {
+                                                               dest.innerHTML = element.firstChild.nodeValue;
+                                                               scripts = dest.getElementsByTagName('script');
+                                                               for (j=0 ; j < scripts.length ; j++) {
+                                                                       globalScriptRegistry.loadScript(scripts[j]); }
+                                                       }
+                                                       break;
+                                               case 'base' :
+                                                       var headBase = document.getElementsByTagName('base');
+                                                       if (headBase.length > 0) {
+                                                               headBase[0].setAttribute('href', element.getAttribute('href'));
+                                                       }
+                                                       else {
+                                                               headBase = document.createElement('base');
+                                                               headBase.setAttribute('href', element.getAttribute('href'));
+                                                               document.head.appendChild(headBase);
+                                                       }
+                                                       break;
                                        }
                                }
                                break;
@@ -424,7 +430,8 @@ FormManager.prototype.loadResponse = function(req) {
        var onAfterPopulate = this.onAfterPopulate;
        onAfterPopulate();
        this.scrollToPortalMessage();
-       history.pushState(absolute_url(), document.title, absolute_url());
+       var url = this.form.action;
+       if (!this.noHistory){ history.pushState(url, document.title, url); }
 };
 
 FormManager.prototype.scrollToPortalMessage = function() {