<?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; uwa</title>
	<atom:link href="http://www.zustandsforschung.de/index.php/tag/uwa/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zustandsforschung.de</link>
	<description>Mit offenen Augen durch die Welt</description>
	<lastBuildDate>Wed, 21 Jul 2010 09:37:54 +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>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[KnowHow]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[netvibes]]></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>
	</channel>
</rss>
