// file = editable /* editable.js Description : allows the edition of tags whom class'name is 'editable' Contributors : Flavien Gateuil (Flavien.Gateuil@etu.enseeiht.fr) */ var currentEdited = null; // Create the editable element // Parameters : // - elmt : the editable element // - size : size of the textfield EditableElement = function (name, size, marker) { this.name = name; this.element = document.getElementById(this.name); if (this.element) { this.size = size; this.marker = marker; this.element.onclick = document.createHandler(EditableElement.edit, this); } } // Return the handler function : func(arg) EditableElement.createHandler = function(func, arg) { return function() { func(arg); }; }; // Called when an editable element is clicked on EditableElement.edit = function(elmt) { if (currentEdited) { EditableElement.cancel(currentEdited); } currentEdited = elmt; elmt.lastText = elmt.element.innerHTML; // The form elmt.formEdit = document.createElement('form'); elmt.formEdit.action="javascript:void(0);"; elmt.formEdit.style.display = "inline"; elmt.textField = document.createElement('input'); elmt.textField.type = 'text'; elmt.textField.size = elmt.size; elmt.textField.value = elmt.element.innerHTML; elmt.textField.onkeydown = document.createHandler(EditableElement.IESave, elmt); //elmt.textField.onblur = document.createHandler(EditableElement.save, elmt); elmt.formEdit.appendChild(elmt.textField); // The validation button var okButton = document.createElement('input'); okButton.type = 'submit'; okButton.className = "valid_button"; okButton.value = ''; okButton.onclick = document.createHandler(EditableElement.save, elmt); // The cancel button var cancelButton = document.createElement('input'); cancelButton.type = 'button'; cancelButton.className = 'cancel_button'; cancelButton.value = ''; cancelButton.onclick = document.createHandler(EditableElement.cancel, elmt); // Add the validation and cancel buttons to the form elmt.formEdit.appendChild(okButton); elmt.formEdit.appendChild(cancelButton); elmt.element.parentNode.insertBefore(elmt.formEdit, elmt.element); elmt.textField.select(); elmt.element.style.display = 'none'; } // Called to save the form EditableElement.save = function(elmt) { currentEdited = null; elmt.element.parentNode.removeChild(elmt.formEdit); if (elmt.textField.value.replace(/(^\s*)|(\s*$)/g,'') != '') { var alreadyExists = false; switch (elmt.name) { case "editableName" : elmt.marker.setName(elmt.textField.value); break; case "editableDesc" : elmt.marker.setDescription(elmt.textField.value); break; case "editableSite" : elmt.marker.setSite(elmt.textField.value); break; default : break; } if (!alreadyExists) { elmt.element.innerHTML = elmt.textField.value; } else { elmt.element.innerHTML = elmt.lastText; } } else { elmt.element.innerHTML = elmt.lastText; } elmt.element.style.display = 'inline'; } // Called to cancel the form EditableElement.cancel = function(elmt) { currentEdited = null; elmt.element.parentNode.removeChild(elmt.formEdit); elmt.element.innerHTML = elmt.lastText; elmt.element.style.display = 'inline'; } // Called to save the form : only needed for IE EditableElement.IESave = function(elmt) { if ( window.event && window.event.keyCode == 13 ) { EditableElement.save(elmt); } } // Init the different editable elements //function setup() { // var editElmt = null; // var editElmts = document.getElementByClassName('editable'); // for (var i = 0; i < editElmts.length; i++) { // editElmt = editElmts[i]; // new EditableElement(editElmt); // } //}