tmg software house
Javascript Message Box Tutorial: come creare un oggetto che interagisce con il documento PDF Stampa
Articoli tecnici - Sviluppo & sistema
Scritto da Riccardo Zorn   
Giovedì 18 Settembre 2008 16:14

La creazione degli oggetti in Javascript è una necessità nelle applicazioni che superano le poche righe.

Tuttavia scrivere oggetti richiede inizialmente molta più fatica. Come ho scritto nel precedente articolo, questa maggior fatica iniziale viene ripagata in maggior facilità di manutenzione ed estensione dell'oggetto.

Voglio qui illustrare le differenze tra approccio procedurale e creazione di oggetti di una funzione semplicissima, che visualizza un messaggio a video e invoca una funzione quando si preme un tasto.

I 5 passi illustrano tutta la procedura, e vanno da un livello di complessità ridicolo fino ad affrontare diversi aspetti fondamentali dello sviluppo.

I primi 3 passi sono compatibili con IE, i successivi con (grossomodo) tutti i browser

Passo 1. Html + js + css

Partiremo da un singolo file html contenente il javascript, il css e l'html, che ha tre funzioni: una per mostrare il messaggio, e due invocate da ciascuno dei bottoni sul messaggio.

Passo 2. Creiamo l'oggetto msgBox

per la sola visualizzazione del messaggio. Verifichiamo che continua a funzionare

Passo 3. Completiamo la funzionalità dell'oggetto

Vediamo come passare gli eventi avanti e indietro dalla funzione chiamante alla funzione di risposta.Introduciamo un metodo ask (bottoni si/no) e un metodo tell (solo bottone ok)

Passo 4. Separiamo css, js, html in files separati, e aggiungiamo il supporto per firefox

Questo è lo step più importante.

A questo punto abbiamo 100 righe di javascript. Per mostrare un messaggio. Imbarazzante, direste.

Però abbiamo creato un oggetto che espone 2 funzioni, ask e tell, ma che è con pochissima fatica estendibile per gestire tutta la messaggistica di un programma, inclusi gli input di testo.

Passo 5: angoli arrotondati

Anche l'occhio vuole la sua parte.

Semplifichiamo anche l'uso spostando quanto possibile fuori dal file html principale.

 

Passo 6: finestra modale

Facciamo in modo che l'utente non possa interagire con il resto della pagina finché non ha cliccato un bottone.

Passo 7: tastiera

Facciamo funzionare anche la tastiera

Passo 8: timeout

Il timeout permette di specificare nelle funzioni un numero di secondi trascorsi i quali la finestra viene chiusa premendo il bottone predefinito.

Passo 9: Liste

La lista permette di proporre una lista di scelte all'utente che potrà poi sceglierne una.

Passo 10: Integrazione con l'applicazione

Testiamo la messagebox all'interno di una applicazione ajax. E vediamo quali modifiche sono necessarie

Passo 11: Allineamento

Un approccio per spostare la messageBox una volta creata

Passo 12: Multi-istanza

Rendiamo possibile creare più istanze della messageBox sulla stessa pagina. Quindi modifichiamo le callBack e usiamo qualche escamotage per risolvere semplicemente la questione.

Passo 13: Input di testo

Accettiamo l'input per un numero variabile di campi.

Passo 14: L'oggetto Tastiera a video

Disegno una tastiera a video per permettere l'input anche agli utenti con touch screen

Passo 16: Tastiere specializzate

Derivo (eredito) dall'oggetto Tastiera per creare tastiere "specializzate", numerica e alfa; dimostro come usarla senza la msgBox

Passo 18: Tastiera grafica per single-input e un po' di grafica...

Ora però facciamo qualche modifica per poter usare la nostra tastiera più rapidamente, diciamo con una riga di codice: derivo un nuovo oggetto, imposto una callback e... perdo 2 ore a disegnare tastini :-) . Sorry niente FF per questo passo.

Passo ?: Auto-creazione da XML

L'intento (ardito) è di creare una estensione del metodo request() che genericamente prenda un file XML, ne esamini una parte, derivi la struttura dal file stesso e ne proponga i valori come scelte possibili; quindi restituisca i valori incluso l'indice della scelta.

Passo ?: Validazione dell'input


 

Si d'accordo, questo è solo l'indice.

Le spiegazioni sono commentate all'interno del codice. Clic per scaricare. (Corso 1-18).
L'archivio è diviso in una cartella per ciascuna lezione. All'interno della stessa trovate msgBox.html - che potete usare per testarla.

Attenzione: msgBox e derivati sono sviluppati con l'intento di semplificare e uniformare la gestione della comunicazione con l'utente all'interno dell'applicazione uniKAS. Vengono resi disponibili anche tramite questo corso perché crediamo che siano un semplice strumento per seguire l'evoluzione di un oggetto e capire quanto si risparmi nella manutenzione.

Che altro?

Appena iniziate a mettere in pratica questi esempi, procedete per punti "saldi". Appena ottenuto uno dei risultati che vi prefiggete, fate un commit sull'svn oppure zippate (con il rar si intende) la cartella coi sorgenti, e dategli un nome. Più tardi potrà tornarvi utile.

Tenete sempre sottomano il vostro codice funzionante. E' molto più veloce che consultare la documentazione!

E la documentazione, mettetevela nella homepage di firefox.

Risorse essenziali:

introduction to firebug

Mozilla Developer Center
http://developer.mozilla.org/en/JavaScript

