<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>geedew :: Web Design, Programming, Professionalism &#187; JavaScript</title>
	<atom:link href="http://www.geedew.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geedew.com</link>
	<description>Web Design, Web Programming, Programming on Linux, CSS, JavaScript, PHP, HTML5</description>
	<lastBuildDate>Thu, 22 Jul 2010 16:26:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Advanced button theming on jQuery UI Dialog</title>
		<link>http://www.geedew.com/2010/06/10/advanced-button-theming-on-jquery-ui-dialog/</link>
		<comments>http://www.geedew.com/2010/06/10/advanced-button-theming-on-jquery-ui-dialog/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 15:23:23 +0000</pubDate>
		<dc:creator>Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.geedew.com/?p=200</guid>
		<description><![CDATA[There is a very annoying bugfeature that I have found when using jQueryUI. It&#8217;s not the themes, they work great, in fact, they are the best thing since sliced bread. But in a &#8216;Cupertino.esc&#8217; way, they provide too much simplicity over the functionality that I require. This post aims to solve that in a progressive [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=b02858dd9961de60a8a7d0f9efe9c758&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=20 height=20/><p>	There is a very annoying <del datetime="2010-06-10T14:54:13+00:00">bug</del>feature that I have found when using jQueryUI.  It&#8217;s not the themes, they work great, in fact, they are the best thing since sliced bread.  But in a &#8216;Cupertino.esc&#8217;  way, they provide too much simplicity over the functionality that I require.  This post aims to solve that in a <em>progressive enhancement</em> sorta way.  I am using jQuery 1.4.2. with jQuery UI 1.8.2, it doesn&#8217;t matter what theme  you use with this, but I prefer <em>redmond</em>.</p>
<p><span id="more-200"></span>
<p>
	Let&#8217;s take a look at the core issue.  Here is what a typical dialog looks like in jQueryUI 1.8.2 with some nice buttons.</p>
<div id="attachment_203" class="wp-caption aligncenter" style="width: 310px"><a rel="attachment wp-att-203" href="http://www.geedew.com/2010/06/10/advanced-button-theming-on-jquery-ui-dialog/screen-capture-1/"><img class="size-medium wp-image-203" title="Typical 'Redmond' jQueryUI Dialog" src="http://cdn.geedew.com/wp-content/uploads/2010/06/screen-capture-1-300x191.png" alt="Typical 'Redmond' jQueryUI Dialog" width="300" height="191" /></a><p class="wp-caption-text">Perfect example of a jQueryUI Dialog</p></div>
<p>
	Here&#8217;s the simple code for this.</p>
<pre class="brush: xml;">
&lt;article id=&quot;dialogs&quot;&gt;
	&lt;a href=&quot;javascript: void(null);&quot; id=&quot;dialogbutton&quot;&gt;Open Dialog&lt;/a&gt;
	&lt;div title=&quot;this is my test this is my test this is my test this is my test&quot; id=&quot;dialogtest&quot;&gt;
	This is a div dialog test. This is a div dialog test. This is a div dialog test. This is a div dialog test. This is a div dialog test.
	&lt;/div&gt;
&lt;/article&gt;
</pre>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function() {
		/* Create a dialog */
		$(&quot;#dialogtest&quot;).dialog({
                        title: &quot;Alert!&quot;,
			modal: true,
			buttons: {
				&quot;Ok&quot;: function() {
					$(this).dialog(&quot;close&quot;);
				},
				&quot;Cancel&quot;: function() {
					$(this).dialog(&quot;close&quot;);
				}
			}
		});

		/* Add Dialog Button Functionality */
		$('#dialogbutton').click(function(){
			$('#dialogtest').dialog('open');
			return false;
		});
	});

&lt;/script&gt;
</pre>
<p>	That&#8217;s really great, I mean that code is so small and yet you can get such a great looking item out of it.  So how can I have a problem with that? Well let me tell you how the buttons are made, you have a name and then you have that name point to a function.  The name is the text of the button, the function is the action of the button.  And that&#8217;s it. Period.</p>
<p>
	Now, I find it great that I can use these simplistic featuresets and get &#8216;get by&#8217; but normally my &#8220;Cancel don&#8217;t ever touch me button&#8221; is the color red(ish) while my &#8220;Oh you need to hit me to move on&#8221; button is the color green(ish).  But you cannot do that (easily) with this current setup.  In fact it&#8217;s very sloppy to force this setup into doing that and it ends up using a great amount of code just to do one thing, add a class.</p>
