Newsgroup: it.comp.lang.javascript
Titolo: Pagine parametriche

Prima di postare ho letto le varie news ma non ho trovato la risposta al
mio problema:
la pagina che vorrei creare (appunto parametrica) si deve adattare sia
al tipo di client (browser) che alla risoluzione dello schermo: il
problema nasce dal tipo di client (NN4) in quanto faccio uso di CSS; con
IE nessun problema in quanto il passaggio dei parametri è accettato
senza problemi; anche con NN4 la maggior parte dei parametri passati
vengono accettati come 
p.es
 posizionamento del layer; quello che non
riesco a far recepire dal browser NN4 è il tipo di carattere e la
dimensione dello stesso; inoltre vorrei sapere se è possibile impostare
espressioni per la definizione dei tag all'interno di <STYLE> come 
p.es
A: P: che siano riconosciute dai vari browser in funzione anche delle
varie risoluzioni; questa la porzione di codice:
 clie       indica il browser NN4
 quale      indica il nome del layer
  . 
  .
  .
if (clie){
  document.layers[quale].top=110;
  document.layers[quale].left=130;
  document.layers[quale].width=400;
  document.layers[quale].height=281;
  //document.layers[quale].fontSize="15px"; <-- non lo sente
  }
 else{
  document.all[quale].style.top=100;
  document.all[quale].style.left=140;
  document.all[quale].style.width=400;
  document.all[quale].style.height=281;
  document.all[quale].style.fontSize= "13px";
  }
  mostra(quale)
