<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Life of a geek and a part-time poet</title>
	<atom:link href="http://yoavniran.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://yoavniran.wordpress.com</link>
	<description>Yoav Niran&#039;s Geeky stuff, Poetry, Programming, Futurama and Life...</description>
	<lastBuildDate>Tue, 24 Jan 2012 16:00:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='yoavniran.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Life of a geek and a part-time poet</title>
		<link>http://yoavniran.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://yoavniran.wordpress.com/osd.xml" title="Life of a geek and a part-time poet" />
	<atom:link rel='hub' href='http://yoavniran.wordpress.com/?pushpress=hub'/>
		<item>
		<title>ImportanTweet &#8211; Tweets that matter to you</title>
		<link>http://yoavniran.wordpress.com/2012/01/15/importantweet-tweets-that-matter-to-you/</link>
		<comments>http://yoavniran.wordpress.com/2012/01/15/importantweet-tweets-that-matter-to-you/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 15:36:08 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Random]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[important]]></category>
		<category><![CDATA[importantweet]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=737</guid>
		<description><![CDATA[I am very happy to announce that today I'm officially making my project named ImportanTweet available on the web!

The idea behind ImportantTweet is to show the tweets that are important to you so if you follow a considerable number of accounts on Twitter and it becomes difficult to keep track and you feel like you miss on tweets you find interesting, IT is the tool for you.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=737&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><a href="http://www.importantweet.com"><img class="aligncenter" title="importantweet logo large" src="http://importantweet.com/images/logo-large.png" alt="logolarge" width="400" height="150" /></a></p>
<p>I am very happy to announce that today I&#8217;m officially making my project named <strong><a title="ImportanTweet" href="http://www.importantweet.com" target="_blank">ImportanTweet </a></strong>available on the web!</p>
<p>The idea behind <strong>ImportantTweet</strong> is to show the tweets that are important to you so if you follow a considerable number of accounts on Twitter and it becomes difficult to keep track and you feel like you miss on tweets you find interesting, <strong>IT</strong> is the tool for you.</p>
<p><span id="more-737"></span></p>
<p><strong>IT</strong> uses an engine that evaluates the latest tweets in your home stream and through its algorithm attempts to display tweets in the order it thinks will be most important to you rather than by chronological order, allowing you to quickly find the tweets the matter most to you.</p>
<p>If you&#8217;re like me, and follow over a hundred accounts on Twitter, it becomes very difficult to read every single tweet that passes through your stream. Even with your favorite Twitter client open at all times it&#8217;s not always possible, you may be in a meeting or on a plane or changing your daughter&#8217;s diaper and those important tweets will simply go by never to be seen again&#8230;</p>
<p>That is why I built <strong>ImportanTweet</strong>, so I don&#8217;t miss as much on Twitter as I have up until now. Of course <strong>IT</strong> is not perfect (yet) and it is going to be a learning experience both for me and the tool as I will be working on improving it.</p>
<h2></h2>
<h2>BETA</h2>
<p>Today I am releasing <strong>IT in beta</strong> (version 0.1) and in limited trial mode so it will not be open for everyone just yet. I will be sending invites to a few people to begin testing and collecting feedback and hopefully  soon will be able to improve and make it completely open for everybody.</p>
<h2></h2>
<h2>Browser Compatibility</h2>
<p>To make the tool as useful as possible I&#8217;ve made sure it works well on all major browsers: Firefox, Chrome, IE as well as on mobile devices such as iPhone, iPad (iOS 5) and Android (2.3). so you can use it on your prefered device at all times.</p>
<h2></h2>
<h2>Looks</h2>
<p>This is how the site looks like:</p>
<p><a href="http://yoavniran.files.wordpress.com/2012/01/importantweet-v0-1.png"><img class="aligncenter  wp-image-739" title="importantweet v0.1" src="http://yoavniran.files.wordpress.com/2012/01/importantweet-v0-1.png?w=767&#038;h=395" alt="importantweet" width="767" height="395" /></a></p>
<p>I&#8217;ve attempted to give it a clean and simple design so the focus remains on the tweets and nothing else.</p>
<h2></h2>
<h2>Teach IT</h2>
<p>The bar at the top of the page contains a few options, click or hover over it to show them. Click the <a href="http://yoavniran.files.wordpress.com/2012/01/info.png"><img class="wp-image-741 alignnone" title="IT info" src="http://yoavniran.files.wordpress.com/2012/01/info.png?w=36&#038;h=36" alt="info" width="36" height="36" /></a> button to show the information which contains explanations about these.</p>
<p>The most important option is the word-selection mode which lets you click on any word within the tweets and store it as an &#8220;Important Word&#8221; which will let the engine know that you are interested in future tweets that contain these words.</p>
<p>You can also click on the avatar photo  of each user displayed in the list of tweets to promote or demote that user, this will tell the engine to make tweets from this user more relevant or less.</p>
<h2></h2>
<h2>Getting Started</h2>
<p>So <strong>ImportanTweet</strong> is starting out today and will continue to evolve. There are plenty of things I plan on adding and improving so make sure to come back here for updates and check out <strong><a title="ImportanTweet" href="http://www.importantweet.com" target="_blank">ImportanTweet.com</a></strong> and let me know what you think. You can comment here or send me an email at <a href="mailto:contact@importantweet.com" target="_blank">contact@importantweet.com</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/737/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/737/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/737/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/737/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/737/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/737/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/737/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=737&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2012/01/15/importantweet-tweets-that-matter-to-you/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>

		<media:content url="http://importantweet.com/images/logo-large.png" medium="image">
			<media:title type="html">importantweet logo large</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2012/01/importantweet-v0-1.png" medium="image">
			<media:title type="html">importantweet v0.1</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2012/01/info.png" medium="image">
			<media:title type="html">IT info</media:title>
		</media:content>
	</item>
		<item>
		<title>Why I Will Never Shop at Overstock.com Again</title>
		<link>http://yoavniran.wordpress.com/2012/01/13/why-i-will-never-shop-at-overstock-com-again/</link>
		<comments>http://yoavniran.wordpress.com/2012/01/13/why-i-will-never-shop-at-overstock-com-again/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 16:16:40 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[brand]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[customer care]]></category>
		<category><![CDATA[liveperson]]></category>
		<category><![CDATA[overstock]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=728</guid>
		<description><![CDATA[Three weeks ago I wanted to buy a present for my beautiful wife for having carried our recently born baby girl, she did it magnificently for over 9 months and I thought that a small token would be the least I can do to show my appreciation for bringing an amazing present into our lives.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=728&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Three weeks ago I wanted to buy a present for my beautiful wife for having carried our recently born baby girl, she did it magnificently for over 9 months and I thought that a small token would be the least I can do to show my appreciation for bringing an amazing present into our lives.</p>
<p>I looked online and found a pair of very nice white-gold earrings that I had hoped she will like on <strong>Overstock.com</strong>,  a site I had heard good things about and thought is a <strong>reputable brand</strong> that I could trust. The fact that they had <strong>online chat</strong> on their site bolstered that feeling as I&#8217;m a <strong><a title="LivePerson.com" href="http://www.liveperson.com" target="_blank">LivePerson </a></strong>employee I can now recognize and appreciate the value of live chat on a retail site. Overstock is not a LivePerson customer by the way (perhaps that should have tipped me off).</p>
<p>I have ordered the earrings on<strong> December 23rd, 2011</strong> and of course I knew they will take some time to arrive, after all it was just before Christmas but that was fine with me, I had hoped they will arrive a few days after the new year.</p>
<p>After they did not arrive for a while I looked at the confirmation email I received and used the tracking link they provided, this took me to the DHL tracking site which very &#8220;usefully&#8221; told me it couldn&#8217;t find the details for the tracking number. I thought to myself, alright, I will try in a few more days, surely it will appear soon.</p>
<p><span id="more-728"></span></p>
<p>So I have waited some more and still nothing, so a few days ago I contacted Overstock through their online chat. They kindly told me to <strong>wait 7 days</strong> (!) longer before contacting them again if the earrings hadn&#8217;t arrived by then. So I&#8217;ve waited a few more days until yesterday when the DHL site still couldn&#8217;t find the tracking details. I had resolved to contact Overstock again today even though it wasn&#8217;t 7 days yet and demand some explanations. Luckily, this morning the package with the earrings <strong>arrived</strong>.</p>
<p><strong>Oh joy!</strong> I thought to myself, finally, the earrings arrived and even before its time for my daughter to attend college. Gladly I opened the package and was very (very) surprised to find that they have sent me the wrong earrings, the ones I ordered were suppose to have a clear stone, what they sent were (<strong>disgusting</strong>) lime green!</p>
<p>So, I patiently waited for the overstock.com reps to come online today so I can demand they <strong>replace</strong> the earrings at once and hopefully give me some kind of <strong>compensation</strong> after such a terrible shopping experience.</p>
<p>This afternoon I started the chat and after apologizing the representative told me that all he could do for me is send me instructions on how to send the earrings back and receive a refund, if I wanted to actually receive the earrings I wanted I would need to order them <strong>again</strong>. When I told the rep that I was surprised they don&#8217;t offer any kind  of compensation he told me that they simply can&#8217;t offer anything to an <strong>international</strong> customer. So they can take orders from international customers but not compensate them when the <strong>blunder horribly</strong>.</p>
<p>So to summarize:</p>
<ul>
<li>Ordered earrings 3 weeks ago</li>
<li>Paid a lot more for shipping costs because I&#8217;m an international customer</li>
<li>Waited for 3 weeks for earrings to arrive</li>
<li>While waiting had no proper information on when they will actually arrive (not sure whos fault that is, overstock or DHL)</li>
<li>Overstock when contacted couldn&#8217;t tell me more than wait for more days, 7 days!</li>
<li>When finally earrings arrived they were the wrong ones!</li>
<li>I need to ship them back and get a refund (that for some reason is 70 pence less than what I paid)</li>
<li>If I want the earrings I actually paid for I need to go through the whole process again</li>
</ul>
<p>In short, I will <strong>never shop</strong> at overstock.com again, not because they&#8217;ve made a mistake with the product they sent, although that&#8217;s already infuriating but these things happen. It&#8217;s because their customer care is <strong>seriously lacking</strong>. The reps I chatted with were friendly and sympathetic enough but hardly went out of their way to help and as an international customer I feel I&#8217;ve been completely <strong>neglected</strong> by their customer care that apparently doesn&#8217;t value me the same as an <strong>American</strong> customer.</p>
<p>Throughout the overstock site and even the chat they refer to me as &#8220;<strong>Valued Customer</strong>&#8221; but its one thing to say it and quite another to actually mean and behave like you mean it! As far as im concerned, they have done the bare minimum and nothing more, this is not a brand I would like to have any more dealings with.</p>
<p>Just for comparison, a couple of weeks ago I returned a jar of Pesto sauce to Sainsbury&#8217;s  (UK Supermarket) that costs around 2 pounds because it went bad too quickly, not only did I receive my money back, I also received a 5 pound voucher! More than 200% compensation on top of the refund&#8230;</p>
<p>Very interestingly I just received an email asking me to fill in a survey to help Overstock advance their &#8220;<strong>worldclass customer care</strong>&#8220;. I think they need to advance quite a lot before they can call their service that. Dont worry, I will let them know!</p>
<p>Below is the full transcript from my last chat with overstock:</p>
<p><span style="color:red;">Cody</span>: <span style="color:#ff0000;">Hi, my name is Cody. How may I help you?</span><span style="color:blue;"><span style="color:blue;"><span class="rn_UserTextPrefix"><br />
</span></span></span></p>
<p><span style="color:blue;"><span style="color:blue;"><span class="rn_UserTextPrefix">Valued Customer</span>: hi</span></span></p>
<div id="rn_ChatTranscript_6" class="rn_ChatTranscript"><span style="color:red;"><span style="color:red;"><span style="color:red;">Cody</span>: Hi there.</span></span></div>
<div class="rn_ChatTranscript"><span id="1329143104000" style="color:blue;"><span class="rn_UserTextPrefix"><br />
Valued Customer</span>: today i finally received the earrings ive ordered from you &#8211; order: ******** after 3 weeks!<br />
</span><span id="1329143125000" style="color:blue;"><br />
<span class="rn_UserTextPrefix"> Valued Customer</span>: i was quite surprised to find that what i received is not what ive ordered<br />
</span><span id="1329143172000" style="color:red;"><br />
<span style="color:red;"> Cody</span>: I&#8217;m sorry to hear that you have received wrong item. I apologize for the inconvenience caused.<br />
</span><span style="color:red;"><span style="color:red;"><br />
<span style="color:red;"> Cody</span>: For security purposes, could you please verify the full name and billing address, including the city, state and zip code?</span></span></div>
<div class="rn_ChatTranscript"><span style="color:blue;"><span style="color:blue;"><span class="rn_UserTextPrefix"><br />
Valued Customer</span>: sure</span></span></div>
<div class="rn_ChatTranscript"></div>
<div class="rn_ChatTranscript"><span style="color:blue;"><span style="color:blue;"><span class="rn_UserTextPrefix">Valued Customer</span>: its an int. order btw</span></span></div>
<div class="rn_ChatTranscript">
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: yoav  niran</span></p>
<p><span style="color:blue;"><span style="color:blue;"><span class="rn_UserTextPrefix">Valued Customer</span>: ****************</span></span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: uk</span></p>
<div class="rn_ChatTranscript"><span style="color:red;"><span style="color:red;"><span style="color:red;">Cody</span>: Okay, I&#8217;m a international representative.</span></span></div>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: great</span></p>
<p><span style="color:red;"><span style="color:red;"><span style="color:red;">Cody</span>: Since you have received a wrong item, I will help you with the return for a full refund and you will have to re-order the item to receive a correct item.</span></span><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: i have to say im very disappointed</span></p>
<p><span style="color:blue;"><span style="color:blue;"><span class="rn_UserTextPrefix">Valued Customer</span>: not only did i have to wait for this long to receive what i bought but now i have to do that all over again?</span></span><span style="color:#ff0000;">Cody: I completely understand your concern, please accept my apologies for the inconvenience.</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: how do you even send the wrong product, very unproffesional, i know its not your fault but it looks really bad</span></p>
<p><span style="color:#ff0000;">Cody:I will help you with the free return shipping label via email.</span></p>
<p><span id="1329143710000" style="color:red;"><span style="color:red;">Cody</span>: *to return the wrong item.<br />
</span><span style="color:red;"><span style="color:red;"><br />
<span style="color:red;"> Cody</span>:  Click here to view our International Return Policy</span></span><span style="color:#ff0000;">Cody: Shall I go ahead and setup the return on this item and provide you the return instructions through this chat?</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: yes please</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: im surprised you dont offer any kind of compensation after such a bad experience&#8230;</span></p>
<p><span style="color:#ff0000;">Cody: I understand that it is a very bad experience, but we do not have any option to issue compensation for the international orders.</span></p>
<p><span style="color:#ff0000;">Cody: What is the email address that you would like us to send the return instructions to?</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: *****@gmail.com</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: sorry, thats a very bad answer.</span></p>
<p><span style="color:red;"><span style="color:red;"><span style="color:red;">Cody</span>: I have setup the return on the wrong item that you received for refund.</span></span><span style="color:#ff0000;">Cody: We will email the return instructions to you at your email address ( ***@gmail.com ) used to register with us and you should receive it within 24 hours.</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: so ive ordered from you, paid a lot more for shipping, waited 3 weeks, didnt get the product ive  ordered and you cant offer me anything? does that sound like it make any sense?</span></p>
<p><span style="color:#ff0000;">Cody: I agree to what you said. However we will not be able to offer a discount on the international orders. I sincerely apologize for the inconvenience caused to you.</span></p>
<p><span style="color:#ff0000;">Cody: We will notify you via (****@gmail.com) email address with the details of your refund.</span></p>
<p><span style="color:#ff0000;">Cody: You will receive your refund via the form of payment that you used.</span></p>
<p><span style="color:#ff0000;">Cody: Are there any further questions for me?</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: ok.</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: no more questions.</span></p>
<p><span style="color:#0000ff;"><span class="rn_UserTextPrefix">Valued Customer</span>: i can tell you that you have lost me as a customer forever though</span></p>
<p><span style="color:#ff0000;">Cody: I&#8217;m sorry to hear that, but you are always welcome to Overstock.com.</span></p>
<p><span style="color:red;"><span style="color:red;"><span style="color:red;">Cody</span>: Thank you for contacting O.co, Overstock.com&#8217;s shortcut.</span></span></p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/728/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=728&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2012/01/13/why-i-will-never-shop-at-overstock-com-again/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>
	</item>
		<item>
		<title>jQuery Fade In and Fade Out with one method</title>
		<link>http://yoavniran.wordpress.com/2011/11/18/jquery-fade-in-and-fade-out-with-one-method/</link>
		<comments>http://yoavniran.wordpress.com/2011/11/18/jquery-fade-in-and-fade-out-with-one-method/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 12:46:28 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[fade in]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=722</guid>
		<description><![CDATA[In many occurrences i found myself wanting to fade in an item and then immediately fade it out as a way to convey that something happened in a non-obtrusive way.
Easy as it is to do I still find it annoying that i have to call two separate methods for an action i wish to be done as one so naturally since it is so easy to extend jQuery I wrote a little extension that does just that.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=722&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In many occurrences i find myself wanting to fade in an element on the page and then immediately fade it out as a way to convey that something happened in a non-obtrusive way.</p>
<p>To do that I need to call the <a title="jQuery fadeIn Documentation " href="http://api.jquery.com/fadeIn/" target="_blank">fadeIn</a> and <a title="jQuery fadeOut Documentation" href="http://api.jquery.com/fadeOut" target="_blank">fadeOut</a> jQuery methods in sequence. This can be done easily because fadeIn accepts a callback as a second parameter which will be called when the animation completes.</p>
<p>Easy as it is to do I still find it annoying that i have to call two separate methods for an action i wish to be done as one so naturally since it is so easy to <a title="jQuery Plugins/Authoring" href="http://docs.jquery.com/Plugins/Authoring" target="_blank">extend jQuery</a> I wrote a little extension that does just that.</p>
<p><span id="more-722"></span></p>
<p>Here is the code:<br />
<!-- HTML generated using hilite.me --></p>
<div style="background:white;overflow:auto;width:auto;color:black;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="line-height:125%;margin:0;">(<span style="color:#0000aa;">function</span> ($)
{
	<span style="color:#aaaaaa;font-style:italic;">/*</span>
<span style="color:#aaaaaa;font-style:italic;"> This is a shortcut method for jQuery that does a fade In and then a fadeOut on the selected element(s)</span>
<span style="color:#aaaaaa;font-style:italic;"> It accepts the length of the In animation, the length of the Out animation and a handler to be called when both animations completed </span>

<span style="color:#aaaaaa;font-style:italic;"> Yoav Niran (http://wordpress.yoavniran.com)</span>
<span style="color:#aaaaaa;font-style:italic;"> */</span>
	<span style="color:#0000aa;">var</span> defaultDur = <span style="color:#009999;">1000</span>;

	$.fn.fadeInOut = <span style="color:#0000aa;">function</span>(inTime, outTime, callback)
	{
		<span style="color:#0000aa;">var</span> setDefaults = <span style="color:#0000aa;">function</span>()
		{
			inTime = outTime = defaultDur;<span style="color:#aaaaaa;font-style:italic;">//set a default 1 second for animation</span>
		};

		<span style="color:#0000aa;">if</span> (arguments.length == <span style="color:#009999;">0</span>)
		{
			setDefaults();
		}
		<span style="color:#0000aa;">else</span> <span style="color:#0000aa;">if</span> (arguments.length == <span style="color:#009999;">1</span>)
		{
			<span style="color:#0000aa;">if</span> (<span style="color:#0000aa;">typeof</span>( arguments[<span style="color:#009999;">0</span>]) === <span style="color:#aa5500;">"number"</span>)
			{
				outTime = inTime;
			}
			<span style="color:#0000aa;">else</span>
			{
				callback = inTime;
				setDefaults();
			}
		}
		<span style="color:#0000aa;">else</span> <span style="color:#0000aa;">if</span> (arguments.length == <span style="color:#009999;">2</span>)
		{
			<span style="color:#0000aa;">if</span> (<span style="color:#0000aa;">typeof</span>( arguments[<span style="color:#009999;">1</span>]) !== <span style="color:#aa5500;">"number"</span>)
			{
				callback = outTime;
				outTime = inTime;
			}
		}

		<span style="color:#0000aa;">var</span> c = <span style="color:#0000aa;">this</span>;

		<span style="color:#0000aa;">this</span>.fadeIn(inTime, <span style="color:#0000aa;">function</span>()
			{
				c.fadeOut(outTime,
					<span style="color:#0000aa;">function</span>()
					{
						<span style="color:#0000aa;">if</span> (callback &amp;&amp; <span style="color:#0000aa;">typeof</span>(callback) === <span style="color:#aa5500;">"function"</span>)
						{
							callback.apply(c);
						}
					})
			});
	};
} (jQuery));</pre>
</div>
<p>To use it you just need to add this code somewhere on your page or (preferably) in a separate JS file as long as its after the inclusion of jQuery and before you intend to use it.</p>
<p>Once you&#8217;ve added this code using the function is the same as using any jQuery method.</p>
<p>The new method that will be added to jQuery is called: <span style="text-decoration:underline;"><strong><em>fadeInOut</em></strong></span> and it accepts 3 (optional) arguments: inTime, outTime and callback.</p>
<p>The <strong>inTime</strong> is the duration of the fadeIn animation.</p>
<p>The <strong>outTime</strong> is the duration of the fadeOut animation.</p>
<p>The <strong>callback</strong> is a function to be called when both animations complete.</p>
<p>A few examples of using the fadeInOut method:<br />
<!-- HTML generated using hilite.me --></p>
<div style="background:white;overflow:auto;width:auto;color:black;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="line-height:125%;margin:0;">$(<span style="color:#aa5500;">"#myElement"</span>).fadeInOut(); <span style="color:#aaaaaa;font-style:italic;">//use 1 second default</span>

$(<span style="color:#aa5500;">"#myElement"</span>).fadeInOut(<span style="color:#009999;">500</span>); <span style="color:#aaaaaa;font-style:italic;">//use half a second for fade in and out</span>

$(<span style="color:#aa5500;">"#myElement"</span>).fadeInOut(<span style="color:#009999;">500</span>, <span style="color:#009999;">1500</span>); <span style="color:#aaaaaa;font-style:italic;">//use half a second for fade in and a second and a half for fade out</span>

$(<span style="color:#aa5500;">"#myElement"</span>).fadeInOut(<span style="color:#009999;">500</span>, <span style="color:#009999;">1500</span>, <span style="color:#0000aa;">function</span> () { alert(<span style="color:#aa5500;">"finished"</span>); }); <span style="color:#aaaaaa;font-style:italic;">//set in and out durations and a callback method</span></pre>
</div>
<p>There are 4 ways you can call the method:</p>
<p>1) No arguments &#8211; The fade in and out will both be called with a default duration of 1 second.</p>
<p>2) One argument &#8211; If its a number it will be used as the duration for both in and out animations, if its a function it will be used as the callback and the 1 second default will be applied.</p>
<p>3) Two arguments &#8211; If both are numbers they will be used for the duration of the in and out animation respectively. If the second is a function it will be used as the callback and the first number will be used as the duration for both animations.</p>
<p>4) Three arguments &#8211; first two arguments will be used for the animations in and out duration respectively. The 3rd argument will be used for the callback.</p>
<p>You can easily change the default duration time by changing the value passed to the &#8220;defaultDur&#8221; variable.</p>
<p>Hope you find it useful.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/722/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/722/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/722/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/722/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/722/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/722/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/722/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=722&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/11/18/jquery-fade-in-and-fade-out-with-one-method/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>
	</item>
		<item>
		<title>More Updates to the List Quick Helper</title>
		<link>http://yoavniran.wordpress.com/2011/08/27/more-updates-to-the-list-quick-helper/</link>
		<comments>http://yoavniran.wordpress.com/2011/08/27/more-updates-to-the-list-quick-helper/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 19:40:17 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tridion]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tridion2011]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=689</guid>
		<description><![CDATA[Again I've put some focus on the List Quick Helper which I think is a valuable extension on its on but also is a good platform for further extensibility. Extensibility not necessarily created by myself.
With this update to the helper I've included two major additions to functionality.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=689&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Again I&#8217;ve put some focus on the <a title="The List Quick Helper Tridion extension gets an update" href="http://yoavniran.wordpress.com/2011/06/15/the-list-quick-helper-tridion-extension-gets-an-update/">List Quick Helper</a> which I think is a valuable extension on its on but also is a good platform for further extensibility. Extensibility not necessarily created by myself.</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/08/helper-view.png"><img class="aligncenter size-full wp-image-698" title="Helper View" src="http://yoavniran.files.wordpress.com/2011/08/helper-view.png?w=600" alt=""   /></a></p>
<p>With this update to the helper I&#8217;ve included two major additions to functionality.</p>
<p><span id="more-689"></span></p>
<h2>The Tool Base</h2>
<p>Already from the first version of the Helper I implemented several tools to accompany the useful information the helper exposes. These tools are represented using the buttons at the bottom of the helper:</p>
<p>Quick reminder, these tools are:</p>
<ol>
<li>Rename &#8211; quickly rename an item without having to open its editing dialog.</li>
<li>Goto &#8211; quickly navigate to an item using its TCM URI</li>
<li>Quick Folder / SG &#8211; quickly create a new folder or structure group by supplying the title (and directory) alone.</li>
<li>Batch publish &#8211; batch items to be published at once regardless of where they are stored in a publication.</li>
</ol>
<p><a href="http://yoavniran.files.wordpress.com/2011/08/helper-tools.png"><img class="aligncenter size-full wp-image-701" title="Helper Tools" src="http://yoavniran.files.wordpress.com/2011/08/helper-tools.png?w=600" alt=""   /></a></p>
<p>Up until now the tools&#8217; code was embedded into the Helper&#8217;s script so separating them would not have been an easy task. With the previous version I&#8217;ve made it possible to disable the tools using the <a title="One Extension to Rule them All" href="http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all/">Extensions Manager</a> configuration interface.</p>
<p>This time I finally got to achieve something I wanted to do already from the start which is to completely separate the tools from the helper&#8217;s implementation so its first, very easy to remove a tool if needed and secondly, and mainly to allow the creation of new tools without any changes to the existing code.</p>
<p>Now this is the case, all of the existing tools are implemented as individual objects and can easily be added and removed simply by modifying the extension resource&#8217;s XML configuration:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/08/helper-configuration.png"><img class="aligncenter size-full wp-image-709" title="Helper configuration" src="http://yoavniran.files.wordpress.com/2011/08/helper-configuration.png?w=600&#038;h=308" alt="Helper configuration" width="600" height="308" /></a></p>
<p>As you can see in the configuration snapshot above, each tool is now implemented in its own JS file.</p>
<p>In order to implement a tool you will need to inherit from a base class I include with the helper called: <em><span style="color:#000080;">Extensions.ListQuickHelper.ToolBase.</span></em></p>
<p>To do that in your Javascript file you will need to add some specific lines to the constructor of your tool class:<br />
<span style="color:black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"><br />
Type.registerNamespace(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Extensions.ListQuickHelper.Tools&#8221;</span>);</span></p>
<p>Extensions.ListQuickHelper.Tools.NewTool <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> <span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">function</span> Tools$NewTool()<br />
{<br />
Tridion.OO.enableInterface(<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>, <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Extensions.ListQuickHelper.Tools.NewTool&#8221;</span>);<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>.addInterface(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Extensions.ListQuickHelper.ToolBase&#8221;</span>, [<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">"NewTool"</span>]);</p>
<p><span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//additional code for the constructor goes here&#8230;</span><br />
}</p>
<p>Following the OO conventions of the GUI framework, you use the &#8220;addInterface&#8221; method to implement the ToolBase class and using the second parameter you specify the name of the tool. Its important to do that and choose a unique name.</p>
<p>There are a few methods you will need to override in your implementation of a tool. These are:</p>
<p><strong>initialize</strong> &#8211; In this method you call <em><span style="color:#0000ff;">this._setEngine</span></em> passing the engine object which is passed to the initialize method. You can also register your tool&#8217;s configuration values with the Extensions Manager using the <em><span style="color:#0000ff;">this._addConfigField</span></em> method.</p>
<p><strong>show</strong> &#8211; This method is called whenever the helper is shown, typically when an item has been selected in the list view, you can implement your logic to decide whether to show the tool&#8217;s button or not. You can use the props object passed to the show method which has the following properties: ItemType, ItemId, ParentType, ParentId, IsMulti.</p>
<p><strong>_helperHtmlLoaded</strong> &#8211; This method is called when the helper&#8217;s engine loads the HTML for the helper interface.  this is the point in which you should load the HTML for your tool. For that there are two methods available on the base class: <span style="color:#0000ff;">_<em>registerToolHtmlFromUrl</em></span> or <span style="color:#0000ff;">_<em>registerToolHtml</em>,</span> the former accepting a URL of a server page containing the needed HTML, the  latter accepting a HTML string literal.</p>
<p>If your tool requires a button, which in most cases it will, you should at this point also call the <em><span style="color:#0000ff;">_registerToolButton</span></em> method which accepts a few parameters: Title, Id, path to image, function to handle click event and lastly, the position (0 based) in which to insert the button.</p>
<p>This is how a basic handler will look like:<!-- HTML generated using hilite.me --></p>
<div style="line-height:125%;margin:0;">Extensions.ListQuickHelper.Tools.NewTool.prototype._helperHtmlLoaded <span style="color:#666666;">=</span> <span style="color:#aa22ff;font-weight:bold;">function</span> ()<br />
{<br />
<span style="color:#aa22ff;font-weight:bold;">var</span> p <span style="color:#666666;">=</span> <span style="color:#aa22ff;font-weight:bold;">this</span>.properties;<br />
<span style="color:#aa22ff;font-weight:bold;">var</span> context <span style="color:#666666;">=</span> <span style="color:#aa22ff;font-weight:bold;">this</span>;<span style="color:#aa22ff;font-weight:bold;"><br />
var</span> html <span style="color:#666666;">=</span> <span style="color:#aa22ff;font-weight:bold;">this</span>._registerToolHtmlFromUrl($extUtils.expandPath(<span style="color:#bb4444;">&#8220;/client/commands/ListQuickHelper/Tools/lqhTool_NewTool.aspx&#8221;</span>));this._registerToolButton(<span style="color:#bb4444;">&#8220;New Tool&#8221;</span>, <span style="color:#bb4444;">&#8220;helperToolNewTool&#8221;</span>,<br />
$extUtils.expandPath(<span style="color:#bb4444;">&#8220;/client/commands/ListQuickHelper/styles/icons/newtool.png&#8221;</span>),<br />
<span style="color:#aa22ff;font-weight:bold;">function</span> (props) { <span style="color:#008800;font-style:italic;">//handle click event</span><br />
}, <span style="color:#666666;">2</span>);};</div>
<div style="line-height:125%;margin:0;">After defining your class don&#8217;t forget to add the following line to the end of your JS file:</div>
<pre style="line-height:125%;margin:0;">$lqht.registerTool(Extensions.ListQuickHelper.Tools.NewTool);</pre>
<p>Without it the tool will not be added to the helper.</p>
<p>There are few more methods on the base class which may be quite useful, you can have a look at the 5 tools that come with the helper for some concrete examples. Now some of you may say; &#8220;5 tools? but you only listed 4 earlier!&#8221; To this I say: You are absolutely correct in your arithmetic objection as this brings us to the next topic:</p>
<h2>The Project Info Tool</h2>
<p>A few weeks ago, Frank (<a title="Puf on Twitter" href="http://twitter.com/puf" target="_blank">@puf</a>) ran an idea by me: wouldn&#8217;t it be nice to have a similar feature in Tridion to the &#8220;readme&#8221; reader in <a title="github" href="https://github.com/" target="_blank">Github</a>:</p>
<p><img class="aligncenter size-full wp-image-697" title="github readme" src="http://yoavniran.files.wordpress.com/2011/08/github-readme.png?w=600" alt=""   /></p>
<p>Github relies on the file name (&#8220;readme.textile&#8221;), if it finds one it will simply show its content on the project page so the creator of the project can add some information there. This is a very handy feature and one that can also translate very nicely to Tridion so a folder or structure group can define its own &#8220;readme&#8221; text to show some useful information to editors or explain the purpose of the organizational item.</p>
<p>Frank had the idea of implementing this on top of the List Quick Helper which I immediately liked (unsurprisingly). So I&#8217;ve set to work on this little feature and this is the result:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/08/project-info-example.png"><img class="aligncenter size-full wp-image-699" title="Project Info example" src="http://yoavniran.files.wordpress.com/2011/08/project-info-example.png?w=600&#038;h=244" alt="" width="600" height="244" /></a></p>
<p>As you can see, the information is loaded into the helper&#8217;s interface beneath the typical information about the selected item. The information is retrieved from the metadata of the folder in this case but can easily be found on a Structure Group as well.</p>
<p>When minimized the project info becomes another button in the tools bar:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/08/project-info-minimized.png"><img class="aligncenter size-full wp-image-705" title="project info minimized" src="http://yoavniran.files.wordpress.com/2011/08/project-info-minimized.png?w=600" alt="project info minimized"   /></a></p>
<p>I&#8217;ve implemented this feature as another tool(the 5th tool) which was fairly easy to do after building the ToolBase. This tool does require the <a title="One Extension to Rule them All" href="http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all/">Extensions Manager </a>as it depends on some configuration:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/08/project-info-configuration.png"><img class="aligncenter size-full wp-image-702" title="Project Info Configuration" src="http://yoavniran.files.wordpress.com/2011/08/project-info-configuration.png?w=600&#038;h=321" alt="Project Info Configuration" width="600" height="321" /></a></p>
<p>The first option is whether to look for and show the project info, default is &#8220;no&#8221;. The second field is whether to continue looking for project info in a parent org item when none is found in the current parent, default is &#8220;no&#8221;. When this is enabled, the tool will continue to look for the info up to and including the current publication.<br />
The third field is the name of the metadata field that will contain the actual text for the info. This field can be included in any metadata schema that is attached to an organizational item such as a folder, structure group or publication.</p>
<p>Frank and I are looking forward to see how the community receives this new feature and how it will make use of it.</p>
<h2>download</h2>
<p>The new version of the helper with these new features can be downloaded <a title="Download List Quick Helper 1.5" href="http://www.mediafire.com/file/uekg1vtwct16qse/ListQuickHelper%201.5.zip" target="_blank">here</a>.</p>
<h2>On a Sad Note&#8230;</h2>
<p>With a sad heart Im finishing this post as this may be the last one I write about Tridion, at least for the foreseeable future and at least on the more technical side of things.</p>
<p>August is going to be my last month working for SDL Tridion. I will be moving to new challenges soon. Hopefully these will give me enough chances to continue blogging about programming and technology which I very much like to do. Unfortunately, building GUI extensions will probably not get a primary spot in my life from now on.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/689/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=689&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/08/27/more-updates-to-the-list-quick-helper/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/08/helper-view.png" medium="image">
			<media:title type="html">Helper View</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/08/helper-tools.png" medium="image">
			<media:title type="html">Helper Tools</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/08/helper-configuration.png" medium="image">
			<media:title type="html">Helper configuration</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/08/github-readme.png" medium="image">
			<media:title type="html">github readme</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/08/project-info-example.png" medium="image">
			<media:title type="html">Project Info example</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/08/project-info-minimized.png" medium="image">
			<media:title type="html">project info minimized</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/08/project-info-configuration.png" medium="image">
			<media:title type="html">Project Info Configuration</media:title>
		</media:content>
	</item>
		<item>
		<title>Poem: איך נפרדים</title>
		<link>http://yoavniran.wordpress.com/2011/07/21/poem-eich-nifradim/</link>
		<comments>http://yoavniran.wordpress.com/2011/07/21/poem-eich-nifradim/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 13:36:13 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Poetry]]></category>
		<category><![CDATA[Palma]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[poem]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=682</guid>
		<description><![CDATA[This one I've been thinking about for a few weeks. Finally got the chance to write it yesterday while waiting for my flight back home from Palma.

For my English readers, I apologize but no translation for now... Im not sure if I can do this poem justice in translation. The title I can loosely translate to: "How do we Part".<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=682&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This one I&#8217;ve been thinking about for a few weeks. Finally got the chance to write it yesterday while waiting for my flight back home from Palma.</p>
<p>For my English readers, I apologize but no translation for now&#8230; Im not sure if I can do this poem justice in translation. The title I can loosely translate to: &#8220;<strong>How do we Part</strong>&#8220;.</p>
<p>Hope you like it.</p>
<p><span id="more-682"></span></p>
<h2 style="text-align:right;"><span style="color:#000080;">~ איך נפרדים ~</span></h2>
<p style="text-align:right;">איך נפרדים</p>
<p style="text-align:right;">איך אומרים להתראות</p>
<p style="text-align:right;">כשאין עוד פעם עבורה לקוות</p>
<p style="text-align:right;">איזו מילה לסיום בוחרים</p>
<p style="text-align:right;">איך נפרדים ופשוט הולכים</p>
<p style="text-align:right;">איזה מגע בוחרים, איזה ליטוף שומרים</p>
<p style="text-align:right;">איזו דמעה מנציחים</p>
<p style="text-align:right;">?איך נפרדים</p>
<p style="text-align:right;">הגזע שעמד כה זקוף</p>
<p style="text-align:right;">ועכשיו הרוח מטלטלת ללא מרגוע</p>
<p style="text-align:right;">הגזע שעמד פעם והגן</p>
<p style="text-align:right;">שטמן בחובו נסיון של שנים וידע</p>
<p style="text-align:right;">עכשיו נותר אבוד ומסכן</p>
<p style="text-align:right;">הוא זה שהראה את הדרך</p>
<p style="text-align:right;">כעת איבד דרכו בחשיכה</p>
<p style="text-align:right;">כשעבר זמנה של השקיעה</p>
<p style="text-align:right;">.והאדום הפך שחור</p>
<p style="text-align:right;">איך נפרדים</p>
<p style="text-align:right;">מתי את היד מניחים</p>
<p style="text-align:right;">איך עוזבים ולאחור לא מסתכלים</p>
<p style="text-align:right;">איזו פעימה פשוט מחסירים</p>
<p style="text-align:right;">איך לא נופלים, איך ממשיכים</p>
<p style="text-align:right;">?איך נפרדים</p>
<p style="text-align:right;">אולי עם חיים חדשים</p>
<p style="text-align:right;">גרעין תקווה קטן מבטיחים</p>
<p style="text-align:right;">כששוב זמנה של זריחה מגיע</p>
<p style="text-align:right;">הצבעים חוזרים ללבלב</p>
<p style="text-align:right;">והכאב והשמחה מתערבבים בלב</p>
<p style="text-align:right;">אולי להתחלה חדשה מקווים</p>
<p style="text-align:right;">לפריחה מחודשת מייחלים</p>
<p style="text-align:right;">,אולי ככה</p>
<p style="text-align:right;">.נפרדים</p>
<pre><strong><strong>Written: 20/07/2011, Palma de Mallorca, Spain.</strong></strong></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/682/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/682/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/682/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/682/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/682/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/682/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/682/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=682&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/07/21/poem-eich-nifradim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>
	</item>
		<item>
		<title>Navigation History Tridion GUI Extension</title>
		<link>http://yoavniran.wordpress.com/2011/07/08/navigation-history-tridion-gui-extension/</link>
		<comments>http://yoavniran.wordpress.com/2011/07/08/navigation-history-tridion-gui-extension/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 16:50:32 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tridion]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=668</guid>
		<description><![CDATA[Those of us who use Tridion know that we usually jump from one location to another, spanning over different publications and sections within publications. For those cases, if we want to go back to a location we were working on before we need to locate it again in the tree, which can be quite a hassle. Especially in large environments.

So my extension will hopefully make it even simpler to work within the GUI in the manner I just specified.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=668&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ah! its Friday! And what better way to celebrate this day than with a nice GUI extension?</p>
<p>So here is my latest extension available for you to enjoy&#8230;</p>
<p>With 2011, the GUI received a new breadcrumb control which is a very useful way to quickly orient yourself of where you are in the system and making it easy to climb up the specific hierarchy you&#8217;re currently drilling through.</p>
<p>Of course, those of us who use Tridion know that we usually jump from one location to another, spanning over different publications and sections within publications. For those cases, if we want to go back to a location we were working on before we need to locate it again in the tree, which can be quite a hassle. Especially in large environments.</p>
<p>So my extension will hopefully make it even simpler to work within the GUI in the manner I just specified.</p>
<p>This extension adds 2 new buttons to the GUI right next to the breadcrumb. The buttons mimic the behavior of the browser keeping track of the places(folders, structure-groups, etc.) a user visits.</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/07/navigation-buttons.png"><img class="aligncenter size-full wp-image-669" title="Navigation buttons" src="http://yoavniran.files.wordpress.com/2011/07/navigation-buttons.png?w=600&#038;h=301" alt="Tridion GUI Navigation buttons" width="600" height="301" /></a><span id="more-668"></span></p>
<p>Its quite simple really. Anytime you click or navigate to a different location within the GUI a new entry will be added to the history list. When you click the back button <a href="http://yoavniran.files.wordpress.com/2011/07/back.png"><img class="alignnone size-full wp-image-670" title="back" src="http://yoavniran.files.wordpress.com/2011/07/back.png?w=600" alt="back"   /></a>you&#8217;ll be taken to the last place you visited and the entry will be moved to the forward list so you can go forward as well by clicking the <a href="http://yoavniran.files.wordpress.com/2011/07/forward.png"><img class="alignnone size-full wp-image-671" title="forward" src="http://yoavniran.files.wordpress.com/2011/07/forward.png?w=600" alt="forward"   /></a> button. Just like in the browser.</p>
<p>By right clicking on one of the buttons you will be able to see the entries stored in either the history or forward lists:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/07/back-list-view.png"><img class="aligncenter size-full wp-image-672" title="back list view" src="http://yoavniran.files.wordpress.com/2011/07/back-list-view.png?w=600" alt="back list view"   /></a></p>
<p>As can be expected (at least I think it can), the Navigation History extension makes use of the <a title="One Extension to Rule them All" href="http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all/">Extensions Manager</a> to control some of its behavior.</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/07/navigation-history-extensions-manager.png"><img class="aligncenter size-full wp-image-673" title="Navigation History - extensions manager" src="http://yoavniran.files.wordpress.com/2011/07/navigation-history-extensions-manager.png?w=600&#038;h=321" alt="Navigation History - extensions manager" width="600" height="321" /></a></p>
<p>The extension lets Administrators disable the functionality if needed so it will not be loaded and also control the number of items stored in the history list. By default this is 12 items. Don&#8217;t worry if you don&#8217;t have the Extensions Manager available, this extension will work without it just as well.</p>
<p>As you may have noticed the Navigation History is not actually an extension on its own but instead I&#8217;ve made it a part of the <a title="The List Quick Helper Tridion extension gets an update" href="http://yoavniran.wordpress.com/2011/06/15/the-list-quick-helper-tridion-extension-gets-an-update/">List Quick Helper</a> extension.</p>
<h1>Download</h1>
<p>If you&#8217;d like to take this extension for a spin, the code can be downloaded <a title="Download List Quick Helper 1.1" href="http://www.mediafire.com/file/zzc6d100kz85v9x/ListQuickHelper%201.1.zip" target="_blank">here</a>.</p>
<p><strong><span style="color:#ff0000;">Update: A newer version of the helper is available on this <a title="More Updates to the List Quick Helper" href="http://yoavniran.wordpress.com/2011/08/27/more-updates-to-the-list-quick-helper/">page</a>.</span></strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/668/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/668/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=668&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/07/08/navigation-history-tridion-gui-extension/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/07/navigation-buttons.png" medium="image">
			<media:title type="html">Navigation buttons</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/07/back.png" medium="image">
			<media:title type="html">back</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/07/forward.png" medium="image">
			<media:title type="html">forward</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/07/back-list-view.png" medium="image">
			<media:title type="html">back list view</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/07/navigation-history-extensions-manager.png" medium="image">
			<media:title type="html">Navigation History - extensions manager</media:title>
		</media:content>
	</item>
		<item>
		<title>The List Quick Helper Tridion extension gets an update</title>
		<link>http://yoavniran.wordpress.com/2011/06/15/the-list-quick-helper-tridion-extension-gets-an-update/</link>
		<comments>http://yoavniran.wordpress.com/2011/06/15/the-list-quick-helper-tridion-extension-gets-an-update/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 19:26:22 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Tridion]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=636</guid>
		<description><![CDATA[The helper loads within the list view of the main Tridion 2011 GUI and shows additional information about the selected item in the list so there is no need to open a new dialog window just to see the schema being used by a Component or the directory name of a Structure Group just to name a couple of examples.

When I released it the first time I considered it to be a beta as it was a little rushed. Today Im happy to announce that the Helper is now version 1.0 boasting a host of new features and improvements.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=636&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Back in October of last year I released the <a title="Not Just Another Tridion GUI Extension" href="http://yoavniran.wordpress.com/2010/10/24/not-just-another-tridion-gui-extension/">List Quick Helper</a>, Tridion 2011 extension, which, in the unlikely case you&#8217;ve forgotten, looks like this:</p>
<p><a href="http://yoavniran.files.wordpress.com/2010/10/helper-views.png"><img class="aligncenter size-full wp-image-487" title="List Quick Helper Item views" src="http://yoavniran.files.wordpress.com/2010/10/helper-views.png?w=600" alt="Tridion GUI Extension Helper Item views"   /></a></p>
<p>The helper loads within the list view of the main Tridion 2011 GUI and shows additional information about the selected item in the list so there is no need to open a new dialog window just to see the schema being used by a Component or the directory name of a Structure Group just to name a couple of examples.</p>
<p>When I released it the first time I considered it to be a beta as it was a little rushed. Today Im happy to announce that the Helper is all grown up now and at version 1.0, boasting a host of new features and improvements.</p>
<p><span id="more-636"></span></p>
<h2>New Features</h2>
<h3><strong>1.</strong></h3>
<p>A new slide/push feature lets you make the helper slide down so only its top is showing above the fold, so most of the time the list items are not hidden by the helper. Hovering the cursor or clicking on the helper will make it show again until the cursor leaves the helper&#8217;s surface.</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-slider-mode.png"><img class="aligncenter size-full wp-image-642" title="List Quick Helper Slider-mode" src="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-slider-mode.png?w=600" alt=""   /></a></p>
<h3>2.</h3>
<p>Complete integration with the Extensions Manager lets both normal and administrator users control different aspects of the extension.</p>
<p>Here are the options exposed on the Extensions Manager:</p>
<ul>
<li>Administrators can determine which tool is available or not out of the existing set: <strong>Quick</strong> <strong>Folder/SG Create</strong>, <strong>Rename</strong>, <strong>Goto</strong>, <strong>Batch Publishing</strong>.</li>
<li>Administrators can choose which groups of users in Tridion will the extension be available to.</li>
<li>Per user option determining whether the Helper will be turned on or off by default.</li>
<li>Per user option determining whether the Helper starts minimized.</li>
<li>Per user option determining whether the Helper starts in slider mode.</li>
<li>Per user option determining whether the publish batch will be cleared after sending items to be published.</li>
</ul>
<p><a href="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-extensions-manager.png"><img class="aligncenter size-full wp-image-643" title="List Quick Helper - Extensions Manager" src="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-extensions-manager.png?w=600" alt=""   /></a></p>
<p>By the way, the extension will work just fine if the EM isn&#8217;t available with all features enabled.</p>
<h3>3.</h3>
<p>With the first version I added the batch publish tool to the Helper which I understand people like allot. One of the things that bothered me about it though was that the Helper only supported a single item select which meant only being to able to add a single item to the batch each time. Well, no more! The Helper now supports multi-select and currently this is mainly for adding multiple items to the batch.<br />
In next versions I will add more info about shared values and properties between the selected items.</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-multiple-item-publish-batch.png"><img class="aligncenter size-full wp-image-644" title="List Quick Helper Multiple Item Publish Batch" src="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-multiple-item-publish-batch.png?w=600" alt=""   /></a></p>
<h3>4.</h3>
<p>I have now modified the helper so it also responds to clicks on the tree view and not only in the list. This also fixes the issue where the Helper will continue to show  the info of a folder or Structure Group which isn&#8217;t actually selected anymore.</p>
<h3>5.</h3>
<p>Added the namespace and root element values to the Helper data when a component is selected.</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-component-data.png"><img class="aligncenter size-full wp-image-646" title="List Quick Helper Component Data" src="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-component-data.png?w=600" alt=""   /></a></p>
<h3>6.</h3>
<p>This one is not particularly ground-breaking but thought it would be a nice touch; I&#8217;ve replaced the basic javascript dialogs with <a title="jQuery UI Dialogs" href="http://jqueryui.com/demos/dialog/" target="_blank">jQuery-UI</a> ones:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-jquery-dialogs.png"><img class="aligncenter size-full wp-image-647" title="List Quick Helper jquery Dialogs" src="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-jquery-dialogs.png?w=600" alt=""   /></a></p>
<h3>7.</h3>
<p>Additionally I&#8217;ve fixed some minor bugs along the way and have made some major code restructuring for better efficiency and better modularity of the code. I&#8217;ve also made sure there are no longer any hardcoded resource URLs where there shouldn&#8217;t be.</p>
<h2>Deployment &amp; Configuration</h2>
<p>The extension works much as it did in the previous version, however, the big re-work of the code I&#8217;ve done to the extension included changing the file names used by the extension. The extension configuration itself has changed a bit as well. If you have already used the Helper before I suggest removing all configuration and files and deploying the new files (available at the <a href="#dl">bottom</a>).</p>
<p>For a step by step explanation on how to deploy an extension such as this please see my previous article: <a title="Setting up a Tridion 2011 GUI extension in 8 steps" href="http://yoavniran.wordpress.com/2011/03/03/setting-up-a-tridion-gui-2011-extension-in-8-steps/">Setting up a Tridion 2011 GUI extension in 8 Steps</a>.</p>
<p>Make sure you have copied over all files from the /client/generic and /client/dependencies folders so you have their latest versions.</p>
<p>Very important to note that if you have used an Editor name that is not &#8220;<span style="color:#000080;">2011Extensions</span>&#8221; you will need to modify a single line of code in the /client/generic/utils.js file. In line 14 change the value from &#8220;<span style="color:#000080;">2011Extensions</span>&#8221; to the Editor name you chose.</p>
<h2 id="dl">Download</h2>
<p>download the <a href="http://www.mediafire.com/file/i30uvmzfs4g0u55/ListQuickHelper%201.0.zip" target="_blank"><span style="color:#000080;"><strong>List Quick  Helper 1.0</strong></span></a>.</p>
<p><span style="color:#ff0000;"><strong>Update: A newer version of the helper is available on this <a title="More Updates to the List Quick Helper" href="http://yoavniran.wordpress.com/2011/08/27/more-updates-to-the-list-quick-helper/"><span style="color:#ff0000;">page</span></a>.</strong></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/636/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=636&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/06/15/the-list-quick-helper-tridion-extension-gets-an-update/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2010/10/helper-views.png" medium="image">
			<media:title type="html">List Quick Helper Item views</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-slider-mode.png" medium="image">
			<media:title type="html">List Quick Helper Slider-mode</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-extensions-manager.png" medium="image">
			<media:title type="html">List Quick Helper - Extensions Manager</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-multiple-item-publish-batch.png" medium="image">
			<media:title type="html">List Quick Helper Multiple Item Publish Batch</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-component-data.png" medium="image">
			<media:title type="html">List Quick Helper Component Data</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/06/list-quick-helper-jquery-dialogs.png" medium="image">
			<media:title type="html">List Quick Helper jquery Dialogs</media:title>
		</media:content>
	</item>
		<item>
		<title>Poem: Memory of your Eyes</title>
		<link>http://yoavniran.wordpress.com/2011/05/19/poem-memory-of-your-eyes/</link>
		<comments>http://yoavniran.wordpress.com/2011/05/19/poem-memory-of-your-eyes/#comments</comments>
		<pubDate>Thu, 19 May 2011 15:28:31 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Poetry]]></category>
		<category><![CDATA[poem]]></category>
		<category><![CDATA[poety]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=631</guid>
		<description><![CDATA[After a very (very) long time of no creative writing on my part I&#8217;ve written a poem, dedicated to my beautiful wife, Shani. ~ Memory of your Eyes ~ With the memory of your eyes I can push a little further I will manage another day Remembering their glow I am better A memory that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=631&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After a very (very) long time of no creative writing on my part I&#8217;ve written a poem, dedicated to my beautiful wife, Shani.</p>
<h2><span style="color:#000080;">~ Memory of your Eyes ~</span></h2>
<p>With the memory of your eyes<br />
I can push a little further<br />
I will manage another day<br />
Remembering their glow I am better</p>
<p>A memory that pulls on me<br />
A burning settling inside<br />
The knowing that it is not too late<br />
It’s the feeling of urgency I cannot hide</p>
<p><span id="more-631"></span></p>
<p>I recall their endless depth<br />
The blissful long fall<br />
I was so quickly captured<br />
By their mesmerizing presence utterly enthralled</p>
<p>I’m heading back now<br />
With ever increasing speed<br />
The remembrance of light to guide me<br />
That warmth I so desperately need</p>
<p>Im ready to fall again<br />
Ready to give into their dark pools<br />
These caves full of emotion<br />
Rushing back without boundaries or rules</p>
<p>Just a few more days<br />
Stretched into pieces of eternity<br />
It holds me with countless ties<br />
I take it to ease the burden of reality<br />
The memory of your eyes.</p>
<pre><strong>Written: 18/05/2011, NJ, USA.</strong></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/631/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=631&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/05/19/poem-memory-of-your-eyes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>
	</item>
		<item>
		<title>Programming with the Extensions Manager</title>
		<link>http://yoavniran.wordpress.com/2011/04/08/programming-with-the-extensions-manager-extension/</link>
		<comments>http://yoavniran.wordpress.com/2011/04/08/programming-with-the-extensions-manager-extension/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 13:06:02 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Tridion]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[users]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=589</guid>
		<description><![CDATA[In my previous post I focused on the functional side of the Manager, the different features it has and the visual interaction.
In this post I’d like to focus on the programmatic side, how should an extension creator use it.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=589&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>About a week ago I published my <a title="One Extension to Rule them All" href="http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all/">Extensions Manager</a>, a Tridion 2011 extension that allows extensions&#8217; creators define customizations for their users in a few lines of code. The customizations are exposed as fields to the users in a graphical interface that is easy to use and also takes care of the persistence of the values the users enter.</p>
<p>In my previous post I focused on the functional side of the Manager, the different features it has and the visual interaction.<br />
In this post I’d like to focus on the programmatic side &#8211; how should an extension creator use it.</p>
<p><span id="more-589"></span></p>
<h2>Registering an Extension</h2>
<p>The main interaction with the Manager is done through the ‘Client’ class which encapsulates the functionality an Extension will need to register fields and use values from the Manager.</p>
<p>To begin, you will need to create a new Client instance. The full name of the class is: “Extensions.Configuration.Client“ but it can also be accessed using the shorthand: “$$ec.Client”.</p>
<p>The constructor of the client expects an ID string which will be the unique identifier of your extension. You should choose the name before beginning and stick with it. Make sure to choose a unique name which will not likely be used by other extensions.</p>
<p>The first line is then:</p>
<pre>var configClient = new $$ec.Client("MyUniqueExtensionName");</pre>
<p>As a general rule it will be good to build your extension as if the Extensions Manager doesn’t exist. This will allow you to use default values for anything that could possibly be set by a user. Depending on your situation your extension may be installed on environments outside your control and so you cant be sure the Manager will be available there.</p>
<p>This is how you can test for the Extensions Manager before using it:<br />
<span style="color:black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">var</span> extManager <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> (typeof ($extConfManager) !<span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;undefined&#8221;</span> ? $extConfManager : null);</span></p>
<p><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> null;</p>
<p><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">if</span> (extManager) <span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//check that the Extensions Manager is available!</span><br />
{<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> new $$ec.Client(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;MyUniqueExtensionName&#8221;</span>);</p>
<p><span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//start using using the client here&#8230;</span><br />
}</p>
<p>The next thing to do is call the <strong><span style="color:#000080;">init()</span></strong> method, This is an asynchronous method that will attempt to retrieve the definition and values for your extension if it was already registered. Even if this is the first time your registration code is run on an environment calling <strong><span style="color:#000080;">init()</span></strong> is still required. The good thing is that the code you need for the first run and any subsequent runs is identical.</p>
<p><span style="color:#000080;"><strong>init()</strong></span> must be called before any other method of the client instance!</p>
<p>Since <strong><span style="color:#000080;">init() </span></strong>is asynchronous, it expects a single parameter which is a callback method. The callback receives 2 parameters. The first; &#8216;<em>definition</em>&#8216; an object containing the definition of the extension&#8217;s fields as it was downloaded from the server. if this the first time no fields will be available. The second; &#8216;<em>loaded</em>&#8216; a boolean stating whether the extension definition was successfully loaded from the server or not.</p>
<p>So this is how the call to <strong><span style="color:#000080;">init()</span></strong> should look like:</p>
<p><span style="color:black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"> </span><span style="color:black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">var extManager <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> (<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">typeof</span> ($extConfManager) !<span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;undefined&#8221;</span> ? $extConfManager : <span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">null</span>);</span></p>
<p><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> <span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">null</span>;</p>
<p><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">if</span> (extManager) <span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//check that the Extensions Manager is available!</span><br />
{<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> <span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">new</span> $$ec.Client(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;MyUniqueExtensionName&#8221;</span>);</p>
<p>configClient.init(function (definition, loaded)<br />
{<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">if</span> (!loaded)<br />
{<br />
<span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//definition was not loaded from the server, this is probably the first time!</span><br />
}<br />
}<br />
}</p>
<p>If &#8216;<em>loaded</em>&#8216; is true, the definition of the extension has already been stored on the server and there is no need to add the fields at this point. If its false though, this is when you should be adding your fields.</p>
<p>To add a field you call the client&#8217;s <span style="color:#000080;"><strong>addField()</strong></span> method. this method accepts 3 parameters: &#8216;<em>name</em>&#8216;, &#8216;<em>props</em>&#8216;, &#8216;<em>options</em>&#8216;:</p>
<ul>
<li><strong>name</strong>: The unique field name. No other field registered for this extension should have the same name. The name can include spaces but shouldn&#8217;t include special characters.</li>
</ul>
<ul>
<li><strong>props</strong>: This is an object containing the different attributes of a field. These are the different attributes:
<ol>
<li><strong>Type</strong>: One of the following: $extConfConsts.Types.TEXT, $extConfConsts.Types.NUMBER, $extConfConsts.Types.OPTION, $extConfConsts.Types.GROUPS, $extConfConsts.Types.COLOR.</li>
<li><strong>AdminOnly</strong>: Boolean. Whether the field should be accessed by a Tridion administrator user only.</li>
<li><strong>MultipleValue</strong>: Boolean. Whether the field accepts more than one value. (only OPTION and GROUPS)</li>
<li><strong>HelpText</strong>: String. Containing useful information describing the purpose of the field.</li>
<li><strong>DefaultValue</strong>: String. Containing a default value for the field.</li>
</ol>
</li>
</ul>
<p style="text-align:center;">&nbsp;</p>
<p style="text-align:center;"><a href="http://yoavniran.files.wordpress.com/2011/04/extensions-manager-field-properties.png"><img class="aligncenter" title="Extensions Manager - Field properties" src="http://yoavniran.files.wordpress.com/2011/04/extensions-manager-field-properties.png?w=460&#038;h=300" alt="Extensions Manager - Field properties" width="460" height="300" /></a></p>
<p style="text-align:left;padding-left:30px;">Besides the Type attribute, all others are optional.</p>
<ul>
<li><strong>options</strong>: If the type of the field is OPTION, this parameter will be expected to contain an array of key/value objects that will be used as the options for this field.
<p>For example:</li>
</ul>
<pre>[{ "key": "Yes", "value": "1" }, { "key": "No", "value": "0"}]
</pre>
<p>&nbsp;</p>
<p>Once you&#8217;ve added your fields, you need to call the client&#8217;s <span style="color:#000080;"><strong>create()</strong></span> method. This will commit the fields definition to be stored on the server.</p>
<p><strong><span style="color:#000080;">create()</span></strong> receives an optional callback function parameter which will be called when the asynchronous task of committing the definition to the server has finished. the callback has one parameter which is a Boolean stating whether the commit was successful or not.</p>
<p>So tying all of this together will look like this:</p>
<p><span style="color:black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">Extensions.MyGreatNextExtension= <span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">function</span> Extensions$MyGreatNextExtension()<br />
{<br />
Type.enableInterface(<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>, <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Extensions.MyGreatNextExtension&#8221;</span>);<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>.addInterface(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Tridion.Cme.Command&#8221;</span>, [<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">"MyGreatNextExtension"</span>]);</span></p>
<p><span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//************** Extensions Configuration Management **********************//</span><br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">var</span> extManager <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> (typeof ($extConfManager) !<span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;undefined&#8221;</span> ? $extConfManager : null);</p>
<p><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> null;</p>
<p><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">if</span> (extManager) <span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//check that the Extensions Manager is available!</span><br />
{<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> configClient <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> new $$ec.Client(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;MyGreatNextExtension&#8221;</span>);</p>
<p>configClient.init(<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">function</span> (definition, loaded)<br />
{<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">if</span> (!loaded)<br />
{<br />
configClient.setTitle(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;My Great Next Extension&#8221;</span>);<br />
configClient.setDescription(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;This a &lt;strong&gt;great&lt;/strong&gt; extension that does great things!&#8221;</span>);</p>
<p><span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//** Users Fields</span><br />
<span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//add a simple text field</span><br />
configClient.addField(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Text Field 1&#8243;</span>, { <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Type&#8221;</span>: $extConfConsts.Types.TEXT, <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;HelpText&#8221;</span>: <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;useful info about this field&#8221;</span> });</p>
<p><span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//add a single valued options field</span><br />
configClient.addField(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;optionsField&#8221;</span>, { <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Type&#8221;</span>: $extConfConsts.Types.OPTION, <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Default&#8221;</span>: <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;1&#8243;</span> }, $extConfConsts.OptionGroups.YES_NO);</p>
<p><span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//** Admin Fields</span><br />
<span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//add a multi valued group field</span><br />
configClient.addField(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Show For Groups&#8221;</span>, { <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Type&#8221;</span>: $extConfConsts.Types.GROUPS, <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;AdminOnly&#8221;</span>: true, <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;MultipleValue&#8221;</span>: true, <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;HelpText&#8221;</span>: <span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Only show this extension for the chosen groups&#8221;</span> });</p>
<p>configClient.create();<br />
}<br />
});<br />
}<br />
<span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//************** Extensions Configuration Management **********************//</span><br />
};</p>
<p>You can see that I&#8217;ve also used the <strong><span style="color:#000080;">setTitle()</span></strong> and <span style="color:#000080;"><strong>setDescription()</strong></span> methods. These are optional but recommended to use as this is the information that will show in the Manager GUI for your extension. Without it the only thing that will be shown is the ID you&#8217;ve used to register the extension.</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/04/extensions-manager-extensions-list.png"><img class="aligncenter size-full wp-image-624" title="Extensions Manager - Extensions List" src="http://yoavniran.files.wordpress.com/2011/04/extensions-manager-extensions-list.png?w=600" alt="Extensions Manager - Extensions List"   /></a></p>
<p>You will probably want to put all of this code in the constructor of the command you use for your extension. It is very likely you would like to use the values retrieved from the server as quickly as possible so the constructor is the logical place.</p>
<h3>Fields Validation</h3>
<p>The Manager comes with two simple validator methods for the number and color fields. These are global validators which means they will be used against fields of these types from all of the registered extensions. As an extension creator you can also define your validators for field types used by your extension.</p>
<p>To register a validator that for example limits the range of numbers entered into NUMBER fields you can do something like this:</p>
<p style="padding-left:30px;"><span style="color:black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"><span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//Example of registering a validator for an extension</span><br />
configClient.setFieldTypeValidator($extConfConsts.Types.NUMBER, function (value) <span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//validate number fields for this extension</span><br />
{<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">if</span> (value.length &gt; 0)<br />
{<br />
var num <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> parseInt(value);<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">return</span> (num &gt; 0 &amp;&amp; num &lt; 10); <span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//only allow numbers between 1 and 9</span><br />
}<br />
});</span></p>
<p>Currently validation is done at a field type level, not on a specific field. using the <strong><span style="color:#000080;">setFieldTypeValidator() </span></strong>method you pass the type of the field and your validating function. This function will receive the value entered by the user into the field. If the value fails the validation, the user will not be able to save their changes until they correct it so validation is successful.</p>
<p>Example of failed validation:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-field-type-validation.png"><img class="aligncenter size-full wp-image-573" title="Extensions Manager - Field Type Validation" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-field-type-validation.png?w=600" alt="Extensions Manager - Field Type Validation"   /></a></p>
<p>Registering a validator through the Client will only apply it to values entered for your extension. Note that if you register a validator of  your own, for example for the NUMBER type, the global validator will still be used in conjunction with yours.</p>
<p>You can also register your own global validator for a field type using the following method:</p>
<pre>$extConfManager.setFieldTypeValidator(type, validator);</pre>
<p>If there is already a global validator registered for this type this will override it and your validator be used for fields of this type from <span style="text-decoration:underline;">all </span>extensions, even if youre not the one to build them so its preferable not to register global validators as a general principle.</p>
<h3>Events</h3>
<p>The Client raises a few events which you can hook up to from your extensions.</p>
<p>These events are:</p>
<ul>
<li><strong>Initialized</strong>: Raised after the extension definition and values are loaded from the server. note that this event will be raised regardless of whether the definition and/or values are already stored on the server.</li>
</ul>
<ul>
<li><strong>Created</strong>: Raised when the the extension definition is successfully stored on the server.</li>
</ul>
<ul>
<li><strong>Reloaded</strong>: Raised when the extension&#8217;s values are returned from the server when the reload method<br />
is called.</li>
</ul>
<h3>Important Considerations</h3>
<p><strong>Adding Fields</strong></p>
<p>It is important to keep your field names unique, when trying to add a field, the Client will check its existing collection of fields for a field with the same name. If that field can be found, the Client will log an error and will not store the added field even if it has different properties.<br />
To be able to update a field that has already been stored on the server, you can either delete the definition (XML) file and refresh the browser or you can use the Client&#8217;s <strong><span style="color:#000080;">updateField()</span></strong> method which has the same signature as the <span style="color:#000080;"><strong>addField()</strong></span> method.</p>
<p><strong>Client/Server communication</strong></p>
<p>An interesting fact to be aware of is that the Extensions Manager tries to send as little over the wire between the server and the client as possible. This means a few things; For example when the user clicks the &#8220;save&#8221; button, the Manager will only send the extensions that had their values changed.<br />
Another important aspect to consider is that the Client will only send the extension definition if the fields properties are different from those received from the server. If they&#8217;re not different calling <strong><span style="color:#000080;">create()</span></strong> will not actually commit to the server</p>
<h2>Using the Values</h2>
<p>We have covered the first part which is how to define the fields for our extension. Now we&#8217;ll go over how to use the values the users enter into the Manager&#8217;s GUI.</p>
<p>There are two main methods for doing so, the Client&#8217;s <strong><span style="color:#000080;">getValue()</span></strong> and <strong><span style="color:#000080;">getValues()</span></strong> methods.<br />
Both methods require a single parameter which is the name of the field as it was defined when creating it.</p>
<p>The value(s) of all fields are stored in an array. If the field you&#8217;re interested in has only one value or you&#8217;re only interested in the first value you can use the <strong><span style="color:#000080;">getValue()</span></strong> method if you&#8217;re interested in all possible values the field has you will use the <strong><span style="color:#000080;">getValues()</span></strong>.</p>
<p>Notice that getting the value(s) for an Admin field is no different from a regular field.</p>
<p>If the field was not defined with a default value and the user hasn&#8217;t entered a value yet, the result of <strong><span style="color:#000080;">getValue() </span></strong>and <strong><span style="color:#000080;">getValues()</span></strong> will be null.</p>
<p>Getting the value(s) of a field would look something like this:</p>
<p><span style="color:black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"><span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">if</span> (<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient) <span style="color:green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">//only get value if Manager was available at the start</span><br />
{<br />
<span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">var</span> textValue <span style="color:red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">=</span> <span style="color:blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;">this</span>._configClient.getValue(<span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;">&#8220;Text Field 1&#8243;</span>);<br />
}</span></p>
<p>As mentioned earlier, it will be a good practice to build your extension with the Manager in mind but not as a dependency so you should define default values in your code to be used if the Manager is not available and no values were to be retrieved from it.</p>
<h2>Miscellaneous</h2>
<p>There are a few other useful methods in the Client class I want to cover here:</p>
<p><strong><span style="color:#000080;">getTitle()</span></strong> Retrieves the title stored for the extension if one was provided.</p>
<p><span style="color:#000080;"><strong>getDescription()</strong></span> Retrieves the description of the title stored for the extension if one was provided.</p>
<p><span style="color:#000080;"><strong>getFields()</strong></span> Retrieves the collection of fields that were added to the client using the addField() or updateField methods.</p>
<p><strong><span style="color:#000080;">hasField()</span></strong> Expects a single parameter: a String with the name of the field to check. Returns true if a field with this name was added to the client or returned from the server.</p>
<p><span style="color:#000080;"><strong>reload()</strong></span> Reloads the values for the extension from the server. Expects two parameters: the first; a callback function to call when the asynchronous reloading has finished. The callback method will receive two parameters: the first; an object containing the extension definition and values. the second is an optional context object. the second parameter the reload method receives is an optional context(state) object which will be passed to the callback method.</p>
<p><span style="color:#000080;"><strong>isGroupsValueAllowed() </strong></span>A utility method that expects the name of a group field. The method will then check whether the current user is a member of one of the groups that were chosen as values for this field. A second optional parameter is a Boolean stating whether the method should skip the check if the current user is an administrator.</p>
<h2>Sample Code</h2>
<p>There are a few samples I included with the Manager that show how to register an extension. These samples can be found in the samples.js file. By default these are not used but can be enabled from the EcmCommand.js lines 30 and 31.</p>
<h2>Download</h2>
<p>The latest version of the Extensions Manager can be downloaded using the link on this <a title="One Extension to Rule them All" href="http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all#code">page</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/589/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=589&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/04/08/programming-with-the-extensions-manager-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/04/extensions-manager-field-properties.png" medium="image">
			<media:title type="html">Extensions Manager - Field properties</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/04/extensions-manager-extensions-list.png" medium="image">
			<media:title type="html">Extensions Manager - Extensions List</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-field-type-validation.png" medium="image">
			<media:title type="html">Extensions Manager - Field Type Validation</media:title>
		</media:content>
	</item>
		<item>
		<title>One Extension to Rule them All</title>
		<link>http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all/</link>
		<comments>http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 17:02:12 +0000</pubDate>
		<dc:creator>Yoav Niran</dc:creator>
				<category><![CDATA[Tridion]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://yoavniran.wordpress.com/?p=566</guid>
		<description><![CDATA[A few weeks ago I thought about customizing GUI extensions. As extensions mature it will make sense to allow Tridion users, whether administrators or business, the ability to make changes to extensions’ behavior, to turn functionalities on and off and more, without having to change the underlying code. This led to… *drumroll* … The Extensions Manager.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=566&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since Tridion 2011 has been released with its shiny new GUI framework everyone and their sister have either been creating or thinking about creating extensions. I myself have been heavily involved in creating <a title="My Tridion 2011 CTP Extensions Go GA" href="http://yoavniran.wordpress.com/2011/02/16/my-tridion-2011-ctp-extensions-go-ga/">some</a>.</p>
<p>Traditionally, extensions for the most part are islands of functionality; code is typically hardly ever reused. This is something I’d like to improve. With the advancement of the Tridion framework and by following <a href="http://mckoss.com/jscript/object.htm" target="_blank">OO practices</a>, it’s possible to create reusable code, frameworks and more, the sky it the limit really.</p>
<p>A few weeks ago I thought about customizing GUI extensions. As extensions mature it will make sense to allow Tridion users, whether administrators or business, the ability to make changes to extensions’ behavior, to turn functionalities on and off and more, without having to change the underlying code. This led to… *drumroll* … <strong>The Extensions Manager.</strong></p>
<p><strong><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-full-view.png"><img class="aligncenter size-full wp-image-575" title="Extensions Manager - Full view" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-full-view.png?w=600" alt="Extensions Manager - Full view"   /></a></strong></p>
<p><strong><span id="more-566"></span><br />
</strong></p>
<p>The Extensions Manager (extension) has two sides:</p>
<ol>
<li>A programmatic interface (API) for extensions developers to leverage in order for them to both register their extensions so they appear in the Manager GUI as well as to retrieve the values set by the users.</li>
<li>A graphical user interface (shown above) to allow users to set values for the fields registered by the extension’s creator.</li>
</ol>
<h2>Meet the Extensions Manager</h2>
<p>So let me give you the tour: &#8230;Through here you have the living room, over there is the breakfast nook and to the left is the conservatory which is just gorgeous during the summer… hmm… sorry! Wrong tour.</p>
<p>Let’s try this again. The Extensions Manager is <strong>packed</strong> with features, in this post ill focus on the functional side and in a <a title="Programming with the Extensions Manager" href="http://yoavniran.wordpress.com/2011/04/08/programming-with-the-extensions-manager-extension/"><span style="color:#0000ff;">separate article</span></a> I’ll detail on the technical one.</p>
<p>The concept behind the Manager is simple; you’re building a great extension and you recognize that different users will need different options or perhaps an Administrator should be able to turn on the extension for specific groups of users while not for others, maybe your extension needs different parameters depending on the environment its running on.<br />
Well, you have a few options then. You can leave the configuration stuff in your code, which will be easiest for you as an extension creator but not very user friendly. Since you are Mr (or Miss) user friendly, as we all are, you would like to build a way for users to customize your extension(s), right? But that will require another big development effort and introduce new complexities such as how should you display these options? How to persist them between sessions? And so on.<br />
The good news is that there’s a third option. You may have guessed it by now, it’s the Extensions Manager! With a few lines of code you can register your extension, define the fields to show your users and <em>Voila</em>! You’re done.</p>
<h2>Extension Configuration Fields</h2>
<h3>Field Types</h3>
<p>The Extensions Manager comes with 5 types of fields: <strong>Text</strong>, <strong>Number</strong>, <strong>Options</strong>, <strong>Groups</strong> and <strong>Color</strong>.<br />
The first 3 types can be seen in the following screenshot:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-focus.png"></a><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-text-number-options.png"><img class="aligncenter size-full wp-image-587" title="Extensions Manager - Text Number Options" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-text-number-options.png?w=600" alt="Extensions Manager - Text Number Options"   /></a></p>
<p>Nothing special here really, Text and Number are self-explanatory and Option means that you can pre-define the values that will be displayed using check-boxes or radio buttons.</p>
<p><strong>Field type “Groups”</strong>:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-groups-field.png"><img class="aligncenter size-full wp-image-576" title="Extensions Manager - Groups Field" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-groups-field.png?w=600" alt="Extensions Manager - Groups Field"   /></a></p>
<p>The Manager will make sure to load all available Tridion groups so they can be listed for fields of this type.</p>
<p><strong>Field type “Color”:</strong></p>
<p><strong><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-color-picker.png"><img class="aligncenter size-full wp-image-568" title="Extensions Manager - Color Picker" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-color-picker.png?w=600" alt="Extensions Manager - Color Picker"   /></a></strong></p>
<p>A nice utility field I decided to add to make it possible to visually customize extensions’ elements. I got the jQuery plugin for the color picker from:  <a href="http://www.eyecon.ro/colorpicker/">http://www.eyecon.ro/colorpicker/</a></p>
<h3>Multiple Values</h3>
<p>Most types only support a single value, however, the Option and Groups fields can also be marked as multi-valued fields.</p>
<p>Single valued Option field:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-single-valued-option.png"><img class="aligncenter size-full wp-image-585" title="Extensions Manager - single valued option" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-single-valued-option.png?w=600" alt="Extensions Manager - single valued option"   /></a></p>
<p>Multi valued Option field:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-multi-valued-option.png"><img class="aligncenter size-full wp-image-579" title="Extensions Manager - multi valued option" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-multi-valued-option.png?w=600" alt="Extensions Manager - multi valued option"   /></a></p>
<p>The “All” option is added automatically by the Manager to make it easy for users to select all options.</p>
<h3>Admin Only</h3>
<p>It is possible to specify that a field is for Administrative use only and so can only be modified by Tridion administrators. The admin fields will be shown in the “Admin” tab of the Manager:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-admin-fields.png"><img class="aligncenter size-full wp-image-567" title="Extensions Manager - Admin Fields" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-admin-fields.png?w=600" alt="Extensions Manager - Admin Fields"   /></a></p>
<h3>Default Value and Help Text</h3>
<p>Defaults are pretty obvious; it is possible to define default values for fields registered with the Manager.</p>
<p>It is also possible to add help text for each field in order for the Manager to display it as a tooltip like so:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-help-text.png"><img class="aligncenter size-full wp-image-577" title="Extensions Manager - Help Text" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-help-text.png?w=600" alt="Extensions Manager - Help Text"   /></a></p>
<h3>Validators</h3>
<p>The Manager comes with one (global) validator for the Number field type simply making sure that the value entered to this type of fields is a valid number.</p>
<p>Developers can register their own validators for all field types per extension or globally for all extensions.</p>
<p>The Manager will immediately alert the user of an invalid value by changing the color of the field and adding an indicator near the extension title:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-field-type-validation.png"><img class="aligncenter size-full wp-image-573" title="Extensions Manager - Field Type Validation" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-field-type-validation.png?w=600" alt="Extensions Manager - Field Type Validation"   /></a></p>
<h2>Interaction</h2>
<p>Accessing the Extensions Manager is done through a button in the toolbar:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-toolbar-button.png"><img class="aligncenter size-full wp-image-588" title="Extensions Manager - Toolbar button" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-toolbar-button.png?w=600" alt="Extensions Manager - Toolbar button"   /></a></p>
<p>If all of the extensions registered to the Manager have only “Admin” fields, the button will be disabled for regular users and only be enabled for Administrators.</p>
<h3>Save &amp; Close Buttons</h3>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-save-and-close-buttons.png"><img class="aligncenter size-full wp-image-582" title="Extensions Manager - Save and Close buttons" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-save-and-close-buttons.png?w=600" alt="Extensions Manager - Save and Close buttons"   /></a></p>
<p>The Close button of the Manager is always shown to allow users to hide the Manager window at all times.</p>
<p>The Save button becomes available when a field value has been changed by the user. It will be disabled during a save operation.</p>
<p>Users can hide the Manager display even during a save or reload operation, these operations will continue in the background.</p>
<h3>Reload Settings Button</h3>
<h3><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-reload-button.png"><img class="aligncenter size-full wp-image-581" title="Extensions Manager - Reload button" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-reload-button.png?w=600" alt="Extensions Manager - Reload button"   /></a></h3>
<p>Clicking the Reload button will retrieve the values stored for the currently showing extension from the server and re-apply them to the fields on the screen.</p>
<h3>Tabs</h3>
<h3><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-tabs.png"><img class="aligncenter size-full wp-image-586" title="Extensions Manager - Tabs" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-tabs.png?w=600" alt="Extensions Manager - Tabs"   /></a></h3>
<p>There are only two tabs. “Settings” will show all of the fields that all users can access. “Admin” will only be shown to Tridion administrators and will contain fields which were set by the Extension creator to only be modified by administrators.</p>
<p>A very important difference between the two sets of fields is that the values shown in the “Settings” tab are stored separately for each user while the “Admin” values are stored in just one place on the server and a change done by one administrator will be reflected for all users. Therefore, the “Settings” values are <strong><span style="text-decoration:underline;">Private</span></strong> and the “Admin” values are <strong><span style="text-decoration:underline;">Global</span></strong>.</p>
<h3>Extensions List</h3>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-extensions-list.png"><img class="aligncenter size-full wp-image-572" title="Extensions Manager - Extensions List" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-extensions-list.png?w=600" alt="Extensions Manager - Extensions List"   /></a></p>
<p>The list will always display all extensions registered to the Manager. The order in which they are displayed is the order in which the extensions are registered and therefore depends mostly on the order in which extensions were configured in the Editor configuration file and partly on the way the registering code is executed within the Extension’s implementation.</p>
<p>The list only expands one item at a time which includes the title and the description (if one provided). If no title was provided when the extension was registered, the ID property of the extension will be used.</p>
<p>Items in the list have 3 modes. “Normal”, “Pending” and “Invalid”. Normal is the state shown for the items in the above image and is the case when there are no pending changes.<br />
Pending notifies the user that there are one or more fields that have been changed but not saved yet:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-pending-list-item.png"><img class="aligncenter size-full wp-image-580" title="Extensions Manager - Pending list item" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-pending-list-item.png?w=600" alt="Extensions Manager - Pending list item"   /></a></p>
<p>Invalid notifies the user that there are one or more fields that have been changed but failed the validation and so must be corrected before its possible to save:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-invalid-list-item.png"><img class="aligncenter size-full wp-image-578" title="Extensions Manager - Invalid list item" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-invalid-list-item.png?w=600" alt="Extensions Manager - Invalid list item"   /></a></p>
<h2>Example</h2>
<p>I chose a simple example to show the Manager’s capabilities. For my <a title="My First Attempt at Tridion 2011 GUI Extensions" href="http://yoavniran.wordpress.com/2010/10/13/my-first-attempt-at-tridion-2011-gui-extensions/">Item Xml Display</a> I have registered a color field which will allow users to determine the background color of the display:</p>
<p>In just very few lines of code, users of the extension can determine for themselves what the background color of the overlay will be:</p>
<p><strong>Manager</strong>:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-manager-green.png"><img class="aligncenter size-full wp-image-592" title="Extensions Manager - Example - Manager Green" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-manager-green.png?w=600" alt="Extensions Manager - Example - Manager Green"   /></a></p>
<p><strong>Extension</strong>:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-display-green.png"><img class="aligncenter size-full wp-image-593" title="Extensions Manager - Example - Display Green" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-display-green.png?w=600" alt="Extensions Manager - Example - Display Green"   /></a></p>
<p><strong>Manager</strong>:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-manager-purple.png"><img class="aligncenter size-full wp-image-571" title="Extensions Manager - Example - Manager Purple" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-manager-purple.png?w=600" alt="Extensions Manager - Example - Manager Purple"   /></a></p>
<p><strong>Extension</strong>:</p>
<p><a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-display-purple.png"><img class="aligncenter size-full wp-image-594" title="Extensions Manager - Example - Display Purple" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-display-purple.png?w=600" alt="Extensions Manager - Example - Display Purple"   /></a></p>
<p>Even though this is a trivial example I think it shows the capabilities and the possibilities of the Extensions Manager quite nicely.</p>
<h2>Installation &amp; Configuration</h2>
<p>First download the Manager <a href="#code">here</a>.</p>
<p>You may want to follow my <a title="Setting up a Tridion 2011 GUI extension in 8 steps" href="http://yoavniran.wordpress.com/2011/03/03/setting-up-a-tridion-gui-2011-extension-in-8-steps/">8 steps to configure a GUI extension</a> first as the first steps are pretty much the same.</p>
<ol>
<li>Place the editor folder on the server somewhere. I named my editor 2011Extensions but you may want to rename it.</li>
<li>Set up the editor in the same way explained in my previous article (mentioned above).</li>
<li>In IIS, create a new application pool named something like: “ExtensionsConfigurationManager”. Make sure its using .NET 4, in Integrated Mode and that the identity is an impersonation user, typically that will be the Network Service. You can compare that to the identity of the CME app pool.</li>
<li>Still in IIS, you will need to configure a new application for the extension. Navigate to the new editor directory in IIS and then reach the <em><span style="color:#000080;">/server/ExtensionsConfigurationManager</span></em> directory.  Right-click and select “Convert to Application”. You should achieve something like this:<a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-config-iis.png"><img class="aligncenter size-full wp-image-570" title="Extensions Manager - Config - IIS" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-config-iis.png?w=600" alt="Extensions Manager - Config - IIS"   /></a></li>
<li>In IIS, navigate to your new application and click on the “Authentication” icon, Make sure then that both Anonymous and Windows are enabled:<a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-config-iis-authentication.png"><img class="aligncenter size-full wp-image-569" title="Extensions Manager - Config - IIS Authentication" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-config-iis-authentication.png?w=600" alt="Extensions Manager - Config - IIS Authentication"   /></a></li>
<li>In file explorer: navigate to your editor folder on disk and then to the <span style="color:#000080;"><em> \server\ExtensionsConfigurationManager</em></span>. Open the web.config file for editing and update the following:
<ul>
<li>Find: “<em><span style="color:#000080;">ManagerConfigurationSection\Application\DataRoot</span></em>” and change the value to a location which will be writable by the extension. This is the place where the Extensions Manager will create folders and the xml files containing the extensions’ definitions and values.</li>
<li>Find: “<em><span style="color:#000080;">log4net\appender\file</span></em>” and change the value to a location which will be writable by the extension. This is the file the logger of the server side will write to. In the “<em><span style="color:#000080;">logger\level</span></em>” element you can change the logging level. Most of the logging is done at Debug level besides errors of course. Only change to ‘DEBUG’ if there are issues with getting the Manager to work otherwise it will needlessly fill the log file up pretty quickly.</li>
</ul>
</li>
<li>Go into the BIN folder in “<em><span style="color:#000080;">\server\ExtensionsConfigurationManager</span></em>” and copy “Yoav.Extensions.dll” into “<em><span style="color:#000080;">&lt;Tridion_home&gt;\Web\WebUI\WebRoot\bin</span></em>”.</li>
<li>If you chose a different name for your Editor you will need to do a quick change to the JS code. This is the only one: open for editing the following file under your Editor folder: “<em><span style="color:#000080;">client\generic\utils.js</span></em>”. in line 14 set the value of the ‘EDITOR_NAME’ variable to the name you have chosen:</li>
</ol>
<blockquote>
<p style="padding-left:120px;">this.EDITOR_NAME = &#8220;<span style="color:#ff0000;">2011Extensions</span>&#8220;;</p>
</blockquote>
<h2>Testing</h2>
<p>To make sure that configuring the extension was successful I recommend performing the following checks:</p>
<ul>
<li>In your browser open the following url:<a href="http://%3ccme_host_name%3e/WebUI/editors/%3cEditor_name%3e/server/ExtensionsConfigurationManager/test.html"> http://<span style="color:#ff0000;">&lt;CME_host_name&gt;</span>/WebUI/editors/<span style="color:#ff0000;">&lt;Editor_name&gt;</span>/server/ExtensionsConfigurationManager/test.html</a>. You should be able to see the message on that page.</li>
</ul>
<ul>
<li>Next, open this url:<a href="http://%3ccme_host_name%3e/WebUI/editors/2011extensions/server/ExtensionsConfigurationManager/services/ExtensionsManagerService.svc"> http://<span style="color:#ff0000;">&lt;CME_host_name&gt;</span>/WebUI/editors/<span style="color:#ff0000;">&lt;Editor_name&gt;</span>/server/ExtensionsConfigurationManager/services/ExtensionsManagerService.svc</a><br />
You should see this screen:<a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-service-home1.png"><img class="aligncenter size-full wp-image-596" title="Extensions Manager - Service Home" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-service-home1.png?w=600" alt="Extensions Manager - Service Home"   /></a></li>
</ul>
<ul>
<li>Finally, test whether the service is working with this URL: <a href="http://%3ccme_host_name%3e/WebUI/editors/%3cEditor_name%3e/server/ExtensionsConfigurationManager/services/ExtensionsManagerService.svc/json/GetExtension?name=Test">http://<span style="color:#ff0000;">&lt;CME_host_name&gt;</span>/WebUI/editors/<span style="color:#ff0000;">&lt;Editor_name&gt;</span>/server/ExtensionsConfigurationManager/services/ExtensionsManagerService.svc/json/GetExtension?name=Test </a><br />
This should result in a JSON response with these contents:<a href="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-service-response-test.png"><img class="aligncenter size-full wp-image-584" title="Extensions Manager - Service Response Test" src="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-service-response-test.png?w=600" alt="Extensions Manager - Service Response Test"   /></a></li>
</ul>
<p>If these steps don’t work for you, follow the errors on the screen and in the log file to try and figure out whats going wrong. Please let me know if you’re having trouble with it as well.</p>
<p>I have tested the Manager on the big 3 browsers and it looks to be working on all. I saw some weird behavior with an older version of IE 8 but on a machine with the latest updates it seems to be alright. On Chrome 9 and 10 and Firefox 3.6 and 4.0 it seems to be working with no apparent issues.</p>
<h2 id="code">Download</h2>
<p><strong><span style="color:#ff0000;">New!</span></strong> &#8211; version <em><strong>0.3</strong></em> can be downloaded <a title="Extensions Manager 0.3" href="http://www.mediafire.com/file/sb6tr1xii7a4he5/ExtensionsManager%200.3.zip" target="_blank"><strong>here</strong></a>. This version includes a couple of bug fixes and some enhancements. See the included text file for more details.</p>
<p><span style="color:#c0c0c0;">The beta version (0.2) can be downloaded </span><a title="Download Extensions Manager extension 0.2" href="http://www.mediafire.com/file/l6mbmqr9i3nb761/2011%20Extension%20-%20Extensions%20Manager%200.2.zip" target="_blank"><span style="color:#c0c0c0;">here</span></a><span style="color:#c0c0c0;">.</span></p>
<p>Interested in learning how to program with the Extensions Manager? Follow this <a title="Programming with the Extensions Manager" href="http://yoavniran.wordpress.com/2011/04/08/programming-with-the-extensions-manager-extension/">link</a>.</p>
<p><span style="color:#000080;"><em><strong>As always I really appreciate any feedback you may have!</strong></em></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yoavniran.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yoavniran.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yoavniran.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yoavniran.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yoavniran.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yoavniran.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yoavniran.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yoavniran.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yoavniran.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yoavniran.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yoavniran.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yoavniran.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yoavniran.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yoavniran.wordpress.com/566/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yoavniran.wordpress.com&amp;blog=8128966&amp;post=566&amp;subd=yoavniran&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yoavniran.wordpress.com/2011/03/30/one-extension-to-rule-them-all/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/07022aa961aa6ee7facc9939f783a797?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoavniran</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-full-view.png" medium="image">
			<media:title type="html">Extensions Manager - Full view</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-text-number-options.png" medium="image">
			<media:title type="html">Extensions Manager - Text Number Options</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-groups-field.png" medium="image">
			<media:title type="html">Extensions Manager - Groups Field</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-color-picker.png" medium="image">
			<media:title type="html">Extensions Manager - Color Picker</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-single-valued-option.png" medium="image">
			<media:title type="html">Extensions Manager - single valued option</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-multi-valued-option.png" medium="image">
			<media:title type="html">Extensions Manager - multi valued option</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-admin-fields.png" medium="image">
			<media:title type="html">Extensions Manager - Admin Fields</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-help-text.png" medium="image">
			<media:title type="html">Extensions Manager - Help Text</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-field-type-validation.png" medium="image">
			<media:title type="html">Extensions Manager - Field Type Validation</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-toolbar-button.png" medium="image">
			<media:title type="html">Extensions Manager - Toolbar button</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-save-and-close-buttons.png" medium="image">
			<media:title type="html">Extensions Manager - Save and Close buttons</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-reload-button.png" medium="image">
			<media:title type="html">Extensions Manager - Reload button</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-tabs.png" medium="image">
			<media:title type="html">Extensions Manager - Tabs</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-extensions-list.png" medium="image">
			<media:title type="html">Extensions Manager - Extensions List</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-pending-list-item.png" medium="image">
			<media:title type="html">Extensions Manager - Pending list item</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-invalid-list-item.png" medium="image">
			<media:title type="html">Extensions Manager - Invalid list item</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-manager-green.png" medium="image">
			<media:title type="html">Extensions Manager - Example - Manager Green</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-display-green.png" medium="image">
			<media:title type="html">Extensions Manager - Example - Display Green</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-manager-purple.png" medium="image">
			<media:title type="html">Extensions Manager - Example - Manager Purple</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-example-display-purple.png" medium="image">
			<media:title type="html">Extensions Manager - Example - Display Purple</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-config-iis.png" medium="image">
			<media:title type="html">Extensions Manager - Config - IIS</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-config-iis-authentication.png" medium="image">
			<media:title type="html">Extensions Manager - Config - IIS Authentication</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-service-home1.png" medium="image">
			<media:title type="html">Extensions Manager - Service Home</media:title>
		</media:content>

		<media:content url="http://yoavniran.files.wordpress.com/2011/03/extensions-manager-service-response-test.png" medium="image">
			<media:title type="html">Extensions Manager - Service Response Test</media:title>
		</media:content>
	</item>
	</channel>
</rss>
