X-Git-Url: https://svn.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/489b08961ffd3250658aafd1b861ec55fbbff5a3..bec2191d8ad9607db748a051eb96ed0a79e7e99f:/skins/ajax_scripts/ajax_form_manager.js?ds=sidebyside

diff --git a/skins/ajax_scripts/ajax_form_manager.js b/skins/ajax_scripts/ajax_form_manager.js
index 8b51b2e..acca796 100644
--- a/skins/ajax_scripts/ajax_form_manager.js
+++ b/skins/ajax_scripts/ajax_form_manager.js
@@ -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() {