<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://linuxers.org">
<channel>
 <title>Linuxers</title>
 <link>http://linuxers.org</link>
 <description />
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Linuxers" /><feedburner:info uri="linuxers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Linuxers" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FLinuxers" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
 <title>Drupal 7: How to remove throbber image from ajax links and create a custom throbber.</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/1JQjUSnEfbc/drupal-7-how-remove-throbber-image-ajax-links</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;In this howto, we will see how to remove the blue throbber image and related markup when you click on an ajax link and replace with a custom throbber image.&lt;/p&gt;
&lt;p&gt;Any form element or link can be made ajax by setting #ajax property. But #ajax property is tied closely to drupal form elements. There is another way in drupal to convert a link to use ajax, by setting 'use-ajax' class. But for those links the progress type is always throbber.&lt;/p&gt;
&lt;p&gt;In this howto we will look at one of the many ways to change to our custom throbber.&lt;br /&gt;
Instead of &lt;strong&gt;use-ajax&lt;/strong&gt; we will use &lt;strong&gt;custom-ajax&lt;/strong&gt; class. We will bind ajax behaviour to elements having this class. So instead of &lt;strong&gt;&amp;lt;a class="use-ajax"&amp;gt;link&amp;lt;/a&amp;gt; we will do  &amp;lt;a class="custom-ajax"&amp;gt;link&amp;lt;/a&amp;gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; Drupal&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;behaviors&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;MyAjax &lt;/span&gt;&lt;span style="color: #007700"&gt;= {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;attach&lt;/span&gt;&lt;span style="color: #007700"&gt;: function(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;context&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Bind Ajax behaviors to all items having the class 'custom-ajax'.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'.custom-ajax'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;context&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;once&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajax'&lt;/span&gt;&lt;span style="color: #007700"&gt;, function () {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &lt;/span&gt;&lt;span style="color: #0000BB"&gt;element &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &lt;/span&gt;&lt;span style="color: #0000BB"&gt;element_settings &lt;/span&gt;&lt;span style="color: #007700"&gt;= {};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;element_settings&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;progress &lt;/span&gt;&lt;span style="color: #007700"&gt;= { &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type'&lt;/span&gt;&lt;span style="color: #007700"&gt;: &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'customLoader' &lt;/span&gt;&lt;span style="color: #007700"&gt;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;attr&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'href'&lt;/span&gt;&lt;span style="color: #007700"&gt;)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;element_settings&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;url &lt;/span&gt;&lt;span style="color: #007700"&gt;= $(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;attr&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'href'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Do ajax on a custom event&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;element_settings&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;event &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'MyClickEvent'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &lt;/span&gt;&lt;span style="color: #0000BB"&gt;base &lt;/span&gt;&lt;span style="color: #007700"&gt;= $(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;attr&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'id'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;Drupal&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;base&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;element_settings&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;default_success &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;success&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Change the success callback to remove/hide our custom throbber&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;success &lt;/span&gt;&lt;span style="color: #007700"&gt;= function (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;response&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;status&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// hide/remove custom loader&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Additionally we can remove our custom throbber markup here&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;parents&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'.my-throbber:eq(0)'&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;hide&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// do normal processing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;default_success&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;response&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;status&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Similarly you may want to update error callback to remove your custom throbber in case of error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // By default it throws an alert , lets change it to something pretty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;error &lt;/span&gt;&lt;span style="color: #007700"&gt;= function(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;response&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;uri&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Hiding throbber&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;parents&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'.my-throbber:eq(0)'&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;hide&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// display error in nice jquery_ui dialog&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&amp;lt;div id="newDialogBox"&amp;gt;' &lt;/span&gt;&lt;span style="color: #007700"&gt;+ &lt;/span&gt;&lt;span style="color: #0000BB"&gt;Drupal&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxError&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;response&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;uri&lt;/span&gt;&lt;span style="color: #007700"&gt;) + &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&amp;lt;/div&amp;gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;dialog&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Part of code below is copied from Drupal.ajax.prototype.error &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Undo hide.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;show&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Re-enable the element.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;removeClass&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'progress-disabled'&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;removeAttr&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'disabled'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Reattach behaviors, if they were detached in beforeSerialize().&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;form&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;response&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings &lt;/span&gt;&lt;span style="color: #007700"&gt;|| &lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings &lt;/span&gt;&lt;span style="color: #007700"&gt;|| &lt;/span&gt;&lt;span style="color: #0000BB"&gt;Drupal&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;Drupal&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;attachBehaviors&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;this&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Add our new element to global variable, so other module can get a chance to update it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;Drupal&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;base&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// On a click event we will trigger our custom MyClickEvent which will do the ajax&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The whole idea is to make custom events, suppose you want to load content dynamically on mouseover like a tooltip, you can register a mouseover/hover event &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;click&lt;/span&gt;&lt;span style="color: #007700"&gt;(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// show custom throbber&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // We can add our custom throbber markup here. In this case i already had a throbber markup in my html and was hidden by default &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;parents&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'.my-throbber:eq(0)'&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;show&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Trigger the ajax event&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;$(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;element&lt;/span&gt;&lt;span style="color: #007700"&gt;).&lt;/span&gt;&lt;span style="color: #0000BB"&gt;trigger&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'MyClickEvent'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;false&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp; };&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;In your php code add&lt;br /&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; drupal_add_library&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'system'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ui.dialog'&lt;/span&gt;&lt;span style="color: #007700"&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/1JQjUSnEfbc" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/howto/drupal-7-how-remove-throbber-image-ajax-links#comments</comments>
 <category domain="http://linuxers.org/category/drupal">Drupal</category>
 <pubDate>Tue, 18 Oct 2011 10:59:24 +0000</pubDate>
 <dc:creator>chia</dc:creator>
 <guid isPermaLink="false">1298 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/howto/drupal-7-how-remove-throbber-image-ajax-links</feedburner:origLink></item>
<item>
 <title>Drupal 7: Convert user login block to use ajax</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/fBUBJCaPIEE/drupal-7-convert-user-login-block-ajax</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;In this simple how to we will see how we can easily convert drupal 7 user login block to use ajax. This is one of the many methods of using ajax for login block. We will see few cool  d7 tricks that makes this very easy.
&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;p&gt;username: test&lt;br /&gt;
password: test&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE: I am now maintaining &lt;a rel="nofollow" href="http://drupal.org/project/ajax_register"&gt;ajaxlogin/register module&lt;/a&gt; to use it in your own project download and enable the module and add the AjaxLogin block to your site.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lets get started by defining hook_menu(). We have defined a menu similar to user/password. But this new menu entry will degrade gracefully and we defined 2 other menu items to listen to ajax calls.&lt;br /&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_menu()&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_menu&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Fetch custom user password form via ajax and will have graceful degradation&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin/password'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Request new password'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_password_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_CALLBACK&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'file' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin.pages.inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp; );&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Process login via ajax &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin/user_login'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Ajax user login'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_login_ajax_callback'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_is_anonymous'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_CALLBACK&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'file' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin.pages.inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delivery callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_ajax_deliver_callback'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp; );&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Process user password form via ajax&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin/request_password'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Request password Ajax'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_request_password_ajax_callback'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_CALLBACK&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'file' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin.pages.inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delivery callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_ajax_deliver_callback'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp; );&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This is not required but if you want to replace all links to user/password to your new custom menu entry use this hook. In my case i used hook_menu_alter() and removed the user/password menu item, so i needed this hook to fix broken paths.&lt;br /&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_url_outbound_alter&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_url_outbound_alter&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$path&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$options&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$original_path&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp; if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$path &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user/password'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$path &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin/password/nojs'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;We are defining a custom delivery callback, since we don't want to add any additional js/css along with ajax response. If you care about the page state, use 'ajax_deliver' as 'delivery callback'.&lt;/p&gt;
&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Custom delvery callback&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_ajax_deliver_callback&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page_callback_result&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp; print &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page_callback_result&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_footer&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;We are defining custom block implementation. Its sometimes better to add it to page template directly. In that case i suggest you to use &lt;strong&gt;hook_page_alter&lt;/strong&gt; or &lt;strong&gt;hook_page_build&lt;/strong&gt; to add the variables to page template directly.&lt;/p&gt;
&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_block_info()&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_block_info&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$blocks&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'info' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Ajaxlogin Block'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$blocks&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_block_view&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$delta &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&amp;nbsp; global &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp; if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;uid &lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;amp;&amp;amp; !(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;arg&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;) == &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user' &lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;amp;&amp;amp; !&lt;/span&gt;&lt;span style="color: #0000BB"&gt;is_numeric&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;arg&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;)))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'subject'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = (&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'User login'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'content'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_login_block_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This is similar to user login block we are creating a custom user login form. Yes, we can use user_login_block form and use hook_form_alter. But for the sake of simplicity i have created a similar form.&lt;br /&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Custom login form&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_login_block_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errors'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#markup' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&amp;lt;div id="ajaxlogin-error"&amp;gt;&amp;lt;/div&amp;gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#attached'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'js' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_path&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'module'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin'&lt;/span&gt;&lt;span style="color: #007700"&gt;) . &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'/js/ajaxlogin.js'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#action'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;url&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_GET&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'q'&lt;/span&gt;&lt;span style="color: #007700"&gt;], array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'query' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_destination&lt;/span&gt;&lt;span style="color: #007700"&gt;()));&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#id'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin-login-form'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_login_default_validators&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_login_submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'name'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Username'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;USERNAME_MAX_LENGTH&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;15&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'pass'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'password'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Password'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;60&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;15&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'actions'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'actions'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'actions'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Log in'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#ajax' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'path' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin/user_login'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'request_password'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'link'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Request new password'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#href' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin/password/nojs/'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#id' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajax_link'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#attributes' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'class' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'use-ajax'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;We will create another file ajaxlogin.pages.inc here and add the code below to that file.&lt;/p&gt;
&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Load Request password using ajax &lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_password_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajax'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_user_pass'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajax'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Replace the login form with request for password form&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;[] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_command_replace&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#ajaxlogin-login-form'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page &lt;/span&gt;&lt;span style="color: #007700"&gt;= array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajax'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#commands' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_prepare_response&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Request user password form&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_user_pass&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;module_load_include&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'pages.inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp; global &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#id'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin-user-pass'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#attributes'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'class'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin-user-form'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errors'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#markup' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&amp;lt;div id="ajaxlogin-error"&amp;gt;&amp;lt;/div&amp;gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'name'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Username or e-mail address'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;60&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;max&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;USERNAME_MAX_LENGTH&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;EMAIL_MAX_LENGTH&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Allow logged in users to request this also.&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;uid &lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'name'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'value'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'name'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;mail&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'mail'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#prefix' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&amp;lt;p&amp;gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#markup' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Password reset instructions will be mailed to %email. You must log out to use the password reset link in the e-mail.'&lt;/span&gt;&lt;span style="color: #007700"&gt;, array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'%email' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;mail&lt;/span&gt;&lt;span style="color: #007700"&gt;)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#suffix' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&amp;lt;/p&amp;gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_pass_validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_pass_submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'actions'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'actions'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'actions'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'E-mail new password'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#ajax' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'path' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin/request_password'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),&lt;br /&gt;&amp;nbsp; );&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Process user login form using ajax&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_login_ajax_callback&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Get the form details&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;list(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_get_form&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_process_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#form_id'&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&amp;nbsp; if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;form_get_errors&lt;/span&gt;&lt;span style="color: #007700"&gt;()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// No form error, Lets print a login successful message&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // And do a page reload&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;[] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_command_html&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#ajaxlogin-error'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Login successful. You are now being redirected.'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$settings_data &lt;/span&gt;&lt;span style="color: #007700"&gt;= array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ajaxlogin_reload' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;array_unshift&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_command_settings&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$settings_data&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// throw out errors&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;[] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_command_html&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#ajaxlogin-error'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;theme&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'status_messages'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_json_encode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Request password ajax call&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_request_password_ajax_callback&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;module_load_include&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'pages.inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; list(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_get_form&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_process_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#form_id'&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&amp;nbsp; if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;form_get_errors&lt;/span&gt;&lt;span style="color: #007700"&gt;()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Status containing message "Further instructions have been send to your..."&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;[] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_command_html&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#ajaxlogin-user-pass'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;theme&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'status_messages'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;[] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajax_command_html&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#ajaxlogin-error'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;theme&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'status_messages'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_json_encode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$commands&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Finally little js trick if the login is successful we reloading the page again to load the authenticated user UI.&lt;br /&gt;
Create a file /js/ajaxlogin.js and add the code below.&lt;br /&gt;
&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;(function($) {&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;Drupal&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;behaviors&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin &lt;/span&gt;&lt;span style="color: #007700"&gt;= { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;attach&lt;/span&gt;&lt;span style="color: #007700"&gt;: function(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;context&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Redirect if ajaxlogin_reload property is set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;settings&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;ajaxlogin_reload&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;window&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;location&lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #0000BB"&gt;reload&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&amp;nbsp; &lt;br /&gt;&amp;nbsp; };&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;}) (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;jQuery&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I have attached the module code below.&lt;/p&gt;
&lt;table id="attachments" class="sticky-enabled"&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a href="http://linuxers.org/sites/default/files/ajaxlogin.tgz"&gt;ajaxlogin.tgz&lt;/a&gt;&lt;/td&gt;&lt;td&gt;2.35 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/fBUBJCaPIEE" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/howto/drupal-7-convert-user-login-block-ajax#comments</comments>
 <category domain="http://linuxers.org/tag/ajax">Ajax</category>
 <category domain="http://linuxers.org/tag/login">Login</category>
 <category domain="http://linuxers.org/category/drupal">Drupal</category>
 <enclosure url="http://linuxers.org/sites/default/files/ajaxlogin.tgz" length="2408" type="application/x-gtar" />
 <pubDate>Sun, 04 Sep 2011 08:37:01 +0000</pubDate>
 <dc:creator>chia</dc:creator>
 <guid isPermaLink="false">1287 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/howto/drupal-7-convert-user-login-block-ajax</feedburner:origLink></item>
<item>
 <title>Use free with '-s' option to get a continuous update of memory usage info</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/2dI4U0fR-ag/use-free-s-option-get-continuous-update-memory-usage-info</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;div class="field field-type-filefield field-field-tip-logo"&gt;
    &lt;div class="field-items"&gt;
            &lt;div class="field-item odd"&gt;
                    &lt;img  class="imagefield imagefield-field_tip_logo" width="128" height="128" alt="" src="http://linuxers.org/sites/default/files/tip-logo/canascat-rap-tux-1871.png?1302722679" /&gt;        &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Free command gives a concise information of the memory usage of the system. The program displays the info once and exits. You can use the &amp;lsquo;-s&amp;rsquo; option to update the output continuously. Unlike top command, free doesn&amp;rsquo;t use ncurses, hence instead of a page refresh emulation its simply continuous printing. But it sure does the job.&lt;/p&gt;
&lt;!--break--&gt;
&lt;p&gt;Along with the &amp;lsquo;-s&amp;rsquo; option you need to specify the result delay duration in seconds; decimal works too.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; free -s 3&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; used&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp;&amp;nbsp; buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cached&lt;br /&gt;
Mem:&amp;nbsp;&amp;nbsp; 2516&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1322&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1194&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 69&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 506&lt;br /&gt;
-/+ buffers/cache: 746&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1770&lt;br /&gt;
Swap:&amp;nbsp; 1906&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1906&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; used&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp;&amp;nbsp; buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cached&lt;br /&gt;
Mem:&amp;nbsp;&amp;nbsp; 2516&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1332 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1184 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 69&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 506&lt;br /&gt;
-/+ buffers/cache: 751 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1765&lt;br /&gt;
Swap:&amp;nbsp; 1906&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 1906&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; used&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp;&amp;nbsp; buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cached&lt;br /&gt;
Mem:&amp;nbsp;&amp;nbsp; 2516&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1320&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1196&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 69&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 506&lt;br /&gt;
-/+ buffers/cache: 744&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1772&lt;br /&gt;
Swap:&amp;nbsp; 1906&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1906&lt;/p&gt;
&lt;/blockquote&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/2dI4U0fR-ag" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/quick-tips/use-free-s-option-get-continuous-update-memory-usage-info#comments</comments>
 <category domain="http://linuxers.org/tag/commands">commands</category>
 <category domain="http://linuxers.org/category/beginner">Beginner</category>
 <pubDate>Wed, 13 Apr 2011 19:27:31 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1156 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/quick-tips/use-free-s-option-get-continuous-update-memory-usage-info</feedburner:origLink></item>
<item>
 <title>About:me Firefox addon - View a visual pattern of your Internet activities</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/Dwf8khdRkWs/aboutme-firefox-addon-view-visual-pattern-your-internet-activities</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;So, after the &lt;a href="http://linuxers.org/quick-tips/how-precisely-find-memory-or-ram-being-used-firefox" title="about:memory url"&gt;about:memory&lt;/a&gt; url, I started looking for more about: URI scheme options in &lt;a title="firefox" href="http://linuxers.org/category/firefox"&gt;Firefox&lt;/a&gt; and came across an addon which adds an &amp;ldquo;about:me&amp;rdquo; URL. This addon, &amp;quot;about:me&amp;quot;, makes use of the browsing and downloading history data to give our browser usage pattern a visual representation through graphs and pie charts. Its actually pretty good. You can see a list of most visited websites, your hourly browsing pattern, kind of files you have downloaded and daily download pattern too.&lt;/p&gt;
&lt;!--break--&gt;
&lt;p class="rtecenter"&gt;&lt;a href="http://linuxers.org/sites/default/files/content/firefox/fx-download-stats.png" rel="lightbox"&gt;&lt;img src="http://linuxers.org/sites/default/files/content/firefox/fx-download-stats.png" longdesc="firefox adout:me addon - downloading pattern" style="width: 660px; height: 350px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It doesn&amp;rsquo;t end here. If you click on any of the graph, you&amp;rsquo;ll see a list of the items associated with the stats.&lt;/p&gt;
&lt;p class="rtecenter"&gt;&lt;a href="http://linuxers.org/sites/default/files/content/firefox/fx-download-selected.png" rel="lightbox"&gt;&lt;img src="http://linuxers.org/sites/default/files/content/firefox/fx-download-selected.png" longdesc="firefox about:me addon - selected stats" style="width: 658px; height: 297px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see there are a few issues here.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;For some reason, its showing the download stats of 26th March&lt;/li&gt;
    &lt;li&gt;I don't have an option to configure the stats.&lt;/li&gt;
    &lt;li&gt;I'd prefer an option to choose between hourly, daily, weekly or monthly patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since, its an experimental prototype of an upcoming firefox feature(Yep! this is what it says under the developer comments :D), I shouldn't expect much. But this comment seems to be a few months old. I wonder why it wasn't included in Firefox 4 but it indeed deservers to be an integral feature.&lt;/p&gt;
&lt;p&gt;Install &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/aboutme/" title="about:me addon"&gt;about:me addon&lt;/a&gt;, open &amp;quot;about:me&amp;quot; and check it out.&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/Dwf8khdRkWs" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/article/aboutme-firefox-addon-view-visual-pattern-your-internet-activities#comments</comments>
 <category domain="http://linuxers.org/tag/addon">addon</category>
 <category domain="http://linuxers.org/category/firefox">Firefox</category>
 <pubDate>Tue, 12 Apr 2011 19:31:59 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1155 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/article/aboutme-firefox-addon-view-visual-pattern-your-internet-activities</feedburner:origLink></item>
<item>
 <title>How to: Get the information of your Computer's Hardware components using Dmidecode command</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/kENrsy26iOQ/how-get-information-your-computers-hardware-components-using-dmidecode-command</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;Dmideocde is a wonderful utility to get detailed information about your system&amp;rsquo;s hardware components. It extracts the information from the computer&amp;rsquo;s Desktop Management Interface(DMI) and displays in a human readable format. Please note that, it doesn&amp;rsquo;t probe the devices in order to gather the information, it just reads it from some data structures.&lt;/p&gt;
&lt;!--break--&gt;
&lt;p&gt;If you run dmidecode without any option, it will display everything. Using a few of its options you can easily filter out the output. Lets take a simple example.&lt;/p&gt;
&lt;p&gt;Suppose you want to retrieve information about the L1 &amp;amp;&amp;nbsp;L2 caches present in your system. Using the &lt;em&gt;--type&lt;/em&gt; or &lt;em&gt;-t&lt;/em&gt; option, you can specify the type.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[root]#&lt;/span&gt; dmidecode -t cache&lt;br /&gt;
# dmidecode 2.9&lt;br /&gt;
SMBIOS 2.4 present.&lt;br /&gt;
&lt;br /&gt;
Handle 0x0006, DMI type 7, 19 bytes&lt;br /&gt;
Cache Information&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Socket Designation:&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Configuration: Enabled, Socketed, Level 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Operational Mode: Write Back&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Location: Internal&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Installed Size: 32 KB&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Maximum Size: 32 KB&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Supported SRAM Types: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Installed SRAM Type: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Speed: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Error Correction Type: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System Type: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Associativity: Unknown&lt;br /&gt;
&lt;br /&gt;
Handle 0x0007, DMI type 7, 19 bytes&lt;br /&gt;
Cache Information&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Socket Designation:&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Configuration: Enabled, Socketed, Level 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Operational Mode: Write Back&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Location: Internal&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Installed Size: 2048 KB&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Maximum Size: 4096 KB&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Supported SRAM Types: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Installed SRAM Type: Burst&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Speed: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Error Correction Type: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System Type: Unknown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Associativity: Unknown&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Other members of the type list are:&lt;strong&gt; bios, system, baseboard,  chassis, processor, memory, cache, connector, slot.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Similary, if you want to find the value of a specifc DMI string, then mention the keyword with the &lt;em&gt;--string&lt;/em&gt; or &lt;em&gt;-s&lt;/em&gt; option. Say, you want to find the name of the processor manufacturer. Use the following command.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[root]#&lt;/span&gt; dmidecode -s processor-manufacturer&lt;br /&gt;
Intel&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can find other keywords in the manpage of dmidecode.&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/kENrsy26iOQ" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/howto/how-get-information-your-computers-hardware-components-using-dmidecode-command#comments</comments>
 <category domain="http://linuxers.org/tag/commands">commands</category>
 <category domain="http://linuxers.org/tag/hardware">hardware</category>
 <pubDate>Tue, 12 Apr 2011 12:57:16 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1154 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/howto/how-get-information-your-computers-hardware-components-using-dmidecode-command</feedburner:origLink></item>
<item>
 <title>How to precisely find the amount of memory or RAM being used by Firefox</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/ySbidy40fA8/how-precisely-find-memory-or-ram-being-used-firefox</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;div class="field field-type-filefield field-field-tip-logo"&gt;
    &lt;div class="field-items"&gt;
            &lt;div class="field-item odd"&gt;
                    &lt;img  class="imagefield imagefield-field_tip_logo" width="128" height="128" alt="" src="http://linuxers.org/sites/default/files/tip-logo/1268825567_Firefox.png?1302446904" /&gt;        &lt;/div&gt;
        &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span id="internal-source-marker_0.9485482693609473" style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;"&gt;Until  today, I relied on system monitor &amp;amp; top to find out the amount of  memory being used by &lt;a href="http://linuxers.org/category/firefox"&gt;firefox&lt;/a&gt;. This works fine but there is an even better  way to find out the exact amount used by the browser. Visit  &lt;a href="about:memory"&gt;about:memory&lt;/a&gt; page to find it out. It lists out detailed information about the memory used and its distribution.&lt;/span&gt;&lt;/p&gt;
&lt;p class="rtecenter"&gt;&lt;a rel="lightbox" href="http://linuxers.org/sites/default/files/content/firefox/about-memory.png"&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;img width="613" height="529" alt="" longdesc="memory usage of firefox" src="http://linuxers.org/sites/default/files/content/firefox/about-memory.png" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/ySbidy40fA8" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/quick-tips/how-precisely-find-memory-or-ram-being-used-firefox#comments</comments>
 <category domain="http://linuxers.org/category/firefox">Firefox</category>
 <pubDate>Sun, 10 Apr 2011 14:56:59 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1152 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/quick-tips/how-precisely-find-memory-or-ram-being-used-firefox</feedburner:origLink></item>
<item>
 <title>The history of the origin of grep command</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/6BYUGY2BFF8/history-origin-grep-command</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;Grep is one of the most important tools for a shell user. When it comes to retrieving required data from a bulk of text, grep is your best bet. Its very flexible, powerful and as I came to know today, has an interesting story too.&lt;/p&gt;
&lt;p&gt;It all started a long time ago. With the increasing popularity of regular expressions, the text editor &amp;ldquo;ed&amp;rdquo; included a functionality using which one can print the lines, in the currently edited file, which matches a regular expression. &lt;/p&gt;
&lt;!--break--&gt;
&lt;p&gt;The command syntax is like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;g/reg-ex/p&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which means &amp;ldquo;global regular expression print&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This feature proved to be so much useful that it was turned into a standalone tool which we now know as grep. It is now a default tool in almost all Unix &amp;amp; Unix-like systems.&lt;/p&gt;
&lt;p&gt;In addition to grep, you may also find egrep. In order to extend the regular expression capabilities of grep, extended grep aka egrep was introduced. Although its just a wrapper to the &amp;ldquo;grep -E&amp;rdquo; command.&lt;/p&gt;
&lt;p&gt;This information might not be very useful when you use grep the next time, but its always fun to know the story behind your favourites &lt;img alt="" src="http://linuxers.org/sites/all/modules/fckeditor/fckeditor/editor/images/smiley/msn/regular_smile.gif" /&gt;&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/6BYUGY2BFF8" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/article/history-origin-grep-command#comments</comments>
 <category domain="http://linuxers.org/tag/commands">commands</category>
 <category domain="http://linuxers.org/tag/grep">grep</category>
 <category domain="http://linuxers.org/tag/history">history</category>
 <pubDate>Tue, 05 Apr 2011 17:14:37 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1148 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/article/history-origin-grep-command</feedburner:origLink></item>
<item>
 <title>How to remove or uninstall Nouveau drivers from Ubuntu</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/gBJcX-CB_M0/how-remove-nouveau-drivers-ubuntu</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;So, I blew my Graphic card today&amp;nbsp;&lt;img alt="" src="http://linuxers.org/sites/all/modules/fckeditor/fckeditor/editor/images/smiley/msn/sad_smile.gif" /&gt; and while troubleshooting the issue I tried to install &lt;a href="http://www.nvidia.com/Download/index.aspx?lang=en-us"&gt;proprietary Nvidia drivers&lt;/a&gt;. But in order to do that you are required to remove nouveau drivers from the system. This guide will tell you how to disable and remove nouveau drivers step by step.&lt;/p&gt;
&lt;p&gt;Before starting, you might want to know that nouveau is a project which aims to develop &lt;a title="nouveau drivers" href="http://nouveau.freedesktop.org/wiki/"&gt;open source drivers for Nvidia cards&lt;/a&gt;. When you install Ubuntu, it detects your card and installs these drivers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please note&lt;/strong&gt; that, nouveau drivers manual removal is required only if you are going to install the propreitary nvidia drivers yourself. If this is not the case then directly install the required graphic drivers from System-&amp;gt;Administration-&amp;gt;Hardware drivers. Its the &lt;strong&gt;recommended&lt;/strong&gt; and the most convenient way available.&lt;/p&gt;
&lt;p&gt;For our little endeavour, here is what we are going to do.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;We'll blacklist all the culprit modules,&lt;/li&gt;
    &lt;li&gt;remove all the nvidia* packages and&lt;/li&gt;
    &lt;li&gt;as an extra step we may have to update the initramfs disk because it could be configured to load the modules at startup.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;1) Blacklist the modules. Open the blacklist.conf file.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo vim /etc/modprobe.d/blacklist.conf&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;add the following modules in the file.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;blacklist amd76x_edac   #this might not be required for x86 32 bit users.&lt;br /&gt;
blacklist vga16fb&lt;br /&gt;
blacklist nouveau&lt;br /&gt;
blacklist rivafb&lt;br /&gt;
blacklist nvidiafb&lt;br /&gt;
blacklist rivatv&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Save the file and exit.&lt;/p&gt;
&lt;p&gt;2) Remove all the nvidia* packages&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo apt-get remove --purge nvidia*&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;3) Once you are done with the steps above, reboot, stop the display manager and try to install nvidia drivers.&lt;/p&gt;
&lt;p&gt;Press Ctrl-Alt-F1. Once you are in the text mode, stop the display manager. This will end all the applications, so you better close them yourself before completing this step.&lt;/p&gt;
&lt;p&gt;To stop the display manager use the following command&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo /etc/init.d/gdm stop&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;gdm is for gnome display manager. If you are using kde then use &amp;ldquo;kdm&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Now, run the driver package that you downloaded from Nvidia&amp;rsquo;s website.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo ./NVIDIA-Linux-x86-260.19.44.run&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;4) If you still get the error related to nouveau drivers then you are probably required to update the initramfs disk. Probably it might be configured to load the nouveau drivers. Don't reboot or poweroff, run this command to update the initramfs disk.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo update-initramfs -u&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now reboot and repeat the step 3. This time things should go smoothly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Similar Links&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=1583096"&gt;http://ubuntuforums.org/showthread.php?t=1583096&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=1511043"&gt;http://ubuntuforums.org/showthread.php?t=1511043&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/gBJcX-CB_M0" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/howto/how-remove-nouveau-drivers-ubuntu#comments</comments>
 <category domain="http://linuxers.org/tag/nouveau">nouveau</category>
 <category domain="http://linuxers.org/ubuntu">Ubuntu</category>
 <category domain="http://linuxers.org/category/nvidia">Nvidia</category>
 <pubDate>Tue, 05 Apr 2011 07:14:34 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1140 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/howto/how-remove-nouveau-drivers-ubuntu</feedburner:origLink></item>
<item>
 <title>SuperTuxKart 0.7.1 hits Release Candiadate</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/4y0f6p14LVQ/supertuxkart-071-hits-release-candiadate</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;The release candidate of the upcoming release of &lt;a href="http://linuxers.org/tag/supertuxkart"&gt;SuperTuxkart&lt;/a&gt;, version 0.7.1, is available for download. The RC brings some significant changes from the &lt;a title="supertuxkart 0.7" href="http://linuxers.org/article/version-07-takes-supertuxkart-whole-new-level"&gt;version 0.7, released last december&lt;/a&gt;. The additions include - particle and weather affects, a smoother multi player setup, new shiny suburbs track, many tracks have been renamed and a lot more small changes and bug fixes.&lt;/p&gt;
&lt;p&gt;For more information, take a look at the &lt;a href="http://supertuxkart.blogspot.com/2011/04/supertuxkart-071-release-candidate-1.html"&gt;announcement blog&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;Ubuntu users can easily install it using the &lt;a href="https://launchpad.net/~stk/+archive/dev"&gt;stk/dev PPA&lt;/a&gt;. The RC is available there. Run the following commands to add the PPA and update supertuxkart.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo add-apt-repository ppa:stk/dev&lt;/p&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install supertuxkart&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;What if no ubuntu?&lt;/h3&gt;
&lt;p&gt;Other linuxers can directly run the game from the &lt;a title="supertuxkart 0.7.1 RC download" href="http://sourceforge.net/projects/supertuxkart/files/SuperTuxKart/0.7.1/"&gt;binary available on the project&amp;rsquo;s homepage&lt;/a&gt;. Just download the one for your architecture, extract the package and run &amp;ldquo;run_game.sh&amp;rdquo;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; tar -xvjf supertuxkart-0.7.1-rc1-linux-glibc2.12-i686.tar.bz2&lt;/p&gt;
&lt;/blockquote&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/4y0f6p14LVQ" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/article/supertuxkart-071-hits-release-candiadate#comments</comments>
 <category domain="http://linuxers.org/tag/games">Games</category>
 <category domain="http://linuxers.org/tag/supertuxkart">SuperTuxKart</category>
 <pubDate>Mon, 04 Apr 2011 20:13:29 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1142 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/article/supertuxkart-071-hits-release-candiadate</feedburner:origLink></item>
<item>
 <title>Correct your habit of incorrectly typing "ls" using the program "sl"</title>
 <link>http://feedproxy.google.com/~r/Linuxers/~3/JlbPSSbemdw/correct-your-habit-incorrectly-typing-ls-using-program-sl</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;Almost everyone of us would have made the mistake of incorrectly typing &amp;ldquo;sl&amp;rdquo; or &amp;ldquo;LS&amp;rdquo; instead of a simple &amp;ldquo;ls&amp;rdquo;. Seriously! how difficult could it be to type those two letters? But we keep making the same mistake over and over. In order to correct this problem, there is a wonderful program name &amp;ldquo;sl&amp;rdquo;. It shows a small animation of a steam locomotive(abbr. sl) every time we type &amp;ldquo;sl&amp;rdquo; or &amp;ldquo;LS&amp;rdquo;. It may sound funny as of now, but trust me, its really annoying when you are doing some serious work and suddenly a locomotive comes out of nowhere, running across the terminal.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp; annoying part is that it doesn't respond to Ctrl-C and there is nothing one can do in such a short time other than viewing it get past. Now that I'm thinking, it'd be fun to pull a &lt;a href="http://linuxers.org/pranks"&gt;prank&lt;/a&gt; on someone who isn't aware of sl.&lt;/p&gt;
&lt;p&gt;Here is how you install the package.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sudo apt-get install sl&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, its annoying nature does makes it work. Sooner or later you stop making the mistakes. Here are two different versions of the locomotive.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sl -a&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="rtecenter"&gt;&lt;a rel="lightbox" href="http://linuxers.org/sites/default/files/content/misc/sl-a2-cut.png"&gt;&lt;img src="http://linuxers.org/sites/default/files/content/misc/sl-a2-cut.png" style="width: 653px; height: 330px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class='root'&gt;[shredder12]$&lt;/span&gt; sl -l&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="rtecenter"&gt;&lt;a rel="lightbox" href="http://linuxers.org/sites/default/files/content/misc/sl-l-cut.png"&gt;&lt;img alt="" style="width: 655px; height: 259px;" src="http://linuxers.org/sites/default/files/content/misc/sl-l-cut.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;!-- google_ad_section_end --&gt;&lt;img src="http://feeds.feedburner.com/~r/Linuxers/~4/JlbPSSbemdw" height="1" width="1"/&gt;</description>
 <comments>http://linuxers.org/article/correct-your-habit-incorrectly-typing-ls-using-program-sl#comments</comments>
 <category domain="http://linuxers.org/tag/commands">commands</category>
 <category domain="http://linuxers.org/category/software">software</category>
 <pubDate>Mon, 04 Apr 2011 17:55:44 +0000</pubDate>
 <dc:creator>shredder12</dc:creator>
 <guid isPermaLink="false">1141 at http://linuxers.org</guid>
<feedburner:origLink>http://linuxers.org/article/correct-your-habit-incorrectly-typing-ls-using-program-sl</feedburner:origLink></item>
</channel>
</rss>
