HighDots Forums  

modifica template preformattato da server

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss modifica template preformattato da server in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #11  
Old   
zachille
 
Posts: n/a

Default Re: modifica template preformattato da server - 12-14-2007 , 11:02 AM






On 14 Dic, 17:12, ZER0 <zer0.sh... (AT) libero (DOT) it> wrote:
Quote:
On Fri, 14 Dec 2007 07:46:24 -0800 (PST), zachille wrote:
Devo essere sincero, non ho ben capito il tuo problema. O meglio,
prima parti con un certo tipo di problematica, e poi ti dirigi in
tutt'altra direzione...
Analizzando il documento posso apportare delle modifiche al template
utilizzando DOM.

No, fermo. Sei già andato troppo avanti. Analizziamo passo passo la
questione.
Cerchero' di fare del mio meglio...

Quote:
Bene. Ma questo se ho capito bene (altrimenti correggimi), è quello
che ti restituisce la chiama XMLHttpRequest.
Ovvero una stringa, come dici qui (a meno che tu non ti stia invece
riferendo ad altro):

La richiesta ritorna una stringa e non un DOM document object.
Esatto. Il frammento del report l'ho preso dall'html generato dal
server. Ed e' comunque quello che ottengo a seguito della chiamata
XHR.

Quote:
Di conseguenza presumo che la risposta alla chiamata XHR, ovvero la
suddetta stringa, tu la recuperi dalla proprietà "responseText" del
tuo oggetto XMLHttpRequest (e non da "responseXML" per intenderci).

Fin qui è tutto corretto?
Si.

Quote:
Per ricevere un oggetto DOM corrispondente al documento parsato dovrei
convertire l'html o un frammento di esso in XML.
Scusa se sono insistente. Se convertissi una parte del documento HTML
in XML potrei ottenere un oggetto DOM tramite "responseXML".

Quote:
Più che in XML, in HTML, se poi la tua intenzione è "appenderlo" al
documento HTML corrente.
A seguito di una trasformazione XSLT otterrei comunque un'HTML.

