iframe
iframe
Vi begynner med et enkelt eksempel på en ganske unyttig tjeneste, en gadget som viser fram et tilfelding latinsk sitat, med norsk oversettelse. Dette sitatet produseres fra et Pythonskript som ser slik ut:
Selve sitatsamlingen er lagret som en dictionary i fila: quotes.py.
Vi starter med å se på iframe som en mekanisme for å inkapsle en egen frame på websiden som kan vise fram et "eget vindu".
HTML-koden ser slik ut:
<div> <iframe src="http://www.it.hiof.no/~borres/cgi-bin/latin/gadlatin.py" width="300" height="120"> </iframe> </div>
Vi kjører altså et eget "browservindu" i browseren.
Vi skal gjøre tre ting med denne løsningen for å få den, om ikke mer nyttig, så i hvert fall mer "gadgety". Først skal vi pakke vinduet inn slik at vi kan åpne og lukke det. Deretter skal vi la vinduet generere nye sitater, når vi ønsker det, og med jevne mellomrom. Til sist skal vi gjøre vinduet flyttbart.
Innpakket
Vi kan enkelt legge på en menylinje som gjør at vi kan åpne og lukke vår gadget.
HTML-koden ser slik ut:
<div class="wxtgadget" style="width:303px"> <div class="header"> <span class="off" onclick="toggleGadget(this);">_</span>Latinske ordtak</div> <div class="content" style="display:none"> <iframe height="120" src="http://www.it.hiof.no/~borres/cgi-bin/latin/gadlatin.py" width="300"> </iframe> </div> </div>
Java scriptet: toggleGadget kan være slik:
function toggleGadget(elt) { contentElt=elt.parentNode.parentNode.getElementsByTagName('div')[1]; if(elt.getAttribute("class")=="off") { contentElt.style.display="block"; elt.setAttribute("class","on"); } else { contentElt.style.display="none"; elt.setAttribute("class","off"); } }
Dynamisk
Dersom vi ønsker å lage sitatgadgeten slik at den frisker seg opp med jevne mellomrom kan vi endre vevsiden med å legge inn følgende linje i headeren til den siden vi genererer i Pythonscriptet:
<meta http-equiv="refresh" content="15"/>
Alternativt kan vi lage det slik at vi klikker for neste
Eller "innpakket"
Dette er realisert med en enkel div i den HTML-siden som lages:
<div style="cursor:pointer;text-align:right;position:absolute;top:20;left:250"> <a href="http://www.it.hiof.no/~borres/cgi-bin/latin/gadlatin4.py">>></a> </div>
Python scriptet blir i dette tilfellet slik:
Et annet eksempel som ikke bruker noe skript på tjeneren, men som bare legger ut HTML-sider kan være slik:
Flyttbart
Vi ønsker i tillegg til å åpne og lukke vinduet, også å gjøre det flyttbart (drag and drop). Dette krever en god del mer javaskripting. Det finnes mange oppskrifter for Dragging i Javascript, men som (nesten alltid) finnes det en grei og rimelig enkel og godt forklart løsning hos Quirksmode [3]
HTML-koden blir slik:
<div id="gadget1" class="wxtgadget" style="width:303;position:absolute"> <div class="header" style="cursor:move"> <span class="off" onclick="toggleGadget(this)">_</span>Latinske ordtak</div> <div class="content" style="display:none"> <iframe height="120" src="http://www.it.hiof.no/~borres/cgi-bin/latin/gadlatin.py" width="300"> </iframe> </div> </div> <script type="text/javascript"> dragDrop.initElement('gadget1');</script>
WXT
Det verktøyet, WXT jeg bruker for å lage og vedlikeholde disse vevsidene lager automatisk "gadgets" i form av iframe eller html-segmenter, sammen med standardiserte stiler. Jeg skriver f.eks. følgende:
<_wxt gadget fragmentid="tombola" title="La Vida Tombola" movable="yes" width="480" height="410"?>
og WXT generer:
<div class="wxtgadget" id="La_Vida_Tombola" style="width: 485; position: absolute; left: 135; top: 3131;"> <div class="header"> <span class="off" onclick="toggleGadget(this);">_</span> La Vida Tombola</div> <div class="content" style="display: none;"> <object height="385" width="480"> <param name="movie" value="http://www.youtube.com/v/ZlSm-wMf2yk&hl=en_US&fs=1&rel=0"> <param name="allowFullScreen" value="true"> <param name="allowscriptaccess" value="always"> <embed allowfullscreen="true" allowscriptaccess="always" src="http://www.youtube.com/v/ZlSm-wMf2yk&hl=en_US&fs=1&rel=0" type="application/x-shockwave-flash" height="385" width="480"> </object> </div> <script type="text/javascript">dragDrop.initElement('La_Vida_Tombola');</script>
Youtube
Vi kan også legge inn html-fragmenter som i seg selv viser dynamisk material. Vi kan lage AJAX-løsninger i et fragment (eller en iframe) eller vi kan f.eks. legge inn en video fra YouTube som en gadget. Vi legger inn den koden som YouTube inviterer oss til å "embedde". F.eks. en video av Manu Chao:
Eller et foredrag av Alan Kay:
Applet
Java Applets er en annen komponent vi kan vurdere å ta inn i vårt utvidede gadget-begrep.
Denne appleten er nærmere beskrevet på En 3D-applet
Koden som drar gadgetdynamikken på sidene er slik:
og