<?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>tsevdos.com &#187; javascript</title>
	<atom:link href="http://www.tsevdos.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tsevdos.com</link>
	<description>Web design, internet news and blogging tips</description>
	<lastBuildDate>Wed, 11 Jan 2012 13:46:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Front-end development: Libraries, frameworks και άλλα εργαλεία</title>
		<link>http://www.tsevdos.com/2011/07/26/front-end-development-libraries-frameworks-and-other-tools/</link>
		<comments>http://www.tsevdos.com/2011/07/26/front-end-development-libraries-frameworks-and-other-tools/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 07:22:20 +0000</pubDate>
		<dc:creator>John Tsevdos</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[inspiration]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5shiv]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[modernizr]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[respond.js]]></category>
		<category><![CDATA[selectivizr]]></category>
		<category><![CDATA[style]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.tsevdos.com/?p=864</guid>
		<description><![CDATA[H εποχή που με έναν απλό και ταπεινό text editor ξεκινάγαμε να γράφουμε από την αρχή τα πάντα έχει τελειώσει εδώ και πολύ καιρό. Πλέον για την δημιουργία ακόμα και του πιο απλού HTML template είναι σχεδόν υποχρεωτικό να χρησιμοποιήσουμε τουλάχιστον ένα CSS-reset καθώς και αρκετά javascript files, έτσι ώστε να προσθέσουμε συμβατότητα σε παλιότερους browsers, να ελέγξουμε τι [...]]]></description>
			<content:encoded><![CDATA[<p>H εποχή που με έναν απλό και ταπεινό text editor ξεκινάγαμε να γράφουμε από την αρχή τα πάντα έχει τελειώσει εδώ και πολύ καιρό. Πλέον για την δημιουργία ακόμα και του πιο απλού HTML template είναι σχεδόν υποχρεωτικό να χρησιμοποιήσουμε τουλάχιστον ένα CSS-reset καθώς και αρκετά javascript files, έτσι ώστε να προσθέσουμε συμβατότητα σε παλιότερους browsers, να ελέγξουμε τι υποστηρίζει ο κάθε browser κτλ κτλ. Παρακάτω περιγράφω τι διαδικασία, και φυσικά τα εργαλεία, libraries, scripts και snippets που χρησιμοποιώ σχεδόν σε κάθε νέο project, από το πιο μικρό μέχρι το πιο μεγάλο&#8230;</p>
<h2>Markup</h2>
<p>Ίσως το πιο εύκολο κομμάτι του puzzle. Μέχρι και πέρσι, συνήθως χρησιμοποιούσα ένα δικό μου template (βασισμένο σε <strong>Strict XHTML</strong>), ωστόσο μιας και προσπαθώ να το γυρίσω σε <strong>HTML5</strong>, πιάνω τον εαυτό μου να χρησιμοποιεί όλο και πιο συχνά το <strong><a title="HTML5 Boilerplate" href="http://html5boilerplate.com/">HTML5 boilerplate</a></strong> του <a title="Paul Irish" href="http://paulirish.com/">Paul Irish</a>. Το μόνο κακό που του βρίσκω είναι πως δεν μου φαίνεται και τόσο &#8220;boilerplate&#8221;, και συνήθως μου παίρνει αρκετή ώρα στο να διαγράφω αρχεία και κώδικα έτσι ώστε να το φέρω στα μέτρα μου. Σιγά-σιγά θέλω να φτιάξω και την <a title="A really simple HTML5 template from Phrappe.com" href="http://phrappe.com/markup/a-really-simple-html5-template/">δική μου λύση</a>, ωστόσο μέχρι τότε το HTML5 boilerplate κάνει μια χαρά την δουλειά του.</p>
<h2>CSS</h2>
<p>Το πρώτο πράγμα που χρειάζομαι είναι ένα καλό <strong>CSS-reset</strong>. Αν η markup μου είναι <strong>HTML5</strong>, χρησιμοποιώ το <a title="HTML5 CSS reset" href="http://html5doctor.com/html-5-reset-stylesheet/"><strong>HTML5 reset</strong> του HTML5 Doctor</a>, αν όχι χρησιμοποιώ το παλιό καλό <strong><a title="CSS reset" href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/">HTML reset</a></strong> του <a title="Eric Meyer" href="http://meyerweb.com">Eric Meyer</a> . Πολλές φορές αν το project &#8220;βιάζεται&#8221;, χρησιμοποιώ και σαν βάση την τυπογραφία κάποιου έτοιμου <strong>CSS framework</strong>, συνήθως του <strong><a title="Blueprint CSS framework" href="http://www.blueprintcss.org/">Blueprint</a></strong> ή του <a title="HTML5 Boilerplate" href="http://html5boilerplate.com/">HTML5 boilerplate</a>. Τέλος, αν το project βιάζεται απελπιστικά ή θέλω κάποιο γρήγορο prototype εδώ και τώρα, χρησιμοποιώ και το grid system του <a title="Blueprint CSS framework" href="http://www.blueprintcss.org/">Blueprint</a> (είναι και το μόνο που έχω μάθει!). Τέλος, συνήθως περνάω και τα <strong><a title="Hardboiled CSS3 Media Queries" href="http://www.stuffandnonsense.co.uk/blog/about/hardboiled_css3_media_queries/">media queries</a></strong> του <a title="Andy Clarke" href="http://stuffandnonsense.co.uk/">Andy Clarke</a> αλλά και ένα <strong>print-only style</strong> που περιέχει όλη την βασική τυπογραφία για εκτύπωση, για να υπάρχουν (αργά ή γρήγορα θα χρειαστούν)&#8230;</p>
<h2>Javascript</h2>
<p>Και εφόσον κλείσαμε από markup και CSS το μόνο που μας μένει είναι η <strong>Javascript</strong> μας. Εάν το project έχει <strong>HTML5 markup</strong>, το <strong><a title="HTML5 shiv" href="http://code.google.com/p/html5shiv/">html5shiv</a></strong> είναι το πρώτο &#8220;must&#8221; script που πρέπει να φορτώσουμε. Από εκεί και πέρα συνήθως περνάω το <strong><a title="Μodernizr" href="http://www.modernizr.com/">modernizr</a></strong> και το <strong><a title="jQuery" href="http://jquery.com/">jQuery</a></strong> γιατί όλο και κάπου θα χρειαστούν. Τώρα τελευταία μου αρέσει πολύ σαν ιδέα και το <strong><a title="Selectivizr" href="http://selectivizr.com/">selectivizr</a></strong> μιας και σε βοηθάει πολύ στο να κρατάς την markup σου ακόμα πιο καθαρή, ωστόσο μπορώ να ζήσω και χωρίς αυτό. Τέλος, υπάρχει πιθανότητα (πάντα ανάλογα το project και εάν ο πελάτης είναι περίεργος/φανατικός χρήστης IE) να χρησιμοποιήσω και το <strong><a title="Respond.js: Fast CSS3 Media Queries for Internet Explorer 6-8 and more" href="http://filamentgroup.com/lab/respondjs_fast_css3_media_queries_for_internet_explorer_6_8_and_more/">Respond.js</a></strong>, έτσι ώστε τα <strong>media queries</strong> να παίζουν και σε IE 6-7-8&#8230;</p>
<p>Αυτά τα λίγα σχετικά με το front-end κομμάτι των site. Όπως καταλαβαίνεται, ακόμα και μικρά projects μπορεί να θέλουν όλα τα παραπάνω και ακόμα περισσότερα για να στηθούν και να λειτουργήσουν όπως πρέπει. Τέλος αν κάποιος χρησιμοποιεί φανατικά κάποιο εργαλείο/library που δεν αναφέρω παραπάνω, ας αφήσει ένα σχόλιο έτσι ώστε το τεστάρουμε και εμείς&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsevdos.com/2011/07/26/front-end-development-libraries-frameworks-and-other-tools/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nwrapper jQuery plugin</title>
		<link>http://www.tsevdos.com/2011/03/28/nwrapper-jquery-plugin/</link>
		<comments>http://www.tsevdos.com/2011/03/28/nwrapper-jquery-plugin/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 11:06:23 +0000</pubDate>
		<dc:creator>John Tsevdos</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[nwrapper]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.tsevdos.com/?p=748</guid>
		<description><![CDATA[Μόλις τελείωσα ένα πολύ εύχρηστο jQuery plugin με την ονομασία nwrapper. Πρόκειται για ένα utility plugin, με το οποίο μπορείτε να κάνετε wrap ανά όσα elements θέλετε (όπως κάνει η wrap() function του jQuery αλλά με περισσότερες επιλογές)&#8230; Για περισσότερες πληροφορίες μπορείτε να ρίξετε μια ματιά σε αυτό το post (στα αγγλικά) και φυσικά στην [...]]]></description>
			<content:encoded><![CDATA[<p>Μόλις τελείωσα ένα πολύ εύχρηστο jQuery plugin με την ονομασία <a title="nwrapper jQuery plugin" href="http://plugins.jquery.com/project/nwrapper">nwrapper</a>. Πρόκειται για ένα utility plugin, με το οποίο μπορείτε να κάνετε wrap ανά όσα elements θέλετε (όπως κάνει η <a title=".wrap()" href="http://api.jquery.com/wrap/">wrap() function</a> του jQuery αλλά με περισσότερες επιλογές)&#8230; Για περισσότερες πληροφορίες μπορείτε να ρίξετε μια ματιά <a title="Wrap any amount of elements with jQuery" href="http://phrappe.com/javascript/wrap-any-amount-of-elements-with-jquery/">σε αυτό το post</a> (στα αγγλικά) και φυσικά στην <a title="nwrapper demo page" href="http://phrappe.com/demos/nwrapper/nwrapper.html">demo page</a> που έχω ετοιμάσει. Αν έχετε κάποια επιπλέον ιδέα αφήστε μου comment. Enjoy &#8216;n Share <img src='http://www.tsevdos.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsevdos.com/2011/03/28/nwrapper-jquery-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Κάντε τον Internet Explorer 6 να συμπεριφέρεται σαν Internet Explorer 7!</title>
		<link>http://www.tsevdos.com/2008/11/19/make-ie6-to-behave-like-ie7/</link>
		<comments>http://www.tsevdos.com/2008/11/19/make-ie6-to-behave-like-ie7/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 12:29:17 +0000</pubDate>
		<dc:creator>John Tsevdos</dc:creator>
				<category><![CDATA[browsers]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[explorer]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[ie7]]></category>
		<category><![CDATA[internet]]></category>

		<guid isPermaLink="false">http://www.tsevdos.com/?p=138</guid>
		<description><![CDATA[Ο Stefan Vervoort είχε μια πολύ καλή ιδέα την οποία υλοποίησε κι όλας! Απλά είχε βαρεθεί την (προβληματική;) Javascript μηχανή του IE6 και αποφάσισε να την αναβαθμίσει σε αυτή του IE7! Το μόνο που χρειάζεται να κάνει κάποιος είναι να κατεβάσει ένα Javascript αρχείο, το οποίο περιέχει όλον το απαραίτητο κώδικα έτσι ώστε ο IE6 [...]]]></description>
			<content:encoded><![CDATA[<p>Ο <a title="Stefan Vervoort blog" href="http://www.divitodesign.com/">Stefan Vervoort</a> είχε μια πολύ καλή ιδέα την οποία υλοποίησε κι όλας! Απλά είχε βαρεθεί την (προβληματική;) Javascript μηχανή του IE6 και <a title="Let Internet Explorer 6 Behave Like Internet Explorer 7" href="http://www.divitodesign.com/2008/11/let-ie6-behave-like-ie7/">αποφάσισε να την αναβαθμίσει σε αυτή του IE7</a>! Το μόνο που χρειάζεται να κάνει κάποιος <a title="Let Internet Explorer 6 Behave Like Internet Explorer 7" href="http://www.divitodesign.com/2008/11/let-ie6-behave-like-ie7/">είναι να κατεβάσει ένα Javascript αρχείο</a>, το οποίο περιέχει όλον το απαραίτητο κώδικα έτσι ώστε ο IE6 να συμπεριφέρεται σαν IE7. Εάν ο IE6 σας κάνει νερά στην Javascript, ενώ σε IE7 τα πάντα λειτουργούν άψογα, χρησιμοποιείστε το συγκεκριμένο custom upgrade και γλιτώστε όλη την extra δουλειά!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsevdos.com/2008/11/19/make-ie6-to-behave-like-ie7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progressive enhancement : Tsevdos.com sidebar</title>
		<link>http://www.tsevdos.com/2008/08/29/progressive-enhancement-tsevdoscom-sidebar/</link>
		<comments>http://www.tsevdos.com/2008/08/29/progressive-enhancement-tsevdoscom-sidebar/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 08:45:01 +0000</pubDate>
		<dc:creator>John Tsevdos</dc:creator>
				<category><![CDATA[accessibility and usability]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[client-side]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.tsevdos.com/?p=66</guid>
		<description><![CDATA[Το δεύτερο και ίσως αγαπημένο μου feature στο Whitepress theme, είναι η AJAX-powered, αλλά ταυτόχρονα accessible sidebar του! Την τεχνική την δανείστηκα από το blog jQuery for designers και πιο συγκεκριμένα από το post jQuery Tabs, και ο λόγος που την λάτρεψα είναι επειδή χρησιμοποιεί σωστά αυτό που ονομάζουμε progressive enhancement. Progressive enhancement με πολύ [...]]]></description>
			<content:encoded><![CDATA[<p>Το δεύτερο και ίσως αγαπημένο μου feature στο <a title="Whitepress theme page" href="http://www.tsevdos.com/2008/06/10/whitepress-tsevdos-com-official-wordpress-theme/">Whitepress theme</a>, είναι η AJAX-powered, αλλά ταυτόχρονα accessible sidebar του! Την τεχνική την δανείστηκα από το blog <a title="jQuery for Designers" href="http://jqueryfordesigners.com/">jQuery for designers</a> και πιο συγκεκριμένα από το post <a title="jQuery Tabs" href="http://jqueryfordesigners.com/jquery-tabs/">jQuery Tabs</a>, και ο λόγος που την λάτρεψα είναι επειδή χρησιμοποιεί σωστά αυτό που ονομάζουμε <a title="Proggressive Enhancement" href="http://en.wikipedia.org/wiki/Progressive_Enhancement"><strong>progressive enhancement</strong></a>. <a title="Proggressive Enhancement" href="http://en.wikipedia.org/wiki/Progressive_Enhancement"><strong>Progressive enhancement</strong></a> με πολύ απλά λόγια σημαίνει πως ο χρήστης έστω και εάν δεν έχει την javascript ενεργοποιημένη στον browser, η sidebar και ολόκληρο το περιεχόμενο της θα εμφανίζεται κανονικά! Το μόνο που θα χάσει ο χρήστης σε αυτήν την περίπτωση είναι το AJAX-like εφέ που δημιουργεί η Javascript (και πιο συγκεκριμένα το <a title="jQuery site" href="http://jquery.com/"><strong>jQuery</strong></a>), ενώ θα βλέπει και όλα τα tabs ανοιχτά, το ένα κάτω από το άλλο. Όπως μπορείτε να παρατηρήσετε και από τις 2 παρακάτω εικόνες, ο χρήστης με ενεργοποιημένη Javascript έχει περισσότερο ελεύθερο χώρο στην sidebar του, και μπορεί να επιλέξει ποιο tab θα είναι ενεργοποιημένο. Αντίθετα κάποιος χρήστης με απενεργοποιημένη Javascript ή screen reader απλά βλέπει κανονικά και στην σειρά όλο το περιεχόμενο της sidebar με την σειρά που εμφανίζεται στην markup!</p>
<p><a title="Tsevdos.com with Javascript on" href="http://farm4.static.flickr.com/3290/2623495243_390f5fcf09_o.jpg"><img src="http://farm4.static.flickr.com/3290/2623495243_501f967f9b_m.jpg" alt="Tsevdos.com with Javascript on" width="240" height="153" /></a><br />
Η sidebar όπως εμφανίζεται σε browser που έχει ενεργοποιημένη την Javascript.<br />
<a title="Tsevdos.com with Javascript off" href="http://farm4.static.flickr.com/3029/2624319292_ea21274a88_o.jpg"><img src="http://farm4.static.flickr.com/3029/2624319292_d58206f508_m.jpg" alt="Tsevdos.com with Javascript off" width="240" height="153" /></a><br />
Η sidebar όπως εμφανίζεται σε browser που <strong>δεν</strong> έχει ενεργοποιημένη την Javascript.</p>
<h2>Η markup (XHTML)</h2>
<p>Ας δούμε όμως πως μπορούμε να φτιάξουμε το συγκεκριμένο εφέ εύκολα και γρήγορα. Εν αρχή λοιπόν (όπως πάντα) η markup μας.</p>
<pre name="code" class="html">
<div id="sidebar">
<ul id="navigation">
<li><a href="#first_div" title="First container">Section 1</a></li>
<li><a href="#second_div" title="Second container">Section 2</a></li>
<li><a href="#third_div" title="Third container">Section 3</a></li>
</ul>
<div id="first_div">
...
</div>
<div id="second_div">
...
</div>
<div id="third_div">
...
</div>
</div>
</pre>
<p>Όπως βλέπεται ένα div με το id sidebar, περιέχει μια unordered list (ul), με τρία list items (li), τα οποία στην ουσία λειτουργούν ως navigation list για τα τρία divs που ακολουθούν και θα περιέχουν το περιεχόμενο μας. Φυσικά η navigation list μπορεί να έχει περισσότερα links, αρκεί να υπάρχουν και τα ανάλογα divs περιεχομένου από κάτω. Αυτό ήταν, η markup είναι έτοιμη! Το μόνο που θα πρέπει να προσέξει κάποιος (θα εξηγήσω παρακάτω το γιατί), είναι πως σε περίπτωση που θέλει να προσθέσει επιπλέον ζευγάρια links και divs (για να έχει επιπλέον tabs και περιεχόμενο δηλαδή), θα πρέπει το link μέσα στο list item, να έχει για href attribute ακριβώς το ίδιο string με το id του div που θα προσθέσει. Όπως ήδη μπορείτε να δείτε, όλα τα links έχουν για href attribute τα id των div που θα εμφανίζουν.</p>
<h2>H CSS</h2>
<p>To styling (CSS) της συγκεκριμένης markup δεν παίζει κανέναν απολύτως ρόλο στον κώδικα μας (όλη η δουλειά γίνεται μέσω Javascript/jQuery), ωστόσο γι αυτούς που θέλουν να δημιουργήσουν κάτι στα γρήγορα, ας αντιγράψουν τον παρακάτω κώδικα, τον οποίο χρησιμοποιώ και στο παράδειγμα που μπορείτε να <a title="Sidebar live example" href="http://www.tsevdos.com/wp-content/uploads/sidebar/sidebar-example.html">δείτε</a> και φυσικά να <a title="Download sidebar example" href="http://www.tsevdos.com/wp-content/uploads/sidebar/sidebar.zip">κατεβάσετε</a>!</p>
<pre name="code" class="css">
* {
margin: 0;
padding: 0;
}

#sidebar {
width: 500px;
margin: 20px;
margin-bottom: 15px;
border-left: 1px solid #999;
}

#navigation {
list-style-type: none;
}

a:link, a:visited {
color: #fff;
background: #ccc;
padding: 1px 5px 0;
text-decoration: none;
font-weight: bold;
}

a:hover, a:active, a.selected {
color: #fff;
background: #999;
}

#navigation li {
list-style-type: none;
float: left;
border: 1px solid #999;
border-width: 1px 1px 0 0;
}

#sidebar div {
clear: left;
padding: 10px;
border: 1px solid #999;
border-width: 1px 1px 1px 0;
}
</pre>
<h2>Και τέλος η Javascript (jQuery)</h2>
<p>Και επιτέλους περνάμε στην καρδιά αυτού του tutorial, δηλαδή στην Javascript και το <a title="jQuery library" href="http://jquery.com/">jQuery</a> πιο συγκεκριμένα! Για τους ανυπόμονους, ο κώδικας είναι ο παρακάτω, ωστόσο καλό θα είναι να τον εξηγήσουμε και λίγο, γιατί πολλά πράγματα γίνονται, μέσα σε πολύ λίγες γραμμές κώδικα&#8230;</p>
<pre name="code" class="js">
<script type="text/javascript" src="jquery-1.2.6.min.js"></script>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){
$('#sidebar #navigation li a').click(function(){
$('#sidebar > div').hide().filter(this.hash).fadeIn();
$('#sidebar #navigation li a').removeClass('selected');
$(this).addClass('selected');
return false;
}).filter(':first').click();
});
//]]&gt;
</script>
</pre>
<p>Στην πρώτη γραμμή λοιπόν, δηλώνουμε στην markup πως θα κάνουμε χρήση της <a title="jQuery site" href="http://jquery.com/">jQuery library</a>. Η συγκεκριμένη library (όπως και οι περισσότερες άλλωστε) λειτουργεί όταν το <a title="What is DOM" href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM (Document Object Model)</a> είναι έτοιμο. Αυτό ακριβώς κάνει ο παρακάτω κώδικας. Μέσα του θα προσθέσουμε όλον το Javascript κώδικα ο οποίος με την βοήθεια και της βιβλιοθήκης θα δημιουργήσει το εφέ μας.</p>
<pre name="code" class="js">
$(document).ready(function(){
...
});
</pre>
<p>Επιλέγουμε λοιπόν τα links (anchor elements) που βρίσκονται μέσα στην unordered list με id navigation, και τους προσθέτουμε ένα απλό click event. Με άλλα όταν γίνει click σε κάποιο link της λίστας, τότε ο κώδικας που βρίσκεται ανάμεσα στις αγκύλες ενεργοποιήται.</p>
<pre name="code" class="js">
$('#sidebar #navigation li a').click(function() {
...
});
</pre>
<p>Και πάμε πλέον στο τι γίνεται όταν πατηθεί κάποιο από τα παραπάνω links. Αρχικά επιλέγουμε όλα τα divs της sidebar (#sidebar &gt; div) και τα κρύβουμε (hide()). Ταυτόχρονα εμφανίζουμε το div (με ένα απλό fadeIn εφέ) το οποίο έχει id ίδια τιμή με το string της href attribute του link (hash). Για τον λόγο αυτό σας προειδοποίησα παραπάνω πως πρέπει να προσέξουμε πολύ στην markup μας αυτήν την μικρή λεπτομέρεια. Εάν δεν έχουν ίδια τιμή ο κώδικας απλά δεν παίζει&#8230; Για να το κάνω ακόμα πιο κατανοητό (για αυτούς που κάνουν τώρα τα πρώτα τους βήματα σε jQuery), ας υποθέσουμε πως πατήθηκε το link Section 1, το οποίο έχει για href attribute την τιμή &#8220;#first_div&#8221;. Μόλις γίνει click λοιπόν, το jQuery θα κρύψει όλα τα divs της sidebar, και θα επιλέξει το div το οποίο έχει για id την τιμή #first_div. Αυτό γίνεται επειδή το this.hash εκείνη την στιγμή παίρνει την τιμή #first_div. Μόλις ολοκληρωθεί και αυτό, απλά εμφανίζουμε με fade in το συγκεκριμένο div. Και όλα αυτά γίνονται μόλις σε 1 γραμμή κώδικα!</p>
<pre name="code" class="js">
$('#sidebar > div').hide().filter(this.hash).fadeIn();
</pre>
<p>Ευτυχώς ο υπόλοιπος κώδικας είναι πολύ πιο κατανοητός και εύκολος. Στις παρακάτω 3 γραμμές απλά επιλέγουμε όλα τα links και τους αφαιρούμε (εάν έχουν, όμως πάντα ένα link θα έχει) την κλάση &#8220;selected&#8221;, η οποία και δίνει το ανάλογο style στο επιλεγμένο link. Τέλος προσθέτουμε στο link που έχει γίνει το click την κλάση &#8220;selected&#8221;, έτσι ώστε να φαίνεται πως είναι επιλεγμένο (highlighted), και δηλώνουμε στον browser να σταματήσει την default ενέργεια του click event (return false;), μιας και έχουμε πετύχει το εφέ που θέλουμε!</p>
<pre name="code" class="js">
$('#sidebar #navigation li a').removeClass('selected');
$(this).addClass('selected');
return false;
</pre>
<p>Τέλος σε όλο αυτό το click event προσθέτουμε ένα από τα αγαπημένα μου χαρακτηριστικά που έχει το jQuery. Φιλτράρουμε το πρώτο element που έχει επιλεχθεί, δηλαδή το πρώτο link της λίστας μας, και κάνουμε click πάνω του, μέσω κώδικα! Έτσι όταν στο τέλος εμφανίζεται η σελίδα το πρώτο link (ή tab ή όπως αλλιώς θέλετε να το πείτε), θα είναι πάντα επιλεγμένο!!! Αυτό ήταν, είναι έτοιμο, δουλεύει και πάνω από όλα, είναι φιλικό προς όλους τους χρήστες! Δοκιμάστε να απενεργοποιήσετε την Javascript και θα δείτε πως θα συνεχίζει να δουλεύει χωρίς κανένα πρόβλημα, απλά θα χάσει λίγη από την μαγεία του&#8230;</p>
<pre name="code" class="js">
.filter(':first').click();
</pre>
<h2>Επίλογος</h2>
<p>To <a title="jQuery library" href="http://jquery.com/">jQuery</a> είναι πραγματικά μια φανταστική Javascript library η οποία κάνει τα δύσκολα πράγματα απλά! Όπως βλέπεται μέσα σε μόλις 6-7 γραμμές κώδικα έχουμε ένα πολύ όμορφο και accessible αποτέλεσμα το οποίο μπορεί να χρησιμοποιηθεί παντού! Η δυνατότητα του να κάνεις εύκολα και γρήγορα αυτά που έχεις στο μυαλό σου, χωρίς να σε απασχολούν οι μικρολεπτομέρειες τις Javascript (οι οποίες πιστέψτε με είναι πολλές και ενοχλητικές), είναι αυτό που κάνει το<a title="jQuery library" href="http://jquery.com/"> jQuery</a> να ξεχωρίζει από τις άλλες libraries. Τέλος για όσους θέλουν μια ακόμα πιο εύκολη και φυσικά accessible λύση καλό θα είναι να ρίξουν και μια ματιά στο <a title="UI plug in for jQuery" href="http://docs.jquery.com/UI/Tabs">UI Tabs</a> το οποίο είναι ένα επίσημο plug-in για το <a title="jQuery library" href="http://jquery.com/">jQuery</a> και κάνει με πολύ λιγότερο κόπο αυτό που δημιουργήσαμε παραπάνω ()&#8230;</p>
<ul>
<li><a title="See live example" href="http://www.tsevdos.com/wp-content/uploads/sidebar/sidebar-example.html"><strong>Δείτε το παράδειγμα στον browser σας</strong></a></li>
<li><a title="Download sidebar files" href="http://www.tsevdos.com/wp-content/uploads/sidebar/sidebar.zip"><strong>Κατεβάστε τα αρχεία του tutorial</strong></a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.tsevdos.com/2008/08/29/progressive-enhancement-tsevdoscom-sidebar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mapstraction: η library για χάρτες</title>
		<link>http://www.tsevdos.com/2007/12/10/mapstraction-the-maps-javascript-library/</link>
		<comments>http://www.tsevdos.com/2007/12/10/mapstraction-the-maps-javascript-library/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 12:07:10 +0000</pubDate>
		<dc:creator>John Tsevdos</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://www.tsevdos.com/2007/12/10/mapstraction-the-maps-javascript-library/</guid>
		<description><![CDATA[Η Mapstraction είναι μία Javascript library, η οποία παρέχει ένα κοινό API για δημιουργία χαρτών σε όλα τα Javascript APIs που υπάρχουν εκεί έξω! Το παραπάνω με απλά λόγια σημαίνει πως μπορείτε να δημιουργήσετε εύκολα και γρήγορα κάποιον χάρτη από οποιαδήποτε μεγάλη υπηρεσία, όπως Google Maps, Yahoo! Maps, Microsoft Virtual Earth Maps και πολλά άλλα, [...]]]></description>
			<content:encoded><![CDATA[<p>Η <a title="Μapstraction Javascript library" href="http://www.mapstraction.com/"><strong>Mapstraction</strong></a> είναι μία <a title="Javascript in wiki" href="http://en.wikipedia.org/wiki/JavaScript">Javascript</a> library, η οποία παρέχει ένα κοινό <a title="What is API" href="http://en.wikipedia.org/wiki/Application_programming_interface">API</a> για δημιουργία χαρτών σε όλα τα <a title="What is Javascript" href="http://en.wikipedia.org/wiki/Javascript">Javascript</a> <a title="What is API" href="http://en.wikipedia.org/wiki/Application_programming_interface">APIs</a> που υπάρχουν εκεί έξω! Το παραπάνω με απλά λόγια σημαίνει πως μπορείτε να δημιουργήσετε εύκολα και γρήγορα κάποιον χάρτη από οποιαδήποτε μεγάλη υπηρεσία, όπως <a title="Google Maps" href="http://maps.google.com/">Google Maps</a>, <a title="Yahoo! Maps" href="http://maps.yahoo.com/">Yahoo! Maps</a>, <a title="Microsoft Virtual Earth Maps" href="http://maps.live.com/">Microsoft Virtual Earth Maps</a> και πολλά άλλα, χρησιμοποιώντας μόνο την <a title="Mapstraction Javascript library" href="http://www.mapstraction.com/"><strong>Mapstraction</strong></a> library! Τώρα πολύ έξυπνα θα ρωτήσει κάποιος, και γιατί να μην χρησιμοποιήσεις κατευθείαν τα επίσημα API των άλλων εταιρειών? Για δύο πολύ σημαντικούς λόγους :</p>
<ol>
<li>Μαθαίνοντας μόνο μία library μπορείς να την χρησιμοποιήσεις σε όλα τα map APIs εκεί έξω, άρα μαθαίνεις μία library και την χρησιμοποιείς σε όλα!</li>
<li>Εάν το αφεντικό/πελάτης σας αλλάξει γνώμη τελευταία στιγμή για την υπηρεσία χάρτη που θέλει να έχει το site (πχ. αντί για <a title="Google Maps" href="http://maps.google.com/">Google Maps</a>, του έρθει το <a title="Microsoft Virtual Earth Maps" href="http://maps.live.com/">Microsoft Virtual Earth Maps</a>), δεν χρειάζονται αλλαγές στον κωδικά! Το μόνο που αλλάζει είναι μια γραμμή που υποδηλώνει την υπηρεσία που θα χρησιμοποιείτε!</li>
</ol>
<p>Όποιοι δουλεύεται με χάρτες σε projects, σκεφτείτε σοβαρά την συγκεκριμένη πρόταση, γιατί σίγουρα θα σας λύσει τα χέρια!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsevdos.com/2007/12/10/mapstraction-the-maps-javascript-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>H Yahoo! UI Library προσθέτει selector utility</title>
		<link>http://www.tsevdos.com/2007/12/05/yahoo-ui-library-gets-selector-utility/</link>
		<comments>http://www.tsevdos.com/2007/12/05/yahoo-ui-library-gets-selector-utility/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 08:18:23 +0000</pubDate>
		<dc:creator>John Tsevdos</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[effects]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.tsevdos.com/2007/12/05/yahoo-ui-library-gets-selector-utility/</guid>
		<description><![CDATA[Η γνωστή effects, Ajax και γενικότερα UI (user interface) library της Yahoo! απέκτησε ένα ολοκαίνουργιο selector utility το οποίο αντιγράφει την μέθοδο επιλογής του jQuery στην Yahoo! UΙ library! Έτσι χρησιμοποιώντας κάποιος την library της Yahoo! μπορεί πλέον να επιλέξει κάποιο element με τον γνωστό jQuery τρόπο : var p_nodes = YAHOO.util.Selector.query('p'); Όπως φαίνεται όλες [...]]]></description>
			<content:encoded><![CDATA[<p>Η γνωστή effects, Ajax και γενικότερα UI (user interface) <a title="Yahoo! UI" href="http://developer.yahoo.com/yui/"><strong>library της Yahoo!</strong></a> απέκτησε ένα ολοκαίνουργιο <a title="Yahoo! UI selector Utility" href="http://developer.yahoo.com/yui/selector/"><strong>selector utility</strong></a> το οποίο αντιγράφει την μέθοδο επιλογής του <a title="jQuery library" href="http://jquery.com/">jQuery</a> στην <a title="Yahoo! UI" href="http://developer.yahoo.com/yui/"><strong>Yahoo! UΙ library</strong></a>! Έτσι χρησιμοποιώντας κάποιος την library της <a title="Yahoo!" href="http://www.yahoo.com/">Yahoo!</a> μπορεί πλέον να επιλέξει κάποιο element με τον γνωστό <a title="Jquery" href="http://jquery.com/">jQuery</a> τρόπο :</p>
<pre name="code" class="js">var p_nodes = YAHOO.util.Selector.query('p');</pre>
<p>Όπως φαίνεται όλες οι Javascript/AJAX libraries έχουν αρχίσει να καταλαβαίνουν πόσο δυνατό είναι το <a title="jQuery library" href="http://jquery.com/">jQuery</a> στον συγκεκριμένο τομέα και προσπαθούν να το εντάξουν στην εκάστοτε library τους. Προσωπικά θα συνεχίσω να χρησιμοποιώ το <a title="jQuery library" href="http://jquery.com/">jQuery</a> γιατί εκτός από το ότι είναι απλό, με πολλές δυνατότητες και πολύ εύκολο στην εκμάθηση, είναι και πολύ πιο ελαφρύ σε file size συγκρινόμενο με άλλες libraries (ιδιαίτερα με την <a title="Yahoo! UI" href="http://developer.yahoo.com/yui/"><strong>Yahoo! UΙ library</strong></a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tsevdos.com/2007/12/05/yahoo-ui-library-gets-selector-utility/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