Quote:
E qui subentra la seconda domanda e chiarimento:
La richiesta XHR chi la fa? Una pagina HTML, presumo. Pagina che tu
puoi modificare (cosa che non puoi fare al template, se ho inteso).
Si. Per completezza:
Una pagina viene caricata in un iframe nascosto (questo per mantenere
l'history del browser). Questa ha al suo interno la funzione che si
preoccupa di effettuare la richiesta XHR che carichera' la stringa
ottenuta:

var req = newXMLHttpRequest();
var el = document.getElementById(args[2]);
el.innerHTML = req.responseText;

In sintesi. Hai inteso bene.

Quote:
Questa pagina HTML cosa ci deve fare, poi, del "template" una volta
che l'hai ottenuto?
A parte modificare la width o altro, fai conto di averlo già fatto,
cos'è che deve farci alla fin fine?
A me interessa solo adeguare il template al layout del mio sito.
Quindi, a scopo puramente stilistico, voglio ottenere che alcune
tabelle non "sbordino" dal margine destro del div che ha una larghezza
definita.

Quote:
Ti ricordo comunque, dato che di stringhe stiamo parlando, che puoi
sempre usare le regexp.

Ecco, non mi è ben chiaro come siamo passati da questo:
Quindi una
funzione che sfrutti getElementsByName, e agisca magari sull'attributo
width della tablella "pluto" tralasciando il resto.
A questo:
Sono daccordo che si possa adeguare il template tramite DOM ma, per
farlo, dovrei innestare lo script nella pagina prima che questa venga
visualizzata.
XSLT potrebbe essere una soluzione ma in rete non ho trovato molto.
Appunto.

Appunto.. cosa? Il passaggio non è chiaro. Stai dicendo due cose
differenti tra loro.
Inoltre abbiamo appurato che ciò che hai tu è una stringa (anche se
aspetto un'ulteriore conferma). Quindi così com'è non puoi usare né
le DOM API, né l'XSLT.

Convertire un frammento del DOM

Tu non hai un frammento del DOM. Tu hai una stringa.
Al più devi prima convertire la stringa in frammento del DOM.

da HTML a documento XML.

Ma una volta che hai l'HTML, perché vorresti convertirlo in XML? Se
poi devi aggiungere quell'HTML da qualche parte nel documento, deve
appunto essere HTML.
L'idea di convertire l'HTML in XML si basava sull'approccio di poter
effettuare trasformazioni XSLT durante la richiesta XHR. La mia idea
e' agganciare un template XSL ad hoc correttamente parsato dal
processore XSLT referenziandolo al frammento XML ottenuto dalla
conversione.

Quote:
La funzione importNode e' usata per clonare dei nodi e processarli
tramite XSLT.

Eh, stai tutt'ora andando troppo oltre. Torna indietro. Vanno prima
chiariti i passaggi precedenti.

Praticamente vorrei applicare le modifiche al template prima che la
richiesta XHR venga soddisfatta.
Detta così, è una frase non solo concettualmente errata, ma anche
temporalmente errata.
Come puoi applicare le modifiche a qualcosa che ancora non hai?
Non so'. Andiamo passo passo.

E' quello che sto cercando di fare.

Penso di non riuscire a dare un quadro
generale.

Dobbiamo riuscirci, invece.
Cerca di rispondere alle domande che ti ho fatto, mi aiuterebbe non
poco.

Se il contesto non e' chiaro spero abbiate la pazienza di "aiutarmi a
spiegarmi"...

Vai tranquillo, siam qui.

Un ultima cosa: su quale/i browser deve girare il tutto?
IE 6, 7 e FF.


Reply With Quote
  #12  
Old   
zachille
 
Posts: n/a

Default Re: modifica template preformattato da server - 12-15-2007 , 07:40 AM






On 14 Dic, 16:46, zachille <fad... (AT) gmail (DOT) com> wrote:

Quote:
a name="sessions">&nbsp;</a><br /
table class="aws_border" border="0" cellpadding="2" cellspacing="0"
width="100%"
tr><td class="aws_title" width="70%">Visits duration </td><td
class="aws_blank">&nbsp;</td></tr
tr><td colspan="2"
table class="aws_data" border="1" cellpadding="2" cellspacing="0"
width="100%"
tr bgcolor="#ECECEC"><th>Number of visits: 27 - Average: 1268 s</
th><th bgcolor="#8888DD" width="80">Number of visits</th><th
bgcolor="#8888DD" width="80">Percent</th></tr
tr><td class="aws">0s-30s</td><td>3</td><td>11.1 %</td></tr
tr><td class="aws">30s-2mn</td><td>2</td><td>7.4 %</td></tr
tr><td class="aws">2mn-5mn</td><td>5</td><td>18.5 %</td></tr
tr><td class="aws">5mn-15mn</td><td>7</td><td>25.9 %</td></tr
tr><td class="aws">15mn-30mn</td><td>2</td><td>7.4 %</td></tr
tr><td class="aws">30mn-1h</td><td>3</td><td>11.1 %</td></tr
tr><td class="aws">1h+</td><td>5</td><td>18.5 %</td></tr
/table></td></tr></table><br /

Ammesso che il documento sia "effettivamente" un documento, e non
una stringa (dato che lo recuperi tramite XHR). In tal caso, devi
usare le regexp (oppure, creare dalla stringa dei nodi effettivi,
agganciando il tutto al document tree).
Restituendo una stringa con "responseText" ho la possibilita' di
modificare cio' che voglio con le regexp.
Sapreste suggerirmi un espressione regex che faccia match con il
report sopra. Cioè io vorrei riconoscere il tag <a> con attributo
name="sessions" e, semplicemente, eliminare tutto fino all'ultima </
table> compreso il <br/> finale. Questo e' possibile?

Grazie ancora...


Reply With Quote
  #13  
Old   
P/ero
 
Posts: n/a

Default Re: modifica template preformattato da server - 12-16-2007 , 12:26 PM



"zachille" [by G2/1.0] on 15/12/07 14:40 wrote:

...skipped!
Quote:
Restituendo una stringa con "responseText" ho la possibilita' di
modificare cio' che voglio con le regexp.
Sapreste suggerirmi un espressione regex che faccia match con il
report sopra. Cioè io vorrei riconoscere il tag <a> con attributo
name="sessions" e, semplicemente, eliminare tutto fino all'ultima
/table> compreso il <br/> finale. Questo e' possibile?
Ho capito che vuoi eliminare tutto il codice, lasciando solo:
<a name="sessions">&nbsp;</a>

Questa regexp lo fa:
replace(/(.|[\r\n])*<a([^\x7F]+)\/a>(.|[\r\n])*/gi,"<a$2/a>");

ma se vuoi il contrario, usa questa:
replace(/<a([^\x7F]+)\/a>/gi,"");

--
* b *
* y *
* Piero *
[ /carpe diem/ ]



Reply With Quote
  #14  
Old   
ZER0
 
Posts: n/a

Default Re: modifica template preformattato da server - 12-17-2007 , 02:59 AM



On Fri, 14 Dec 2007 09:02:03 -0800 (PST), zachille wrote:

Quote:
Per ricevere un oggetto DOM corrispondente al documento parsato dovrei
convertire l'html o un frammento di esso in XML.

Scusa se sono insistente. Se convertissi una parte del documento HTML
in XML potrei ottenere un oggetto DOM tramite "responseXML".
Si, ma forse qui c'è un punto che non ti è chiaro. Un documento XML
non è un documento HTML. Anche il DOM e le DOM API sono differenti,
sebbene simili.
Quindi anche se tu ottenessi un documento XML ("oggetto DOM" non ha
senso chiamarlo) tramite responseXML non potresti appenderlo al tuo
documento HTML direttamente. Dovresti trasformarlo in una stringa e
poi in HTML. Come vedi faresti una serie di passaggi inutili.

Quote:
Più che in XML, in HTML, se poi la tua intenzione è "appenderlo" al
documento HTML corrente.

A seguito di una trasformazione XSLT otterrei comunque un'HTML.
Si, ma è un "rimbalzo" inutile, è questo che sto cercando di dirti.
Se tu avessi già un documento XML e un template XSLT, indubbiamente
il discorso sarebbe diverso. Ma in questo caso lo stai intruducendo
te, aumentandone la complessità del sistema, per risolvere qualcosa
che puoi benissimo risolvere in altri modi, più semplici.

Quote:
E qui subentra la seconda domanda e chiarimento:
La richiesta XHR chi la fa? Una pagina HTML, presumo. Pagina che tu
puoi modificare (cosa che non puoi fare al template, se ho inteso).

Si. Per completezza:
[..]
var req = newXMLHttpRequest();
var el = document.getElementById(args[2]);
el.innerHTML = req.responseText;

In sintesi. Hai inteso bene.
[cut]

Quote:
A me interessa solo adeguare il template al layout del mio sito.
Quindi, a scopo puramente stilistico, voglio ottenere che alcune
tabelle non "sbordino" dal margine destro del div che ha una larghezza
definita.
Okay. Quindi tu vuoi modificare il responseText che stai assegnando
a "el.innerHTML". Perfetto.
Puoi farlo anche qui. Ovvero:

var el = document.getElementById(args[2]);
el.innerHTML = req.responseText;

/* accedi e modifica elementi appena aggiunti al document tree */

var a = document.getElementsByTagName("sessions")[0], tbl;

if ( a != null ){
tbl = a.nextSibling;

while ( tbl!=null && tbl.tagName != "TABLE")
tbl = tbl.nextSibling;

if ( tbl )
tbl.style.width = "200px";
}


Fintanto lo script engine è occupato a elaborare, il browser non ha
modo di ridisegnare la pagina (ed è il motivo per cui se vuoi delle
animazioni, devi utilizzare setTimeout/setInterval) quindi non devi
preoccuparti di effetti collaterali "visivi".

Quote:
Ma una volta che hai l'HTML, perché vorresti convertirlo in XML? Se
poi devi aggiungere quell'HTML da qualche parte nel documento, deve
appunto essere HTML.

L'idea di convertire l'HTML in XML si basava sull'approccio di poter
effettuare trasformazioni XSLT durante la richiesta XHR.
Anche "durante" è fuorviante come termine: "durante", vorrebbe dire
mentre la chiamata è in corso. Ma tu puoi farlo sono quando è stata
conclusa.
Inoltre ribadisco che tale approccio, solo per cambiare la width di
qualche tag, aggiunge solo complessità in più.
Tra l'altro, se si tratta solo di modifiche stilistiche hai pensato
ad usare unicamente i CSS? Magari tramite la keyword "!important".

Quote:
Vai tranquillo, siam qui.

Un ultima cosa: su quale/i browser deve girare il tutto?

IE 6, 7 e FF.
Te l'ho chiesto perché tra l'XSLT e importNode, ho paura che tu non
abbia considerato la diversità che intercorre tra i browser. In IE,
molte cose non sono addirittura supportate.

--
~ "D'una città non godi le sette o le settantasette meraviglie,
ma la risposta che dà a una tua domanda." (Italo Calvino)



Reply With Quote
  #15  
Old   
zachille
 
Posts: n/a

Default Re: modifica template preformattato da server - 12-23-2007 , 06:39 AM



On 17 Dic, 09:59, ZER0 <zer0.sh... (AT) libero (DOT) it> wrote:

Quote:
Si, ma forse qui c'è un punto che non ti è chiaro. Un documento XML
non è un documento HTML. Anche il DOM e le DOM API sono differenti,
sebbene simili.
Quindi anche se tu ottenessi un documento XML ("oggetto DOM" non ha
senso chiamarlo) tramite responseXML non potresti appenderlo al tuo
documento HTML direttamente. Dovresti trasformarlo in una stringa e
poi in HTML. Come vedi faresti una serie di passaggi inutili.
I passaggi di troppo rispecchiavano la poca chiarezza nella mia testa.

Quote:
Si, ma è un "rimbalzo" inutile, è questo che sto cercando di dirti.
Se tu avessi già un documento XML e un template XSLT, indubbiamente
il discorso sarebbe diverso. Ma in questo caso lo stai intruducendo
te, aumentandone la complessità del sistema, per risolvere qualcosa
che puoi benissimo risolvere in altri modi, più semplici.
Un mostruoso intreccio. Avevo pensato, allora, di utilizzare le regexp
come mi hai suggerito.
C'è una naturale tendenza a complicare le cose...

Quote:
Okay. Quindi tu vuoi modificare il responseText che stai assegnando
a "el.innerHTML". Perfetto.
Puoi farlo anche qui. Ovvero:

var el = document.getElementById(args[2]);
el.innerHTML = req.responseText;

/* accedi e modifica elementi appena aggiunti al document tree */

var a = document.getElementsByTagName("sessions")[0], tbl;

if ( a != null ){
tbl = a.nextSibling;

while ( tbl!=null && tbl.tagName != "TABLE")
tbl = tbl.nextSibling;

if ( tbl )
tbl.style.width = "200px";
}
Questo esempio ha chiarito definitivamente i miei dubbi.
Immagino che quando tu scrivi
document.getElementsByTagName("sessions") intendessi
document.getElementsByName("sessions").

Quote:
Anche "durante" è fuorviante come termine: "durante", vorrebbe dire
mentre la chiamata è in corso. Ma tu puoi farlo sono quando è stata
conclusa.
Inoltre ribadisco che tale approccio, solo per cambiare la width di
qualche tag, aggiunge solo complessità in più.
Tra l'altro, se si tratta solo di modifiche stilistiche hai pensato
ad usare unicamente i CSS? Magari tramite la keyword "!important".
Con i CSS avevo poca resa.
Sebbene la tua e le altre risposte mi hanno illuminato, ho deciso di
abbandonare la scelta di modificare un template by server lato client.
IE sfocia in errori di autorizzazione e, adottare un metodo classico
quale l'apertura di una nuova finestra per i contenuti non è poi così
degradante, nel mio particolare caso.

Mi scuso se non sono stato repentino nella risposta. Mi pareva
doveroso ringraziarti. Buone feste!


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.