Implémentation du déplacement d'une sélection au delà de la position du dernier élément.
[Plinn.git] / skins / ajax_scripts / ajax_form_manager.js
index 8b51b2e..acca796 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); };
@@ -391,19 +392,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 +436,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() {