X-Git-Url: https://scm.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/35e1ecea933ffa33927b13242e5b3c5c480ef9f5..08a12c7d87614be8332e8bb81532f0e5a2ce36db:/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 d942234..12ca5b2 100644 --- a/skins/ajax_scripts/ajax_form_manager.js +++ b/skins/ajax_scripts/ajax_form_manager.js @@ -4,8 +4,11 @@ // // +var FormManager; -function FormManager(form, responseTextDest, lazy) { +(function(){ + +FormManager = function(form, responseTextDest, lazy) { if (form.elements.namedItem("noAjax")) {return;} this.form = form; @@ -14,7 +17,6 @@ function FormManager(form, responseTextDest, lazy) { 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; @@ -39,7 +41,7 @@ function FormManager(form, responseTextDest, lazy) { this.onResponseLoad = function(req){ thisManager.restoreField(req); }; this.lazyListeners = []; } -} +}; FormManager.prototype.submit = function(evt) { var form = this.form; @@ -52,6 +54,7 @@ FormManager.prototype.submit = function(evt) { if (onBeforeSubmit.length) { onBeforeSubmit = onBeforeSubmit[0]; } + /*jslint evil: true */ this.onBeforeSubmit = eval(onBeforeSubmit.value); bsMessage = this.onBeforeSubmit(thisManager, evt); } @@ -96,7 +99,7 @@ FormManager.prototype.submit = function(evt) { query += submitButton.name + '=' + submitButton.value + '&'; } - if (window.AJAX_CONFIG && (AJAX_CONFIG & 1 === 1)) { + if (window.AJAX_CONFIG && ((AJAX_CONFIG & 1) === 1)) { if (form.method.toLowerCase() === 'post') { this._post(query); } @@ -172,10 +175,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; @@ -388,19 +391,25 @@ FormManager.prototype.loadResponse = function(req) { return; } var fragments = req.responseXML.documentElement.childNodes; - var fragment, dest; - var i; - for (i=0 ; i from) { + dir = 1; + } + else { + dir = -1; + } + + var jump = function() { + window.scroll(0, pos); + pos = pos + step * dir; + if ((dir === 1 && pos >= to) || + (dir === -1 && pos <= to)) { + window.clearInterval(intervalId); + window.scroll(0, to); + } + }; + intervalId = window.setInterval(jump, 10); +} + +/* 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(); +} -//registerStartupFunction(initForms); \ No newline at end of file +}());