<?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>Web 3.0, 6 Bladed Razors, 7 Minute Abs &#187; Conservative Design</title>
	<atom:link href="http://www.zachleat.com/web/tag/conservative-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zachleat.com/web</link>
	<description></description>
	<lastBuildDate>Mon, 06 Feb 2012 17:09:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Rethinking JavaScript Grids and DataTables</title>
		<link>http://www.zachleat.com/web/rethinking-javascript-grids-and-datatables/</link>
		<comments>http://www.zachleat.com/web/rethinking-javascript-grids-and-datatables/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 20:29:26 +0000</pubDate>
		<dc:creator>Zach Leatherman</dc:creator>
				<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Conservative Design]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://www.zachleat.com/web/?p=122</guid>
		<description><![CDATA[In the world of front end engineering, one must consider the end-user of the interface first, and above all other things. The priorities should not start with development ease, nor external library preference. The priorities should start with the needs of the consumer of your end product. Evolution of your engineering skill is also a [...]]]></description>
			<content:encoded><![CDATA[<p>In the world of front end engineering, one must consider the end-user of the interface first, and above all other things.  The priorities should not start with development ease, nor external library preference.  The priorities should start with the needs of the consumer of your end product.</p>
<p>Evolution of your engineering skill is also a vital trait in this world, which means that as a developer increases his knowledge of good practices and proper methods, sometimes he must shirk his previous assertions about the world as he previously knew it.  And today I&#8217;m shirking a staple of the front end as all web users know it: The Grid (DataTable) Component.</p>
<p>Of course, I&#8217;ve written a few articles in the past about the <a href="http://developer.yahoo.com/yui/datatable/">YUI DataTable</a>, during my long love affair with Yahoo&#8217;s User Interface library.  Another popular one is jQuery&#8217;s <a href="http://tablesorter.com/docs/">TableSorter</a>.  Then there&#8217;s the <a href="http://dojotoolkit.org/book/dojo-book-0-9/docx-documentation-under-development/grid">Dojo Grid</a>, a component <a href="http://www.sitepen.com/blog/2007/09/16/the-dojo-grid/">inherited from TurboAjax</a>.  ExtJS has a variety of nice examples as well for their <a href="http://extjs.com/deploy/dev/examples/#sample-1">Ext 2.0 Grid</a>.</p>
<p>And after using these Grids and DataTables, I certainly respect the programming that went into developing these components.  But let&#8217;s take a step back for a second.  Why do the users need the bells and whistles in these components?  Are they worth the extra load time and complexity they add to the interface?</p>
<p>All we&#8217;re doing here is putting a nice coat of paint on a &lt;table&gt; tag.  Sure, it might have some nice ancillary features like Ajax Data Loading, but those don&#8217;t really matter &#8211; they are things that can be easily performed with some good Ajax and DOM insert utility functions.  In fact, most of the core features included in these components could be described as feature creep, and not beneficial to the end user at all.  Feature creep contributes to code bloat, which means the user is downloading bytes to their web browser that they don&#8217;t need, which can hamper performance.  Libraries usually have online examples of their components, and the include sizes are seen below.  (Gzip compression not considered)</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>JavaScript Size</th>
<th>Minimized</th>
<th>Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>YUI DataTable</td>
<td>216.6 KB</td>
<td>Minimized</td>
<td><a href="http://developer.yahoo.com/yui/examples/datatable/dt_basic_clean.html">Example</a></td>
</tr>
<tr>
<td>Dojo Grid</td>
<td>338.4 KB</td>
<td>Unminimized</td>
<td><a href="http://dojotoolkit.org/book/dojo-book-0-9/docx-documentation-under-development/grid/simple-grid">Example</a></td>
</tr>
<tr>
<td>Ext Grid</td>
<td>545.5 KB</td>
<td>Minimized</td>
<td><a href="http://extjs.com/deploy/dev/examples/grid/array-grid.html">Example</a></td>
</tr>
<tr>
<td>jQuery TableSorter</td>
<td>66 KB</td>
<td>Minimized</td>
<td><a href="http://www.tablesorter.com/">Example</a></td>
</tr>
</tbody>
</table>
<p>The JavaScript include sizes listed above are directly proportional to the feature set that the components provide, and should give you an idea of the overhead involved with using them.  Do we need 545.5 KB of features coming down the pipe to give our users an extra bell, or an extra whistle?  Let&#8217;s analyze the features to rationalize their usage, and remove items from the feature set.</p>
<ul>
<li>Sorting</li>
<li>Modifying column order and display</li>
<li>Resizing columns</li>
<li>Editing of row data directly on the grid itself</li>
<li>Scrolling</li>
<li>Pagination</li>
</ul>
<p><strong>Sorting</strong></p>
<p>Data should be used in the context of its usefulness.  You have a list of messages in your e-mail inbox.  What&#8217;s the most useful context for this list?  In order of date received.  The default sort order provided by the application, to facilitate proper use of the application.  Is comparing the rows in the grid by any other method as useful?  Does the user need to see the list of messages ordered alphabetically by subject?  In these cases where the user is in need of a specific message, <em>searching and filtering</em> is more useful than sorting.  The default sort is useful, but allowing the user to resort on the client, in most cases, is not as useful as other methods of finding a row.</p>
<p><strong>Modifying column order and display</strong></p>
<p>The same argument can be made for any of the other methods of customization provided to the end user.  Does the user need to reorder or hide columns?  The context provided by the application should be sufficient to use the applications data in the way it was intended.  Don&#8217;t overcomplicate your user interface with needless features or a deluge of useless data.  Provide succinct, appropriate data, and the user needn&#8217;t reorder or change the interface.</p>
<p><strong>Resizing columns</strong></p>
<p>The default HTML &lt;table&gt; tag expands to fit the data inside of its cells.  Even when you set the width of the table explicitly, the cells adjust themselves accordingly to fit the data.  This should be the behavior of your table.  You needn&#8217;t monkey around with widths, the browser is smart enough to do it for you.  You can even customize a cell to wrap its text to multiple lines with CSS, if need be.</p>
<p><strong>Editing of row data directly on the grid itself</strong></p>
<p>If you&#8217;re providing an Excel spreadsheet interface for the end user to customize your data, you haven&#8217;t designed your interface correctly.  Rethink how the user needs to interact with the data you&#8217;ve provided, and give them a better, simpler way to edit the data.</p>
<p><strong>Scrolling</strong></p>
<p>Everyone knows that internal scrollbars on a page are evil.  I don&#8217;t even like scrollbars on textareas, to be honest.  Previously, I had worked and reworked the YUI DataTable to handle horizontal scrolling.  Looking back on this, it was a mistake.  There are better ways to handle lots of data in a table, without the heavy mouse interaction and scanning that scrolling require.  Which brings me to my next point.</p>
<p><strong>Pagination</strong></p>
<p>This is the one exception to the feature set cutting board.  This is the one feature that&#8217;s is a requirement, when the data set has too many records to fit on a single page.</p>
<p>Keep these in mind, and look at the feature set provided by a few sites using tabular data centric interfaces that know a thing or two about interface design:</p>

<a href='http://www.zachleat.com/web/rethinking-javascript-grids-and-datatables/gmail/' title='Google Mail'><img width="150" height="150" src="http://www.zachleat.com/web/wp-content/uploads/2008/04/gmail-150x150.png" class="attachment-thumbnail" alt="Google Mail" title="Google Mail" /></a>
<a href='http://www.zachleat.com/web/rethinking-javascript-grids-and-datatables/wordpress-admin/' title='Wordpress 2.5 Admin Interface'><img width="150" height="150" src="http://www.zachleat.com/web/wp-content/uploads/2008/04/wordpress-admin-150x150.png" class="attachment-thumbnail" alt="Wordpress 2.5 Admin Interface" title="Wordpress 2.5 Admin Interface" /></a>
<a href='http://www.zachleat.com/web/rethinking-javascript-grids-and-datatables/google-reader/' title='Google Reader List View'><img width="150" height="150" src="http://www.zachleat.com/web/wp-content/uploads/2008/04/google-reader-150x150.png" class="attachment-thumbnail" alt="Google Reader List View" title="Google Reader List View" /></a>

<p><strong>So, what should we include?</strong></p>
<p>A simple CSS class to style your table is sufficient, with links to paginate the table (properly) and/or a hover for row selection if needed.  You&#8217;re looking at 10-20 lines of jQuery code, maximum, and a few CSS declarations.  In lieu of sorting, of course, you&#8217;ll need to program in a mechanism for searching and filtering as well.  But really, the difficulty with programming this component is knowing what to leave out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zachleat.com/web/rethinking-javascript-grids-and-datatables/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Conservative Design Example: Hierarchical Options</title>
		<link>http://www.zachleat.com/web/conservative-design-example-hierarchical-options/</link>
		<comments>http://www.zachleat.com/web/conservative-design-example-hierarchical-options/#comments</comments>
		<pubDate>Fri, 23 Mar 2007 06:52:12 +0000</pubDate>
		<dc:creator>Zach Leatherman</dc:creator>
				<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Conservative Design]]></category>
		<category><![CDATA[Hierarchical Select]]></category>

		<guid isPermaLink="false">http://www.zachleat.com/web/2007/03/23/conservative-design-example-hierarchical-options/</guid>
		<description><![CDATA[Welcome, one and all, to the second installment of actual code examples for the Conservative Design series. The decision was made (by me) to rename the component in question from the original Hierarchical Select to Hierarchical Options, due to the fact that the hierarchy can consist of any multiple option component, and is not limited [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome, one and all, to the second installment of actual code examples for the Conservative Design series.  The decision was made (by me) to rename the component in question from the original Hierarchical Select to Hierarchical Options, due to the fact that the hierarchy can consist of any multiple option component, and is not limited to just a select.  And to this face, this particular component was documented in the original post entitled <a href="http://www.zachleat.com/web/2007/02/22/conservative-design-hierarchical-select-boxes/">Conservative Design: Hierarchical Select Boxes</a>.</p>
<p><a href='http://www.zachleat.com/Projects/valdi/hierarchicalOptions.html' title='Hierarchical Options'><img src='http://www.zachleat.com/web/wp-content/uploads/2007/03/hierarchical.gif' alt='Hierarchical Options' /></a><br />
Click the image above to go to the example.</p>
<p>Notes on the example: The Tree structure is as follows:</p>
<ul>
<li>Primary
<ul>
<li>Secondary</p>
<ul>
<li>Tertiary</p>
<ul>
<li>Quaternary</p>
<ul>
<li>Quinary</li>
</ul>
</li>
</ul>
</li>
<li>2nd Tertiary (is a static element that doesn&#8217;t hide)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>So without further adieu or out of place french, what do we have?  3 out of 4 requirements and 1 of 2 luxury items.</p>
<ul>
<li>Handles any number of select elements in a linear or tree (luxury item) like structure.</li>
<li>Child select elements are optional based on parent selection.  Can hide entire div element or display a message stating no options are available.</li>
<li>Compliant with the Reset button.</li>
<li>Right now only loads from standard HTML markup (not yet from JavaScript or JSON or an XMLHTTPRequest)</li>
<li>Only supports Select elements for now, in the future should be abstracted to support Checkbox Lists or any multiple option component.</li>
</ul>
<p><strong>Outstanding Bugs</strong>:</p>
<ul>
<li>Opera button doesn&#8217;t reset properly with Reset Button</li>
<li>Clicking off of the default and then back onto the default has the original selections downstream (but doesn&#8217;t propagate more than one level)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zachleat.com/web/conservative-design-example-hierarchical-options/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conservative Design Example: Multiple Option List</title>
		<link>http://www.zachleat.com/web/conservative-design-example-multiple-option-list/</link>
		<comments>http://www.zachleat.com/web/conservative-design-example-multiple-option-list/#comments</comments>
		<pubDate>Sat, 10 Mar 2007 22:39:40 +0000</pubDate>
		<dc:creator>Zach Leatherman</dc:creator>
				<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Conservative Design]]></category>

		<guid isPermaLink="false">http://www.zachleat.com/web/2007/03/10/conservative-design-example-multiple-option-list/</guid>
		<description><![CDATA[All of the posts in the Conservative Design series so far have been brainstorming of design patterns. But how about some real life examples, some actual code? Let&#8217;s dive in. The first example I decided to tackle was the Option List, specifically the variant that allows multiple options to be selected. Let me start out [...]]]></description>
			<content:encoded><![CDATA[<p>All of the posts in the Conservative Design series so far have been brainstorming of design patterns.  But how about some real life examples, some actual code?  Let&#8217;s dive in.</p>
<p>The first example I decided to tackle was the <a href="http://www.zachleat.com/web/2007/02/26/conservative-design-option-list/">Option List</a>, specifically the variant that allows multiple options to be selected.  Let me start out by saying that I didn&#8217;t abstract out the type of source element that you could put into this example, I only programmed the element for a &lt;select multiple&gt; element.  For the impatient, let&#8217;s just start with the result:</p>
<p><a href="http://www.zachleat.com/Projects/valdi/multipleSelectList.html"><img src='http://www.zachleat.com/web/wp-content/uploads/2007/03/optionlist_multiple_real.gif' alt='Multiple Option List Real Example' /></a><br />
Click the image to see the actual example.</p>
<p>This element was constructed using the YUI Library and Jack Slocum&#8217;s DomQuery selector class, as well as using the new form validation CSS and JavaScript code I&#8217;m currently developing entitled &#8216;<strong>Valdi</strong>&#8216;.</p>
<p>It includes 3 of the 4 of the minimum features required as set in the original specification.</p>
<p>Features:</p>
<ul>
<li><strong>Validation</strong>: there is no submit button, but if there were, it would validate if the form has been entry has a value.</li>
<li><strong>Quick Links</strong>: Select All, Select None, and Sort the Options</li>
<li><strong>Customizable Options</strong>: Allow the user to add their own options for selection.</li>
<li>Does <strong>not </strong>abstract option types (checkbox, etc)</li>
<li>Keyboard Support: CTRL+A inside of the select box selects all options, Delete or Backspace removes the selected options, Enter key inside Add input field automatically adds option to the select.</li>
<li>Can be <em>easily</em> transformed into a Single Option List by removing the multiple=&#8221;multiple&#8221; option in the html.</li>
<li>Sort will toggle between Ascending and Descending and maintain the selected options</li>
<li>When the number of options outweighs the select size, the number of options is displayed next to the Add button.  Try adding 5 or more options to the select list.</li>
</ul>
<p>Screenshots for the Lazy People:</p>
<p>Multiple Options are Added<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/03/optionlist_multiple_real1.gif' alt='Multiple Option List Real Example' /></p>
<p>Validation when an Option is not selected:<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/03/optionlist_multiple_real21.gif' alt='Multiple Option List Real Example' /></p>
<p>Success, they selected something and submitted:<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/03/optionlist_multiple_real31.gif' alt='Multiple Option List Real Example' /></p>
<p>Watch for another separate article about Valdi later on.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zachleat.com/web/conservative-design-example-multiple-option-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conservative Design: Command Line Interface</title>
		<link>http://www.zachleat.com/web/conservative-design-command-line-interface/</link>
		<comments>http://www.zachleat.com/web/conservative-design-command-line-interface/#comments</comments>
		<pubDate>Wed, 07 Mar 2007 06:52:05 +0000</pubDate>
		<dc:creator>Zach Leatherman</dc:creator>
				<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Command Line]]></category>
		<category><![CDATA[Conservative Design]]></category>

		<guid isPermaLink="false">http://www.zachleat.com/web/2007/03/07/conservative-design-command-line-interface/</guid>
		<description><![CDATA[This is another post in the series entitled Conservative Design Patterns for Form Elements. The argument has existed since the dawn of the Graphical User Interface (GUI). Which is better, keyboard-exclusive Command Line or mouse-intensive GUI&#8217;s? As more enterprise architectures are moving from terminals to web interfaces for their products, and as time is moving [...]]]></description>
			<content:encoded><![CDATA[<p>This is another post in the series entitled <a href="http://www.zachleat.com/web/2007/02/22/conservative-design-patterns-for-form-elements/">Conservative Design Patterns for Form Elements</a>.</p>
<p>The argument has existed since the dawn of the Graphical User Interface (GUI).  Which is better, keyboard-exclusive Command Line or mouse-intensive GUI&#8217;s?  As more enterprise architectures are moving from terminals to web interfaces for their products, and as time is moving forward with the everyman user desiring an interface that looks pretty and easy to use, we&#8217;re seeing a drastic reduction in the utilization of the keyboard.</p>
<p>But with the exception of form input, we&#8217;ve almost completely moved away from the keyboard as a means to execute functions and navigation.  I&#8217;m proposing that we bring back the power of the keyboard.  Obviously we can&#8217;t get rid of the GUI altogether, but instead complement it with a powerful command line.</p>
<p>This component could exist as a standalone command line interface component or as a supplement to any search bar your page may contain.  The basic premise of the Command Line Interface component is to provide a standardized method of navigating your website using nothing but the keyboard.  It could fulfill more complex operations, but the scope of this article will just cover command line rudimentary navigation.</p>
<p>Screen Printing: Fake Command Line Example<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/03/commandline.gif' alt='Command Line' /></p>
<p>Screen Printing: Fake Command Line Example of AutoComplete Capabilities<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/03/commandline_f.gif' alt='Command Line AutoComplete' /></p>
<p><strong>Minimum Feature Set</strong>: (<a href="http://jfulton.org/?page=Software&#038;file=gui.php">source</a>)</p>
<ul>
<li>Autocomplete: must be able to finish the current command being typed by presenting a list of available options to the user.  Must be compatible with keyboard navigation:
<ul>
<li>UP and DOWN arrows to select from list</li>
<li>TAB autocompletes to first option</li>
</ul>
</li>
<li>Markup Scanning for Applicable Links: scan the current dom for &lt;a&gt; tags with a href element that could be used in autocomplete.</li>
<li>Quick commands: markup options (custom attributes?) to allow the programmer to define commands in the html.  These are one to three character combinations that execute a link or event.</li>
<li>Standardized Command Set: standardized hot key to force focus to the command line.  Also, for navigation options that are standardized between every website, have a standard set of commands that will execute with the same behavior, regardless of navigation implementation (Home [H], Login [L], Register [R], Forgotten Password [FP], Contact Us Page [C], Privacy Policy [PRIV], Terms of Service [TOS])</li>
</ul>
<p><strong>Luxury Feature Set</strong>:</p>
<ul>
<li>Markup Scanning for Events: sometimes navigation is executed through event handling.  Scan the events assigned to nodes for any available options that could be executed in navigation.</li>
</ul>
<p><strong>Limitations</strong>:</p>
<ul>
<li>Limitations on any sort of mouse-required interface: drag and drop</li>
<li>Interaction with flash?</li>
</ul>
<p><strong>Idea Credits</strong>:</p>
<ul>
<li><a href="http://www.softpanorama.org/OFM/gui_vs_command_line.shtml">GUI vs Command line interface</a></li>
<li><a href="http://www.humanized.com/weblog/2007/02/24/your_grandmothers_command_line_the_command_line_co/">Command Line for the Common Man: The Command Line Comeback</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zachleat.com/web/conservative-design-command-line-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conservative Design: Option List</title>
		<link>http://www.zachleat.com/web/conservative-design-option-list/</link>
		<comments>http://www.zachleat.com/web/conservative-design-option-list/#comments</comments>
		<pubDate>Mon, 26 Feb 2007 06:50:50 +0000</pubDate>
		<dc:creator>Zach Leatherman</dc:creator>
				<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Conservative Design]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.zachleat.com/web/2007/02/26/conservative-design-option-list/</guid>
		<description><![CDATA[This is another post in the series entitled Conservative Design Patterns for Form Elements. Next we&#8217;ll look at a web component that is almost ubiquitous among user interfaces today, the Option List. The Option List can take any one of the following three forms. Multiple Selections: User can select any number of the options presented [...]]]></description>
			<content:encoded><![CDATA[<p>This is another post in the series entitled <a href="http://www.zachleat.com/web/2007/02/22/conservative-design-patterns-for-form-elements/">Conservative Design Patterns for Form Elements</a>.</p>
<p>Next we&#8217;ll look at a web component that is almost ubiquitous among user interfaces today, the Option List.  The Option List can take any one of the following three forms.</p>
<ol>
<li>Multiple Selections: User can select any number of the options presented to them.  Types: <strong>Checkbox Group</strong>, <strong>Multiple Select Element</strong></li>
<li>Single Selection: User can select none or one of the options available.  Types: <strong>Radio Group</strong>, <strong>Select Element</strong></li>
<li>User Input List: User types in the options that they want to use.  All inputs are marked as selected.  Types: <strong>Group of Textboxes</strong></li>
</ol>
<p>We&#8217;ll describe each of these variants separately.</p>
<p><strong>Multiple Selections</strong>:<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/02/optionlist_multiple1.gif' alt='Option List Multiple Selections' /><br />
<strong>Minimum Feature Set</strong>:</p>
<ul>
<li>Validation: The user can select at least one, an integer range of options, or any number of the options presented.</li>
<li>Quick Links: optional links to select all options, clear the options, and toggle the options to the opposite value of what they currently hold.</li>
<li>Customizable Values: optionally allow the user to add their own options (one, an integer range, or many) to the list.</li>
<li>Other Variants: Any Select+ Element, as described in the original post.</li>
</ul>
<p><strong>Single Selection</strong>:<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/02/optionlist_single1.gif' alt='Option List Single Selection' /></p>
<p><strong>Minimum Feature Set</strong>:</p>
<ul>
<li>Validation: The user can select at most one of the options presented.</li>
<li>Quick Link: optional link to clear the options</li>
<li>Customizable Value: optionally allow the user to add their own option (only one is required, since only one can be selected).</li>
<li>Other Variants: Any Select1 Element, as described in the original post.</li>
</ul>
<p><strong>User Input List</strong>:<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/02/optionlist_all4.gif' alt='Option List User Input' /></p>
<p><strong>Minimum Feature Set</strong>:</p>
<ul>
<li>Validation: The user must have at least one of the text fields with a value (doesn&#8217;t matter which one).  Or the user must have an integer range number of fields with values.</li>
<li>Quick Link: optional link next to an element to remove that element from the list (not clear it, remove it)</li>
<li>Customizable Values: optionally allow the user to add their own options (up to an integer limit).</li>
<li>Other Variants: Any List of InputX Elements, as described in the original post (could be passwords or textareas).</li>
</ul>
<p>The images above for all three component types show a textbox for the addition of another option, but this should also allow customization to allow any type of (Select+ or InputX) element for the addition of another option.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zachleat.com/web/conservative-design-option-list/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Conservative Design: Hierarchical Select</title>
		<link>http://www.zachleat.com/web/conservative-design-hierarchical-select-boxes/</link>
		<comments>http://www.zachleat.com/web/conservative-design-hierarchical-select-boxes/#comments</comments>
		<pubDate>Fri, 23 Feb 2007 03:31:04 +0000</pubDate>
		<dc:creator>Zach Leatherman</dc:creator>
				<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Conservative Design]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Hierarchical Select]]></category>

		<guid isPermaLink="false">http://www.zachleat.com/web/2007/02/22/conservative-design-hierarchical-select-boxes/</guid>
		<description><![CDATA[This is a post in a series entitled Conservative Design Patterns for Form Elements. For now, I&#8217;ll start off with an easy web component that a lot of you have probably already had some experience with. But, strangely enough, it is not included in any of the JavaScript libraries that are out there, that I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>This is a post in a series entitled <a href="http://www.zachleat.com/web/2007/02/22/conservative-design-patterns-for-form-elements/">Conservative Design Patterns for Form Elements</a>.</p>
<p>For now, I&#8217;ll start off with an easy web component that a lot of you have probably already had some experience with.  But, strangely enough, it is not included in any of the JavaScript libraries that are out there, that I&#8217;ve seen.  If you know of one, go ahead and post it in the comments.</p>
<p><strong>Hierarchical Select Boxes</strong> (sometimes called Dynamic Select Boxes if you&#8217;re doing a web search)</p>
<p>Behavior: 2 or more select boxes working in parallel, where selection of an option in a parent dynamically adjusts the options of the child.</p>
<p>Screenshot (Prior to any selection):<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/02/hierselects1.jpg' alt='Prior to any selection' /></p>
<p>Screenshot (After an option is chosen in the first select box):<br />
<img src='http://www.zachleat.com/web/wp-content/uploads/2007/02/hierselects2.jpg' alt='After a selection is made' /></p>
<p>Minimum Requirements for Acceptable Feature Set:</p>
<ul>
<li>Must be able to handle any (reasonable) number of select boxes in a linear structure: parent elements only have one child.</li>
<li>Child select elements can be optional depending on parent selection.  Maybe a continent doesn&#8217;t have any countries, so don&#8217;t display a child select element.  It would be nice to have a visual indicator showing whether or not a parent option had children (triangle, folder(?), arrow or other customizable icon).</li>
<li>Must have functionality that allows it to be reset with the form reset button, as <a href="http://www.mattkruse.com/javascript/dynamicoptionlist/">Matt Kruse has done (Example 3)</a>.</li>
<li>Load options in child select&#8217;s dynamically from multiple data sources (describe in <a href="http://www.bobbyvandersluis.com/articles/unobtrusivedynamicselect.php">raw HTML code</a>, local JS file, remote JSON object or XML file using an XMLHTTPRequest)</li>
</ul>
<p>Luxury Feature Set:</p>
<ul>
<li>Must be able to nest select elements in a tree structure: selecting an option in a parent element could modify 2+ child select elements.</li>
<li>Could be able to modify the options for any element that displays options (Select1 or Select+ as described in the <a href="/web/2007/02/22/conservative-design-patterns-for-form-elements/">Conservative Design Post</a>: Checkbox Group, Radio Group, Select Single or Multiple)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zachleat.com/web/conservative-design-hierarchical-select-boxes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Conservative Design Patterns for Form Elements</title>
		<link>http://www.zachleat.com/web/conservative-design-patterns-for-form-elements/</link>
		<comments>http://www.zachleat.com/web/conservative-design-patterns-for-form-elements/#comments</comments>
		<pubDate>Fri, 23 Feb 2007 03:26:29 +0000</pubDate>
		<dc:creator>Zach Leatherman</dc:creator>
				<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Conservative Design]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.zachleat.com/web/2007/02/22/conservative-design-patterns-for-form-elements/</guid>
		<description><![CDATA[Have you ever been to a web site that looks as though it has been built exclusively using pre-made bulky widgets cookie cuttered right onto the page? Lovely grid components, sweet over-featured WYSIWYG editors, maybe a Google or Yahoo map thrown in on the page for good measure. Conformist web sites using the conditioning forced [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever been to a web site that looks as though it has been built exclusively using pre-made bulky widgets cookie cuttered right onto the page?  Lovely grid components, sweet over-featured WYSIWYG editors, maybe a Google or Yahoo map thrown in on the page for good measure.  Conformist web sites using the conditioning forced upon them by time, executive, or work-ethic based constraints.   The widgets on these websites either seem too bulky, reinventing the wheel with avant-garde user interaction for a confusing user experience, or they are just too lightweight to justify using at all.</p>
<p>What I&#8217;m proposing is a standard set of Design Patterns for form input, as an extension to already existing HTML form elements.  By describing the best practices for certain use cases of input, we can form a set of building blocks that can be used to enhance existing forms, instead of replacing them with totally new ways of user interaction.</p>
<p>So keeping away from <a href="http://www.adaptivepath.com/publications/essays/archives/000385.php">the spirit of inventing names for things that are already being done</a>, I won&#8217;t be trivializing this idea with a catch phrase.  Instead I hope you will realize the value of <strong>BUILDING BLOCKS</strong> over <strong>cookie cutters</strong>.</p>
<p>These components be used to handle the tween cases of GUI development, where the interaction doesn&#8217;t warrant a full blown widget, but requires more than a standard HTML form element.  I would be excited to see work done at this level of GUI development inside of the JavaScript libraries that are out there instead of work on the overblown &#8220;Widget Set&#8221; that seems to be the buzz in the community.</p>
<p><strong>Spectrum of GUI Elements</strong></p>
<p>Raw HTML Inputs (Text, Password, Select&#8230;) -> Smidgets -> Full Blown Widgets (Editable Grid, Rich Text Editor)</p>
<p><strong>Legend</strong></p>
<ul>
<li>Toggle Option On or Off (Toggle)</li>
<li>Select 0-1 Options From a List (Select1)</li>
<li>Select 0+ Options From a List (Select+)</li>
<li>Input 0+ Characters into an Element (InputX)</li>
<li>Input is obfuscated to prevent from being read (Obfuscated)</li>
</ul>
<p>To describe what we want, let&#8217;s first see what we have.</p>
<p><strong>Existing HTML Elements</strong></p>
<ul>
<li>Buttons (clicking performs a data altering action or form submission action)
<ul>
<li>Submit</li>
<li>Reset</li>
<li>Push (without attached behavior)</li>
</ul>
</li>
<li>Checkbox (Toggle)</li>
<li>Checkbox Group (Select+)</li>
<li>Radio Group (Select1)</li>
<li>Select Single (Select1)</li>
<li>Select Multiple (Select+)</li>
<li>Text (InputX)</li>
<li>Textarea (<em>antiquated due to CSS styled word wrapping multi line Text input</em>) (InputX)</li>
<li>Password (InputX, Obfuscated)</li>
</ul>
<p>And because this is going to be a series, I&#8217;ll continue with my first case of a Conservative Design Form Element in a new post.</p>
<p>Let me just reiterate that I do hope you take the ideas for these GUI components and develop them in your favorite JavaScript library.  The purpose of this is to come up with a set of feature-based standards so that people don&#8217;t have to keep developing their own components over and over again.  Do you have an idea for a feature that you think should be included in the standard or luxury feature set of a component?  Post it in the comments of that component blog post and I&#8217;ll certainly modify the post with your suggestions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zachleat.com/web/conservative-design-patterns-for-form-elements/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

