<?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>IOException.de &#187; jquery</title>
	<atom:link href="http://www.ioexception.de/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ioexception.de</link>
	<description>Ausgewählter Nerdkram von Informatikstudenten der Uni Ulm</description>
	<lastBuildDate>Fri, 13 Jan 2012 07:38:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Einfache Visualisierung von Geodaten – Teil 2: Leaflet &amp; jquery.couch.js</title>
		<link>http://www.ioexception.de/2011/08/30/einfache-visualisierung-von-geodaten-%e2%80%93-teil-2-leaflet-jquery-couch-js/</link>
		<comments>http://www.ioexception.de/2011/08/30/einfache-visualisierung-von-geodaten-%e2%80%93-teil-2-leaflet-jquery-couch-js/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 09:48:49 +0000</pubDate>
		<dc:creator>Benjamin Erb</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[visualisierung]]></category>

		<guid isPermaLink="false">http://www.ioexception.de/?p=1119</guid>
		<description><![CDATA[Im vorherigen Teil haben wir gesehen, wie man Geodaten mithilfe von CouchDB abspeichern kann. Da diese Datenbank zugleich ein Webserver ist und die Daten im JSON-Format gespeichert werden, eignet sie CouchDB auch gut für AJAX-Abfragen. Hierfür gibt es eine auf jQuery aufbauende Library namens jquery.couch.js, die von den AJAX-Requests abstrahiert und direkt browser-seitige Interaktionen mit [...]]]></description>
			<content:encoded><![CDATA[<p>Im <a href="http://www.ioexception.de/2011/08/09/einfache-visualisierung-von-geodaten-%E2%80%93-teil-1-couchdbgeocouch/">vorherigen Teil</a> haben wir gesehen, wie man Geodaten mithilfe von CouchDB abspeichern kann. Da diese Datenbank zugleich ein Webserver ist und die Daten im JSON-Format gespeichert werden, eignet sie CouchDB auch gut für AJAX-Abfragen. Hierfür gibt es eine auf jQuery aufbauende Library namens <a href="http://daleharvey.github.com/jquery.couch.js-docs/symbols/%24.couch.html">jquery.couch.js</a>, die von den AJAX-Requests abstrahiert und direkt browser-seitige Interaktionen mit der Datenbank ermöglicht.</p>
<p>Im diesem Beitrag soll gezeigt werden, wie man mit der offenen Karten-Library <a href="http://leaflet.cloudmade.com/">Leaflet</a> und jquery.couch.js geographische Daten aus CouchDB heraus auf einer Karten anzeigen kann.</p>
<div id="attachment_1153" class="wp-caption alignleft" style="width: 310px"><a href="http://www.ioexception.de/wp-content/uploads/2011/08/couchdb-leaflet.png"><img class="size-medium wp-image-1153 " title="couchdb-leaflet" src="http://www.ioexception.de/wp-content/uploads/2011/08/couchdb-leaflet-300x203.png" alt="" width="300" height="203" /></a><p class="wp-caption-text">Beispiel-Visualisierung von ulmapi.de, ebenfalls basierend auf CouchDB und Leaflet.</p></div>
<p>Wir verwenden die CouchApp aus dem ersten Teil weiter, und fügen zu den bisherigen Map/Reduce Views noch statische HTML- und Javascript-Dateien hinzu (im <code>_attachments</code> Ordner), die dann im Browser abgerufen werden können. Beim Aufruf dieser Webseite wird ein HTML-Grundgerüst übertragen, sowie eine JavaScript-Datei, die beim Aufruf die eigentlichen Datensätze via jquery.couch.js aus der CouchDB nachlädt.</p>
<p>Als Mapping-Library verwenden wir Leaflet, eine Open-Source Bibliothek für Kartendarstellungen im Browser. Leaflet abstrahiert von verschiedenen Kartenprovidern und erlaubt es somit, unterschiedliche Datenquellen zu verwenden, wie zum Beispiel auch Bing Maps oder <a href="http://cloudmade.com/">Cloudmade</a>. Letzteres ist ein Service, der auf Basis der Open Street Map Daten Kartenkacheln mit individuellen Stilen rendert und hostet – für Visualisierungen oft sehr hilfreich, da reguläre Karten meist zu viele Karteninformationen enthalten oder farblich überladen sind. In unserem Fall haben wir einen einfach Graustufenkarte gewählt. Leaflet selbst lässt sich relativ leicht verwenden, es muss eine CSS-Datei sowie eine JavaScript-Datei importiert werden, und ein div-Block im HTML enthalten sein, worin später die Karte gerendert werden soll. Somit sieht unser HTML-Gerüst zu Beginn so aus:</p>
<pre class="brush: xml;">
&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;link rel=&quot;stylesheet&quot; href=&quot;style/leaflet.css&quot; /&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.couch.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/leaflet.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/maploader.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;map&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Es werden jQuery, jquery.couch.js und die Leaflet-Libs geladen, und die letzte importierte JavaScript-Datei soll nun unseren Code zum initialisieren der Karte und dem Laden der Daten aus der CouchDB enthalten. Zunächst erstellen wir eine Karte und rendern sie, sobald die Seite vollständig geladen wurde (jQuery Callback für document.ready):</p>
<pre class="brush: jscript;">
$(document).ready(function(){

		var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/[YOUR_API_KEY]/33481/256/{z}/{x}/{y}.png';
		var cloudmadeAttribution = 'UlmApi.de / Shape Files: Stadt Ulm (cc-by-sa), Map data &amp;copy; 2011 OpenStreetMap contributors, Imagery &amp;copy; 2011 CloudMade';
		var cloudmade = new L.TileLayer(
			cloudmadeUrl, {
				maxZoom : 18,
				attribution : cloudmadeAttribution
		});

		var map = new L.Map('map', {
			center : new L.LatLng(48.399976,9.995399),
			zoom : 12,
			layers : [ cloudmade ],
			zoomControl : false
		});
});
</pre>
<p>In der <code>cloudmadeUrl</code> muss für Cloudmade Karte ein korrekter API-Key angegeben werden, der nächste Parameter im Pfad identifiziert den Kartentyp. Beim Initialisieren der Karte wird dann die ID des <code>div</code>s angeben, bei uns &#8216;map&#8217;. Nun sollte unsere Karte bereits dargestellt werden, nachdem wir die CouchApp neu deployen (außerhalb des Fokus dieses Artikels, mehr dazu auf <a href="http://couchapp.org/">couchapp.org</a>).</p>
<p>Was nun noch fehlt, ist das Nachladen der Geodaten aus der CouchDB und die Anzeige auf der Karte. Hierfür verwenden wir jquery.couch.js als Wrapper für die AJAX-Requests gegen CouchDB und die GeoJSON-Funktionalität von Leaflet:</p>
<pre class="brush: jscript;">
$.couch.db('database_name').view('design_doc_name/view_name', {

	success: function(data){
		if(data &amp;&amp; data.rows &amp;&amp; data.rows.length){

			var geoJsonLayer = new L.GeoJSON();

			for(var i = 0;i&lt;data.rows.length;i++){
				geoJsonLayer.addGeoJSON(data.rows[i].value.geometry);
			}

			map.addLayer(geoJsonLayer);
		}
	}
});
</pre>
<p>Das obige Snippet sollte im vorherigen Code hinter der Erzeugung der Karte eingefügt werden. Es ruft von der Datenbank &#8216;database_name&#8217; den View &#8216;view_name&#8217; des Design-Dokuments &#8216;design_doc_name&#8217; auf, und iteriert bei erfolgreicher Abfrage über alle Zeilen. Von jeder Zeile wird dabei die geometry-Property zu einem GeoJSON-Layer hinzugefügt, der am Ende an die Karte übergeben wird. Da unser View aus Teil 1 bereits GeoJSON generiert, und Leaflet nativ GeoJSON lesen und darstellen kann, ist das Hinzufügen von Geodaten auf die Karte sehr einfach.</p>
<p>Hier noch ein paar weiterführende Links mit vertiefenden Inhalten zu den einzelnen Themen:</p>
<ul>
<li><a href="http://leaflet.cloudmade.com/reference.html">Leaflet Reference</a></li>
<li><a href="http://couchapp.org/">CouchApp</a></li>
<li><a href="http://www.scribd.com/doc/40221773/Umsetzung-einer-verteilten-Anwendung-mit-der-dokumentenorientierten-Datenbank-CouchDB">Diplomarbeit von Lena Herrmann</a> über Webanwendungen mit CouchDB und CouchApp</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ioexception.de/2011/08/30/einfache-visualisierung-von-geodaten-%e2%80%93-teil-2-leaflet-jquery-couch-js/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wordpress Navigation &amp; jQuery</title>
		<link>http://www.ioexception.de/2009/06/22/wordpress-navigation-jquery/</link>
		<comments>http://www.ioexception.de/2009/06/22/wordpress-navigation-jquery/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 14:08:56 +0000</pubDate>
		<dc:creator>David Langer</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.ioexception.de/?p=98</guid>
		<description><![CDATA[Sobald es ein paar mehr Seiten werden, wird die Standard-Seitenanzeige von Wordpress suboptimal und inflexibel. Also brauchte ich eine Methode um nur die Eltern-Elemente der aktuellen Seite anzuzeigen und den Rest einzuklappen. Bei der Suche nach einer Methode bin ich auf Folding menu for WordPress gestossen. Allerdings fand ich die Animation bei jedem Klick etwas [...]]]></description>
			<content:encoded><![CDATA[<p>Sobald es ein paar mehr Seiten werden, wird die Standard-Seitenanzeige von Wordpress suboptimal und inflexibel. Also brauchte ich eine Methode um nur die Eltern-Elemente der aktuellen Seite anzuzeigen und den Rest einzuklappen. Bei der Suche nach einer Methode bin ich auf <a href="http://www.ilovecolors.com.ar/folding-menu-plugin-wordpress/">Folding menu for WordPress</a> gestossen. Allerdings fand ich die Animation bei jedem Klick etwas störend.</p>
<pre class="brush: jscript;">$(&quot;.page_item ul&quot;).hide();
$(&quot;.current_page_item&quot;).parents(&quot;ul&quot;).show();
$(&quot;.current_page_item ul:first&quot;).slideDown();</pre>
<p>Dies ist meine Version des Code-Schnipsels und tut eigentlich genau das was ich wollte (und animiert nur, wenn man ein Menüpunkt mit Unterpunkten angeklickt hat). Aber da ja sowieso schon die gesamte Navigation vorhanden ist (nur nicht sichtbar), könnte man ja auch den Rest ausklappbar machen …</p>
<pre class="brush: jscript;">$(&quot;.page_item &gt; ul:hidden&quot;).before( '&lt;a href=&quot;#&quot; class=&quot;menuToggle menuToggleOpen&quot;&gt;v&lt;/a&gt;');
$(&quot;.page_item &gt; ul:visible&quot;).before('&lt;a href=&quot;#&quot; class=&quot;menuToggle menuToggleClose&quot;&gt;^&lt;/a&gt;');
a = function(){
    $(this).text(&quot;^&quot;).next(&quot;ul&quot;).slideDown();
};
b = function(){
    $(this).text(&quot;v&quot;).next(&quot;ul&quot;).slideUp();
};
$(&quot;.menuToggleClose&quot;).toggle(b,a);
$(&quot;.menuToggleOpen&quot;).toggle(a,b);</pre>
<p>Hab dazu auch mal ein <a href="http://kram.davidlanger.de/wordpress-nav-jquery/">kleines Demo hier aufgesetzt</a>.</p>
<p>Einziges Problem ist natürlich mal wieder der Internet Explorer 6, der  SlideDown/-Up nicht sonderlich schön darstellt. Aber es ist benutzbar. Je nach erwarteter IE6-Dichte könnte man einen Switch einbauen, der dann im IE 6 die Animation nicht anzeigt (und nur show()/hide() nutzt).</p>
<p>Originalartikel: <a href="http://davidlanger.de/wordpress/wordpress-navigation-jquery/">Wordpress Navigation &#038; jQuery</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioexception.de/2009/06/22/wordpress-navigation-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

