<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.8.4" -->
<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/"
	>

<channel>
	<title>http://blog.sLajax.com</title>
	<link>http://blog.slajax.com</link>
	<description>secure lightweight ajax solutions</description>
	<pubDate>Wed, 16 Dec 2009 07:39:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
			<item>
		<title>sLquantity v.1</title>
		<link>http://blog.slajax.com/2007/03/16/sl-quantity/</link>
        <customfield>quantity.gif</customfield>
		<comments>http://blog.slajax.com/2007/03/16/sl-quantity/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 13:23:48 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://slajax.com/blog/2007/03/16/sl-quantity/</guid>
		<description><![CDATA[So the idea was that we needed a form input that could be duplicated multiple times within the shopping cart. This allows the customer to add multiple items with different variations (ie: color / size) to the cart and then post it to the payment gateway. First of all, here is a visual example of the end case so you have a better idea what it is we wanted to achieve:




...and here is the code that makes it work:

var sLquantity = new Class({
	initialize:function(options){
		this.setOptions(options);
		if($(this.options.conId))
		$(this.options.conId).addClass(this.options.conClass.split('.')[1]);
		this.gather(options);
	},
	setOptions:function(options){
		this.options = Object.extend( { }, options &#124;&#124; {} );
	},
	gather:function(options){
	$$(options.plusClass).each(function(el){
			$(el).addEvent('mousedown',this.plusHref.pass([el], this));
		}.bind(this) );
	$$(options.minusClass).each(function(el){
			$(el).addEvent('mousedown', this.minusHref.pass([el], this));
		}.bind(this) );
	},
	fX:function(options, stack){
		introFx = new Fx.Style(stack, 'opacity', {duration: options.introDur, transition: Fx.Transitions.linear});
		introFx.start(0 ,1);
		stack = null;
	},
	minusHref:function(el){		
		if( $$(this.options.conClass).length > 1) 
				$$(this.options.conClass)[$$(this.options.conClass).length-1].remove();
	},
	plusHref:function(){			
		var stack = this.cloneObj(this.options.conClass).injectAfter( $$(this.options.conClass)[$$(this.options.conClass).length-1] ).setOpacity(0);
			stack.getChildren().each(function(el){
				if( $(el).getTag() == 'img')
					$(el).remove()
				}.bind(this) );
		this.fX(this.options, stack);
	},
	cloneObj:function(el){
		return $$(this.options.conClass)[0].clone();
	}
});	

			var sLquantityOpts = { 
			// sLquantity - v1.0 - 3:13 PM 15/03/2007 
			// @author: kc@slajax.com
					conId:'ShoppingDrops', // the container ID of the object to clone
					conClass:'.ShoppingDrops', // the class name of the same object (id will be phased out)
					minusClass:'.ShoppingMinus', // the button class of the element which adds new objects
					plusClass:'.ShoppingPlus', // the button class of the element which removes the last object added
					introDur: 200 // the duration of the fade in for a cloned element
					};	

		var quantity = new sLquantity(sLquantityOpts);


]]></description>
			<content:encoded><![CDATA[So the idea was that we needed a form input that could be duplicated multiple times within the shopping cart. This allows the customer to add multiple items with different variations (ie: color / size) to the cart and then post it to the payment gateway. First of all, here is a visual example of the end case so you have a better idea what it is we wanted to achieve:<br />

<img src="http://slajax.com/blog/wp-content/assets/imgs/sLquantity.jpg" class="reflect rheight10 ropacity60" width="500">


&#8230;and here is the code that makes it work:
<div class='codeWrapper'><div class='codeTitle'>javascript<span class='codeInstruct'>hover edges to scroll</span></div><code><pre>&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> sLquantity = <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Class</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span>
	initialize:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>options<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">setOptions</span><span style="color: #66cc66;">&#40;</span>options<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conId</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
		$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conId</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span>.<span style="color: #006600;">split</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'.'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">gather</span><span style="color: #66cc66;">&#40;</span>options<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>,
	setOptions:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>options<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span> = Object.<span style="color: #006600;">extend</span><span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #66cc66;">&#125;</span>, options || <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>,
	gather:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>options<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
	$$<span style="color: #66cc66;">&#40;</span>options.<span style="color: #006600;">plusClass</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
			$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'mousedown'</span>,<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">plusHref</span>.<span style="color: #006600;">pass</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>el<span style="color: #66cc66;">&#93;</span>, <span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
	$$<span style="color: #66cc66;">&#40;</span>options.<span style="color: #006600;">minusClass</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
			$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'mousedown'</span>, <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">minusHref</span>.<span style="color: #006600;">pass</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>el<span style="color: #66cc66;">&#93;</span>, <span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>,
	fX:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>options, stack<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		introFx = <span style="color: #003366; font-weight: bold;">new</span> Fx.<span style="color: #006600;">Style</span><span style="color: #66cc66;">&#40;</span>stack, <span style="color: #3366CC;">'opacity'</span>, <span style="color: #66cc66;">&#123;</span>duration: options.<span style="color: #006600;">introDur</span>, transition: Fx.<span style="color: #006600;">Transitions</span>.<span style="color: #006600;">linear</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
		introFx.<span style="color: #006600;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">0</span> ,<span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#41;</span>;
		stack = <span style="color: #003366; font-weight: bold;">null</span>;
	<span style="color: #66cc66;">&#125;</span>,
	minusHref:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>		
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span> $$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">length</span> &gt; <span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#41;</span> 
				$$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#91;</span>$$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">length</span>-<span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>,
	plusHref:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>			
		<span style="color: #003366; font-weight: bold;">var</span> stack = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">cloneObj</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectAfter</span><span style="color: #66cc66;">&#40;</span> $$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#91;</span>$$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">length</span>-<span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">setOpacity</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #66cc66;">&#41;</span>;
			stack.<span style="color: #006600;">getChildren</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span> $<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getTag</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #3366CC;">'img'</span><span style="color: #66cc66;">&#41;</span>
					$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#125;</span>.<span style="color: #006600;">bind</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">fX</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>, stack<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>,
	cloneObj:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">return</span> $$<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">options</span>.<span style="color: #006600;">conClass</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">clone</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;	
&nbsp;
			<span style="color: #003366; font-weight: bold;">var</span> sLquantityOpts = <span style="color: #66cc66;">&#123;</span> 
			<span style="color: #009900; font-style: italic;">// sLquantity - v1.0 - 3:13 PM 15/03/2007 </span>
			<span style="color: #009900; font-style: italic;">// @author: kc@slajax.com</span>
					conId:<span style="color: #3366CC;">'ShoppingDrops'</span>, <span style="color: #009900; font-style: italic;">// the container ID of the object to clone</span>
					conClass:<span style="color: #3366CC;">'.ShoppingDrops'</span>, <span style="color: #009900; font-style: italic;">// the class name of the same object (id will be phased out)</span>
					minusClass:<span style="color: #3366CC;">'.ShoppingMinus'</span>, <span style="color: #009900; font-style: italic;">// the button class of the element which adds new objects</span>
					plusClass:<span style="color: #3366CC;">'.ShoppingPlus'</span>, <span style="color: #009900; font-style: italic;">// the button class of the element which removes the last object added</span>
					introDur: <span style="color: #CC0000;">200</span> <span style="color: #009900; font-style: italic;">// the duration of the fade in for a cloned element</span>
					<span style="color: #66cc66;">&#125;</span>;	
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> quantity = <span style="color: #003366; font-weight: bold;">new</span> sLquantity<span style="color: #66cc66;">&#40;</span>sLquantityOpts<span style="color: #66cc66;">&#41;</span>;</pre></code></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2007/03/16/sl-quantity/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
