From: Ben Klang Date: Sat, 9 Jan 2010 22:25:11 +0000 (-0500) Subject: Shout: Handle edits where the data is not changed in the UI X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=be14ca3615ae26abeb6037244d9332ca29ceeda4;p=horde.git Shout: Handle edits where the data is not changed in the UI Also ensure editing a destination removes the original destination. --- diff --git a/shout/templates/extensions/list.inc b/shout/templates/extensions/list.inc index 6df905b2a..1d2b7c59d 100644 --- a/shout/templates/extensions/list.inc +++ b/shout/templates/extensions/list.inc @@ -64,7 +64,7 @@ var destinations = []; function resetExtenDest(exten) { var e; - + while ((e = $('destX' + exten + 'info').childNodes[0]) != null) { $('destX' + exten + 'info').removeChild(e); } @@ -211,6 +211,11 @@ function processForm(event) var form = event.target; Element.extend(form); + var editflag = form.getInputs('hidden', 'edit').first(); + if (editflag) { + editflag = editflag.value; + } + var exten = form.getInputs('hidden', 'extension').first().value; var spinner = document.createElement('img'); @@ -219,6 +224,27 @@ function processForm(event) $('destX' + exten + 'submit').hide(); form.insertBefore(spinner, $('destX' + exten + 'submit')) + if (editflag) { + var origtype = form.getInputs('hidden', 'origtype').first().value; + var origdest = form.getInputs('hidden', 'origdest').first().value; + var newtype = $('destX' + exten + 'type').value; + var newdest = $('destX' + exten + 'destination').value; + + if ((origtype == newtype) && (origdest == newdest)) { + // The user hit "save" without making any changes. + // Do not contact AJAX, just make sure destinations is updated. + var key = (origtype == "number") ? 'numbers' : 'devices'; + var xd = destinations.get(exten); + xd[key].push(origdest); + destinations.set(exten, xd); + resetExtenDest(exten); + return true; + } else { + // A change was made. Remove the old destination first. + delDest(exten, origtype, origdest); + } + } + // FIXME: Better error handling new Ajax.Request('', { @@ -295,6 +321,25 @@ function editDest(exten, type, dest) resetExtenDest(exten); addDest(exten); + + // Tell processForm() this is an edit + var editflag = document.createElement('input'); + editflag.type = 'hidden'; + editflag.name = 'edit'; + editflag.value = 'true'; + var origtype = document.createElement('input'); + origtype.type = 'hidden'; + origtype.name = 'origtype'; + origtype.value = type; + var origdest = document.createElement('input'); + origdest.type = 'hidden'; + origdest.name = 'origdest'; + origdest.value = dest; + $('destX' + exten + 'form').appendChild(editflag); + $('destX' + exten + 'form').appendChild(origtype); + $('destX' + exten + 'form').appendChild(origdest); + + // Preserve the original values for the user. $('destX' + exten + 'type').value = type $('destX' + exten + 'destination').value = dest; } @@ -308,12 +353,17 @@ function delDest(exten, type, dest) 'action': 'deleteDestination' }); - // Hide the delete button and replace it with a spinner - $("dest" + dest + "X" + exten + "del").hide(); - var spinner = document.createElement('img'); - spinner.src = "getImageDir('horde') . '/loading.gif'; ?>" - var parent = $("dest" + dest + "X" + exten + "del").parentNode; - parent.insertBefore(spinner, $("dest" + dest + "X" + exten + "del")); + + var deleteIcon = $("dest" + dest + "X" + exten + "del") + // If null we came from an edit so the spinner is already going + if (deleteIcon !== null) { + // Hide the delete button and replace it with a spinner + deleteIcon.hide(); + var spinner = document.createElement('img'); + spinner.src = "getImageDir('horde') . '/loading.gif'; ?>" + var parent = deleteIcon.parentNode; + parent.insertBefore(spinner, deleteIcon); + } // FIXME: Better error handling new Ajax.Request('',