<?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; Design Patterns</title>
	<atom:link href="http://www.zachleat.com/web/tag/design-patterns/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zachleat.com/web</link>
	<description></description>
	<lastBuildDate>Fri, 30 Jul 2010 20:02:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Conservative Design: Option List</title>
		<link>http://www.zachleat.com/web/2007/02/26/conservative-design-option-list/</link>
		<comments>http://www.zachleat.com/web/2007/02/26/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/2007/02/26/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/2007/02/22/conservative-design-hierarchical-select-boxes/</link>
		<comments>http://www.zachleat.com/web/2007/02/22/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/2007/02/22/conservative-design-hierarchical-select-boxes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Conservative Design Patterns for Form Elements</title>
		<link>http://www.zachleat.com/web/2007/02/22/conservative-design-patterns-for-form-elements/</link>
		<comments>http://www.zachleat.com/web/2007/02/22/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/2007/02/22/conservative-design-patterns-for-form-elements/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
