En Mai 2005...Cette édition à la volée en AJAX permet lors d'un simple clic sur un texte, de pouvoir le modifier. C'est le principe utilisé sur Flickr pour modifier directement la description d'une photo.
| HTML: |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Edit-in-Place with Ajax</title> <link href="editinplace.css" rel="Stylesheet" type="text/css" /> <script src="prototype.js" type="text/javascript"></script> <script src="editinplace.js" type="text/javascript"></script> </head> <body> <h1>Edit-in-place</h1> <p id="desc">Dashing through the snow on a one horse open sleigh.</p> </body> </html> |
| Javascript: |
Event.observe(window, 'load', init, false);
function init() { makeEditable('desc'); makeEditable('pizza'); } function makeEditable(id) { Event.observe(id, 'click', function(){edit($(id))}, false); Event.observe(id, 'mouseover', function(){showAsEditable($(id))}, false); Event.observe(id, 'mouseout', function(){showAsEditable($(id), true)}, false); } function showAsEditable(obj, clear) { if (!clear) { Element.addClassName(obj, 'editable'); } else { Element.removeClassName(obj, 'editable'); } } |
| css: |
.editable, textarea
{ color: #000; background-color: #ffffd3; } |
| Javascript: |
function edit(obj)
{ Element.hide(obj); var textarea = '<div id="'+obj.id+'_editor"><textarea id="'+obj.id+'_edit" name="'+obj.id+'" rows="4" cols="60">'+obj.innerHTML+'</textarea>'; var button = '<div><input id="'+obj.id+'_save" type="button" value="Modifier" /> - <input id="'+obj.id+'_cancel" type="button" value="Annuler" /></div></div>'; new Insertion.After(obj, textarea+button); Event.observe(obj.id+'_save', 'click', function(){saveChanges(obj)}, false); Event.observe(obj.id+'_cancel', 'click', function(){cleanUp(obj)}, false); } |
| Javascript: |
function cleanUp(obj, keepEditable)
{ Element.remove(obj.id+'_editor'); Element.show(obj); if (!keepEditable) showAsEditable(obj, true); } |
| Javascript: |
function saveChanges(obj)
{ var new_content = escape($F(obj.id+'_edit')); obj.innerHTML = "Enregistrement..."; cleanUp(obj, true); var success = function(t){editComplete(t, obj);} var failure = function(t){editFailed(t, obj);} var url = 'edit.php'; var pars = 'id='+obj.id+'&content='+new_content; var myAjax = new Ajax.Request(url, {method:'post', postBody:pars, onSuccess:success, onFailure:failure}); } function editComplete(t, obj) { obj.innerHTML = t.responseText; showAsEditable(obj, true); } function editFailed(t, obj) { obj.innerHTML = "La modification n'a pas fonctionné."; cleanUp(obj); } |
| php: |
<?php
$id = $_POST['id']; $content = $_POST['content']; echo stripslashes(utf8_encode($content)); ?> |