<p>
	To solve this, I did what any self respecting JavaScript ninja would do, <del datetime="2010-06-10T14:23:34+00:00">I said goodbye to jQuery UI</del> I opened up the source code and took a peek, found out where I could attack (fix) the code and I did it.<br />
        So before I show you the code, I will show you how I decided buttons should/could be made.  My process is 100% backward compatible, yet more difficult and easier to mess up (the original goal of jQueryUI was obviously to make it as simple as possible).</p>
<p>	Buttons with my code changes can now be made like this</p>
<pre class="brush: jscript;">
buttons: {
	&quot;Ok&quot;:  function() {
		$(this).dialog(&quot;close&quot;);
	},
	&quot;Cancel&quot;: {
		action : function() {
			$(this).dialog(&quot;close&quot;);
		},
		type : &quot;cancel&quot;
	}
</pre>
<pre class="brush: css;">
/* This is poor CSS by design to be simple and readable */
 div.ui-dialog-buttonpane button.cancel { background:none; border:0px none;color:red; }
</pre>
<p>	and the old way of doing it will still work just fine as well.</p>
<p>	I&#8217;ve gone ahead and added a few features, namely it is now name-points-to-object instead of the old name-points-to-function mentality.  This object has two attributes: action and type.  Action is the old function() that was pointed to and it will be called when this button is clicked. Type is the new feature on the block, it&#8217;s just a CSS class that is added to the function using jQuery.addClass.  I&#8217;ve tried to keep is simple, and at the same time, make it robust and backward compatible.  Here&#8217;s a simple change that is possible using this feature.</p>
<p><a rel="attachment wp-att-210" href="http://www.geedew.com/2010/06/10/advanced-button-theming-on-jquery-ui-dialog/screen-capture-2/"><img class="aligncenter size-medium wp-image-210" title="What jQuery UI dialog buttons should be able to do" src="http://cdn.geedew.com/wp-content/uploads/2010/06/screen-capture-2-300x203.png" alt="A jQuery UI with different colored buttons" width="300" height="203" /></a>
<p>
	Now my dialogs can look like this when I want them to.  This is a big usability thing (make the buttons descriptive, not just in text but in color/design and function).</p>
<p>	So the secret sauce to all of this is actually an extension of the jQueryUI 1.8.2 Dialog code (more like rewrite of some of the code).  This code can only be ran AFTER jQueryUI 1.8.2 has been created, otherwise you will get an error.  I placed this code into the jQueryUI 1.8.2 custom.js file itself for easy keeping; just drop it at the bottom of the file.</p>
<pre class="brush: jscript;">
/* TorchUI dialog button fix */
(function($) {
	var _createButtons = $.ui.dialog.prototype._createButtons;
	$.ui.dialog.prototype._createButtons = function(buttons) {
		var self = this,
		hasButtons = false,
		uiDialogButtonPane = $('&lt;div&gt;&lt;/div&gt;')
			.addClass(
				'ui-dialog-buttonpane ' +
				'ui-widget-content ' +
				'ui-helper-clearfix'
			);
		// if we already have a button pane, remove it
		self.uiDialog.find('.ui-dialog-buttonpane').remove();

		if (typeof buttons === 'object' &amp;&amp; buttons !== null) {
			$.each(buttons, function() {
				return !(hasButtons = true);
			});
		}
		if (hasButtons) {
			$.each(buttons, function(name, fn) {
                        /* Begin the code change here */
			// Check to see if fn is being passed in as a funciton, assume it's an object if not.
			 	if(!$.isFunction(fn)) {
			 		var buttonclass=fn.type;var func=fn.action; }
			 	else {
			 		var func=fn; var buttonclass=&quot;&quot;; }
				var button = $('&lt;button type=&quot;button&quot;&gt;&lt;/button&gt;')
					.text(name)
				/* Add a class to the button, if there is a class */
					.addClass(buttonclass)
					.click(function() { func.apply(self.element[0], arguments); })
					.appendTo(uiDialogButtonPane);
				if ($.fn.button) {
					button.button();
				}
			});
			uiDialogButtonPane.appendTo(self.uiDialog);
		}
	}
})(jQuery);
</pre>
<p>	If you have questions, please respond, I promise not to take them personally <img src='http://cdn.geedew.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2010/06/10/advanced-button-theming-on-jquery-ui-dialog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery UI Dialog Accessibility</title>
		<link>http://www.geedew.com/2010/02/25/jquery-ui-dialog-accessibility/</link>
		<comments>http://www.geedew.com/2010/02/25/jquery-ui-dialog-accessibility/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 02:52:17 +0000</pubDate>
		<dc:creator>Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[508]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[BugFix]]></category>
		<category><![CDATA[Defects]]></category>
		<category><![CDATA[jQuery UI]]></category>

		<guid isPermaLink="false">http://www.geedew.com/?p=185</guid>
		<description><![CDATA[jQuery UI is an amazing product. It&#8217;s not because it offers the best features, or that it offers the best solution, it&#8217;s that it offers a large degree of support for years to come. Which is saying a lot for something that is nothing more than JavaScript. It&#8217;s certainly something that many enterprises have begun [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=b02858dd9961de60a8a7d0f9efe9c758&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=20 height=20/><p>    jQuery UI is an amazing product.  It&#8217;s not because it offers the best features, or that it offers the best solution, it&#8217;s that it offers a large degree of support for years to come.  Which is saying a lot for something that is nothing more than JavaScript.  It&#8217;s certainly something that many enterprises have begun to look at and look for in the development world.  At my job at Coventry Healthcare, I&#8217;m responsible for the User Interfaces and generally the User Experience across some very highly visible web applications.  One of the most recent developments in our line of business is the risk of not having an accessible site (we fall under Section 508 guidelines because of our Medicare/Medicaid users).  jQuery UI has literally allowed me to very easily create and maintain large amounts of code so that I can spend more time making sure that it follows WCAG 2.0 and WARIA (which should cover us for S508).<span id="more-185"></span>
</p>
<p class="entry-text">So recently I discovered a very nasty bug dealing with jQuery UI dialog (withe modal:true) widgets that seems to only occur in Internet Explorer.  It goes like this:  If you are using a dialog with a screen reader, your main mode of navigation is with the keyboard.  This is typically driven via the focus on elements.  In jQuery, focus is demanded on the dialog because of the modal command.  You are unable to focus on anything other than the dialog and it&#8217;s elements.  Here&#8217;s the issue however, jQuery successfully  can keep focus on the dialog in all browsers tested (FF, Safari, Chrome) so that the focus cannot leave the dialog.  However in Internet Explorer (6, 7 and 8 ) your focus can get to the address bar, simply by tabbing to it.  Once in the address bar, jQuery is no longer able to track and handle the focus, so inevitable, after tabbing through the menu, focus come back to the window.  But instead of going to the dialog, it goes to the first element that can be tabbed to, which is undoubtedly BEHIND the modal dialog.  jQuery, subsequently locks the tabbing at this point, most likely because you have focus on and element that is unable to be focused (in jQuery&#8217;s dialog algorithm).
</p>
<p class="entry-text">So I cannot have this as that would literally cut 75% of my users from being able to use just a keyboard with the sites I&#8217;m maintaining.  So I had to find a solution.  First, IE seems to be the only browser with this issue and it has something to do with the fact that the focus moves out of the DOM&#8217;s control (out of jQuery&#8217;s control).  But the focus would always at least get back to the first element that could be tabbed to, and then lock.  So I devised a plan.  What if the first element, when focused, looks for an open dialog and if it is there, focuses on that dialog?  So I tried it out, like this.
</p>
<pre class="brush: jscript;">
$(document).ready(function() {
    $(&quot;:tabbable:first&quot;).focus(function() {
           $(&quot;.ui-dialog:visible:last :tabbable:first&quot;).focus();
    })
});
</pre>
<p class="entry-text">
Amazingly enough, this is the exact solution to the issue. This is how it reads.</p>
<ol>
<li>On page load</li>
<li>Get the first element that can be tabbed to in the body</li>
<li>When this element gains focus, check for a visible dialog</li>
<li>Take the visible dialog that is last (the last one drawn in the html) and get the first element that can be tabbed in it</li>
<li>give focus to that first element.</li>
</ol>
<p class="entry-text">
Now, in IE, when focus returns to the document, it goes to the dialog box, specifically, the close icon on the dialog box, thereby not breaking the fact that there a modal open on the page.
</p>
<p class="entry-text">
Now, there are some issues with this.  For one, the code is just assuming that the last dialog in the html that is visible is the one that is to be focused on.  Quite frankly, that&#8217;s what I need it for, as I try not to overlay dialogs, and when it do, the newest one is normally always on top.  However, there are times where you may swap between two dialogs, and the one that is on top is not the last dialog in the html, you would still have this issue in this case.  But for probably the other 95% of the cases, this is a clean and easy way to &#8216;fix&#8217; the accessibility issue in IE with jQuery UI dialog modals.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2010/02/25/jquery-ui-dialog-accessibility/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usability and a Simple JavaScript hovering menu</title>
		<link>http://www.geedew.com/2009/12/05/usability-and-a-simple-javascript-hovering-menu/</link>
		<comments>http://www.geedew.com/2009/12/05/usability-and-a-simple-javascript-hovering-menu/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 02:20:11 +0000</pubDate>
		<dc:creator>Drew</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://geedew.com/blog/?p=53</guid>
		<description><![CDATA[Many web developers ask &#8216;what is usability?&#8217;.  This is one of those topics that I can explain, but it may be easier to demonstrate. My this experiences have led to some principles; one of them is that if I&#8217;m going to build it, it must be usable.   Unfortunately, many sites that I like, that tout [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=b02858dd9961de60a8a7d0f9efe9c758&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=20 height=20/><p>Many web developers ask &#8216;what is usability?&#8217;.  This is one of those topics that I can explain, but it may be easier to demonstrate. My this experiences have led to some principles; one of them is that if I&#8217;m going to build it, it must be usable.   Unfortunately, many sites that I like, that tout usability, screw up one important concept that annoys me greatly.</p>
<p>I ask myself, &#8220;when using a menu, why do I have to drag my mouse from one button to the next, and fear losing the menu if I cross it&#8217;s border anywhere?&#8221;  Some menus are just annoying because they disappear mid mouse move, some are extremely hard to use because of several layers of menus, some I have resorted to using `tabs` to get to the correct menu item.  It&#8217;s unfortunate that people can&#8217;t get this right.<br />
<span id="more-53"></span><br />
I have a simple fix that hopefully sharing it will help others.  It&#8217;s basically a menu that buffers the time you are hovering, that way if you mistakenly move your mouse into the wrong area, you have a brief period of time to correct yourself.</p>
<h2>Start with the HTML code:</h2>
<pre class="brush: xml;">
&lt;ul id=&quot;menu&quot;&gt;
	&lt;li class=&quot;nav&quot;&gt;&lt;a&gt;&lt;span&gt;ONE&lt;/span&gt;&lt;/a&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;one&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;two&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;three&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;four&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;&lt;span&gt;TWO&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li class=&quot;nav&quot;&gt;&lt;a&gt;&lt;span&gt;THREE&lt;/span&gt;&lt;/a&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;one&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;two&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;three&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;four&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li class=&quot;nav&quot;&gt;&lt;a&gt;&lt;span&gt;FOUR&lt;/span&gt;&lt;/a&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;one&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;two&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;three&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a&gt;&lt;span&gt;four&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>The menu is a simple list within a list.  There are essentially only four main list items; ONE, TWO, THREE and FOUR.  Each of this list items has their own list of list items generically named one, two, three and four.  I personally stick with lists as my menu&#8217;s of choice because they degrade gracefully in case of CSS/JavaScript issues.</p>
<p>This list by itself isn&#8217;t much, in fact it&#8217;s not even a menu. CSS will be needed to really make it work correctly.</p>
<pre class="brush: css;">

#menu li {
	list-style:none;
	float:right; /* Makes IE 6,7,8 act like FF */
	position: relative;}
#menu li a {
	display:block;
	width: 160px;
	height:35px;
	margin-top: 5px;}
#menu li a span{
	padding-left:10px;
	line-height:2.8em;
	color: #000000;
	font-weight:700;}
#menu li a:hover {
	font-weight:bold;}

