X-Git-Url: https://scm.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/02643dc71034e01a60f505cdc0887ae79314a3ed..c6827d2b4b0c53fff66c244b416a33aecb1b49fd:/skins/ajax_scripts/ajax_form_manager.js diff --git a/skins/ajax_scripts/ajax_form_manager.js b/skins/ajax_scripts/ajax_form_manager.js index 214c6f6..8afd120 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,16 +8,16 @@ 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); }; - this.submitButton = null; /* raised on form submit */ this.onBeforeSubmit = null; @@ -100,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);} @@ -145,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.loadUrl(url); }; @@ -176,10 +170,10 @@ FormManager.prototype.replaceElementByField = function(evt) { var tabIndex = ob.tabIndex; var text; if (ob.firstChild && ob.firstChild.className === 'hidden_value') { - text = ob.firstChild.innerHTML; + text = ob.firstChild.innerHTML; } else { - text = ob.innerHTML; + text = ob.innerHTML; } disablePropagation(evt); var parent; @@ -392,19 +386,30 @@ FormManager.prototype.loadResponse = function(req) { return; } var fragments = req.responseXML.documentElement.childNodes; - var fragment, dest; - var i; - for (i=0 ; i 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; @@ -425,6 +430,8 @@ FormManager.prototype.loadResponse = function(req) { var onAfterPopulate = this.onAfterPopulate; onAfterPopulate(); this.scrollToPortalMessage(); + var url = this.form.action; + if (!this.noHistory){ history.pushState(url, document.title, url); } }; FormManager.prototype.scrollToPortalMessage = function() { @@ -481,43 +488,43 @@ function smoothScroll(from, to) { /* adapted from http://xahlee.info/js/js_shake_box.html */ function shake(e, distance, time) { - // Handle arguments - if (!time) { time = 500; } - if (!distance) { distance = 5; } - - // Save the original style of e, Make e relatively positioned, Note the animation start time, Start the animation - var originalStyle = e.style.cssText; - e.style.position = "relative"; - var start = (new Date()).getTime(); - - // This function checks the elapsed time and updates the position of e. - // If the animation is complete, it restores e to its original state. - // Otherwise, it updates e's position and schedules itself to run again. - function animate() { - var now = (new Date()).getTime(); - // Get current time - var elapsed = now-start; - // How long since we started - var fraction = elapsed/time; - // What fraction of total time? - if (fraction < 1) { - // If the animation is not yet complete - // Compute the x position of e as a function of animation - // completion fraction. We use a sinusoidal function, and multiply - // the completion fraction by 4pi, so that it shakes back and - // forth twice. - var x = distance * Math.sin(fraction*8*Math.PI); - e.style.left = x + "px"; - // Try to run again in 25ms or at the end of the total time. - // We're aiming for a smooth 40 frames/second animation. - setTimeout(animate, Math.min(25, time-elapsed)); - } - else { - // Otherwise, the animation is complete - e.style.cssText = originalStyle; // Restore the original style - } - } - animate(); + // Handle arguments + if (!time) { time = 500; } + if (!distance) { distance = 5; } + + // Save the original style of e, Make e relatively positioned, Note the animation start time, Start the animation + var originalStyle = e.style.cssText; + e.style.position = "relative"; + var start = (new Date()).getTime(); + + // This function checks the elapsed time and updates the position of e. + // If the animation is complete, it restores e to its original state. + // Otherwise, it updates e's position and schedules itself to run again. + function animate() { + var now = (new Date()).getTime(); + // Get current time + var elapsed = now-start; + // How long since we started + var fraction = elapsed/time; + // What fraction of total time? + if (fraction < 1) { + // If the animation is not yet complete + // Compute the x position of e as a function of animation + // completion fraction. We use a sinusoidal function, and multiply + // the completion fraction by 4pi, so that it shakes back and + // forth twice. + var x = distance * Math.sin(fraction*8*Math.PI); + e.style.left = x + "px"; + // Try to run again in 25ms or at the end of the total time. + // We're aiming for a smooth 40 frames/second animation. + setTimeout(animate, Math.min(25, time-elapsed)); + } + else { + // Otherwise, the animation is complete + e.style.cssText = originalStyle; // Restore the original style + } + } + animate(); } }());