MSDN JScript Language Reference
http://msdn.microsoft.com/en-us/library/yek4tbz0.aspx

Ultimo aggiornamento Lunedì 27 Luglio 2009 21:36
 
Virtualdub batch jobs - Italiano PDF Stampa
Articoli tecnici - Freeware e shareware
Scritto da Riccardo Zorn   
Martedì 29 Luglio 2008 12:23

Download vdubBatchJobs1 (230Kb)

Obiettivo: comprimere una lista di file video, senza ricomprimere quelli già compressi 

Trascina i files sulla lista per aggiungerli. Questo di solito si fa da una finestra di ricerca. Nella terza colonna vedi il codec.

Puoi filtrare i codec che non desideri ri-comprimere, costruire una lista dei lavori "jobs" ed eseguirla su virtualdub usando i bottoni a sinistra.


Ultimo aggiornamento Domenica 14 Settembre 2008 15:29
Leggi tutto...
 
LDIF Doctor - ITA PDF Stampa
Articoli tecnici - Freeware e shareware
Scritto da Riccardo Zorn   
Lunedì 28 Luglio 2008 10:49

Download LDifDoctor2.zip (400Kb)

LDIF Doctor è uno strumento semplice per effettuare trasformazioni in un file LDIF

Uno scenario tipico per usare file LDIF (LDAP Interchange Format)  è di popolare un server LDAP con i contatti che si trovano nela vostra rubrica Thunderbird o Microsoft Outlook

LDIF Doctor rende il file esportato da Thunderbird compatibile con LDAP.

Permette anche di effettuare trasformazioni di entità.


Ultimo aggiornamento Domenica 14 Settembre 2008 15:32
Leggi tutto...
 
Decalogo del Javascript facile da manutenere PDF Stampa
Articoli tecnici - Sviluppo & sistema
Scritto da Riccardo Zorn   
Sabato 13 Settembre 2008 21:14

Javascript è un linguaggio sempre più usato per scrivere applicazioni complesse.

Tuttavia la sua enorme versatilità fa sì che spesso il codice diventi un incubo da manutenere.


Il costo sopportato dalle aziende per la sola manutenzione del software rappresenta l'80% mentre lo sviluppo di nuovo codice solo il 20%. Questo significa che anche se investiamo il doppio del tempo per scrivere codice più facile da manutenere, siamo destinati a trarne comunque enormi benefici più avanti.


Scrivere codice manutenibile vuol dire scrivere codice di qualità. Codice che sia in primo luogo semplice da comprendere (tramite commenti e indentazione), e semplice da manutenere, ovvero facilmente modificabile, estensibile, e debuggabile (tramite un uso sapiente di oggetti ed errori)

 

Uso personalmente Javascript in una applicazione con 9 oggetti, per un totale di poco meno di cinquemila righe, con due client separati che utilizzano integralmente la stessa logica, dalle stesse librerie javascript. L'applicazione è spesso soggetta a richieste di modifiche da parte dell'utente; dopo 6 anni di vita, posso consigliare le pratiche migliori da adottare sul campo; e dopo aver visto l'intervento di Nicholas Zakas sulla manutenibilità del codice, ho deciso di pubblicare in italiano le mie considerazioni, unite alle sue, corredandole di esempi di codice.

Nessuna di queste indicazioni vuol essere un dogma; tuttavia prendetele in considerazione sempre prima di operare una scelta diversa.

 

Ultimo aggiornamento Giovedì 01 Ottobre 2009 11:34
Leggi tutto...
 
Trucchetti Javascript PDF Stampa
Articoli tecnici - Sviluppo & sistema
Scritto da Riccardo Zorn   
Domenica 14 Settembre 2008 10:42

Lo sapevi che In tutti i browser è possibile inserire direttamente nella barra dell'indirizzo del codice javascript?

Il javascript può esserci utile per divertimento principalmente; ma anche per lavoro.

Divertimento

 (First things first)

Aprite una pagina con un po' di immagini, quindi digitate nella barra dell'indirizzo:

 

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.getElementsByTagName(%22img%22); DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=(Math.sin(R*x1+i*x2+x3)*x4+x5)+%22px%22; DIS.top=(Math.cos(R*y1+i*y2+y3)*y4+y5)+%22px%22}R++}setInterval('A()',50); void(0);

 

 Divertente, vero?

Oppure, aprite una pagina di un giornale e poi scrivete nella barra degli indirizzi:

javascript: document.body.contentEditable = 'true'; document.designMode = 'on'; void 0  

A questo punto, cliccate qualunque testo sullo schermo e iniziate a modificarlo...

Nota bene: qualunque istruzione deve sempre terminare con void 0, altrimenti il browser aprirà una pagina vuota per eseguire la funzione.

Lavoro

Beh questa è più dura. Trovare una utilità vera è più difficile... 

Per esempio si può rendere cliccabile o selezionabile un sito che non lo permette:

Le tecniche per evitare di far selezionare testo o cliccare con il tasto destro sono varie, ma di solito si riducono nel funzionamento all'assegnamento di un paio di funzioni:

document.oncontextmenu=new Function("return false")
document.onselectstart=new Function("return false")

Sia che queste funzioni siano definite in-line, sia che siano definite altrove all'interno dello script, per ripristinare il normale funzionamento basta rimuovere l'assegnazione agli eventi:scriviamo quindi nella barra degli indirizzi:

javascript:document.oncontextmenu=null;document.onselectstart=null;void 0;

 

Ultimo aggiornamento Domenica 14 Settembre 2008 15:29