</script>
<STYLE TYPE="text/css">
 #hw1 {position:absolute; Z-INDEX:1; VISIBILITY:hidden;}
 {font-family:Courier; color:#ffffff;}
 A:link, A:visited {font-size:14px; text-decoration:none;
color:#ffffff;}
 A:hover { text-decoration:none; color:#6fcfe6}
</STYLE>
</head>
In una delle news veniva presentato codice all'interno del tag <STYLE>
per la valutazione di espressioni parametriche; con IE nessun problema
ma con NN4 non se ne parla:
<style>
  .centeredLayer{
    position : absolute;
    left : expression(eval((parametro));
    top : expression(eval((parametro));
  }
</style>
In definitiva il problema si presenta di far sentire al layer impostato
un tipo di carattere ed una 
dimensione prestabilita a seconda del browser e della risoluzione ossia
passaggio di parametri;
ringraziando del tempo dedicatomi spero che il problema posto, se
risolvibile, possa essere fonte di 
aiuto anche ad altre persone.
Dall' indirizzo di posta eliminare le prime due lettere e l'ultima a
sinistra di @.

Sostanzialmente il problema realtivo a NN4 e CSS č ormai conosciuto , per
quanto riguarda le dimensioni č possibile utilizzare l'area di ritaglio per
variare le stesse , es    document.layers['tuo'].clip.height =110
etc....   oppure un resize del layer stesso
document.layers['tuo'].resizeTo( 100,150)    mentre per il resto la
soluzione migliore č sempre di riscriverlo con document.write e i nuovi
parametri.
Cmq su 
http://www.jsdir.com
  Tutorials vi sono un paio di tutorials relativi
a dhtml e css e anche nella sezione FAQ -DHTML troverai degli esempi...
andreotta fabiano
 WebMŞster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
 
http://www.aticommerce.com
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com
 
http://www.javascript.3000.it

  
http://www.javascript.3000.it
Ti ringrazio del consiglio; la sintassi document.write l' avevo già
usata, e a quel punto non avrei più avuto problemi, ma ho notato che
avendo a che fare sempre con i CSS, NN4 non la digerisce anche facendo
precedere il tag <STYLE></STYLE> alla sezione <SCRIPT ...> </SCRIPT>;
infatti mettendo 
p.es
 document.layers[nomlayer].document.write<"pippo">
dove nomlayer è stato definito in <style>, ed è un layer nascosto che
alla chiamata ad una funzione viene posto nello stato di visibile, per
la sezione NN4 la cosa non viene gradita in quanto mi dice
document.layers[nomlayer] has no properties; ho provato anche
document.write(<"DIV ID='nomlayer' style='...'>pippo</DIV>") ma niente;
ho notato invece che mettendo nella sezione <style> la definizione di un
layer 
p.es
 #pippo { e mettendo qui la dichiarazione del font-Size:...;}
NN4 la segue fedelmente mentre IE5 da la precedenza alla mia
dichiarazione --> document.all[quale].style.fontSize= "13px";
chiaramente non fosse presente la dichiarazione appena scritta anche IE5
seguirebbe le indicazioni impostate sul layer; in questo modo posso
variare a piacimento le dimensioni del font a seconda del browser; per
le risoluzioni sono ancora costretto a diversificare le pagine
richiamate; grazie ancora per avermi dedicato del tempo ;)

 ha scritto nel messaggio
news:3A3BA253...@libero.it...
[]
La differenza fondamentale tra IE e NS4.x e' che, in NS4.x, la modifica
di tutta una serie di attributi di visualizzazione non si rispecchia
nella modifica di visualizzazione dopo che l'oggetto e' stato elaborato;
fa eccezione, in determinate condizioni, solo la visibilita', il
posizionamento e il colore di sfondo . Per altre modifiche e' necessario
riscrivere il tag con gli attributi in un layer assoluto.
E' questa caratteristica diversa dei due browser che permette di
utilizzare *document.all[quale].style.fontSize= "13px"* mentre rende
inutile *document.layers[quale].fontSize="15px";*; NS4.x mette in
memoria il nuovo valore ma non attiva la funzione di ridisegnare
l'oggetto.
E' invece possibile modificare dinamicamente qualsiasi attributo di
visualizzazione prima dell'elaborazione; non utilizzando l'array layers
che si forma dopo l'elaborazione dell'oggetto; ma gli stili che vengono
definiti prima.
I riferimenti agli stili che si possono fare in javascript sono:
document.tags                ad un tag;
document.classes            a una classe
document.ids                  a un id
E quindi per cambiare il font ad una classe:
bb="24pt"
document.calsses.pippo.all.fontSize=bb;
In IE il meccanismo e' un po' diverso; e' necessario che ci sia un fogli
di stile a cui fare riferimento
<style id="pippo"></style>
al quale aggiungere regole:
<script>
bb="24pt"
document.styleSheets.pippo.addRule(".pluto", "font-size:"+bb, 0)
</script>
Il codice completo per una classe pippo sara';
<style id="pippo"></style>
<script>
bb="24pt"
if (document.layers) document.classes.pluto.all.fontSize=bb;
else if (document.all) document.styleSheets.pippo.addRule(".pluto",
"font-size:"+bb, 0);
else if (document.getElementsByID)
document.getElementsByID('pippo').insertRule (".pluto", "font-size:"+bb,
0)
</script>
nota: l'ultima riga serve per NS6.
Saluti, Paolo


Grazie anche a te, pippopd, per il suggerimento; ne farò tesoro ;)

 l'oggetto.
Il punto e' un'altro, per essere piu' precisi:
Le caratteristiche direttamente collegabili ad un Layer, in NS, vengono
aggiornate. Quelle che invece devono obbligatoriamente passare dalla
definizione dello "style", no.
Se setti il font-style da una classe:
.prova{font-size:20px;}
e lo richiami da un layer:
<layer id="test" class="prova">Ciao</layer>
e richiedi il valore di font-size:
document.layers[0].fontSize
ti viene restituito "undefined".
Se invece provi a chiedere, chesso', l'area di clip, o anche la visibilita',
NONOSTANTE non sia settata da nessuna parte, Netscape ti risponde
correttamente.
Se invece di usare una classe, setti il valore direttamente sul layer
tramite lo style:
<layer id="test" style="font-size:20px">Ciao</layer>
Allora NS lo memorizza, ma non ne fa uso in modo "dinamico". Lo memorizza
come qualunque altro tipo di attributo settato a run-time non facente parte
del costruttore dell'oggetto.
La visibilita', il Clipping... sono cose che aggiorna anche a runtime
perche' sono attributi "nativi" (se cosi' vogliamo dire) dell'oggetto
layer.. fontSize e similari, no.. E la Netscape, invece che riscrivere
ex-novo l'engine di NS per introdurre i CSS, ha utilizzato questo
"escamotage"..

 del costruttore dell'oggetto.
[]
Non mi risulta che uno stile in linea sia memorizzato come attributo del
layer ma come attributo degli oggetti di stile in questo caso ids; cosa
completamente disgiunta dal layer e valida per qualsiasi elemento:
document.layers['test'].fontSize     ritorna sempre indefinito mentre
document.ids.test.fontSize            ritorna il valore.
che, come detto, non aggiorna in ogni caso la visualizzazione.
Saluti, Paolo

 document.ids.test.fontSize            ritorna il valore.
Si, ma se noti bene, questo funziona solo per quanto riguarda gli style in
linea.
Se specifico una classe, mi ritorna undefined.
E questo perche'? Perche' nel caso della classe, l'attributo in questione
viene "memorizzato" nella collection "classes" (appunto).
Tutto perche' questi "attributi" non sono contemplati nel costrutto
originario dei Layer di NS.
IMVHO, alla Netscape non hanno voluto riscrivere ex-novo il "core" di NS, ed
hanno cercato dei workaround per implementare le nuove specifiche.

Tengo a sottolineare che mi sto riferendo ai layer, cmq. (si dice
mai..)
La discussione e' ovviamente sul comportamento generale di NS4.x in
relazione agli oggetti e attributi, dei quali fanno parte anche i layer.
Per essere precisi:
*document.layers[id].fontSize=* non da risultati visibili perche',
fontSize, non ha nessun collegamento con la proprieta' *font-size*
valorizzata in uno stile esterno o in linea, ma e' un nuovo attributo
assegnato a quell'oggetto esattamente come *pippo* in
*document.layers[id].pippo*; quindi un attributo personalizzato; questo
vale per qualsiasi oggetto, non e' una cosa speciale per i layer.
Buona parte delle proprieta' intrinseche di un oggetto raggiungibile
tramite DOM non visualizzano le modifiche effettuate, per evidente
incapacita' del browser di attivarsi alla modifica di quella proprieta'.
Le proprieta', raccolte nelle collezioni di stili, possono essere
modificate ma manca la capacita' di visualizzare la modifica se
l'elemento e' gia' stato elaborato, mentre utilizza la modifica mentre
elabora l'elemento (es.: e' possibile modificare lo stile di due
collegamenti inserendo lo script tra i due tag; il collegamento
precedente allo script viene visualizzato con lo stile iniziale il
successivo con lo stile modificato).
NS, quindi, usa le proprieta' aggiunte con i fogli di stile e buona
parte di quelle intrinseche dell'elemento quando visualizza l'elemento
ma non ha la capacita' di visualizzarne le modifiche, benche' siano
raggiungibili e, in parte, anche modificabili nel valore, .
Non e' corretto il nesso tra "visualizzazione" e "appartenenza alle
proprieta' intrinseche".
Saluti, Paolo
p.s.: *document.ids[id].proprieta'* restituisce il valore della
proprieta' sia per gli stili in linea sia per gli stili esterni che,
ovviamente, facciano riferimento all'id.

 ovviamente, facciano riferimento all'id.
Ovviamente. Ma se ti ricordi bene io ho detto "se specifico una classe". Non
"se specifico una classe che faccia riferimento all'id".
Inoltre ti ho riportato l'esempio (se rileggi i post lo trovi) della classe
cosi' definita:
.prova{font-size:20px;}
In cui veniva richiamata:
<layer id="test" class="prova">Ciao</layer>
Come puoi vedere, e' ben evidente di che contesto stessimo parlando, no?


Capisco che ti trovi in difficolta', ma cambiare la terminologia o
manipolare i post inserendo delle parti in contesti diversi o
omettendone altre non migliora la situazione
Mi sembra che fingi di non capire:
"caratteristiche direttamente collegabili " (definizione tua) ="fanno
parte del costrutto" (definizione tua) ="proprieta' intrinseche di un
oggetto" (definizione mia)
Se non ti viene in mente nessuna "proprieta'
intrinseca"/"caratteristiche direttamente collegabili "/"fanno parte del
costrutto"  di un oggetto che non visualizza la modifica, e' sufficiente
che fai qualche prova con qualsiasi oggetto.
Constaterai che l'appartenenza a questa categoria non implica la
certezza di visualizzare le modifiche.
A riguardo degli stili in linea o esterni, e' ancora piu' evidente
l'arrampicata sugli specchi.
Peccato!!
Non trovando nessun insegnamento da questa discussione, mi asterro' dal
proseguirla.
Saluti, Paolo

 Non trovando nessun insegnamento da questa discussione, mi asterro' dal
proseguirla.
Mhm. Fammi capire: Tu segui un thread *solo* se puoi trarne insegnamento? E
degli insegnamenti che possono trarre gli altri non te ne frega nulla?
Dovrebbe, visto che spesso rispondi a domande su JS, anche banali, dalle
quali tu non trai insegnamenti ma ne dispensi.
Quindi questa frase mi sembra un po' contradditoria.
Come ti ho detto pippopd, tutti nessuno smette mai di imparare e qui si
tratta di imparare. Se io sto sbagliando, e tu mi fai capire dove sbaglio,
vuol dire che ho imparato qualcosa. E quindi, che almeno IO avro' tratto
insegnamento da questa discussione.. e bene o male questo e' lo spirito
dell'NG, non ti pare?
E, cmq, non e' detto che sia solo io quello che possa imparare qualcosa.
Come ti ho detto, io ho fatto ulteriori prove (visto che ha insistito). E le
prove eseguite, piu' riscontri pratici, hanno dato ragione a me.
Ho preso gli attributi del costrutto dell'oggetto LAYER e, laddove non
fossero ovviamente read-only, li ho modificati a run-time. TUTTE le
modifiche eseguite su TUTTE le PROPRIETA' sono state visualizzate.
Di contro, TUTTE LE MODIFICHE fatte ad attributi (qui chiamarle "proprieta'
" non e' corretto) che rientrano sempre nell'insieme dei CSS ma che NON
FANNO PARTE del costrutto dell'oggetto in questione, sono state bellamente
ignorate. Questo, sempre a run-time.
Ora sta a te fare un po' di prove. Fammi sapere il responso. E se hai
bisogno della struttura del costrutto dell'oggetto LAYER, fammelo sapere.
O  se vuoi posto la lista delle proprieta' sull'NG o ti dico dove poterle
prendere.