Se avete già avuto a che fare con un wiki, saprete sicuramente che il punto forte di un sistema del genere sta nel fatto che chiunque può collaborare all'approfondimento di un dato argomento modificando o aggiungendo contenuti alla pagina web.
Script.aculo.us ci mette a disposizione un oggetto, Ajax.InPlaceEditor, che rende molto facile definire come modificabile il testo contenuto in una pagina web; questo oggetto gestisce le modifiche tramite delle richieste Ajax.
La pagina web che prenderemo in esame in questo articolo visualizzerà un semplice testo generato dal servizio web Lorem Ipsum e permetterà agli utenti di modificare il testo visualizzato. Ecco l'esempio (le modifiche non sono visibili sulla pagina in quanto non è implementata la parte server-side). Tutti il codice usato è contenuto in questo file zip.
Vediamo in breve i passaggi chiave che andremo poi ad approfondire nel codice:
- Quando l'utente sposterà il cursore all'interno del paragrafo, esso verrà evidenziato in giallo. Se l'utente a quel punto cliccherà su di esso, verrà trasformato in una textarea.
- Quando l'utente cliccherà sul bottone “Ok”, una richiesta Ajax invierà il contenuto della textarea al server. Altrimenti, se l'utente cliccherà sul bottone “Cancel” la textarea sparirà e non verrà inviata alcuna richiesta lato server.
- Il server, al ricevimento del nuovo testo tramite l'oggetto Ajax.InPlaceEditor, deciderà se visualizzarlo o meno applicando i dovuti filtri (parole offensive etc...).
- Se tutto andrà a buon fine la modifica sarà subito visibile in pagina.
Consideriamo ora il codice HTML della pagina web sotto riportato e l'associato Javascript:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Abilitazione alla modifica da parte degli utenti del testo di una pagina web</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/stile.css" media='screen'>
</head>
<body>
<div id='contenitore'>
<h3 class="titolo">Testo Editabile</h3>
<p class="testo" id='editText'>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Nullam rutrum eros non neque. In a magna et velit auctor pellentesque.
Nam est libero, consectetuer quis, condimentum ut, pellentesque sed, lectus.
......</p>
</div>
<script src="prototype.js" type="text/javascript"></script>
<script src="scriptaculous.js" type="text/javascript"></script>
<script type="text/javascript">
window.onload=function(){
new Ajax.InPlaceEditor('editText', 'nonEsiste.php',{rows:15,
cols:50, cancelControl:'button', okText:'Salva',
cancelText:'Annulla', savingText:'Salvataggio in corso...',
clickToEditText:'Clicca per modificare', formId:'value'
});
}
</script>
</body>
</html>
Il testo che vogliamo rendere modificabile verrà inserito in un tag <p> con un dato attributo id="editText".
Ecco l'oggetto della libreria Script.aculo.us che si occuperà di gestire la modifica.
window.onload=function(){
new Ajax.InPlaceEditor('idElemento', 'paginaLatoServer',{rows:15,
cols:50, cancelControl:'button', okText:'Salva',
cancelText:'Annulla', savingText:'Salvataggio in corso...',
clickToEditText:'Clicca per modificare', formId:'value'
});
Il codice sopra riportato specifica nell'ordine, l'id dell'elemento abilitato alle modifiche (editText), l'URL relativo al componente server a cui viene inviata la richiesta HTTP e alcuni parametri che modificheranno il comportamento del componente Javascript:
- Rows
- Cols
- CancelControl
- OkText
- CancelText
- SavingText
- ClickToEditText
- FormId
Esistono molti altri parametri oltre a questi sopra citati, per saperne di più consultate la documentazione delle API.