<?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>Staicu Ionuţ-Bogdan &#187; jQuery</title>
	<atom:link href="http://www.iamntz.com/category/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iamntz.com</link>
	<description>the Frontend Developer</description>
	<lastBuildDate>Mon, 23 Jan 2012 04:55:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Parametri trimiși prin AJAX (jQuery)</title>
		<link>http://www.iamntz.com/2246/frontend-developer/parametri-trimisi-prin-ajax-jquery/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/2246/frontend-developer/parametri-trimisi-prin-ajax-jquery/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 16:59:55 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=2246</guid>
		<description><![CDATA[M-am săturat de câte ori am văzut coduri de genul: Sau, varianta mai lungă: Dragii moșului, varianta de mai sus, dincolo de faptul că arată oribil, este foarte greu de citit (respectiv făcut debug). Iată o variantă mult mai simplă: Respectiv: Funcțiile $.get(), $.post() și $.getJSON() acceptă, contrar credinței populare, minim trei parametri: primul este [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/2246/frontend-developer/parametri-trimisi-prin-ajax-jquery/'>Parametri trimiși prin AJAX (jQuery)</a>. <br/>
	<a href='http://www.iamntz.com/2246/frontend-developer/parametri-trimisi-prin-ajax-jquery/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>M-am săturat de câte ori am văzut coduri de genul:</p>
<pre class="brush: jscript; title: ; notranslate">
$.get( 'ajax.php?foo=' + bar + '&amp;baz=' + baz + '&amp;par=' + param' , callback );
</pre>
<p>Sau, varianta mai lungă:</p>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
	url : 'ajax.php?foo=' + bar + '&amp;baz=' + baz + '&amp;par=' + param',
	success : callback
});
</pre>
<p>Dragii moșului, varianta de mai sus, dincolo de faptul că arată oribil, este foarte greu de citit (respectiv făcut debug). Iată o variantă mult mai simplă: <span id="more-2246"></span></p>
<pre class="brush: jscript; title: ; notranslate">
$.get( 'ajax.php', {
	foo:bar,
	baz:baz,
	par:param
}, callback );
</pre>
<p>Respectiv:</p>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
	url : 'ajax.php',
	data: {
		foo:bar,
		baz:baz,
		par:param
	},
	success : callback
});
</pre>
<p>Funcțiile <code>$.get()</code>, <code>$.post()</code> și <code>$.getJSON()</code> acceptă, contrar credinței populare, minim trei parametri: primul este <acronym title="Uniform Resource Locator">URL</acronym>, al doilea NU este callback, cum mulți bănuiesc, ci este un obiect și abia al treilea este callback.</p>
<p>Eh, nu-i așa că arată mai bine? <img src='http://www.iamntz.com/wp-includes/images/smilies/biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h4>Despre procesarea pe server a request-urilor ajax</h4>
<p>Am văzut foarte mulți &#8211; chiar și eu obișnuiam până acum vreo doi ani &#8211; să trimit cu fiecare request <acronym title="Asynchronous JavaScript + XML  - http://w3.org">AJAX</acronym> și un parametru extra, de genul <code>ajax:1</code> (mai ales dacă implementam și o urmă de graceful degradation).</p>
<p>Eh, următoarea treabă nu știu dacă e specifică jQuery sau au adoptat-o toate bibliotecile, dar jQuery trimite și povestea asta cu fiecare request:</p>
<pre class="brush: bash; title: ; notranslate">X-Requested-With	XMLHttpRequest</pre>
<p>Ce înseamnă asta? Că în <acronym title="Hypertext Preprocessor - http://php.net">PHP</acronym> poți face asta:</p>
<pre class="brush: php; title: ; notranslate">
$is_ajax = ( strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) === 'xmlhttprequest' ? true : false );
</pre>
<p>Și, de exemplu, poți face o funcție să întoarcă un string <acronym title="JavaScript Object Notation">JSON</acronym> dacă este <code>true</code> sau o pagină întreagă dacă este <code>false</code>.</p>
<p>Enjoy!</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/2246/frontend-developer/parametri-trimisi-prin-ajax-jquery/'>Parametri trimiși prin AJAX (jQuery)</a>. <br/>
	<a href='http://www.iamntz.com/2246/frontend-developer/parametri-trimisi-prin-ajax-jquery/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/2246/frontend-developer/parametri-trimisi-prin-ajax-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Carusel infinit cu jQuery</title>
		<link>http://www.iamntz.com/2022/frontend-developer/carusel-infinit-cu-jquery/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/2022/frontend-developer/carusel-infinit-cu-jquery/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 13:18:16 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Carousel]]></category>
		<category><![CDATA[Playground]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=2022</guid>
		<description><![CDATA[Zilele astea am avut nevoie de un carusel infinit (d-ăla la care dai next până îți vine rău). Cum tot ce am găsit era mult prea încărcat pentru ce aveam eu nevoie (nu pot înțelege de ce fac oamenii plugins care acoperă o infinitate de scenarii posibile), am zis să fac eu unul. Plus că [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/2022/frontend-developer/carusel-infinit-cu-jquery/'>Carusel infinit cu jQuery</a>. <br/>
	<a href='http://www.iamntz.com/2022/frontend-developer/carusel-infinit-cu-jquery/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Zilele astea am avut nevoie de un carusel infinit (d-ăla la care dai next până îți vine rău). Cum tot ce am găsit era mult prea încărcat pentru ce aveam eu nevoie (nu pot înțelege de ce fac oamenii plugins care acoperă o infinitate de scenarii posibile), am zis să fac eu unul. Plus că ar fi fost un exercițiu ce mă scotea puțin din rutina în care am intrat în ultima lună. </p>
<h3>Markup</h3>
<p>Mark-ul simplu: o listă.</p>
<pre class="brush: php; title: ; notranslate">
&lt;div id=&quot;infinity&quot;&gt;
	&lt;ul&gt;
		&lt;?php for( $i = 1; $i &lt;= 5; $i++ ){ ?&gt;
		&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://flickholdr.com/251/146/nature/&lt;?php echo $i; ?&gt;&quot;&gt;&lt;/li&gt;
		&lt;?php } ?&gt;
	&lt;/ul&gt;
&lt;/div&gt;
</pre>
<p><span id="more-2022"></span></p>
<h3>CSS</h3>
<p>CSS este la fel de basic. Specificăm width pentru ambele elemente pentru a evita flicker și jump la încărcarea paginii:</p>
<pre class="brush: css; title: ; notranslate">
#infinity,
.ntz_infiniteCarouselWrap {
	width:842px;
}
.ntz_infiniteCarouselWrap {
	overflow:hidden;
	margin:50px auto;
	position:relative;
}
	#infinity li,
	.ntz_infiniteCarouselWrap li {
	    float: left;
	    overflow: hidden;
	    position: relative;
	    height: 158px;
	    margin: 0 11px;
	    width: 263px;
	}
	.ntz_infiniteCarouselWrap .nav {
		position:absolute;
		left:0px;
		width:15px;
		height:14px;
		background:#ccc;
		top:50%;
		margin-top:-7px;
	}
.ntz_infiniteCarouselWrap .nav.next {left:auto;right:0px;}
</pre>
<h3>JavaScript</h3>
<p>Simplu și eficient (cred):</p>
<pre class="brush: jscript; title: ; notranslate">
(function( $ ){
	$.fn.ntz_infiniteCarousel = function() {
		return this.each(function(){
			var carousel = $(this),
					etalon = $('li:first', carousel);

			carousel.wrap('&lt;div class=&quot;ntz_infiniteCarouselWrap&quot;&gt;&lt;/div&gt;');

			var w = carousel.closest('.ntz_infiniteCarouselWrap'), //the wrap
					n = $('&lt;a href=&quot;#&quot; class=&quot;nav prev&quot;/&gt;&lt;a href=&quot;#&quot; class=&quot;nav next&quot;/&gt;'), // the navigation
					inc = etalon.outerWidth(true), // increment - the width of an element ( is the same amount of px to be scrolled )
					ul = $('ul', carousel),
					perPage = Math.ceil( w.width()/inc ), // how many elements are displayed per page
					fX = $('li:lt(' + perPage + ')', ul).clone(), // first and last X elements ( x = perPage)
					lX = $('li:gt('+ ( $('li', ul).length - perPage-1 ) +')', ul).clone(),
					s = $('li.s', carousel); // selected
			w.addClass( carousel.attr('id') );

			ul.append(fX).prepend(lX); // adding elemnts on begining and the end for infinite loop

			var	ulW = $('li', ul).length * inc, // width for ul
					maxPos = -1*(ulW - inc*perPage - perPage); // max position
			ul.width( ulW ).css({marginLeft:-inc*perPage}); 

			n.click(function(){
				var t = $(this),
						curPos = parseInt(ul.css('marginLeft'), 10);

				if( ul.is(':animated') ) {return false;} // we don't need multiple scrolls

				if( t.hasClass('prev') ){ // scroll left
					if( curPos &gt;= 0 ){
						ul.css({ marginLeft: -( ulW - inc * perPage*2 ) }); // infinite loop
					}
					ul.animate({ marginLeft:'+='+inc })
				}

				if ( t.hasClass('next') ) { //scroll right
					if( maxPos &gt;= curPos ){
						ul.css({ marginLeft: - inc * perPage }); // infinite loop
					}
					ul.animate({ marginLeft:'-='+inc });
				}
				return false;
			});
			n.appendTo(w);

		});
	}; // ntz_infiniteCarousel
})( jQuery );

$('#infinity').ntz_infiniteCarousel();
</pre>
<div class="demoDownload"><a href="http://iamntz.com/experiments/infinite_carousel.php" class="demoLink">Demo</a><a href="https://gist.github.com/1031395/afdc91d02d236c68a18f69b21421e981484f2236" class="downloadLink">Download</a></div>
<p>Enjoy!</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/2022/frontend-developer/carusel-infinit-cu-jquery/'>Carusel infinit cu jQuery</a>. <br/>
	<a href='http://www.iamntz.com/2022/frontend-developer/carusel-infinit-cu-jquery/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/2022/frontend-developer/carusel-infinit-cu-jquery/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Două request-uri AJAX la preț de unul</title>
		<link>http://www.iamntz.com/1741/frontend-developer/doua-request-uri-ajax-la-pret-de-unul/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/1741/frontend-developer/doua-request-uri-ajax-la-pret-de-unul/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 10:59:32 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=1741</guid>
		<description><![CDATA[Ți s-a întâmplat vreodată să faci un request cu jQuery folosind $.get sau $.getJSON și să vezi în consola Firebug că de fapt se fac două request-uri? Te-ai întrebat din ce cauză se întâmplă asta? Păi asta se poate întâmpla din cel puțin două motive: ori chiar faci tu request-ul respectiv de două ori (bind-uri [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/1741/frontend-developer/doua-request-uri-ajax-la-pret-de-unul/'>Două request-uri AJAX la preț de unul</a>. <br/>
	<a href='http://www.iamntz.com/1741/frontend-developer/doua-request-uri-ajax-la-pret-de-unul/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Ți s-a întâmplat vreodată să faci un request <acronym title="Asynchronous JavaScript + XML  - http://w3.org">AJAX</acronym> cu jQuery folosind <code>$.get</code> sau <code>$.getJSON</code> și să vezi în consola Firebug că de fapt se fac două request-uri? Te-ai întrebat din ce cauză se întâmplă asta?</p>
<p>Păi asta se poate întâmpla din cel puțin două motive: ori chiar faci tu request-ul respectiv de două ori (bind-uri puse aiurea?) ori&#8230; uiți un slash.</p>
<p>Eu fac request-urile astfel încât url-urile au următoarea formă:<span id="more-1741"></span></p>
<pre class="brush: php; title: ; notranslate">
$.get('http://localhost/?ntz_do=get_uptades');
</pre>
<p>Totul merge ok. Dar dacă se schimbă codul în:</p>
<pre class="brush: php; title: ; notranslate">
$.get('http://localhost?ntz_do=get_uptades');
</pre>
<p>Treaba se schimbă. Se fac două request-uri: primul, cel corect, în care se întâmplă ce vrei tu. Al doilea încearcă să adauge slash-ul lipsă.</p>
<p>E o chestie pe care tocmai am aflat-o, când jQuery a decis să-mi tragă partea lui de păcăleală de 1 Aprilie.</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/1741/frontend-developer/doua-request-uri-ajax-la-pret-de-unul/'>Două request-uri AJAX la preț de unul</a>. <br/>
	<a href='http://www.iamntz.com/1741/frontend-developer/doua-request-uri-ajax-la-pret-de-unul/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/1741/frontend-developer/doua-request-uri-ajax-la-pret-de-unul/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Traversarea obiectelor în jQuery</title>
		<link>http://www.iamntz.com/1387/frontend-developer/traversarea-obiectelor-in-jquery/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/1387/frontend-developer/traversarea-obiectelor-in-jquery/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 08:08:02 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Traversing]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=1387</guid>
		<description><![CDATA[De multe ori se pune problema traversarea unui array de elemente în jQuery. Pentru a face acest lucru, ai două variante: Mixt Poți folosi jQuery (pentru selectarea elementelor) împreună cu chior pentru această traversare, astfel încât, folosindu-te astfel de funcțiile native ale browserului (ceea ce înseamnă viteză). jQuery Pentru aceasta folosești funcția $.each();. Treaba stă [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/1387/frontend-developer/traversarea-obiectelor-in-jquery/'>Traversarea obiectelor în jQuery</a>. <br/>
	<a href='http://www.iamntz.com/1387/frontend-developer/traversarea-obiectelor-in-jquery/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>De multe ori se pune problema traversarea unui array de elemente în jQuery. Pentru a face acest lucru, ai două variante:</p>
<h3>Mixt</h3>
<p>Poți folosi jQuery (pentru selectarea elementelor) împreună cu <acronym title="Javascript - http://w3.org">JS</acronym> chior pentru această traversare, astfel încât, folosindu-te astfel de funcțiile native ale browserului (<a href="http://jquery-howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html">ceea ce înseamnă viteză</a>).</p>
<pre class="brush: jscript; title: ; notranslate">
var elemente = $('div'), totalElemente = elemente.length;
for(var i=0; i&lt;totalElemente;i++){
 var element = elemente.eq(i);
 element.hide();
}
</pre>
<p><span id="more-1387"></span></p>
<h3>jQuery</h3>
<p>Pentru aceasta folosești funcția <code>$.each();</code>. Treaba stă în felul următor:</p>
<pre class="brush: jscript; title: ; notranslate">
var elemente = $('div');
elemente.each(function(i, element){ // `i` este index-ul; `element` este elementul curent
 element.hide();
});
</pre>
<h2>Elementul curent</h2>
<p>În ambele cazuri însă, se pune problema selectării unui child (copil sună aiurea; element ce se află în elementul curent). Și aici avem tot două variante. Ambele implică jQuery (se poate și fără):</p>
<h4>$.find();</h4>
<p>În ambele situații descrise mai sus, pentru a găsi toate <code>span</code>-urile, se poate utiliza următoarea secvență de cod:</p>
<pre class="brush: jscript; title: ; notranslate">
$(element).find('span');
</pre>
<p>Sigur, poți fi un pic mai explicit, putând folosi majoritatea (dacă nu toți) <a href="http://api.jquery.com/category/selectors/">selectorii valizi</a>:</p>
<pre class="brush: jscript; title: ; notranslate">
$(element).find('span[title]'); // selectează span-urile ce au atributul `title`
$(element).find('li span'); // selectează span-urile ce au ca parent li
</pre>
<h4>Folosind contextul </h4>
<p>Această metodă este „furată” direct din <a href="http://code.jquery.com/jquery-latest.js">sursa jQuery</a> și cred că s-a omis când s-a scris documentația. Treaba stă cam așa:</p>
<pre class="brush: jscript; title: ; notranslate">
$('span', element);
</pre>
<p>Din nou, poți fi la fel de explicit ca mai sus:</p>
<pre class="brush: jscript; title: ; notranslate">
$('span[title]', element); // selectează span-urile ce au atributul `title`
('li span', element); // selectează span-urile ce au ca parent li
</pre>
<h3>Performanța</h3>
<p>Diferența de performanță este destul de mică, dar există, fiind în favoarea metodei <code>.find()</code> (la o pagină cu 30 <code>div</code>-uri este o diferență de ~0.252ms între metode). Pe de altă parte, dacă folosești <code>.find()</code> de câteva zeci de ori, te pricopsești cu câțiva kb în plus. Sigur, vorbesc de scripturi mari, nu 10-20 linii de cod. <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4>Resurse</h4>
<ol>
<li><a href="http://api.jquery.com/each/">.each()</a></li>
<li><a href="http://api.jquery.com/find/">.find()</a></li>
</ol>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/1387/frontend-developer/traversarea-obiectelor-in-jquery/'>Traversarea obiectelor în jQuery</a>. <br/>
	<a href='http://www.iamntz.com/1387/frontend-developer/traversarea-obiectelor-in-jquery/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/1387/frontend-developer/traversarea-obiectelor-in-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Două coloane la preț de una</title>
		<link>http://www.iamntz.com/740/frontend-developer/doua-coloane-la-pret-de-una/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/740/frontend-developer/doua-coloane-la-pret-de-una/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 20:30:58 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=740</guid>
		<description><![CDATA[Cred că una din provocările vieții de front end developer este să faci o listă cu&#8230; Două coloane. În teorie, este simplu: La o listă de forma: Bagi -ul ăsta: De ce în teorie? Pentru că lista nu va arăta &#8211; cum e normal, de altfel &#8211; ca o listă pe două coloane ci ca [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/740/frontend-developer/doua-coloane-la-pret-de-una/'>Două coloane la preț de una</a>. <br/>
	<a href='http://www.iamntz.com/740/frontend-developer/doua-coloane-la-pret-de-una/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Cred că una din provocările vieții de front end developer este să faci o listă cu&#8230; Două coloane. În teorie, este simplu:</p>
<p>La o listă de forma:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;ol&gt;
	&lt;li&gt;1&lt;/li&gt;
	&lt;li&gt;2&lt;/li&gt;
	&lt;li&gt;3&lt;/li&gt;
	&lt;li&gt;4&lt;/li&gt;
	&lt;li&gt;5&lt;/li&gt;
&lt;/ol&gt;
</pre>
<p>Bagi <acronym title="Cascading Style Sheet - http://w3.org">CSS</acronym>-ul ăsta:</p>
<pre class="brush: css; title: ; notranslate">
li {
	width:50%;
	float:left
}
</pre>
<p>De ce în teorie? Pentru că lista nu va arăta &#8211; cum e normal, de altfel &#8211; ca o listă pe două coloane ci ca una în zig-zag:</p>
<pre class="brush: xml; title: ; notranslate">
1 - 2
3 - 4
5
</pre>
<p>Ceea ce, între noi fie vorba, e cam nasol. Mai ales când vrei să afișezi o listă ordonată.</p>
<h3>Soluția</h3>
<p>jQuery, desigur!</p>
<pre class="brush: jscript; title: ; notranslate">
$('li').slice(0, Math.ceil($('li').length/2)).addClass('leftside'); // selectăm prima jumătate de listă și îi adăugăm o clasă
</pre>
<p>Și puțin CSS:</p>
<pre class="brush: css; title: ; notranslate">
li {
	width:50%;
	margin-left:50%;
}
li.leftside {
	float:left;
	clear:left;
	margin-left:0;
}
</pre>
<p>Și gata. Avem o listă cu două coloane.</p>
<div class="demoDownload"><a href="/experiments/lista2coloane.php" class="demoLink">Demo</a></div>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/740/frontend-developer/doua-coloane-la-pret-de-una/'>Două coloane la preț de una</a>. <br/>
	<a href='http://www.iamntz.com/740/frontend-developer/doua-coloane-la-pret-de-una/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/740/frontend-developer/doua-coloane-la-pret-de-una/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Peach slider</title>
		<link>http://www.iamntz.com/707/frontend-developer/peach-slider/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/707/frontend-developer/peach-slider/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 10:29:35 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Playground]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=707</guid>
		<description><![CDATA[Am avut nevoie de un slider drăguț, care să nu fie la fel ca restul de 129832987 slidere existente online. Prin urmare, m-am gândit să reproduc în js un efect folosit mai mult în flash. Prin urmare&#8230; A ieșit Peach Slider. De ce Peach Slider? În principiu pentru că&#8230; Aveam trei piersici pe birou. Iar [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/707/frontend-developer/peach-slider/'>Peach slider</a>. <br/>
	<a href='http://www.iamntz.com/707/frontend-developer/peach-slider/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Am avut nevoie de un slider drăguț, care să nu fie la fel ca restul de 129832987 slidere existente online. Prin urmare, m-am gândit să reproduc în js un efect folosit mai mult în flash. Prin urmare&#8230; A ieșit Peach Slider.</p>
<img class="amazonImage" src="http://content.iamntz.com.s3.amazonaws.com/iamntz.com/images/peach.slider.jpg" alt="" />
<p>De ce Peach Slider? În principiu pentru că&#8230; Aveam trei piersici pe birou. Iar altceva nu prea mi-a venit în cap <img src='http://www.iamntz.com/wp-includes/images/smilies/biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div class="demoDownload"><a href="http://iamntz.com/experiments/peach.slider/" class="demoLink">Demo</a><a href="http://content.iamntz.com.s3.amazonaws.com/iamntz.com/peach.slider.rar" class="downloadLink">Download</a></div>
<p>Așadar&#8230; Impresii? Sugestii? <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Update</h3>
<ul>
<li>Problema cu link-urile suprapuse s-a rezolvat;</li>
<li><a href="http://twitter.com/OliviuStoian/statuses/16609468222">Merge și pe iPhone</a></li>
</ul>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/707/frontend-developer/peach-slider/'>Peach slider</a>. <br/>
	<a href='http://www.iamntz.com/707/frontend-developer/peach-slider/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/707/frontend-developer/peach-slider/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Două resurse jQuery</title>
		<link>http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 09:23:11 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=693</guid>
		<description><![CDATA[De fapt trei, că am mai găsit între timp ceva interesant: jQuery Fundamentals. jQuery Essentials 10 Things I learned from jQuery source Da, știu că sunt lungi, că e mult de vizionat și de citit, dar merită
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/'>Două resurse jQuery</a>. <br/>
	<a href='http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>De fapt trei, că am mai găsit între timp ceva interesant: <a href="http://www.rebeccamurphey.com/jqfundamentals/">jQuery Fundamentals</a>.</p>
<h3>jQuery Essentials</h3>
<p>
	<p style='color:#ccc'>
		<strong>Atentie!</strong> Acest post contine elemente video sau javascript ce nu sunt vizibile în feed-ul RSS. <br/>
		Apasă <a href='http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/'>AICI</a> pentru a vedea versiunea integrală
	</p><object
	 id="__sse1254680" width="700" height="555"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jquery-essentials-090406094627-phpapp01&#038;rel=0&#038;stripped_title=jquery-essentials" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse1254680" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jquery-essentials-090406094627-phpapp01&#038;rel=0&#038;stripped_title=jquery-essentials" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="700" height="555"></embed></object><span id="more-693"></span></p>
<h3>10 Things I learned from jQuery source</h3>
<p>
	<p style='color:#ccc'>
		<strong>Atentie!</strong> Acest post contine elemente video sau javascript ce nu sunt vizibile în feed-ul RSS. <br/>
		Apasă <a href='http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/'>AICI</a> pentru a vedea versiunea integrală
	</p><object
	 width="700" height="555"><param name="movie" value="http://www.youtube.com/v/i_qE1iAmjFg&#038;hl=en_US&#038;fs=1&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/i_qE1iAmjFg&#038;hl=en_US&#038;fs=1&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="700" height="555"></embed></object></p>
<p>Da, știu că sunt lungi, că e mult de vizionat și de citit, dar merită <img src='http://www.iamntz.com/wp-includes/images/smilies/wink.gif' alt=';)' class='wp-smiley' /> </p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/'>Două resurse jQuery</a>. <br/>
	<a href='http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/693/frontend-developer/doua-resurse-jquery/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Afișează update-urile Twitter într-un widget</title>
		<link>http://www.iamntz.com/655/frontend-developer/afiseaza-update-urile-twitter-la-tine-pe-site/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/655/frontend-developer/afiseaza-update-urile-twitter-la-tine-pe-site/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 21:20:06 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=655</guid>
		<description><![CDATA[Cred că un feature destul de… căutat este „cum pun un widget de twitter pe blog/site?” Și oarecum pe bună dreptate, deoarece twitterul capătă din ce în ce mai multă atenție și pe … hai să zicem piața din Ro. Cea mai simplă metodă – dar nu neapărat și cea mai bună – ar fi [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/655/frontend-developer/afiseaza-update-urile-twitter-la-tine-pe-site/'>Afișează update-urile Twitter într-un widget</a>. <br/>
	<a href='http://www.iamntz.com/655/frontend-developer/afiseaza-update-urile-twitter-la-tine-pe-site/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Cred că un feature destul de… căutat este „cum pun un widget de twitter pe blog/site?” Și oarecum pe bună dreptate, deoarece twitterul capătă din ce în ce mai multă atenție și pe … hai să zicem piața din Ro. Cea mai simplă metodă – dar nu neapărat și cea mai bună – ar fi folosidea widget-ului <a href="http://twitter.com/goodies/widget_profile">oficial</a>. Dar hei, unde ar mai fi distracția? Incluzi aproximativ 30kb doar pentru twitter? Uhm… Mie nu mi se pare cea mai fericită alegere.</p>
<p>Prin urmare, dacă ai deja inclus jQuery în pagină (sau orice altă librărie), poți încropi un astfel de widget în câteva linii de cod. Să vedem despre ce este vorba!<span id="more-655"></span></p>
<h3>Codul html</h3>
<p>Codul <acronym title="Hyper Text Markup Language - http://w3.org">HTML</acronym> este foarte simplu: o listă:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;ul id=&quot;twitterUpdates&quot;&gt;
	&lt;li&gt;Loading...&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Acel <code>li</code> este necesar din două motive: 1) un <code>ul</code> gol nu ar fi valid; 2) trebuie să înștiințăm utilizatorul cumva că se întâmplă&#8230; ceva <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Următoarele bucăți de cod sunt furate de undeva, dar&#8230; Nu prea mai știu de unde. Deși am vaga bănuială că direct de la twitter.</p>
<p>Funcția următoare transformă data din forma „Thu Jun 10 12:00:33 +0000 2010” în ceva mult mai drăguț, de genul „X hours ago”</p>
<pre class="brush: jscript; title: ; notranslate">
function relative_time(time_value) {
  var values = time_value.split(&quot; &quot;);
  time_value = values[1] + &quot; &quot; + values[2] + &quot;, &quot; + values[5] + &quot; &quot; + values[3];
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length &gt; 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  delta = delta + (relative_to.getTimezoneOffset() * 60);

  if (delta &lt; 60) {
    return 'less than a minute ago';
  } else if(delta &lt; 120) {
    return 'about a minute ago';
  } else if(delta &lt; (60*60)) {
    return (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta &lt; (120*60)) {
    return 'about an hour ago';
  } else if(delta &lt; (24*60*60)) {
    return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta &lt; (48*60*60)) {
    return '1 day ago';
  } else {
    return (parseInt(delta / 86400)).toString() + ' days ago';
  }
}
</pre>
<p>Funcția următoare prelucrează răspunsul JSON venit de la twitter și îl injectează în lista de care am pomenit puțin mai sus.</p>
<pre class="brush: jscript; title: ; notranslate">
function twitterCallback2(twitters) {
  var statusHTML = [];
  for (var i=0, len=twitters.length; i&lt;len; i++){
    var username = twitters[i].user.screen_name;
    var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^&quot;\s\&lt;\&gt;]*[^.,;'&quot;&gt;\:\s\&lt;\&gt;\)\]\!])/g, function(url) {
      return '&lt;a href=&quot;'+url+'&quot;&gt;'+url+'&lt;/a&gt;';
    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
      return  reply.charAt(0)+'&lt;a href=&quot;http://twitter.com/'+reply.substring(1)+'&quot;&gt;'+reply.substring(1)+'&lt;/a&gt;';
    });
    statusHTML.push('&lt;li&gt;&lt;span&gt;'+status+'&lt;/span&gt; &lt;a style=&quot;font-size:85%&quot; href=&quot;http://twitter.com/'+username+'/statuses/'+twitters[i].id+'&quot;&gt;'+relative_time(twitters[i].created_at)+'&lt;/a&gt;&lt;/li&gt;');
  }
  document.getElementById('twitterUpdates').innerHTML = statusHTML.join('');
}
</pre>
<p>Nu uita să schimbi <code>USER_ID</code> cu user-ul tău de twitter. De asemenea, acel „3” din coadă reprezintă câte twit-uri vrei să afișezi.</p>
<pre class="brush: jscript; title: ; notranslate">
$('#twitterUpdates').rdy(function() {
	$.getScript(&quot;http://twitter.com/statuses/user_timeline/USER_ID.json?callback=twitterCallback2&amp;count=3&quot;);
});
</pre>
<p>Despre funcția <code>rdy</code> am povestit un pic <a href="http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/">aici</a>.<br />
Și gata.</p>
<p>Demo poți vedea în sidebar-ul blogului <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/655/frontend-developer/afiseaza-update-urile-twitter-la-tine-pe-site/'>Afișează update-urile Twitter într-un widget</a>. <br/>
	<a href='http://www.iamntz.com/655/frontend-developer/afiseaza-update-urile-twitter-la-tine-pe-site/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/655/frontend-developer/afiseaza-update-urile-twitter-la-tine-pe-site/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Verifică dacă un element este disponibil</title>
		<link>http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 11:40:56 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=657</guid>
		<description><![CDATA[În unele situații vrei să execuți un script doar dacă un anumit element este diponibil. De exemplu, vrei să execuți o anumită bucată de cod în funcție de ce pagină este încărcată (presupunând că ai același fișier js peste tot, desigur). De ce să execuți un script doar dacă un element este disponibil? Foarte simplu! [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/'>Verifică dacă un element este disponibil</a>. <br/>
	<a href='http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>În unele situații vrei să execuți un script doar dacă un anumit element este diponibil. De exemplu, vrei să execuți o anumită bucată de cod în funcție de ce pagină este încărcată (presupunând că ai același fișier js peste tot, desigur).</p>
<p><strong>De ce să execuți un script doar dacă un element este disponibil?</strong> Foarte simplu! Din motive de performanță. jQuery nu știe dacă un element este în <acronym title="Document Object Model - http://w3.org">DOM</acronym> decât dacă traversează tot DOM-ul. Și dacă încerci să cauți mai multe elemente inexistente, poți avea probleme de performanță. Prin urmare am găsit următorul script:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery.fn.rdy = function(func){
	this.length &amp;&amp; func.apply(this);
	return this;
};
</pre>
<p>Și îl apelezi foarte simplu:</p>
<pre class="brush: jscript; title: ; notranslate">
$('div#verifica').rdy(function(){
//do stuff;
});
</pre>
<p>Simplu și eficient! <img src='http://www.iamntz.com/wp-includes/images/smilies/biggrin.gif' alt=':D' class='wp-smiley' /> </p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/'>Verifică dacă un element este disponibil</a>. <br/>
	<a href='http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/657/frontend-developer/verifica-daca-un-element-este-disponibil/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Două bucăți de cod jQuery</title>
		<link>http://www.iamntz.com/633/frontend-developer/doua-bucati-de-cod-jquery/?utm_source=subscriber&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.iamntz.com/633/frontend-developer/doua-bucati-de-cod-jquery/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 07:14:28 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=633</guid>
		<description><![CDATA[Detectează orice activitate : Dezactivează toate animațiile:
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/633/frontend-developer/doua-bucati-de-cod-jquery/'>Două bucăți de cod jQuery</a>. <br/>
	<a href='http://www.iamntz.com/633/frontend-developer/doua-bucati-de-cod-jquery/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Detectează orice activitate <acronym title="Asynchronous JavaScript + XML  - http://w3.org">AJAX</acronym>:</p>
<pre class="brush: jscript; title: ; notranslate">
$('&lt;div id=&quot;busy&quot;&gt;Loading...&lt;/div&gt;')
.ajaxStart(function() {$(this).show();})
.ajaxStop(function() {$(this).hide();})
.appendTo('body');
</pre>
<p>Dezactivează toate animațiile:</p>
<pre class="brush: jscript; title: ; notranslate">
$.fx.off = true;
</pre>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/633/frontend-developer/doua-bucati-de-cod-jquery/'>Două bucăți de cod jQuery</a>. <br/>
	<a href='http://www.iamntz.com/633/frontend-developer/doua-bucati-de-cod-jquery/#postcomment'>Adaugă un comentariu!</a>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/633/frontend-developer/doua-bucati-de-cod-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

