Disfuctioning JavaScript
La release seppur beta di IE9 ha portato scompiglio dappertutto. Anche questo blog, la parte che gestisce l’editor online basata su TinyMCE, ha subito qualche dissestamento (?). Ero arrivato a scegliere TinyMCE dopo aver provato un po’ di tutto per due motivi essenziali:
- mi sembrava abbastanza stabile e coerente con l’output
- supportava correttamente le citazioni non ricorsive
Purtroppo però col tempo anche TinyMCE ha smesso di essere Tiny e capire dove fosse la fonte dei guai è diventato difficile. Aggiungiamoci che il caching Javascript di IE9 è bacato e l’immagine è completa.
Mi son chiesto quanto fosse complicato scrivere un editor che funzionasse con i tre maggiori engine (sorry Courtaud!) e mi son imbattuto in un post interessantissimo. A leggere la descrizione sembrava pure piuttosto banale. Ho trovato poi in rete su codeplex qualcosa che fosse ispirato alla stessa filosofia, basato su jQuery per il quale ho acquistato adeguata familiarità, e che soprattutto fosse senza fronzoli anche senza il supporto per il blockquote: in più la licenza è molto meglio di quella di TinyMCE.
Ho voluto implementare il blockquote ed allora mi son imbattuto contro ostacoli insormontabili per lo meno all’apparenza.
- il codice che gestisce la posizione del caret e del testo selezionato non fa (faceva) parte di nessuno standard. Fu introdotto da IE nel passato remoto. Chi venne dopo decise di “standardizzarlo” usando un’interfaccia diversa (questi parrucconi!)
- quando si clicca Enter/Invio ogni browser fa a modo suo. Chrome inserisce i DIV, IE inserisce i <p/>, Firefox inserisce <br/> o <p/> a seconda se è premuto il tasto SHIFT o meno
- anche un’interfaccia standard o quasi come execCommand è stata implementata in alcuni casi in maniera disastrosa. IE inserisce un blockquote, Firefox un <p con style>, Chrome uno <span>
A complicare le cose la funzionalità particolare di blockquote. Martellando un po’ di codice qua e là sono riuscito a mettere su un’implementazione alla buona seppur abbastanza bacata. Ho deciso di sbirciare nel codice di TinyMCE e ho scoperto che, per difendersi da queste variazioni assurde di implementazione, hanno scritto un engine RTE completamente separato tra l’altro pure molto bene.
Purtroppo il supporto ad IE9, in quanto estremamente frustrante, non è un task molto appealing. Qualcuno ci ha messo una pezza per fortuna, ma parecchi problemi restano.
A questo punto credo che tutte le mie buone intenzioni per jHTMLArea siano completamente irrealistiche e penso ti tornare fra qualche giorno all’ovile, con il capo cosparso di cenere.
-quack