#menu li ul li a:hover span{ color: #222222; }

	#menu li ul {
		margin:0px;
		position:absolute;
		left: 160px;
		top:-90px;}
	#menu li ul li {
		padding:0px;
		border:0px;
		border-collapse:collapse;
		margin:0px;
		height:34px;}
	#menu li ul li a{ margin:0px;padding:0px;border:0px;}
	#menu li ul li a span{
		display:block;
		padding-top:7px;
		font-weight:100;
		line-height:1em;
		font-size: 83%;}
</pre>
<p>This is some simple CSS that will make the UL/LI lists to really act like lists.  Now the only issue is that you need it to act like a list. So the final piece of code to this puzzle is to add some JavaScript.  I am using the jQuery library as my choice for creating this script, so it&#8217;s necessary to have that package (1.3+) installed for this to work. You can drop this script into the footer element inside of &#8216;script&#8217; tags so it will run.  It will run automatically on page load.</p>
<pre class="brush: jscript;">
$(document).ready(function() {
	/* Setup the Menu */
	$(&quot;#menu &gt; li &gt; ul&quot;).hide();

	$(&quot;#menu li.nav&quot;).hover(
		/* on mouseover */
		function(e) {
			hoverMenu = this;
			if(this == closingMenu) {
				clearTimeout(closeMenu);
				clearTimeout(openMenu);
				$(this).find(&quot;ul:first&quot;).show(&quot;fast&quot;);
			} else {
				var newMenuOpen = function() {
					$(hoverMenu).siblings(&quot;.nav&quot;).find(&quot;ul:first&quot;).hide();
					$(hoverMenu).find(&quot;ul:first&quot;).show(&quot;fast&quot;);
				}
				openMenu = setTimeout(newMenuOpen, 500);
			}

		},
		/* on mouseout */
		function(e) {
			closingMenu = this;
			var closeMenu = function() {
				$(closingMenu).find(&quot;ul:first&quot;).fadeOut(&quot;fast&quot;);
			}
			closeMenu = setTimeout(closeMenu, 500);
		}
	);
});
</pre>
<p> The final product is quite a nice and simple dynamic menu that adds just the right touch of usability.  Now, typically, I would never say that a menu with sub menus popping up everywhere is something of a usability menu system, it&#8217;s not.  But sometimes, a nice menu like this is needed, especially if there is a lot of information and &#8216;drill downs&#8217; that need to be accessed quickly.  In any case, you can see my <a href="http://www.geedew.com/projects/easyMenu/index.html">demo</a> here.  Leave some comments if you have any questions, and enjoy! You can also see a fully implemented version at <a href="http://x-sqared.com">Xcessorries Squared.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2009/12/05/usability-and-a-simple-javascript-hovering-menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scribd and Slide mode : Why is my height wrong?</title>
		<link>http://www.geedew.com/2009/07/29/scribd-and-slide-mode-why-is-my-height-wrong/</link>
		<comments>http://www.geedew.com/2009/07/29/scribd-and-slide-mode-why-is-my-height-wrong/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 05:06:02 +0000</pubDate>
		<dc:creator>Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Scribd]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[BugFix]]></category>

		<guid isPermaLink="false">http://www.geedew.com/?p=106</guid>
		<description><![CDATA[While recently using Scribd&#8216;s services, I came across a very nasty bug, and a nice clean fix.  Scribd allows developers to tap into a great, but somewhat basic API.  One of these settings allows a developer to set a default &#8216;mode&#8217; before the API then builds the flash calls necessary to display the document.  The [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=b02858dd9961de60a8a7d0f9efe9c758&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=20 height=20/><p>While recently using <a href="http://www.scribd.com/about">Scribd</a>&#8216;s services, I came across a very nasty bug, and a nice clean fix.  <a href="http://www.scribd.com/about">Scribd</a> allows developers to tap into a great, but somewhat basic <a href="http://www.scribd.com/developers/api?method_name=Javascript+API">API</a>.  One of these settings allows a developer to set a default &#8216;mode&#8217; before the <a href="http://www.scribd.com/developers/api?method_name=Javascript+API">API</a> then builds the flash calls necessary to display the document.  The issue comes up when you choose the &#8216;slide&#8217; mode as the loading view.  No matter what &#8216;height&#8217; you set, with &#8216;auto_size&#8217; set to false, the height will adjust to the wrong height.</p>
<p><span id="more-106"></span></p>
<p class="entry-text">
You can jump to the code <a href="#finishedCode">here</a>, or continue.</p>
<p class="entry-text">
I started by writing some simple code that follows the API.
</p>
<pre class="brush: jscript;">
scribd_doc.addParam( 'mode', 'slide' );
scribd_doc.addParam( 'height', 800 );
scribd_doc.addParam( 'width', 600 );
scribd_doc.addParam( 'jsapi_version', 1 );
scribd_doc.addParam( 'auto_size', false );
scribd_doc.write( 'flash_catalog' );
</pre>
<p class="entry-text">Where &#8216;flash_catalog&#8217; is the container div of the <a href="http://www.scribd.com/about">Scribd</a> PDF.</p>
<p class="entry-text">
This however led me to have a height that follows the default rules (width multiplier of 85/110) where the height matches how much space is in the window. So I progressed further with this code.</p>
<pre class="brush: jscript;">
var oniPaperReady = function(e){
 $(&quot;#flash_catalog embed&quot;)
.attr(&quot;wmode&quot;,&quot;transparent&quot;)
.hide()
.css({&quot;height&quot;:&quot;800px&quot;, &quot;width&quot;:&quot;600px&quot;})
.show();
}

scribd_doc.addEventListener( 'iPaperReady', oniPaperReady );
scribd_doc.addParam( 'mode', 'slide' );
scribd_doc.addParam( 'jsapi_version', 1 );
scribd_doc.addParam( 'auto_size', false );
scribd_doc.write( 'flash_catalog' );
</pre>
<p class="entry-text">So now I am dropping in a listener in the API to wait for the document to load.  I then hide the &#8216;embed&#8217; flash information, then add the height and width, then re-show the flash element.<?p></p>
<p class="entry-text">
You may notice, I&#8217;m using <a href="http://jquery.com/">jQuery</a>, in which you can do the same thing with regular JavaScript, although quite a bit more complicated (ask if you really really need that code).</p>
<p class="entry-text">
An astute reader would also notice one thing, I&#8217;m not adjusting for an &#8216;object&#8217; tag, only the &#8216;embed&#8217; tag (the difference for flash between different browsers).  I figured out this novice mistake while testing in Internet Explorer.  Here&#8217;s the finished code, that works, removing the nasty height issue.</p>
<div id="finishedCode">
<pre class="brush: jscript;">
var scribd_doc = scribd.Document.getDoc( #######, 'key-*******************' );

var oniPaperReady = function(e){
$(&quot;#flash_catalog embed&quot;)
.attr(&quot;wmode&quot;,&quot;transparent&quot;)
.hide()
.css({&quot;height&quot;:&quot;800px&quot;, &quot;width&quot;:&quot;600px&quot;})
.show();

$(&quot;#flash_catalog object&quot;)
.attr(&quot;wmode&quot;,&quot;transparent&quot;)
.hide()
.css({&quot;height&quot;:&quot;800px&quot;, &quot;width&quot;:&quot;600px&quot;})
.show();
}

scribd_doc.addEventListener( 'iPaperReady', oniPaperReady );
scribd_doc.addParam( 'mode', 'slide' );
scribd_doc.addParam( 'jsapi_version', 1 );
scribd_doc.addParam( 'auto_size', false );
scribd_doc.write( 'flash_catalog' );
</pre>
</div>
<p class="entry-text">The final word; I&#8217;m adding the transparent mode so that I can then have a menu that drops on top of the flash.  This works very well!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2009/07/29/scribd-and-slide-mode-why-is-my-height-wrong/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making a better notification plugin: jQuery</title>
		<link>http://www.geedew.com/2009/07/22/making-a-better-notification-plugin-jquery/</link>
		<comments>http://www.geedew.com/2009/07/22/making-a-better-notification-plugin-jquery/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 03:33:18 +0000</pubDate>
		<dc:creator>Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Notify]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://www.geedew.com/?p=100</guid>
		<description><![CDATA[I find myself at a crossroads. I really like using jQuery, and I really like not having to write my own plugins as there are some really good ones out there. But I have run into a problem when it comes to a notification system. Let&#8217;s take a step back and discuss the purpose for [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=b02858dd9961de60a8a7d0f9efe9c758&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=20 height=20/><p>I find myself at a crossroads.  I really like using jQuery, and I really like not having to write my own plugins as there are some really good ones out there.  But I have run into a problem when it comes to a notification system.  Let&#8217;s take a step back and discuss the purpose for a minute.</p>
<p class="entry-text" style="background-color:#F7FFBF">
** Update 7/29/2009**<br />
I now have a page dedicated to this at <a href="http://www.alldorks.com/wordpress/notify">http://www.alldorks.com/wordpress/notify</a> where you can also find the source code repository.
</p>
<p><span id="more-100"></span></p>
<p class="entry-text">Within a website&#8217;s user interface you have common tasks.  Of late, with ajax, overlays|dialogs|lightboxes have become common place.  Usually developers will use these to replace their `alerts`, `confirms` and leave it at that.  But what happens when a user does something and they need to be told &#8220;Hey, I got that and it was all ok&#8221;.  So you simply make an `alert` and let them know.  But then you have created this thing that they must read, click and then move on.  Add that up, and a user that is moving right along, may have to do 10 clicks a minute extra.  Or better yet, daily tasks are now incorporating clicks that are basically pointless.  A better solutions is to open up a notification, not unlike what is found in OSX, Gnome and Windows.  I&#8217;m talking about those little rounded popups that show up in some corner and then disappear.  Those&#8230; are notifications, and have been missing from most websites that really need them.</p>
<p class="entry-text">So now you know what I wanted.  A good looking notification system that is robust, adaptive, lightweightish, easy to work with, etc, etc.  Well, I couldn&#8217;t find that.  I did find mainly two that are out there, <a target="_blank" href="http://stanlemon.net/projects/jgrowl.html">jGrowl</a> and <a target="_blank" href="http://boedesign.com/2009/07/11/growl-for-jquery-gritter/">Gritter</a>.  Both are Okay, but I run into issues with both of them whenever I&#8217;m coding. Namely, what if I want multiple notification areas?  That shouldn&#8217;t be that hard, but it becomes a nightmare to edit and maintain their code.  Also, what if I miss the notification (getting coffee), how can I get it back?  Finally, why is it so difficult to change how these dang things look!  So I put my foot down and decided, &#8220;I will go it alone on this one&#8221;.  I rolled up my sleeves and put my knowledge together to form a better notification plugin.  I&#8217;m calling it &#8220;notify&#8221;, and I think it will quickly become a better platform for notifications.</p>
<p class="entry-text">I have a few things that I have been focused on:
</p>
<ul>
<li>Multiple notification spots (middle, top-left, unlimited with css)</li>
<li>Simple default notifications, completely customizable with options</li>
<li>Support for Class A browsers minus IE6, with hacks later to work it into IE6</li>
<li>Notification history manager, along with stickyness, and missed notices handling</li>
</ul>
<p class="entry-text">The list goes on from there.  It&#8217;s probably best to just play with the code, for now, it&#8217;s very raw, I will probably host a page on http://alldorks.com/ for it soon, along with a version control system to get the code from.  In any case, enjoy!</p>
<p class="entry-text">
<a href="http://geedew.com/notify.html" target="_blank">View the Demo Page, code is in the page </a></p>
<p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2009/07/22/making-a-better-notification-plugin-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
