<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>What I know is what you get</title>
	
	<link>http://whatiknowiswhatyouget.com</link>
	<description>Doing things since 1980.</description>
	<pubDate>Wed, 15 Oct 2008 06:52:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/WhatIKnowIsWhatYouGet" type="application/rss+xml" /><item>
		<title>Busy at work - new things coming up</title>
		<link>http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~3/484585799/</link>
		<comments>http://whatiknowiswhatyouget.com/2008/10/15/busy-at-work-new-things-coming-up/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 06:52:33 +0000</pubDate>
		<dc:creator>Jérôme</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<category><![CDATA[Web-Entwicklung]]></category>

		<category><![CDATA[Add new tag]]></category>

		<category><![CDATA[morbid]]></category>

		<category><![CDATA[orbited]]></category>

		<category><![CDATA[push]]></category>

		<guid isPermaLink="false">http://whatiknowiswhatyouget.com/?p=22</guid>
		<description><![CDATA[I am currently quite busy with my projects - three of them, to be precise and that is the reason it is so quiet here at the moment. But - one of them wil enable me to introduce to you an amazing technology to provide server data pushes without the use of Flash, a Java [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently quite busy with my projects - three of them, to be precise and that is the reason it is so quiet here at the moment. But - one of them wil enable me to introduce to you an amazing technology to provide server data pushes without the use of Flash, a Java applet or whatsoever fancy plugin for your browser.</p>
<p>Some keywords, just to tease you: <a title="Orbited: Real-time communication for the browser" href="http://www.orbited.org">Orbited</a>, <a title="A Twisted-based publish/subscribe messaging server that uses the STOMP protocol" href="http://pypi.python.org/pypi/morbid/">Morbid</a>, JavaScript, PHP, greatness :).</p>
<p>I have found it quite difficult to get into the subject and I&#8217;d like to share my experiences with you in the next days.</p>
<img src="http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~4/484585799" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://whatiknowiswhatyouget.com/2008/10/15/busy-at-work-new-things-coming-up/feed/</wfw:commentRss>
		<feedburner:origLink>http://whatiknowiswhatyouget.com/2008/10/15/busy-at-work-new-things-coming-up/</feedburner:origLink></item>
		<item>
		<title>Automatic Footnotes with MooTools</title>
		<link>http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~3/484585800/</link>
		<comments>http://whatiknowiswhatyouget.com/2008/08/15/automatic-footnotes-with-mootools/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 06:22:41 +0000</pubDate>
		<dc:creator>Jérôme</dc:creator>
		
		<category><![CDATA[Web-Entwicklung]]></category>

		<category><![CDATA[automatic]]></category>

		<category><![CDATA[footnotes]]></category>

		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://whatiknowiswhatyouget.com/wordpress/?p=8</guid>
		<description><![CDATA[I have found a script to generate automatic website footnotes (with jQuery) that I liked so much that I did it the MooTools way and added some additional features.
The script pulls quotes from blockquote and q elements, parses the cite and title attribute and automagically generates footnotes that will be added to or after a [...]]]></description>
			<content:encoded><![CDATA[<p>I have found a script to <a href="http://www.cssnewbie.com/generating-automatic-website-footnotes-with-jquery/">generate automatic website footnotes</a> (with jQuery) that I liked so much that I did it the MooTools way and added some additional features.</p>
<p>The script pulls quotes from <code>blockquote</code> and <code>q</code> elements, parses the <code>cite</code> and <code>title</code> attribute and automagically generates footnotes that will be added to or after a specified element on your page.</p>
<p>In addition to that you can jump back and forth between the quote and the corresponding footnote.</p>
<p><span id="more-8"></span></p>
<ol>
<li>Embed the class <a href="http://whatiknowiswhatyouget.com/examples/automaticfootnotes/AutomaticFootnotes.class.js">AutomaticFootnotes</a> into the head of your web page.</li>
<li>Load and configure the class:<br />
	<textarea name="code" class="jscript" cols="60" rows="10">window.addEvent(&#8217;domready&#8217;, function() {<br />
	var config = {<br />
		&#8216;id&#8217;: &#8216;footnotes&#8217;, // the footnotes list will receive this ID<br />
		&#8216;elSource&#8217;: &#8216;container&#8217;, // observe only block(quotes) in this div<br />
		&#8216;elTarget&#8217;: &#8216;container&#8217;,<br />
		&#8216;appendMode&#8217;: &#8216;bottom&#8217; // Insert the list at the &#8216;bottom&#8217;, &#8216;top&#8217; or &#8216;after&#8217; elTarget<br />
	}</p>
<p>	this.AutomaticFootnotes = new AutomaticFootnotes(config);<br />
	this.AutomaticFootnotes.enable();<br />
});<br />
</textarea></p>
<ul>
<li><strong>id </strong> <em>(optional, defaults to &#8216;footnotes&#8217;)</em>: The footnotes list will receive this ID</li>
<li><strong>elSource </strong> <em>(optional, defaults to document.body)</em>: The DOM element the quotes will be pulled from</li>
<li><strong>elTarget </strong> <em>(optional, defaults to document.body)</em>: The DOM element the footnotes will be added to</li>
<li><strong>appendMode</strong> <em>(optional, defaults to &#8216;bottom&#8217;)</em>: &#8216;top&#8217;, &#8216;bottom&#8217;, &#8216;after&#8217;</li>
</ul>
</li>
</ul>
<p>You&#8217;re finished :). Look at the <a title="Automatic Footnotes with MooTools" href="http://whatiknowiswhatyouget.com/examples/automaticfootnotes/">example</a>.</p>
<p>As always, feedback is highly appreciated.</ol>
<img src="http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~4/484585800" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://whatiknowiswhatyouget.com/2008/08/15/automatic-footnotes-with-mootools/feed/</wfw:commentRss>
		<feedburner:origLink>http://whatiknowiswhatyouget.com/2008/08/15/automatic-footnotes-with-mootools/</feedburner:origLink></item>
		<item>
		<title>Seiten-Inhalte inline bearbeiten</title>
		<link>http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~3/484585801/</link>
		<comments>http://whatiknowiswhatyouget.com/2008/06/29/seiten-inhalte-inline-bearbeiten/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 19:50:56 +0000</pubDate>
		<dc:creator>Jérôme</dc:creator>
		
		<category><![CDATA[Featured]]></category>

		<category><![CDATA[Web-Entwicklung]]></category>

		<category><![CDATA[class]]></category>

		<category><![CDATA[editable content]]></category>

		<category><![CDATA[graceful degradation]]></category>

		<category><![CDATA[inline]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://whatiknowiswhatyouget.com/wordpress/?p=6</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://davidwalsh.name/" title="David's Website">David Walsh</a> hat mit Hilfe der MooTools die <a href="http://davidwalsh.name/editable-content-mootools-php-mysql" title="Editable Content Using MooTools 1.2, PHP, and MySQL">Möglichkeit</a> geschaffen, Elemente einer Web-Seite direkt zu bearbeiten und zu speichern.</p>
<p>Ich finde die Idee sehr schön, die Umsetzung jedoch nicht ganz nach meinem Geschmack, darum habe ich eine konfigurierbare MooTools Klasse entwickelt, die wie folgt eingesetzt wird.</p>
<p><span id="more-6"></span></p>
<ol>
<li>Die Klasse <a href="http://whatiknowiswhatyouget.com/examples/editablecontent/EditableContent.class.js">EditableContent</a> Im &lt;head&gt;-Bereich der HTML-Seite einbinden</li>
<li>Im HTML die bearbeitbaren Elemente mit IDs versehen:<br />
<textarea name="code" class="html" rows="20" cols="60"></p>
<p id="p1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p id="p2">Lorem ipsum dolor sit amet…¦</p>
<p id="p3">Lorem ipsum dolor sit amet…¦</p>
<p></textarea>
</li>
<li>Die Klasse konfigurieren und initialisieren:<br />
<textarea name="code" class="js" rows="20" cols="60"><br />
window.addEvent(&#8217;domready&#8217;, function() {<br />
var config = {<br />
defaultTargetUrl: &#8217;save.php&#8217;,<br />
defaultEditMode: &#8216;input&#8217;<br />
}<br />
this.EditableContent = new EditableContent(config);<br />
this.EditableContent.observeElements([<br />
{id: 'p1', dbId: 1, editMode: 'textarea'},<br />
{id: 'p2', dbId: 2, targetUrl: 'save2.php'},<br />
{id: 'p3', dbId: 3, targetUrl: 'save3.php'}<br />
]);<br />
});<br />
</textarea></p>
<ul>
<li><strong>id: </strong> HTML-ID des bearbeitbaren Elements</li>
<li><strong>dbId: </strong> ID des Datensatzes in der Datenbank, der beim Speichern geändert werden soll</li>
<li><strong>targetUrl: </strong> URL des Scripts, das den geänderten Inhalt verarbeiten wird</li>
<li><strong>editMode: </strong> (&#8217;input&#8217;, &#8216;textarea&#8217;) Darstellung des Bearbeiten-Felds</li>
</ul>
</li>
</ul>
<p><strong>save.php</strong></p>
<p><textarea name="code" class="php" rows="20" cols="60"><br />
echo json_encode(array(<br />
&#8217;success&#8217; => true<br />
));<br />
</textarea></p>
<p><strong>save2.php</strong></p>
<p><textarea name="code" class="php" rows="20" cols="60"><br />
echo json_encode(array(<br />
&#8217;success&#8217; => false,<br />
&#8216;error&#8217; => &#8216;Content could not be saved (whatever error)&#8217;<br />
));<br />
</textarea></p>
<p>Fertig :). <a href="http://whatiknowiswhatyouget.com/examples/editablecontent/" title="Editable Content Demonstration">Eine Demonstration könnt ihr euch hier ansehen.</a></p>
<p>Feedback und Verbesserungsvorschläge sind willkommen!</p>
<img src="http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~4/484585801" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://whatiknowiswhatyouget.com/2008/06/29/seiten-inhalte-inline-bearbeiten/feed/</wfw:commentRss>
		<feedburner:origLink>http://whatiknowiswhatyouget.com/2008/06/29/seiten-inhalte-inline-bearbeiten/</feedburner:origLink></item>
		<item>
		<title>Pimp My User Form - Teil 1: Passwort-Felder</title>
		<link>http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~3/484585803/</link>
		<comments>http://whatiknowiswhatyouget.com/2008/06/21/pimp-my-user-form-teil-1-passwort-felder/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 01:19:19 +0000</pubDate>
		<dc:creator>Jérôme</dc:creator>
		
		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[Web-Entwicklung]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[forms]]></category>

		<category><![CDATA[graceful degradation]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[mootools]]></category>

		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://whatiknowiswhatyouget.com/wordpress/?p=5</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>Fast jede Web-Anwendung bietet den Usern die Möglichkeit, die eigenen Daten auf einer Profilseite zu bearbeiten. Mit JavaScript und CSS kann man diesen Vorgang angenehmer gestalten, indem man das Eingabeformular durch Stil und Swoosh-Effekte aufhübscht.</p>
<p>Dabei sollte aber auch beachtet werden, dass JavaScript und CSS nicht immer aktiviert sind - das Formular sollte also auch funktionieren, wenn beides ausgeschaltet ist.</p>
<p>In dieser Tutorial-Reihe werden wir Schritt für Schritt ein User-Formular mithilfe der MooTools veredeln. Der sich daraus ergebende Code sollte möglichst wiederverwendbar sein. Den Anfang machen wir mit den Passwort-Feldern.</p>
<p><span id="more-5"></span></p>
<p>Passwörter sind für User sehr wichtig: sie schützen die eigenen Daten vor unbefugtem Zugriff. Bei der Bearbeitung der Daten wird das Passwort jedoch in den meisten Fällen nicht geändert - es hat also keinen Sinn, die entsprechenden Felder jedes Mal anzuzeigen. Stattdessen wollen wir das Formular so einrichten, dass die Felder erst auf Anfrage angezeigt werden; so wird das Formular schlanker und der User muss sich keine Gedanken darüber machen, ob er die Felder jetzt ausfüllen muss oder nicht.</p>
<p>Das fertige Ergebnis findet sich <a href="/examples/pimpmyuserform/" title="Example: Pimp My User Form">hier</a>.</p>
<p>Wir werden mit dem folgenden Formular arbeiten:</p>
<p><textarea name="code" class="html" rows="20" cols="60"></p>
<form id="f_user" action="" method="post">
<div class="row">
<label for="username">Username:</label></p>
<input type="text" id="username" name="username" />
</div>
<div class="row">
<label for="email">E-Mail:</label></p>
<input type="text" id="email" name="email" />
</div>
<div class="password-container">
<div class="row">
<label for="password">Password:</label></p>
<input type="password" id="password" name="password" />
</div>
<div class="row">
<label for="password_repeat">Repeat Password:</label></p>
<input type="password" id="password_repeat" name="password_repeat" />
</div>
</div>
<div class="row">
<label>&nbsp;</label></p>
<input type="submit" id="submit" name="submit" value="Save Changes" />
</div>
</form>
<p></textarea></p>
<p>Damit wir später per JavaScript auf die zu versteckenden Elemente zugreifen können, schließen wir sie in ein Container-Element ein (&#8221;password-container&#8221;). Damit sind die Vorbereitungen auf HTML-Seite bereits vollendet. Auch mit ausgeschaltetem JavaScript kann der User das Formular ohne Probleme verwenden.</p>
<p>Das dazugehörige CSS sieht folgendermaßen aus:</p>
<p><textarea name="code" class="css" rows="20" cols="60"><br />
*,<br />
html * {<br />
margin: 0;<br />
padding: 0;<br />
font-family: Arial, sans-serif;<br />
font-size: 13px;<br />
font-weight: normal;<br />
}</p>
<p>body {<br />
margin: 2em auto;<br />
width: 50em;<br />
}</p>
<p>div.row {<br />
margin-bottom: 1em;<br />
clear: both;<br />
}</p>
<p>label {<br />
width: 12em;<br />
display: block;<br />
float: left;<br />
text-align: right;<br />
margin-right: 1em;<br />
white-space: nowrap;<br />
font-weight: bold;<br />
}<br />
</textarea></p>
<p>Für die Verarbeitung der Passwort-Felder ergibt sich dieser Workflow:</p>
<ol>
<li>Direkt nach dem Laden der Seite:
<ol>
<li>Ausblenden der Passwort-Felder bzw. des Passwort-Containers</li>
<li>Einblenden eines Links &#8220;Passwort ändern&#8221;</li>
</ol>
</li>
<li>Beim Klick auf den &#8220;Passwort ändern&#8221;-Link:
<ol>
<li>Einblenden des Passwort-Containers</li>
<li>Ausblenden des &#8220;Passwort ändern&#8221;-Links</li>
</ol>
</li>
</ol>
<p>Um die Wiederverwendbarkeit dieses Features zu gewährleisten, setzen wir die Funktion in einer konfigurierbaren Klasse um. Beim Instanziieren eines neuen Objekts wird ein Konfigurations-Objekt übergeben, das alle benötigten Informationen enthält, um dieses oder andere Formulare um die Möglichkeit bereichert, einen Bereich beim Aufruf der Seite auszublenden und ihn per Klick auf einen Link wieder einzublenden</p>
<p>In diesem Fall ist dies unser Konfigurationsobjekt:</p>
<p><textarea name="code" class="js" rows="20" cols="60"><br />
var config = {<br />
frm: &#8216;f_user&#8217;,<br />
passwordContainer: &#8216;.password-container&#8217;,<br />
divChangePasswordClass: &#8216;row&#8217;,<br />
showPasswordLabel: &#8216;Change password&#8217;<br />
};<br />
</textarea></p>
<ul>
<li><strong>frm:</strong> ID des Formulars, das gepimpt werden soll</li>
<li><strong>passwordContainer:</strong> CSS-Klasse des Passwort-Containers</li>
<li><strong>divChangePasswordClass:</strong> CSS-Klasse, die dem DIV-Element zugewiesen werden soll, in dem sich der &#8220;Passwort ändern&#8221;-Link befindet. In diesem speziellen Fall ist das &#8220;row&#8221;, aber in anderen Formularen werden sicherlich andere Klassen-Namen benötigt, die nicht fest in den Code der JavaScript-Klasse geschrieben werden sollten.</li>
<li><strong>showPasswordLabel:</strong> Text, der als Link dargestellt werden soll</li>
</ul>
<p>Und hier ist endlich die Klasse, die es mit dem Konfigurationsobjekt aufnehmen wird:</p>
<p><textarea name="code" class="js" rows="20" cols="60"><br />
var PimpedUserForm = new Class({</p>
<p>/**<br />
* Constructor, is called when a new instance is created<br />
*/<br />
initialize: function(config) {<br />
this.config = config;</p>
<p>// Prepare the form<br />
this.prepareUserForm();<br />
},</p>
<p>/**<br />
* Prepares the user form<br />
*/<br />
prepareUserForm: function() {<br />
// Hide password container<br />
var elFrm = $(this.config.frm);<br />
var elPwdContainer = elFrm.getElements(this.config.passwordContainer)[0];</p>
<p>// Abort if elPwdContainer is not available<br />
if (!elPwdContainer) {<br />
return;<br />
}</p>
<p>// Add the div that contains the &#8220;Change password&#8221; link<br />
var aChangePasswordID = &#8216;a_change_password&#8217;;</p>
<p>var divChangePassword = new Element(&#8217;div&#8217;, {<br />
&#8216;class&#8217;: this.config.divChangePasswordClass,<br />
&#8216;html&#8217;: &#8216;
<p><label for="' + aChangePasswordID + '">&nbsp;</label><a id="' + aChangePasswordID + '" href="#">&#8216; + this.config.showPasswordLabel + &#8216;</a></p>
<p>&#8216;<br />
}<br />
);</p>
<p>// Insert the div<br />
divChangePassword.injectAfter(elPwdContainer);</p>
<p>// Hide the password container<br />
var fxPwdContainer = new Fx.Slide(elPwdContainer);<br />
fxPwdContainer.hide();</p>
<p>// Observe &#8220;Change password link&#8221;<br />
var aChangePassword = $(aChangePasswordID);</p>
<p>aChangePassword.addEvent(&#8217;click&#8217;, function(e) {<br />
var e = new Event(e);<br />
e.stop(); // Prevents the link from being executed</p>
<p>// Create the slide effects<br />
var fxPwdContainer = new Fx.Slide(elPwdContainer);<br />
var fxPwdLink = new Fx.Slide(aChangePassword);</p>
<p>// Chain the effects: slide out the &#8220;Change password&#8221; link, then slide in the password container<br />
fxPwdLink.slideOut().chain(function(){fxPwdContainer.slideIn()});<br />
});<br />
}<br />
});<br />
</textarea></p>
<p>Zum Schluss führen wir noch alles zusammen, denn im Moment stehen die einzelnen Komponenten noch einzeln da und bewirken gar nichts. In den &lt;head&gt;-Bereich der HTML-Datei kommen nun die Aufrufe, um die Klasse nach dem Seitenaufruf auf das Formular anzuwenden:</p>
<p><textarea name="code" class="html" rows="20" cols="60"><br />
<script type="text/javascript" src="/js/mootools-1.2-complete-min.js"></script><br />
<script type="text/javascript" src="PimpedUserForm.class.js"></script></p>
<p><script type="text/javascript">
window.addEvent('domready', function() {
var config = {
frm: 'f_user',
passwordContainer: '.password-container',
divChangePasswordClass: 'row',
showPasswordLabel: 'Change password'
};
this.pimpedUserForm = new PimpedUserForm(config);
});
</script><br />
</textarea></p>
<p><a href="/examples/pimpmyuserform/" title="Example: Pimp My User Form">Und so sieht das fertige Ergebnis aus.</a></p>
<p>Über Verbesserungsvorschläge und sonstige Rückmeldungen freue ich mich natürlich - die Kommentare stehen euch offen!</p>
<img src="http://feeds.feedburner.com/~r/WhatIKnowIsWhatYouGet/~4/484585803" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://whatiknowiswhatyouget.com/2008/06/21/pimp-my-user-form-teil-1-passwort-felder/feed/</wfw:commentRss>
		<feedburner:origLink>http://whatiknowiswhatyouget.com/2008/06/21/pimp-my-user-form-teil-1-passwort-felder/</feedburner:origLink></item>
	</channel>
</rss>
