<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zustandsforschung &#187; javascript</title>
	<atom:link href="http://www.zustandsforschung.de/index.php/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zustandsforschung.de</link>
	<description>Mit offenen Augen durch die Welt</description>
	<lastBuildDate>Wed, 04 Jan 2012 13:22:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Experimente mit HTML5: Das Canvas-Element</title>
		<link>http://www.zustandsforschung.de/index.php/experimente-mit-html5-das-canvas-element/</link>
		<comments>http://www.zustandsforschung.de/index.php/experimente-mit-html5-das-canvas-element/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 18:54:56 +0000</pubDate>
		<dc:creator>Benedikt</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programmierung]]></category>

		<guid isPermaLink="false">http://www.zustandsforschung.de/?p=1718</guid>
		<description><![CDATA[Nachdem HTML5 ja mittlerweile von immer mehr Browsern unterstützt wird, ist es an der Zeit, sich doch mal damit zu beschäftigen. Ich habe mir für mein erstes Experiment das &#8220;Canvas&#8221;-Element ausgesucht. Canvas heißt auf Deutsch &#8220;Leinwand&#8221; und ungefähr so wird das Element auch benutzt. In der HTML5-Spezifikation wird das Element folgendermaßen definiert: 
&#8220;The canvas element [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem HTML5 ja mittlerweile von immer mehr Browsern unterstützt wird, ist es an der Zeit, sich doch mal damit zu beschäftigen. Ich habe mir für mein erstes Experiment das &#8220;Canvas&#8221;-Element ausgesucht. Canvas heißt auf Deutsch &#8220;Leinwand&#8221; und ungefähr so wird das Element auch benutzt. In der <a href="http://www.w3.org/TR/html5">HTML5-Spezifikation</a> wird das Element folgendermaßen definiert: </p>
<blockquote><p>&#8220;The canvas element provides scripts with a resolution-dependent bitmap canvas, which can be used for rendering graphs, game graphics, or other visual images on the fly.&#8221;</p></blockquote>
<p>Das Canvas-Element wird irgendwo auf der Seite platziert und tut selbst erst mal gar nichts:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;canvas id=&quot;canvas&quot; &gt;&lt;/canvas&gt;</pre></div></div>

<p>Das was dieses Element so speziell macht, ist die damit verknüpfte JavaScript-API: Man kann Linien und Kästchen zeichnen, Bilder und Text dort hineinmalen, mit Schatteneffekten versehen und transformieren. </p>
<p><span id="more-1718"></span><br />
In diesem Beispiel werden wir zunächst einen Text auf unsere Leinwand schreiben. Dazu benötigt man zunächst den Context des Canvas (den Parameter &#8220;2d&#8221; muss man immer mitgeben):</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> canvas <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;canvas&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> context <span style="color: #339933;">=</span> canvas.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;2d&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Dann können wir in den Context etwas schreiben:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">context.<span style="color: #660066;">shadowColor</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#440a0a&quot;</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">shadowOffsetX</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">shadowOffsetY</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">shadowBlur</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">fillStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#0a0a0a&quot;</span><span style="color: #339933;">;</span>  
context.<span style="color: #660066;">font</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;bold 100px sans-serif&quot;</span><span style="color: #339933;">;</span> 
context.<span style="color: #660066;">textAlign</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;center&quot;</span><span style="color: #339933;">;</span> 
context.<span style="color: #660066;">textBaseline</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;middle&quot;</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">fillText</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Amsterdam&quot;</span><span style="color: #339933;">,</span> width <span style="color: #009966; font-style: italic;">/ 2 - 100, height /</span> <span style="color: #CC0000;">2</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Wir setzen eine Farbe, Position und Verschwommenheitswert (<em>shadowBlur</em>) für den Schatten, bestimmen dann wie der Text geschrieben werden soll und schreiben den Text am Ende in den Context. In diesem Fall hat der Text die gleiche Farbe wie der Hintergrund, so dass wir tatsächlich nur den verschwommenen Schatten sehen können &#8211; was für einen netten Effekt sorgt.</p>
<p>Der nächste Schritt besteht darin, Bilder in das Canvas zu malen, die darüberhinaus auch gleich noch animiert werden sollen. Animation im Canvas-Element bedeutet ganz einfach alle paar Millisekunden den kompletten Inhalt in leicht veränderter Form neu zu zeichnen. Man erreicht dies über <em>setTimeout</em> oder wie im Beispiel über <em>setInterval</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">setInterval<span style="color: #009900;">&#40;</span>draw<span style="color: #339933;">,</span> <span style="color: #CC0000;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Zuvor wurden zunächst 20 Objekte erzeugt, die ein Bild enthalten und zusätzliche Parameter erhalten können. Diese Parameter werden zunächst in der initialize-Methode initialisiert, um den Bildern eine Richtung, Orientierung, Initialposition und -rotation zu geben:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> initialize<span style="color: #009900;">&#40;</span>image<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    image.<span style="color: #660066;">rot</span> <span style="color: #339933;">=</span> Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">360</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> xOrientation <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0.5</span> <span style="color: #339933;">-</span> Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">0.5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> yOrientation <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0.5</span> <span style="color: #339933;">-</span> Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">0.5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span>
    image.<span style="color: #660066;">x</span> <span style="color: #339933;">=</span> xOrientation <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span> <span style="color: #339933;">?</span> width <span style="color: #339933;">:</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">240</span><span style="color: #339933;">;</span>
    image.<span style="color: #660066;">y</span> <span style="color: #339933;">=</span> yOrientation <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span> <span style="color: #339933;">?</span> height <span style="color: #339933;">:</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">240</span><span style="color: #339933;">;</span>
    image.<span style="color: #660066;">dirX</span> <span style="color: #339933;">=</span> xOrientation <span style="color: #339933;">*</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span> <span style="color: #339933;">*</span> Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    image.<span style="color: #660066;">dirY</span> <span style="color: #339933;">=</span> yOrientation <span style="color: #339933;">*</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span> <span style="color: #339933;">*</span> Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Dann wird wie oben erwähnt die draw-Funktion alle 10 Millisekunden aufgerufen. Dort wird immer erst der gesamte Zeichenbereich gelöscht und anschließend neu gezeichnet. Dabei zeichnen wir zunächst den bereits beschriebenen Schriftzug. Dann wir innerhalb einer Schleife die Position und Drehung für jedes Bild neu berechnet und dann das Bild in das Canvas gezeichnet. </p>
<p>Wichtig ist hier das Prinzip zu verstehen, wie beim Canvas-Element transformiert wird: Es existiert eine Transformationsmatrix, die mit den entsprechenden Befehlen geändert wird. Danach wird beim Zeichnen eines Objekte in das Canvas diese Matrix auf das zu zeichnende Element angewendet. Zusätzlich gibt es einen Stack für Transformationsmatrizen (und Canvas-Attribute), den man verwenden kann, wenn man so wie in diesem Beispiel mehrere Elemente unterschiedlich transformieren möchte.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">x</span> <span style="color: #339933;">+=</span> amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">dirX</span><span style="color: #339933;">;</span>
amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">y</span> <span style="color: #339933;">+=</span> amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">dirY</span><span style="color: #339933;">;</span>
amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">rot</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">rot</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #CC0000;">360</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">translate</span><span style="color: #009900;">&#40;</span>amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">x</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">120</span><span style="color: #339933;">,</span> amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">y</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">120</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">rotate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span> <span style="color: #339933;">*</span> Math.<span style="color: #660066;">PI</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">360</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">rot</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span>amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">x</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">120</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span>amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">y</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">120</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">drawImage</span><span style="color: #009900;">&#40;</span>amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">image</span><span style="color: #339933;">,</span> amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">x</span><span style="color: #339933;">,</span> amsterdam<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
context.<span style="color: #660066;">restore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Um jedes Bild einzeln drehen zu können ist folgendes Vorgehen notwendig:</p>
<ol>
<li>Der aktuelle Zustand des Canvas-Contextes wird abgespeichert. Der Zustand enthält nicht das was im Moment im Canvas zu sehen ist, sondern die aktuelle Transformationsmatrix und gesetzte Attribute.</li>
<li>Die Transformationsmatrix wird geändert und der Ursprungspunkt des Koordinatensystems zum Bildmittelpunkt verschoben.</li>
<li>Die Transformationsmatrix wird für eine Rotation geändert.</li>
<li>Das Koordinatensystem wird wieder zurückverschoben.</li>
<li>Das Bild wird tatsächlich auf das Canvas gezeichnet.</li>
<li>Der vorherige Zustand des Canvas wird wiederhergestellt, damit die nächste Drehung wieder korrekt abgebildet werden kann.</li>
</ol>
<p>Das ganze machen wir alle 10 ms für jedes Bild und dadurch entsteht dann die Animation, die alle Bilder durch das Fenster rotieren lässt. Hinter folgendem Link befindet sich das hier beschriebene Beispiel (funktioniert natürlich nur mit einem HTML5-fähigen Browser):</p>
<p><a href="/wp-content/uploads/2010/12/canvas/">Fliegende Bilder in HTML5</a></p>
<p>HTML5 besteht natürlich aus noch viel mehr als nur dem Canvas-Element. <a href="http://diveintohtml5.org/">Dive Into HTML5</a> ist ein ausgezeichnetes englisches Tutorial, das die wichtigsten Neuerungen von HTML5 verständlich vorstellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zustandsforschung.de/index.php/experimente-mit-html5-das-canvas-element/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lightbox-Clones</title>
		<link>http://www.zustandsforschung.de/index.php/lightbox-clones/</link>
		<comments>http://www.zustandsforschung.de/index.php/lightbox-clones/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 12:56:04 +0000</pubDate>
		<dc:creator>Benedikt</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lightbox]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.zustandsforschung.de/?p=626</guid>
		<description><![CDATA[Lightbox &#8211; das sind diese hübschen Layer, die man immer öfters mal auf den Internet-Seiten sieht &#8211; zu sehen zum Beispiel hier, wenn man auf eines der Thumbnails klickt.
Von Lightbox-ähnlichen JavaScript-Bibliotheken gibt&#8217;s Unmengen, so dass es wahrscheinlich für jeden Anwendungszweck eine Variante gibt, wenn man sie nur finden würde.
Eine tolle Übersicht bietet &#8220;The Lightbox Clones [...]]]></description>
			<content:encoded><![CDATA[<p>Lightbox &#8211; das sind diese hübschen Layer, die man immer öfters mal auf den Internet-Seiten sieht &#8211; zu sehen <a href="http://blackandwhite.zustandsforschung.de/">zum Beispiel hier</a>, wenn man auf eines der Thumbnails klickt.</p>
<p>Von Lightbox-ähnlichen JavaScript-Bibliotheken gibt&#8217;s Unmengen, so dass es wahrscheinlich für jeden Anwendungszweck eine Variante gibt, wenn man sie nur finden würde.</p>
<p>Eine tolle Übersicht bietet &#8220;<a href="http://planetozh.com/projects/lightbox-clones/">The Lightbox Clones Matrix</a>&#8220;, wo mittlerweile mehr als 40 Lightbox-Clones gelistet werden, die sich auch nach Kategorien wie &#8220;zugrundeliegendes JavaScript-Framework&#8221; oder deren Features (kann Bilder/IFrames/Flash anzeigen) filtern lassen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zustandsforschung.de/index.php/lightbox-clones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Universal Widget API</title>
		<link>http://www.zustandsforschung.de/index.php/universal-widget-api/</link>
		<comments>http://www.zustandsforschung.de/index.php/universal-widget-api/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 14:44:32 +0000</pubDate>
		<dc:creator>Benedikt</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[netvibes]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[uwa]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.zustandsforschung.de/?p=579</guid>
		<description><![CDATA[Im Rahmen eines Projektes auf der Arbeit hatte ich die Gelegenheit, mich mit der Universal Widget API zu beschäftigen. 
Da bisher jeder Hersteller von Widgets seine eigene Variante hatte, um so etwas zu bauen mussten Programmierer ihre Widgets für jede Plattform anpassen oder komplett umbauen. An dieser Stelle kommt die Universal Widget API von Netvibes [...]]]></description>
			<content:encoded><![CDATA[<p>Im Rahmen eines <a href="http://about.namics.com/2008/06/namicslab_frank.html">Projektes auf der Arbeit</a> hatte ich die Gelegenheit, mich mit der Universal Widget API zu beschäftigen. </p>
<p>Da bisher jeder Hersteller von Widgets seine eigene Variante hatte, um so etwas zu bauen mussten Programmierer ihre Widgets für jede Plattform anpassen oder komplett umbauen. An dieser Stelle kommt die <a href="http://dev.netvibes.com/">Universal Widget API von Netvibes</a> ins Spiel, die es sich zur Aufgabe gemacht hat, ein einheitliches Framework und eine API zu schaffen, mittel dessen Widgets auf vielen Verschiedenen Systemen lauffähig gemacht werden können. Aktuell werden unterstützt iGoogle, Windows Vista, Apple Dashboard, Live.com, iPhone, Opera, MySpace und die Integration in Blogs.</p>
<p>Als Beispiel habe ich ein kleines Widget gebastelt, was das jeweils aktuellste Bild aus dem RSS-Feed von <a href="http://ffffound.com/">FFFFOUND!</a> darstellt. </p>
<p><img src="http://www.zustandsforschung.de/wp-content/uploads/2008/07/universal_widget_api.jpg" alt="" title="FFFFOUND!-Widget bei iGoogle" width="469" height="392" class="alignnone size-medium wp-image-621" /></p>
<p>Im Prinzip besteht ein Widget für die UWA aus einer einzelnen XHTML-Datei, die sich aus 5 wesentlichen Teilen zusammensetzt:</p>
<p><strong>Der Header</strong><br />
Im Header werden Metainformationen wie der Titel des Widgets, der Autor, eine Beschreibung und ähnliche Dinge eingetragen.<br />
<code><br />
    &lt;meta name="author" content="Zustandsforschung" /&gt;<br />
    &lt;meta name="description" content="image bookmarking" /&gt;<br />
    &lt;meta name="apiVersion" content="1.0" /&gt;<br />
    &lt;meta name="autoRefresh" content="20" /&gt;<br />
    &lt;meta name="debugMode" content="true" /&gt;<br />
</code><code><br />
    &lt;link rel="stylesheet" type="text/css"<br />
      href="http://www.netvibes.com/themes/uwa/style.css" /&gt;<br />
    &lt;script type="text/javascript"<br />
      src="http://www.netvibes.com/js/UWA/load.js.php?env=Standalone"&gt;&lt;/script&gt;<br />
</code><code><br />
    &lt;title&gt;FFFFOUND!&lt;/title&gt;<br />
    &lt;link rel="icon" type="image/png"<br />
      href="http://ffffound.com/favicon.ico" /&gt;<br />
</code></p>
<p><strong>Die Konfiguration</strong><br />
Mittels eines speziellen XML-Formates wird dann die Konfiguration definiert, wobei man Checkboxen, Eingabefelder oder Dropdowns anlegen kann. Die vom Benutzer dort eingetragenen Werte können dann über eine API wieder ausgelesen und verwendet werden.</p>
<p>Bei meinem Beispiel hat&#8217;s keine Konfiguration &#8211; das geht auch und sieht dann so aus:<br />
<code><br />
   &lt;widget:preferences&gt;<br />
   &lt;/widget:preferences&gt;<br />
 </code></p>
<p><strong>Styles</strong><br />
Da es sich bei einem UWA-Widget letztendlich um HTML handelt, kann das Widget mit CSS gestylt werden:<br />
<code><br />
    &lt;style type="text/css"&gt;<br />
		.ffffound {<br />
			text-align:center;<br />
		}<br />
		.ffffound img {<br />
			max-width:250px;<br />
		}<br />
    &lt;/style&gt;<br />
</code></p>
<p><strong>JavaScript</strong><br />
Der Hauptteil des Widgets ist ein JavaScript: Hier muss man eine widget.onLoad-Funktion schreiben, die beim Start des Widgets aufgerufen wird. Ansonsten kann man hier so ziemlich alles machen, was man mit JavaScript so alles machen kann. Außerdem gibt&#8217;s noch eine API für den vereinfachten Zugriff auf AJAX-Funktionen und ein paar DOM-Erweiterungen.<br />
<code><br />
    &lt;script type="text/javascript"&gt;<br />
      var FFFFound = {};<br />
</code><code><br />
      FFFFound.feedUrl = "http://feeds.feedburner.com/ffffound/everyone";<br />
</code><code><br />
      FFFFound.display = function(feed) {<br />
        widget.log(feed);<br />
		widget.log(feed.items[0].content);<br />
		widget.setBody("&lt;div class=\"ffffound\"&gt;"<br />
                        +feed.items[0].content+"&lt;/div&gt;");<br />
      }<br />
</code><code><br />
      widget.onLoad = function() {<br />
        UWA.Data.getFeed(FFFFound.feedUrl, FFFFound.display);<br />
      }<br />
    &lt;/script&gt;<br />
</code></p>
<p><strong>Body</strong><br />
Im Body definiert man mit HTML die Grundstruktur des Widgets. Meistens wird man aber eher alles wichtige per JavaScript hinzugefügt und der Body sieht dann so aus:<br />
<code><br />
  &lt;body&gt;<br />
    &lt;p&gt;Loading... &lt;/p&gt;<br />
  &lt;/body&gt;<br />
</code></p>
<p>Das Endergebnis bzw. den kompletten Sourcecode für das Widget könnt ihr euch hier mal anschauen: <a href='http://www.zustandsforschung.de/wp-content/uploads/2008/07/ffffound.html'>ffffound-Widget</a>. Und es gibt natürlich auch hierfür ein tolles <a href="http://dev.netvibes.com/blog/2008/06/06/new-version-of-the-uwa-cheat-sheet/">Cheat-Sheet</a>, wo alles draufsteht, was man wissen muss, um ein UWA-Widget zu erstellen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zustandsforschung.de/index.php/universal-widget-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Noch mehr Cheat-Sheets</title>
		<link>http://www.zustandsforschung.de/index.php/noch-mehr-cheat-sheets/</link>
		<comments>http://www.zustandsforschung.de/index.php/noch-mehr-cheat-sheets/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 10:11:40 +0000</pubDate>
		<dc:creator>Benedikt</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[cheatsheets]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programmierung]]></category>

		<guid isPermaLink="false">http://www.zustandsforschung.de/?p=619</guid>
		<description><![CDATA[Hier gibt&#8217;s 23 Cheat-Sheets zu den Themen HTML/HTML, CSS und JavaScript:
Cheat Sheets for Front-end Web Developers
Sieh dazu auch meine anderen Posts zum Thema &#8220;Cheat-Sheets&#8220;.
[via stejan]
]]></description>
			<content:encoded><![CDATA[<p>Hier gibt&#8217;s 23 Cheat-Sheets zu den Themen HTML/HTML, CSS und JavaScript:</p>
<p><a href="http://sixrevisions.com/resources/cheat_sheets_web_developer/">Cheat Sheets for Front-end Web Developers</a></p>
<p>Sieh dazu <a href="http://www.zustandsforschung.de/index.php/design-patterns-cheat-sheet/">auch meine</a> <a href="http://www.zustandsforschung.de/index.php/wordpress-cheat-sheet/">anderen Posts</a> <a href="http://www.zustandsforschung.de/index.php/firefox-cheat-sheet/">zum Thema</a> &#8220;<a href="http://www.zustandsforschung.de/index.php/cheat-sheets-helferlein-fuer-programmierer/">Cheat-Sheets</a>&#8220;.</p>
<p>[via <a href="http://www.stejan.ch/?p=59">stejan</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zustandsforschung.de/index.php/noch-mehr-cheat-sheets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

