<?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>LiveCMS</title>
	<atom:link href="http://livecms.com/feed" rel="self" type="application/rss+xml" />
	<link>http://livecms.com</link>
	<description>CMS Resources for Designer and Developer</description>
	<lastBuildDate>Wed, 13 Apr 2011 21:05:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>New elements in HTML 5</title>
		<link>http://livecms.com/html5/new-elements-in-html-5.html</link>
		<comments>http://livecms.com/html5/new-elements-in-html-5.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 21:05:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=171</guid>
		<description><![CDATA[Structure Even well-formed HTML pages are harder to process than they should be because of the lack of structure. You have to figure out where the section breaks go by analyzing header levels. Sidebars, footers, headers, navigation menus, main content &#8230; <a href="http://livecms.com/html5/new-elements-in-html-5.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong><a name="N10115">Structure</a></strong></p>
<p>Even well-formed HTML pages are harder to process than they should be because of the lack of structure. You have to figure out where the section breaks go by analyzing header levels. Sidebars, footers, headers, navigation menus, main content sections, and individual stories are marked up by the catch-all <code>div</code> element. HTML 5 adds new elements to specifically identify each of these common constructs:</p>
<ul>
<li><code>section</code>: A part or chapter in a book, a section in a chapter, or essentially anything that has its own heading in HTML 4</li>
<li><code>header</code>: The page header shown on the page; not the same as the <code>head</code> element</li>
<li><code>footer</code>: The page footer where the fine print goes; the signature in an e-mail message</li>
<li><code>nav</code>: A collection of links to other pages</li>
<li><code>article</code>: An independent entry in a blog, magazine, compendium, and so forth</li>
</ul>
<p>For example, consider a typical blog front page with a header at the top, a footer at the bottom, several entries, a navigation section, and a sidebar, as shown in Listing 1.<br />
<a name="list1"><strong>Listing 1. A typical blog page today</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Mokka mit Schlag &lt;/title&gt;
 &lt;/head&gt;
&lt;body&gt;
&lt;div id="page"&gt;
  &lt;div id="header"&gt;
    &lt;h1&gt;&lt;a href="http://www.elharo.com/blog"&gt;Mokka mit Schlag&lt;/a&gt;&lt;/h1&gt;
  &lt;/div&gt;
  &lt;div id="container"&gt;
    &lt;div id="center"&gt;
      &lt;div id="post-1000572"&gt;
        &lt;h2&gt;&lt;a href=
      "/blog/birding/2007/04/23/spring-comes-and-goes-in-sussex-county/"&gt;
      Spring Comes (and Goes) in Sussex County&lt;/a&gt;&lt;/h2&gt;

        &lt;div&gt;
          &lt;p&gt;Yesterday I joined the Brooklyn Bird Club for our
          annual trip to Western New Jersey, specifically Hyper
          Humus, a relatively recently discovered hot spot. It
          started out as a nice winter morning when we arrived
          at the site at 7:30 A.M., progressed to Spring around
          10:00 A.M., and reached early summer by 10:15. &lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div id="post-1000571"&gt;
        &lt;h2&gt;&lt;a href=
          "/blog/birding/2007/04/23/but-does-it-count-for-your-life-list/"&gt;
           But does it count for your life list?&lt;/a&gt;&lt;/h2&gt;

        &lt;div&gt;
          &lt;p&gt;Seems you can now go &lt;a
          href="http://www.wired.com/science/discoveries/news/
          2007/04/cone_sf"&gt;bird watching via the Internet&lt;/a&gt;. I
          haven't been able to test it out yet (20 user
          limit apparently) but this is certainly cool.
          Personally, I can't imagine it replacing
          actually being out in the field by any small amount.
          On the other hand, I've always found it quite
          sad to meet senior birders who are no longer able to
          hold binoculars steady or get to the park. I can
          imagine this might be of some interest to them. At
          least one elderly birder did a big year on TV, after
          he could no longer get out so much. This certainly
          tops that.&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;/div&gt;

    &lt;div&gt;
      &lt;div&gt;
         &lt;a href="/blog/page/2/"&gt;&amp;laquo; Previous Entries&lt;/a&gt;
       &lt;/div&gt;
      &lt;div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id="right"&gt;
    &lt;ul id="sidebar"&gt;
      &lt;li&gt;&lt;h2&gt;Info&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="/blog/comment-policy/"&gt;Comment Policy&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="/blog/todo-list/"&gt;Todo List&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;&lt;/li&gt;
      &lt;li&gt;&lt;h2&gt;Archives&lt;/h2&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href='/blog/2007/04/'&gt;April 2007&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href='/blog/2007/03/'&gt;March 2007&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href='/blog/2007/02/'&gt;February 2007&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href='/blog/2007/01/'&gt;January 2007&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  &lt;div id="footer"&gt;
    &lt;p&gt;Copyright 2007 Elliotte Rusty Harold&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Even with proper indenting, it&#8217;s a fairly confusing mass of nested <code>div</code>s. In HTML 5, you can replace these with more direct semantic elements, as shown in Listing 2.<br />
<a name="list2"><strong>Listing 2. A typical blog page in HTML 5</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;html&gt;
 &lt;head&gt;
    &lt;title&gt;Mokka mit Schlag &lt;/title&gt;
 &lt;/head&gt;
&lt;body&gt;
  &lt;header&gt;
    &lt;h1&gt;&lt;a href="http://www.elharo.com/blog"&gt;Mokka mit Schlag&lt;/a&gt;&lt;/h1&gt;
  &lt;/header&gt;
  &lt;section&gt;
      &lt;article&gt;
        &lt;h2&gt;&lt;a href=
        "/blog/birding/2007/04/23/spring-comes-and-goes-in-sussex-county/"&gt;
         Spring Comes (and Goes) in Sussex County&lt;/a&gt;&lt;/h2&gt;

        &lt;p&gt;Yesterday I joined the Brooklyn Bird Club for our
        annual trip to Western New Jersey, specifically Hyper
        Humus, a relatively recently discovered hot spot. It
        started out as a nice winter morning when we arrived at
        the site at 7:30 A.M., progressed to Spring around 10:00
        A.M., and reached early summer by 10:15. &lt;/p&gt;
      &lt;/article&gt;

      &lt;article&gt;
        &lt;h2&gt;&lt;a href=
          "/blog/birding/2007/04/23/but-does-it-count-for-your-life-list/"&gt;
          But does it count for your life list?&lt;/a&gt;&lt;/h2&gt;

          &lt;p&gt;Seems you can now go &lt;a
          href="http://www.wired.com/science/discoveries/news/
          2007/04/cone_sf"&gt;bird watching via the Internet&lt;/a&gt;. I
          haven't been able to test it out yet (20 user
          limit apparently) but this is certainly cool.
          Personally, I can't imagine it replacing
          actually being out in the field by any small amount.
          On the other hand, I've always found it quite
          sad to meet senior birders who are no longer able to
          hold binoculars steady or get to the park. I can
          imagine this might be of some interest to them. At
          least one elderly birder did a big year on TV, after
          he could no longer get out so much. This certainly
          tops that.&lt;/p&gt;
      &lt;/article&gt;
    &lt;nav&gt;
      &lt;a href="/blog/page/2/"&gt;&amp;laquo; Previous Entries&lt;/a&gt;
    &lt;/nav&gt;
  &lt;/section&gt;

  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;h2&gt;Info&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="/blog/comment-policy/"&gt;Comment Policy&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="/blog/todo-list/"&gt;Todo List&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;&lt;/li&gt;
      &lt;li&gt;&lt;h2&gt;Archives&lt;/h2&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href='/blog/2007/04/'&gt;April 2007&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href='/blog/2007/03/'&gt;March 2007&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href='/blog/2007/02/'&gt;February 2007&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href='/blog/2007/01/'&gt;January 2007&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;footer&gt;
    &lt;p&gt;Copyright 2007 Elliotte Rusty Harold&lt;/p&gt;
  &lt;/footer&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>No <code>div</code>s are needed any more. Rather than using site-specific class attributes, the meaning of the different sections can be inferred from standard names. This is especially important for audio, cell-phone, and other nonstandard browsers.</p>
<p><a href="http://www.ibm.com/developerworks/library/x-html5/#ibm-pcon">Back to top</a></p>
<p><a name="N1016F">Block semantic elements</a></p>
<p>As well as the structural elements, HTML 5 adds some purely semantic block-level elements:</p>
<ul>
<li><code>aside</code></li>
<li><code>figure</code></li>
<li><code>dialog</code></li>
</ul>
<p>I use the first two all the time in articles like this one and in my books. The third I don&#8217;t use so much myself, but it&#8217;s common in much written text.</p>
<p><a name="N10193">aside</a></p>
<p>The <code>aside</code> element represents a note, a tip, a sidebar, a pullquote, a parenthetical remark, or something that&#8217;s just outside the main flow of the narrative. For example, in developerWorks articles, you often find sidebars encoded as tables, as shown in Listing 3.<br />
<a name="list3"><strong>Listing 3. A developerWorks HTML 4 sidebar</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;table align="right" border="0" cellpadding="0" cellspacing="0" width="40%"&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;
&lt;img alt="" src="//www.ibm.com/i/c.gif" height="1" width="10"&gt;&lt;/td&gt;
&lt;td&gt;
&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt;
&lt;p&gt;&lt;a name="xf-value"&gt;&lt;span&gt;.xf-value&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
The &lt;code type="inline"&gt;.xf-value&lt;/code&gt; selector used here styles the input
field value but not its label. This is actually inconsistent
with the current CSS3 draft. The example really should use the
&lt;code type="inline"&gt;::value&lt;/code&gt; pseudo-class instead like so:
&lt;/p&gt;
&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;pre&gt;input::value { width: 20em; }
#ccnumber::value { width: 18em }
#zip::value { width: 12em }
#state::value { width: 3em  }&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;
However, Firefox doesn't yet support this syntax.
&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>In HTML 5, you can write this much more sensibly, as shown in Listing 4.<br />
<a name="list4"><strong>Listing 4. A developerWorks HTML 5 sidebar</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;aside&gt;
&lt;h3&gt;.xf-value&lt;/h3&gt;
&lt;p&gt;
The &lt;code type="inline"&gt;.xf-value&lt;/code&gt; selector used here styles the input
field value but not its label. This is actually inconsistent
with the current CSS3 draft. The example really should use the
&lt;code type="inline"&gt;::value&lt;/code&gt; pseudo-class instead like so:
&lt;/p&gt;

&lt;pre&gt;input::value { width: 20em; }
#ccnumber::value { width: 18em }
#zip::value { width: 12em }
#state::value { width: 3em  }&lt;/pre&gt;

&lt;p&gt;
However, Firefox doesn't yet support this syntax.
&lt;/p&gt;
&lt;/aside&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The browser can figure out where to put the sidebar, possibly with a little help from CSS.</p>
<p><a name="N101B8">figure</a></p>
<p>The <code>figure</code> element represents a block-level image, along with a caption. For example, in many developerWorks articles, you find markup like Listing 5; the results are shown in Figure 1.<br />
<a name="list5"><strong>Listing 5. A developerWorks HTML 4 figure</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;a name="fig2"&gt;&lt;b&gt;Figure 2. Install Mozilla XForms dialog&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;img alt="A Web site is requesting permission to install the following item:
   Mozilla XForms 0.7 Unsigned"
  src="installdialog.jpg" border="0" height="317" hspace="5" vspace="5" width="331" /&gt;
&lt;br /&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p><a name="fig1"><strong>Figure 1. Install Mozilla XForms dialog</strong></a><br />
<img src="http://www.ibm.com/developerworks/library/x-html5/installdialog.jpg" border="0" alt="A Web site is requesting permission to install the following item: Mozilla XForms 0.7 Unsigned" hspace="5" vspace="5" width="331" height="317" /></p>
<p>In HTML 5, you can write this more semantically, as shown in Listing 6.<br />
<a name="list6"><strong>Listing 6. A developerWorks HTML 5 figure</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;figure id="fig2"&gt;
  &lt;legend&gt;Figure 2. Install Mozilla XForms dialog&lt;/legend&gt;
  &lt;img alt="A Web site is requesting permission to install the following item:
    Mozilla XForms 0.7 Unsigned"
    src="installdialog.jpg" border="0" height="317" hspace="5" vspace="5" width="331" /&gt;
&lt;/figure&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Most important, browsers—especially screen readers—can clearly and unambiguously associate the caption with the picture.</p>
<p>The <code>figure</code> element isn&#8217;t limited to pictures. You can also use it to caption <code>audio</code>, <code>video</code>, <code>iframe</code>, <code>object</code>, and <code>embed</code> elements.</p>
<p><a name="N10210">dialog</a></p>
<p>The <code>dialog</code> element represents a conversation between several people. The HTML 5 <code>dt</code> element is overloaded to indicate the speaker, and the HTML 5 <code>dd</code> element is overloaded to indicate the speech. This gives reasonable display even in legacy browsers. Listing 7 shows a bit of famous dialogue from Galileo&#8217;s &#8220;Dialogue Concerning the Two Chief World Systems.&#8221;<br />
<a name="list7"><strong>Listing 7. A Galilean dialogue in HTML 5</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;dialog&gt;
	&lt;dt&gt;Simplicius &lt;/dt&gt;
    &lt;dd&gt;According to the straight line AF,
	and not according to the curve, such being already excluded
	for such a use.&lt;/dd&gt;

	&lt;dt&gt;Sagredo &lt;/dt&gt;
    &lt;dd&gt;But I should take neither of them,
	seeing that the straight line AF runs obliquely. I should
	draw a line perpendicular to CD, for this would seem to me
	to be the shortest, as well as being unique among the
	infinite number of longer and unequal ones which may be
	drawn from the point A to every other point of the opposite
	line CD. &lt;/dd&gt;

	&lt;dt&gt;Salviati &lt;/dt&gt;
    &lt;dd&gt;&lt;p&gt; Your choice and the reason you
	adduce for it seem to me most excellent. So now we have it
	that the first dimension is determined by a straight line;
	the second (namely, breadth) by another straight line, and
	not only straight, but at right angles to that which
	determines the length. Thus we have defined the two
	dimensions of a surface; that is, length and breadth. &lt;/p&gt;

	&lt;p&gt; But suppose you had to determine a height—for
	example, how high this platform is from the pavement down
	below there. Seeing that from any point in the platform we
	may draw infinite lines, curved or straight, and all of
	different lengths, to the infinite points of the pavement
	below, which of all these lines would you make use of? &lt;/p&gt;
	&lt;/dd&gt;
&lt;/dialog&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The exact syntax of this element is still being argued over. Some people want to embed additional nondialogue text (such as stage directions) inside the <code>dialog</code> element, and others aren&#8217;t happy with the overloading of <code>dt</code> and <code>dd</code>. However, most everyone agrees that some such semantic representation of dialogue is a good thing, even if they haven&#8217;t yet agreed on the exact syntax.</p>
<p><a href="http://www.ibm.com/developerworks/library/x-html5/#ibm-pcon">Back to top</a></p>
<p><a name="N1023F">Inline semantic elements</a></p>
<p>HTML 4 has five different inline elements to represent subtly different variations of computer code: <code>var</code>, <code>code</code>, <code>kbd</code>, <code>tt</code>, and <code>samp</code>. However, it doesn&#8217;t have any way to indicate such basic qualities as time, numbers, or sarcasm. HTML 5 aims to rectify this imbalance between techies and normal writers with several new inline elements.</p>
<p><a name="N1025C">mark</a></p>
<p>The <code>m</code> element indicates text that is &#8220;marked&#8221; somehow but not necessarily emphasized. You can imagine it as being like highlighted passages in a book. The canonical use case is Google&#8217;s cached pages. When you follow a link to the cached copy, the search terms are marked. For example, if you searched for &#8220;Egret&#8221;, then a cached Google page might be marked up like this:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>The Great &lt;m&gt;Egret&lt;/m&gt; (also known as the
American &lt;m&gt;Egret&lt;/m&gt;)  is a large white wading bird found worldwide.
The Great &lt;m&gt;Egret&lt;/m&gt; flies with slow wing beats. The
scientific name of the Great &lt;m&gt;Egret&lt;/m&gt; is &lt;i&gt;Casmerodius
albus&lt;/i&gt;.</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The name of this element is currently subject to some debate. It might be changed to <code>mark</code> instead of <code>m</code> before the spec is released.</p>
<p><a name="N10278">time</a></p>
<p>The <code>time</code> element indicates a specific moment in history, such as 5:35 P.M., EST, April 23, 2007. For example,</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>&lt;p&gt;I am writing this example at
&lt;time&gt;5:35 P.M. on April 23rd&lt;/time&gt;.
&lt;/p&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The <code>time</code> element helps browsers and others recognize times in HTML pages. It doesn&#8217;t require any particular format for the element&#8217;s content. However, each <code>time</code> element should have a <code>datetime</code> attribute that includes the time in a more machine-recognizable form, like this:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>&lt;p&gt;I am writing this example at
&lt;time datetime="2007-04-23T17:35:00-05:00"&gt;5:35 P.M. on April 23rd&lt;/time&gt;.
&lt;/p&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Machine-readable times are potentially useful for search engines, calendar programs, and the like.</p>
<p><a name="N1029F">meter</a></p>
<p>The <code>meter</code> element represents a numeric value in a specified range. For example, you can use it for salaries, percentage of the French electorate that voted for Le Pen, or test scores. Here, I use <code>meter</code> to mark up some data I got from a Google programmer at Software Development 2007:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>&lt;p&gt;An entry level programmer in Silicon Valley
can expect to start around &lt;meter&gt;$90,000&lt;/meter&gt; per year.
&lt;/p&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The <code>meter</code> element helps browsers and other clients recognize <em>amounts</em> in HTML pages. It doesn&#8217;t require any particular format for the element&#8217;s content. However, each <code>meter</code> element can have up to six attributes offering information about this amount in a more machine-recognizable form:</p>
<ul>
<li><code>value</code></li>
<li><code>min</code></li>
<li><code>low</code></li>
<li><code>high</code></li>
<li><code>max</code></li>
<li><code>optimum</code></li>
</ul>
<p>Each of these should contain a decimal number indicating the relevant range. For example, a final exam grade might be marked up like this:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>&lt;p&gt;Your score was
&lt;meter value="88.7" min="0" max="100" low="65" high="96" optimum="100"&gt;B+&lt;/meter&gt;.
&lt;/p&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>This indicates that the student&#8217;s score was 88.7 out of a possible 100. The lowest possible grade was 0, but the lowest actual grade anyone got was 65. The highest grade anyone got was 96, although of course the ideal score was 100. User agents can display this information using some sort of meter control or give the extra data in a tooltip, but most will probably style it like any other inline element.</p>
<p><a name="N102F9">progress</a></p>
<p>The <code>progress</code> element represents the state of an ongoing process, like the progress bar in a graphical user interface (GUI) application. For instance, it can show you what percentage of a file is downloaded or how far you are into a movie. This progress control says that a download is 33% complete:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>&lt;p&gt;Downloaded:
  &lt;progress value="1534602" max="4603807"&gt;33%&lt;/progress&gt;
&lt;/p&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The <code>value</code> attribute shows the current state of the operation. The <code>max</code> attribute shows the total amount toward which the progress is moving. Here the element indicates that 1,534,602 bytes out of a total 4,603,807 bytes have been downloaded.</p>
<p>You can display indefinite progress bars by omitting the <code>max</code> attribute.</p>
<p>You should use the JavaScript language to dynamically update the progress bar as the operation continues. Statically, this element isn&#8217;t very interesting.</p>
<p><a href="http://www.ibm.com/developerworks/library/x-html5/#ibm-pcon">Back to top</a></p>
<p><a name="N1031F">Embedded media</a></p>
<p>Video on the Web is booming, but it&#8217;s almost all proprietary. YouTube uses Flash, Microsoft uses Windows Media®, and Apple uses QuickTime. Markup that works for embedding such content in one browser doesn&#8217;t work in the next. Consequently, the WhatWG has proposed a new <code>video</code> element that allows the embedding of arbitrary video formats. For example, I might embed my QuickTime movie of a Sora in Prospect Park like so:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>&lt;video src="http://www.cafeaulait.org/birds/sora.mov" /&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Whether any one format and codec will be preferred is still under debate. Probably Ogg Theora support at least will be strongly recommended, if not required. Support for proprietary formats such as QuickTime and patent-encumbered formats such as MPEG-4 will be optional. Most likely, the actual formats will be decided in the marketplace, much as GIF, JPEG, and PNG became the preferred formats for <code>img</code> elements over contenders like BMP, X-Bitmap, and JPEG 2000.</p>
<p>A complementary <code>audio</code> element is also proposed. For example,you might attach background music to a Web page like this:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>&lt;audio src="spacemusic.mp3"
    autoplay="autoplay" loop="20000" /&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The <code>autoplay</code> attribute tells the browser to begin playing as soon as the page is loaded, without waiting for an explicit user request. It then loops 20,000 times before shutting off (or until the user closes the window or goes to another page). Of course, browsers can and should offer users the ability to mute and pause embedded media, whether the page author has done so or not.</p>
<p>Browsers must support the WAV format. Browsers can also support other formats such as MP3 if they like.</p>
<p>Because these elements aren&#8217;t supported by legacy browsers and can be inaccessible to blind and deaf users, the <code>audio</code> and<code>video</code> elements might contain additional markup describing the content of the audio and video. This also helps search engines. Ideally these would be full transcripts of the content of the audio and video. For example, Listing 8 shows how you might mark up John F. Kennedy&#8217;s inaugural address.<br />
<a name="list8"><strong>Listing 8. John F. Kennedy&#8217;s inaugural address in HTML 5</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;audio src="kennedyinauguraladdrees.mp3"&gt;
    &lt;p&gt;
    Vice President Johnson, Mr. Speaker, Mr. Chief Justice,
    President Eisenhower, Vice President Nixon, President Truman,
    Reverend Clergy, fellow citizens:
    &lt;/p&gt;

    &lt;p&gt;
    We observe today not a victory of party, but a celebration of
    freedom -- symbolizing an end, as well as a beginning --
   signifying renewal, as well as change. For I have sworn before
    you and Almighty God the same solemn oath our forebears
    prescribed nearly a century and three-quarters ago.
    &lt;/p&gt;

    &lt;p&gt;
    The world is very different now. For man holds in his mortal
    hands the power to abolish all forms of human poverty and all
    forms of human life. And yet the same revolutionary beliefs for
    which our forebears fought are still at issue around the globe --
    the belief that the rights of man come not from the
    generosity of the state, but from the hand of God.
    &lt;/p&gt;

    &lt;p&gt;
    ...
    &lt;/p&gt;

    &lt;/audio&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><a href="http://www.ibm.com/developerworks/library/x-html5/#ibm-pcon">Back to top</a></p>
<p><a name="N10362">Interactivity</a></p>
<p>HTML 5 also goes under the rubric of Web Applications 1.0. Toward that end, several new elements are focused on more interactive experiences for Web pages:</p>
<ul>
<li><code>details</code></li>
<li><code>datagrid</code></li>
<li><code>menu</code></li>
<li><code>command</code></li>
</ul>
<p>These elements all have the potential to change what is displayed based on user action and choice without loading a new page from the server.</p>
<p><a name="N1038D">details</a></p>
<p>The <code>details</code> element represents further information that might not be shown by default. An optional <code>legend</code> element can summarize the details. One use for details is for footnotes and endnotes. For example:</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>The bill of a Craveri's Murrelet is about 10% thinner
than the bill of a Xantus's Murrelet.
&lt;details&gt;
&lt;legend&gt;[Sibley, 2000]&lt;/legend&gt;
&lt;p&gt;Sibley, David Allen, The Sibley Guide to Birds,
(New York: Chanticleer Press, 2000) p. 247
 &lt;/p&gt;
&lt;/details&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The exact rendering isn&#8217;t specified. One browser might use a footnote, another an endnote, and a third a tooltip.</p>
<p>Each <code>details</code> element can have an <code>open</code> attribute. If it has this attribute, then the details will be initially shown to the reader. If it doesn&#8217;t have such an attribute, then they will be hidden until the user asks for them. In either case, the user can click an icon or other indicator to show or hide the details.</p>
<p><a name="N103B0">datagrid</a></p>
<p>The <code>datagrid</code> element serves the role of a grid control. It&#8217;s intended for trees, lists, and tables that can be updated by both the user and scripts. By contrast, traditional tables are mostly intended for static data.</p>
<p>A <code>datagrid</code> gets its initial data from its contents: a <code>table</code>, <code>select</code>, or other group of HTML elements. For example, Listing 9 shows a <code>datagrid</code> that contains a grade sheet. In this example, the datagrid is populated from a <code>table</code>. A simpler one-dimensional <code>datagrid</code> might be populated by a <code>select</code> element. If other HTML elements are used, then each child element becomes a row in the grid.<br />
<a name="list9"><strong>Listing 9. A grade sheet datagrid</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;datagrid&gt;
  &lt;table&gt;
    &lt;tr&gt;&lt;td&gt;Jones&lt;/td&gt;&lt;td&gt;Allison&lt;/td&gt;&lt;td&gt;A-&lt;/td&gt;&lt;td&gt;B+&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Smith&lt;/td&gt;&lt;td&gt;Johnny&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;C+&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Willis&lt;/td&gt;&lt;td&gt;Sydney&lt;/td&gt;&lt;td&gt;C-&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;F&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Wilson&lt;/td&gt;&lt;td&gt;Frank&lt;/td&gt;&lt;td&gt;B-&lt;/td&gt;&lt;td&gt;B+&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;/tr&gt;
  &lt;/table&gt;
&lt;/datagrid&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>What distinguishes this from a regular table is that the user can select rows, columns, and cells; collapse rows, columns, and cells; edit cells; delete rows, columns, and cells; sort the grid; and otherwise interact with the data directly in the browser on the client. The JavaScript code monitors the updates. The <code>HTMLDataGridElement</code> (Listing 10) interface is added to the Document Object Model (DOM) to support this.<br />
<a name="list10"><strong>Listing 10. HTMLDataGridElement</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
interface HTMLDataGridElement : HTMLElement {
           attribute DataGridDataProvider data;
  readonly attribute DataGridSelection selection;
           attribute boolean multiple;
           attribute boolean disabled;
  void updateEverything();
  void updateRowsChanged(in RowSpecification row, in unsigned long count);
  void updateRowsInserted(in RowSpecification row, in unsigned long count);
  void updateRowsRemoved(in RowSpecification row, in unsigned long count);
  void updateRowChanged(in RowSpecification row);
  void updateColumnChanged(in unsigned long column);
  void updateCellChanged(in RowSpecification row, in unsigned long column);
};</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The DOM can also be used to load data into the grid dynamically. That is, the datagrid doesn&#8217;t have to have children that provide the initial data. Instead, it can be set with <code>DataGridDataProvider</code> object, as shown in Listing 11. This enables you to load data from databases, XmlHttpRequest, or anything else JavaScript code can talk to.<br />
<a name="list11"><strong>Listing 11. DataGridDataProvider</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
interface DataGridDataProvider {
  void initialize(in HTMLDataGridElement datagrid);
  unsigned long getRowCount(in RowSpecification row);
  unsigned long getChildAtPosition(in RowSpecification parentRow,
      in unsigned long position);
  unsigned long getColumnCount();
  DOMString getCaptionText(in unsigned long column);
  void getCaptionClasses(in unsigned long column, in DOMTokenList classes);
  DOMString getRowImage(in RowSpecification row);
  HTMLMenuElement getRowMenu(in RowSpecification row);
  void getRowClasses(in RowSpecification row, in DOMTokenList classes);
  DOMString getCellData(in RowSpecification row, in unsigned long column);
  void getCellClasses(in RowSpecification row, in unsigned long column,
      in DOMTokenList classes);
  void toggleColumnSortState(in unsigned long column);
  void setCellCheckedState(in RowSpecification row, in unsigned long column,
      in long state);
  void cycleCell(in RowSpecification row, in unsigned long column);
  void editCell(in RowSpecification row, in unsigned long column, in DOMString data);
};</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><a name="N10405">menu and command</a></p>
<p>The <code>menu</code> element has actually been present in HTML since at least version 2. It was deprecated in HTML 4, but it comes roaring back with new significance in HTML 5. In HTML 5, a <code>menu</code> contains <code>command</code> elements, each of which causes an immediate action. For example, Listing 12 is a menu that pops up alerts.<br />
<a name="list12"><strong>Listing 12. HTML 5 menu</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;menu&gt;
    &lt;command onclick="alert('first command')"  label="Do 1st Command"/&gt;
    &lt;command onclick="alert('second command')" label="Do 2nd Command"/&gt;
    &lt;command onclick="alert('third command')"  label="Do 3rd Command"/&gt;
&lt;/menu&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Commands can also be turned into check boxes with a <code>checked="checked"</code> attribute. You can turn check boxes into radio buttons by specifying a <code>radiogroup</code> attribute whose value is the name of the group of mutually exclusive buttons.</p>
<p>In addition to simple lists of commands, you can use the <code>menu</code> element to create a toolbar or pop-up context menu by setting the<code>type</code> attribute to <code>toolbar</code> or <code>popup</code>. For example, Listing 13 shows a toolbar such as you might find in a blog editor like WordPress. It uses the <code>icon</code> attribute to link to button pictures.<br />
<a name="list13"><strong>Listing 13. HTML 5 toolbar</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;menu type="toolbar"&gt;
    &lt;command onclick="insertTag(buttons, 0);"  label="strong" icon="bold.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 1);"  label="em" icon="italic.gif"/&gt;
    &lt;command onclick="insertLink(buttons, 2);" label="link" icon="link.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 3);"  label="b-quote" icon="blockquote.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 4);"  label="del" icon="del.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 5);"  label="ins" icon="insert.gif"/&gt;
    &lt;command onclick="insertImage(buttons);"   label="img" icon="image.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 7);"  label="ul" icon="bullet.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 8);"  label="ol" icon="number.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 9);"  label="li" icon="item.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 10);" label="code" icon="code.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 11);" label="cite" icon="cite.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 12);" label="abbr" icon="abbr.gif"/&gt;
    &lt;command onclick="insertTag(buttons, 13);" label="acronym" icon="acronym.gif"/&gt;
&lt;/menu&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The <code>label</code> attribute gives a title for the menu. For example, Listing 14 might be an Edit menu.<br />
<a name="list14"><strong>Listing 14. HTML 5 Edit menu</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre>
&lt;menu type="popup" label="Edit"&gt;
    &lt;command onclick="undo()"   label="Undo"/&gt;
    &lt;command onclick="redo()"   label="Redo"/&gt;
    &lt;command onclick="cut()"    label="Cut"/&gt;
    &lt;command onclick="copy()"   label="Copy"/&gt;
    &lt;command onclick="paste()"  label="Paste"/&gt;
    &lt;command onclick="delete()" label="Clear"/&gt;
&lt;/menu&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Menus can be nested inside other menus to create hierarchical menus.</p>
<p><a href="http://www.ibm.com/developerworks/library/x-html5/#ibm-pcon">Back to top</a></p>
<p><a name="N10461">Conclusion</a></p>
<p>HTML 5 is part of the future of the Web. Its new elements enable clearer, simpler markup that makes pages more obvious. <code>Div</code>and <code>span</code> still have their places, but those places are much more restricted than they used to be. Many pages will no longer need to use them.</p>
<p>Although not all browsers will support these new elements at first, the same has been true for most elements introduced after HTML was first invented: <code>img</code>, <code>table</code>, <code>object</code>, and many more. Support will come with time. In the meantime, HTML&#8217;s must-ignore behavior for unrecognized elements means that users with legacy browsers will still be able to read HTML 5 pages. They can do so today. Users with more modern browsers will get an enhanced experience, but no one will be left out.</p>
<p>Eight years is a long time to wait for new features, especially in the fast-moving world of the Web. HTML 5 restores some of the excitement of the early days when Netscape, Microsoft, and others were introducing new elements every other week. At the same time, it takes a much more careful approach to defining these elements so that everyone can use them interoperably. The future looks bright.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/html5/new-elements-in-html-5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.cafeaulait.org/birds/sora.mov" length="0" type="video/quicktime" />
		</item>
		<item>
		<title>Vimeo now is supporting Embeddable HTML5</title>
		<link>http://livecms.com/site-updates/vimeo-now-is-supporting-embeddable-html5.html</link>
		<comments>http://livecms.com/site-updates/vimeo-now-is-supporting-embeddable-html5.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 20:30:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Site Updates]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=166</guid>
		<description><![CDATA[Vimeo has a new feature in our HTML5 player thanks to Apple. Now you can now watch Vimeo videos on your AppleTV! Just play any video on your iPad or iPhone running iOS 4.3 and tap on the AirPlay button to send the video to your AppleTV. <a href="http://livecms.com/site-updates/vimeo-now-is-supporting-embeddable-html5.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vimeo has a new feature in our HTML5 player thanks to Apple. <strong>Now you can now watch Vimeo videos on your AppleTV!</strong> Just play any video on your iPad or iPhone running iOS 4.3 and tap on the AirPlay button to send the video to your AppleTV.</p>
<p>Secondly, Vimeo made a small improvement in Flash player by adding a timecode hint when you mouse over the play bar. Now you should be able to jump to exact times in the video with more accuracy. We&#8217;ll be adding it to the HTML5 player shortly.</p>
<p>For now the HTML5 player is still limited to Safari and Chrome only. They are working on bringing it to IE9 and Firefox 4, but unfortunately both browsers present significant challenges at the moment. For example, IE9&#8242;s HTML5 support is not yet up to snuff compared to other browsers, and Firefox video support is WebM only. We hope to support WebM in the future, but are still waiting for a number of things to improve before we can adopt it fully.</p>
<p>PS- For all our fellow nerds out there, here are some extra details about our HTML5 player:</p>
<ul>
<li>All versions of our HTML5 player (desktop, touch, mobile) now clock in at 28KB or less! (CSS and JS combined)</li>
<li>We&#8217;re now trying to use feature detection as much as we can, rather than user agent detection, which means the player will automatically work where it can as browsers evolve.</li>
<li>We have a much more dynamic layout, meaning your videos look great no matter the size of the embed.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/site-updates/vimeo-now-is-supporting-embeddable-html5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manipulating History for Fun &amp; Profit</title>
		<link>http://livecms.com/html5/manipulating-history-for-fun-profit.html</link>
		<comments>http://livecms.com/html5/manipulating-history-for-fun-profit.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 00:38:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=162</guid>
		<description><![CDATA[The browser location bar is perhaps the geekiest mainstream piece of user interface in the world. There are URLs on billboards, on the sides of trains, and even in street graffiti. Combined with the back button — easily the most important button in the browser — you have a powerful way to go forward and backward through the vast set of intertwingled resources called the Web. <a href="http://livecms.com/html5/manipulating-history-for-fun-profit.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html"><abbr>HTML5</abbr> history <abbr>API</abbr></a> is a standardized way to manipulate the browser history via script. Part of this <abbr>API</abbr> — navigating the history — has been available in previous versions of <abbr>HTML</abbr>. The new parts in <abbr>HTML5</abbr> include a way to add entries to the browser history, to visibly change the <abbr>URL</abbr> in the browser location bar (without triggering a page refresh), and an event that fires when those entries are removed from the stack by the user pressing the browser’s back button. This means that the <abbr>URL</abbr>in the browser location bar can continue to do its job as a unique identifier for the current resource, even in script-heavy applications that don’t ever perform a full page refresh.</p>
<p>❧</p>
<h2 id="why">THE WHY</h2>
<p><img src="http://b.wearehugh.com/dih5/openclipart.org_johnny_automatic_demon_reading_Stewart_Orr.png" alt="demon reading book" width="218" height="231" /></p>
<p>Why would you manually manipulate the browser location? After all, a simple link can navigate to a new <abbr>URL</abbr>; that’s the way the web has worked for 20 years. And it will continue to work that way. This <abbr>API</abbr> doesn’t try to subvert the web. Just the opposite. In recent years, web developers have found new and exciting ways of subverting the web without any help from emerging standards. The <abbr>HTML5</abbr> history <abbr>API</abbr> is actually designed to ensure that <abbr>URL</abbr>s continue to be useful in script-heavy web applications.</p>
<p>Going back to first principles, what does a <abbr>URL</abbr> do? It identifies a unique resource. You can link to it directly; you can bookmark it; search engines can index it; you can copy and paste it and email it to someone else, who can click it and end up seeing the same resource you saw originally. These are all excellent qualities. <abbr>URL</abbr>s matter.</p>
<p>So we want unique resources to have unique <abbr>URL</abbr>s. But at the same time, browsers have always had a fundamental limitation: if you change the <abbr>URL</abbr>, even through script, it triggers a roundtrip to the remote web server and a full page refresh. This takes time and resources, and it seems especially wasteful when you are navigating to a page that is substantially similar to the current page. Everything on the new page gets downloaded, even the parts that are exactly the same as the current page. There is no way tell a browser to change the <abbr>URL</abbr> but only download half a page.</p>
<p>The <abbr>HTML5</abbr> history <abbr>API</abbr> lets you do this. Instead of triggering a full page refresh, you can use script to, in essence, download half a page. This illusion is tricky to pull off, and it requires some work on your part. Are you watching closely?</p>
<p><img src="http://c.wearehugh.com/dih5/openclipart.org_johnny_automatic_card_trick.png" alt="magician performing a card trick" width="287" height="238" /></p>
<p id="illusion">Let’s say you have two pages, page A and page B. The two pages are 90% identical; only 10% of the page content is different. The user navigates to page A, then tries to navigate to page B. But instead of triggering a full page refresh, you interrupt this navigation and do the following steps manually:</p>
<ol>
<li><em>Load the 10% of the page</em> from page B that is different from page A (probably using <code>XMLHttpRequest</code>). This will require some server-side changes to your web application. You will need to write code to return just the 10% of page B that is different from page A. This can be a hidden <abbr>URL</abbr> or query parameter that the end user would not normally see.</li>
<li><em>Swap in the changed content</em> (using <code>innerHTML</code> or other <abbr>DOM</abbr> methods). You may also need to reset any event handlers on elements within the swapped-in content.</li>
<li><em>Update the browser location bar</em> with the <abbr>URL</abbr> of page B, using a particular method from the <abbr>HTML5</abbr> history <abbr>API</abbr> that I’ll show you in a moment.</li>
</ol>
<p>At the end of this illusion (if you executed it correctly), the browser ends up with a <abbr>DOM</abbr> that is identical to page B, just as if you had navigated to page B directly. The browser location bar ends up with a <abbr>URL</abbr> that is identical to page B, just as if you had navigated to page B directly. But you never really did navigate to page B, and you never did a full page refresh. That’s the illusion. But because the “compiled” page looks the same as page B and has the same <abbr>URL</abbr> as page B, the user should never notice the difference (nor appreciate all your hard work micromanaging their experience).</p>
<p>❧</p>
<h2 id="how">THE HOW</h2>
<p>The <abbr>HTML5</abbr> history <abbr>API</abbr> is just a handful of methods on the <code>window.history</code> object, plus one event on the <code>window</code> object. You can use these to <a href="http://diveintohtml5.org/detect.html#history">detect support for the history <abbr>API</abbr></a>. Support is currently limited to the very latest versions of a few browsers, putting these techniques squarely in the “progressive enhancement” camp.</p>
<table>
<caption>HISTORY.PUSHSTATE SUPPORT</caption>
<thead>
<tr>
<th title="Internet Explorer">IE</th>
<th title="Mozilla Firefox">FIREFOX</th>
<th title="Apple Safari">SAFARI</th>
<th title="Google Chrome">CHROME</th>
<th>OPERA</th>
<th>IPHONE</th>
<th>ANDROID</th>
</tr>
</thead>
<tbody>
<tr>
<td>·</td>
<td>4.0+</td>
<td>5.0+</td>
<td>8.0+</td>
<td>·</td>
<td>4.2.1+</td>
<td>·</td>
</tr>
</tbody>
</table>
<p><a href="http://diveintohtml5.org/examples/history/fer.html">dive into dogs</a> is a straightforward but non-trivial example of using the <abbr>HTML5</abbr> history <abbr>API</abbr>. It demonstrates a common pattern: a long article with an associated inline photo gallery. In a supported browser, navigating the Next and Previous links in the photo gallery will update the photo in place <em>and update the <abbr>URL</abbr> in the browser location bar</em>, without triggering a full page refresh. In unsupported browsers — or, indeed, supported browsers where the user has disabled scripting — the links simply function as regular links, taking you to a new page with a full page refresh.</p>
<p>This brings up an important point:</p>
<div>
<h4>PROFESSOR MARKUP SAYS</h4>
<div>
<blockquote><p>If your web application fails in browsers with scripting disabled, Jakob Nielsen’s dog will come to your house and shit on your carpet.</p></blockquote>
</div>
</div>
<p id="gallery-markup">Let’s dig into the <a href="http://diveintohtml5.org/examples/history/fer.html">dive into dogs</a> demo and see how it works. This is the relevant markup for a single photo:</p>
<p>↶ The pledge</p>
<pre><code>&lt;aside id="gallery"&gt;
  &lt;p&gt;
    &lt;a id="photonext" href="casey.html"&gt;Next &amp;gt;&lt;/a&gt;
    &lt;a id="photoprev" href="adagio.html"&gt;&amp;lt; Previous&lt;/a&gt;
  &lt;/p&gt;
  &lt;figure id="photo"&gt;
    &lt;img id="photoimg" src="gallery/1972-fer-500.jpg"
            alt="Fer" width="500" height="375"&gt;
    &lt;figcaption&gt;Fer, 1972&lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/aside&gt;</code></pre>
<p>Nothing unusual there. The photo itself is an <code>&lt;img&gt;</code> inside a <code>&lt;figure&gt;</code>, the links are just regular <code>&lt;a&gt;</code> elements, and the entire thing is wrapped in an <code>&lt;aside&gt;</code>. It’s important that these are just regular links that actually work. All the code that follows is behind a <a href="http://diveintohtml5.org/detect.html#history">detection script</a>. If the user is using an unsupported browser, none of our fancy history <abbr>API</abbr> code will ever be executed. And of course, there’s always some users with scripting disabled altogether.</p>
<p>The main driver function gets each of these links and passes it to a function, <code>addClicker()</code>, which does the actual work of setting up the custom <code>click</code> handler.</p>
<pre><code>function setupHistoryClicks() {
  addClicker(document.getElementById("photonext"));
  addClicker(document.getElementById("photoprev"));
}</code></pre>
<p>This is the <code>addClicker()</code> function. It takes an <code>&lt;a&gt;</code> element and adds a <code>click</code> handler. And within this <code>click</code> handler is where it gets interesting.</p>
<pre><code>function addClicker(link) {
  link.addEventListener("click", function(e) {
    swapPhoto(link.href);
    history.pushState(null, null, link.href);
    e.preventDefault();
  }, false);
}</code></pre>
<p>↜ Interesting</p>
<p>The <code>swapPhoto()</code> function performs the first two steps of our <a href="http://diveintohtml5.org/history.html#illusion">three-step illusion</a>. The first half of the <code>swapPhoto()</code> function takes part of the <abbr>URL</abbr> of the navigation link itself — <code>casey.html</code>, <code>adagio.html</code>, <em>&amp;</em>c. — and constructs a <abbr>URL</abbr> to a hidden page that contains nothing but the markup required by the next photo.</p>
<pre><code>function swapPhoto(href) {
  var req = new XMLHttpRequest();
  req.open("GET",
           "http://diveintohtml5.org/examples/history/gallery/" +
             href.split("/").pop(),
           false);
  req.send(null);</code></pre>
<p>Here is a sample of the markup returned by <code><a href="http://diveintohtml5.org/examples/history/gallery/casey.html">http://diveintohtml5.org/examples/history/gallery/casey.html</a></code>. (You can verify this in your browser by visiting that <abbr>URL</abbr> directly.)</p>
<pre><code>&lt;p&gt;
  &lt;a id="photonext" href="brandy.html"&gt;Next &amp;gt;&lt;/a&gt;
  &lt;a id="photoprev" href="fer.html"&gt;&amp;lt; Previous&lt;/a&gt;
&lt;/p&gt;
&lt;figure id="photo"&gt;
  &lt;img id="photoimg" src="gallery/1984-casey-500.jpg"
          alt="Casey" width="500" height="375"&gt;
  &lt;figcaption&gt;Casey, 1984&lt;/figcaption&gt;
&lt;/figure&gt;</code></pre>
<p>Does that look familiar? It should. It’s the <a href="http://diveintohtml5.org/history.html#gallery-markup">same basic markup that the original page used</a> to display the first photo.</p>
<p>The second half of the <code>swapPhoto()</code> function performs the second step of our <a href="http://diveintohtml5.org/history.html#illusion">three-step illusion</a>: inserting this newly downloaded markup into the current page. Remember that there is an <code>&lt;aside&gt;</code> wrapping the entire figure, photo, and caption. So inserting the new photo markup is a one-liner, setting the <code>innerHTML</code> property of the <code>&lt;aside&gt;</code> to the <code>responseText</code>property returned from <code>XMLHttpRequest</code>.</p>
<pre><code>  if (req.status == 200) {
    document.getElementById("gallery").innerHTML = req.responseText;
    setupHistoryClicks();
    return true;
  }
  return false;
}</code></pre>
<p>(Also notice the call to <code>setupHistoryClicks()</code>. This is necessary to reset the custom <code>click</code> event handlers on the newly inserted navigation links. Setting <code>innerHTML</code> wipes out any trace of the old links and their event handlers.)</p>
<p>Now, let’s go back to the <code>addClicker()</code> function. After successfully swapping out the photo, there’s one more step in our<a href="http://diveintohtml5.org/history.html#illusion">three-step illusion</a>: setting the <abbr>URL</abbr> in the browser location bar without refreshing the page.</p>
<p>↶ The turn</p>
<pre><code>history.pushState(null, null, link.href);</code></pre>
<p>The <code>history.pushState()</code> function takes three parameters:</p>
<ol>
<li><code>state</code> can be any <abbr>JSON</abbr> data structure. It is passed back to the <code>popstate</code> event hander, which you’ll learn about in just a moment. We don’t need to track any state in this demo, so I’ve left it as <code>null</code>.</li>
<li><code>title</code> can be any string. This parameter is currently unused by major browsers. If you want to set the page title, you should store it in the <code>state</code> argument and set it manually in your <code>popstate</code> callback.</li>
<li><code>url</code> can be, well, any <abbr>URL</abbr>. This is the <abbr>URL</abbr> you want to appear in the browser’s location bar.</li>
</ol>
<p>Calling <code>history.pushState</code> will immediately change the <abbr>URL</abbr> in the browser’s location bar. So is that the end of the illusion? Well, not quite. We still need to talk about what happens when the user presses the all-important back button.</p>
<p>Normally when the user navigates to a new page (with a full page refresh), the browser pushes the new <abbr>URL</abbr> onto its history stack and downloads and draws the new page. When the user presses the back button, the browser pops one page off its history stack and redraws the previous page. But what happens now that you’ve short-circuited this navigation to avoid a full page refresh? Well, you’ve faked “moving forward” to a new <abbr>URL</abbr>, so now you also need to fake “moving backward” to the previous <abbr>URL</abbr>. And the key to faking “moving backwards” is the <code>popstate</code> event.</p>
<p>↶ The prestige</p>
<pre><code>window.addEventListener("popstate", function(e) {
    swapPhoto(location.pathname);
}</code></pre>
<p>After you’ve used the <code>history.pushState()</code> function to push a fake <abbr>URL</abbr> onto the browser’s history stack, when the user presses the back button, the browser will fire a <code>popstate</code> event on the <code>window</code> object. This is your chance to complete the illusion once and for all. Because making something disappear isn&#8217;t enough; you have to bring it back.</p>
<p>In this demonstration, “bringing it back” is as simple as swapping in the original photo, which we do by calling the<code>swapPhoto()</code> with the current location. By the time your <code>popstate</code> callback is called, the <abbr>URL</abbr> visible in the browser’s location bar has been changed to the previous <abbr>URL</abbr>. Also, the global <code>location</code> property has already been updated with the previous <abbr>URL</abbr>.</p>
<p>To help you visualize this, let’s step through the entire illusion from the beginning to the end:</p>
<ul>
<li>User loads <code><a href="http://diveintohtml5.org/examples/history/fer.html">http://diveintohtml5.org/examples/history/fer.html</a></code>, sees story and a photo of Fer.</li>
<li>User clicks the link labeled “Next,” an <code>&lt;a&gt;</code> element whose <code>href</code> property is<code><a href="http://diveintohtml5.org/examples/history/casey.html">http://diveintohtml5.org/examples/history/casey.html</a></code>.</li>
<li>Instead of navigating <code><a href="http://diveintohtml5.org/examples/history/casey.html">http://diveintohtml5.org/examples/history/casey.html</a></code> with a full page refresh, the custom<code>click</code> handler on the <code>&lt;a&gt;</code> element traps the click and executes its own code.</li>
<li>Our custom <code>click</code> handler calls the <code>swapPhoto()</code> function, which creates an <code>XMLHttpRequest</code> object to synchronously download the <abbr>HTML</abbr> snippet located at <code><a href="http://diveintohtml5.org/examples/history/gallery/casey.html">http://diveintohtml5.org/examples/history/<strong>gallery</strong>/casey.html</a></code>.</li>
<li>The <code>swapPhoto()</code> function sets the <code>innerHTML</code> property of the photo gallery wrapper (an <code>&lt;aside&gt;</code> element), thereby replacing the captioned photo of Fer with a captioned photo of Casey.</li>
<li>Finally, our custom <code>click</code> handler calls the <code>history.pushState()</code> function to manually change the <abbr>URL</abbr> in the browser’s location bar to <code><a href="http://diveintohtml5.org/examples/history/casey.html">http://diveintohtml5.org/examples/history/casey.html</a></code>.</li>
<li>User clicks the browser’s back button.</li>
<li>The browser notices that a <abbr>URL</abbr> has been manually pushed onto the history stack (by the <code>history.pushState()</code>function). Instead of navigating to the previous <abbr>URL</abbr> and redrawing the entire page, the browser simply updates the location bar to the previous <abbr>URL</abbr> (<code><a href="http://diveintohtml5.org/examples/history/fer.html">http://diveintohtml5.org/examples/history/fer.html</a></code>) and fires a <code>popstate</code>event.</li>
<li>Our custom <code>popstate</code> handler calls the <code>swapPhoto()</code> function again, this time with the previous <abbr>URL</abbr> that by now is already visible in the browser’s location bar.</li>
<li>Again using <code>XMLHttpRequest</code>, the <code>swapPhoto()</code> function downloads a snippet of <abbr>HTML</abbr> located at<code><a href="http://diveintohtml5.org/examples/history/gallery/fer.html">http://diveintohtml5.org/examples/history/<strong>gallery</strong>/fer.html</a></code> and sets the <code>innerHTML</code> property of the <code>&lt;aside&gt;</code>wrapper element, thereby replacing the captioned photo of Casey with a captioned photo of Fer.</li>
</ul>
<p>The illusion is complete. All visible evidence (the content of the page, and the <abbr>URL</abbr> in the location bar) suggests to the user that they have navigated forward one page and backward one page. But no full page refresh ever occurred — it was all a meticulously executed illusion.</p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/html5/manipulating-history-for-fun-profit.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 reference tags</title>
		<link>http://livecms.com/html5/alphabetical-html5-guide-to-detecting-everything.html</link>
		<comments>http://livecms.com/html5/alphabetical-html5-guide-to-detecting-everything.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 00:21:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=156</guid>
		<description><![CDATA[&#60;audio&#62;# return !!document.createElement('audio').canPlayType; &#60;audio&#62; in MP3 format# var a = document.createElement('audio'); return !!(a.canPlayType &#38;&#38; a.canPlayType('audio/mpeg;').replace(/no/, '')); &#60;audio&#62; in Vorbis format# var a = document.createElement('audio'); return !!(a.canPlayType &#38;&#38; a.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, '')); &#60;audio&#62; in WAV format# var a = document.createElement('audio'); return !!(a.canPlayType &#8230; <a href="http://livecms.com/html5/alphabetical-html5-guide-to-detecting-everything.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<dl>
<dt id="audio"><code>&lt;audio&gt;</code><a href="http://diveintohtml5.org/everything.html#audio">#</a></dt>
<dd><code>return !!document.createElement('audio').canPlayType;</code></dd>
<dt id="audio-mp3"><code>&lt;audio&gt;</code> in MP3 format<a href="http://diveintohtml5.org/everything.html#audio-mp3">#</a></dt>
<dd>
<pre><code>var a = document.createElement('audio');
return !!(a.canPlayType &amp;&amp; a.canPlayType('audio/mpeg;').replace(/no/, ''));</code></pre>
</dd>
<dt id="audio-vorbis"><code>&lt;audio&gt;</code> in Vorbis format<a href="http://diveintohtml5.org/everything.html#audio-vorbis">#</a></dt>
<dd>
<pre><code>var a = document.createElement('audio');
return !!(a.canPlayType &amp;&amp; a.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, ''));</code></pre>
</dd>
<dt id="audio-wav"><code>&lt;audio&gt;</code> in WAV format<a href="http://diveintohtml5.org/everything.html#audio-wav">#</a></dt>
<dd>
<pre><code>var a = document.createElement('audio');
return !!(a.canPlayType &amp;&amp; a.canPlayType('audio/wav; codecs="1"').replace(/no/, ''));</code></pre>
</dd>
<dt id="audio-aac"><code>&lt;audio&gt;</code> in AAC format<a href="http://diveintohtml5.org/everything.html#audio-aac">#</a></dt>
<dd>
<pre><code>var a = document.createElement('audio');
return !!(a.canPlayType &amp;&amp; a.canPlayType('audio/mp4; codecs="mp4a.40.2"').replace(/no/, ''));</code></pre>
</dd>
<dt id="canvas"><code>&lt;canvas&gt;</code><a href="http://diveintohtml5.org/everything.html#canvas">#</a></dt>
<dd><code>return !!document.createElement('canvas').getContext;</code></dd>
<dt id="canvas-text"><code>&lt;canvas&gt;</code> text <abbr>API</abbr><a href="http://diveintohtml5.org/everything.html#canvas-text">#</a></dt>
<dd>
<pre><code>var c = document.createElement('canvas');
return c.getContext &amp;&amp; typeof c.getContext('2d').fillText == 'function';</code></pre>
</dd>
<dt id="command"><code>&lt;command&gt;</code><a href="http://diveintohtml5.org/everything.html#command">#</a></dt>
<dd><code>return 'type' in document.createElement('command');</code></dd>
<dt id="datalist"><code>&lt;datalist&gt;</code><a href="http://diveintohtml5.org/everything.html#datalist">#</a></dt>
<dd>
<pre><code>return 'options' in document.createElement('datalist');</code></pre>
</dd>
<dt id="details"><code>&lt;details&gt;</code><a href="http://diveintohtml5.org/everything.html#details">#</a></dt>
<dd><code>return 'open' in document.createElement('details');</code></dd>
<dt id="device"><code>&lt;device&gt;</code><a href="http://diveintohtml5.org/everything.html#device">#</a></dt>
<dd><code>return 'type' in document.createElement('device');</code></dd>
<dt id="novalidate"><code>&lt;form&gt;</code> constraint validation<a href="http://diveintohtml5.org/everything.html#novalidate">#</a></dt>
<dd><code>return 'noValidate' in document.createElement('form');</code></dd>
<dt id="sandbox"><code>&lt;iframe sandbox&gt;</code><a href="http://diveintohtml5.org/everything.html#sandbox">#</a></dt>
<dd><code>return 'sandbox' in document.createElement('iframe');</code></dd>
<dt id="srcdoc"><code>&lt;iframe srcdoc&gt;</code><a href="http://diveintohtml5.org/everything.html#srcdoc">#</a></dt>
<dd><code>return 'srcdoc' in document.createElement('iframe');</code></dd>
<dt id="autofocus"><code>&lt;input autofocus&gt;</code><a href="http://diveintohtml5.org/everything.html#autofocus">#</a></dt>
<dd><code>return 'autofocus' in document.createElement('input');</code></dd>
<dt id="placeholder"><code>&lt;input placeholder&gt;</code><a href="http://diveintohtml5.org/everything.html#placeholder">#</a></dt>
<dd><code>return 'placeholder' in document.createElement('input');</code></dd>
<dt id="placeholder-textarea"><code>&lt;textarea placeholder&gt;</code><a href="http://diveintohtml5.org/everything.html#placeholder-textarea">#</a></dt>
<dd><code>return 'placeholder' in document.createElement('textarea');</code></dd>
<dt id="input-color"><code>&lt;input type="color"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-color">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'color');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-email"><code>&lt;input type="email"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-email">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'email');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-number"><code>&lt;input type="number"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-number">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'number');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-range"><code>&lt;input type="range"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-range">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'range');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-search"><code>&lt;input type="search"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-search">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'search');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-tel"><code>&lt;input type="tel"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-tel">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'tel');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-url"><code>&lt;input type="url"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-url">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'url');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-date"><code>&lt;input type="date"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-date">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'date');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-time"><code>&lt;input type="time"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-time">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'time');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-datetime"><code>&lt;input type="datetime"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-datetime">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'datetime');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-datetime-local"><code>&lt;input type="datetime-local"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-datetime-local">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'datetime-local);
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-month"><code>&lt;input type="month"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-month">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'month');
return i.type !== 'text';</code></pre>
</dd>
<dt id="input-week"><code>&lt;input type="week"&gt;</code><a href="http://diveintohtml5.org/everything.html#input-week">#</a></dt>
<dd>
<pre><code>var i = document.createElement('input');
i.setAttribute('type', 'week');
return i.type !== 'text';</code></pre>
</dd>
<dt id="meter"><code>&lt;meter&gt;</code><a href="http://diveintohtml5.org/everything.html#meter">#</a></dt>
<dd><code>return 'value' in document.createElement('meter');</code></dd>
<dt id="output"><code>&lt;output&gt;</code><a href="http://diveintohtml5.org/everything.html#output">#</a></dt>
<dd><code>return 'value' in document.createElement('output');</code></dd>
<dt id="progress"><code>&lt;progress&gt;</code><a href="http://diveintohtml5.org/everything.html#progress">#</a></dt>
<dd><code>return 'value' in document.createElement('progress');</code></dd>
<dt id="time"><code>&lt;time&gt;</code><a href="http://diveintohtml5.org/everything.html#time">#</a></dt>
<dd><code>return 'valueAsDate' in document.createElement('time');</code></dd>
<dt id="video"><code>&lt;video&gt;</code><a href="http://diveintohtml5.org/everything.html#video">#</a></dt>
<dd><code>return !!document.createElement('video').canPlayType;</code></dd>
<dt id="video-captions"><code>&lt;video&gt;</code> captions<a href="http://diveintohtml5.org/everything.html#video-captions">#</a></dt>
<dd><code>return 'src' in document.createElement('track');</code></dd>
<dt id="video-poster"><code>&lt;video poster&gt;</code><a href="http://diveintohtml5.org/everything.html#video-poster">#</a></dt>
<dd><code>return 'poster' in document.createElement('video');</code></dd>
<dt id="video-webm"><code>&lt;video&gt;</code> in WebM format<a href="http://diveintohtml5.org/everything.html#video-webm">#</a></dt>
<dd>
<pre><code>var v = document.createElement('video');
return !!(v.canPlayType &amp;&amp; v.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/, ''));</code></pre>
</dd>
<dt id="video-h264"><code>&lt;video&gt;</code> in H.264 format<a href="http://diveintohtml5.org/everything.html#video-h264">#</a></dt>
<dd>
<pre><code>var v = document.createElement('video');
return !!(v.canPlayType &amp;&amp; v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, ''));</code></pre>
</dd>
<dt id="video-theora"><code>&lt;video&gt;</code> in Theora format<a href="http://diveintohtml5.org/everything.html#video-theora">#</a></dt>
<dd>
<pre><code>var v = document.createElement('video');
return !!(v.canPlayType &amp;&amp; v.canPlayType('video/ogg; codecs="theora"').replace(/no/, ''));</code></pre>
</dd>
<dt id="contenteditable"><code>contentEditable</code><a href="http://diveintohtml5.org/everything.html#contenteditable">#</a></dt>
<dd><code>return 'isContentEditable' in document.createElement('span');</code></dd>
<dt id="postmessage">Cross-document messaging<a href="http://diveintohtml5.org/everything.html#postmessage">#</a></dt>
<dd><code>return !!window.postMessage;</code></dd>
<dt id="dnd">Drag-and-drop<a href="http://diveintohtml5.org/everything.html#dnd">#</a></dt>
<dd><code>return 'draggable' in document.createElement('span');</code></dd>
<dt id="filereader">File <abbr>API</abbr><a href="http://diveintohtml5.org/everything.html#filereader">#</a></dt>
<dd><code>return typeof FileReader != 'undefined';</code></dd>
<dt id="geolocation">Geolocation<a href="http://diveintohtml5.org/everything.html#geolocation">#</a></dt>
<dd><code>return !!navigator.geolocation;</code></dd>
<dt id="history">History<a href="http://diveintohtml5.org/everything.html#history">#</a></dt>
<dd><code>return !!(window.history &amp;&amp; window.history.pushState);</code></dd>
<dt id="storage">Local storage<a href="http://diveintohtml5.org/everything.html#storage">#</a></dt>
<dd>
<pre><code>try {
  return 'localStorage' in window &amp;&amp; window['localStorage'] !== null;
} catch(e) {
  return false;
}</code></pre>
</dd>
<dt id="microdata">Microdata<a href="http://diveintohtml5.org/everything.html#microdata">#</a></dt>
<dd><code>return !!document.getItems;</code></dd>
<dt id="offline">Offline web applications<a href="http://diveintohtml5.org/everything.html#offline">#</a></dt>
<dd><code>return !!window.applicationCache;</code></dd>
<dt id="eventsource">Server-sent events<a href="http://diveintohtml5.org/everything.html#eventsource">#</a></dt>
<dd><code>return typeof EventSource !== 'undefined';</code></dd>
<dt id="session-storage">Session storage<a href="http://diveintohtml5.org/everything.html#session-storage">#</a></dt>
<dd>
<pre><code>try {
  return 'sessionStorage' in window &amp;&amp; window['sessionStorage'] !== null;
} catch(e) {
  return false;
}</code></pre>
</dd>
<dt id="svg"><abbr>SVG</abbr><a href="http://diveintohtml5.org/everything.html#svg">#</a></dt>
<dd><code>return !!(document.createElementNS &amp;&amp; document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);</code></dd>
<dt id="inline-svg"><abbr>SVG</abbr> in <code>text/html</code><a href="http://diveintohtml5.org/everything.html#inline-svg">#</a></dt>
<dd>
<pre><code>var e = document.createElement('div');
e.innerHTML = '&lt;svg&gt;&lt;/svg&gt;';
return !!(window.SVGSVGElement &amp;&amp; e.firstChild instanceof window.SVGSVGElement);</code></pre>
</dd>
<dt id="undo">Undo<a href="http://diveintohtml5.org/everything.html#undo">#</a></dt>
<dd><code>return typeof UndoManager !== 'undefined';</code></dd>
<dt id="indexeddb">IndexedDB<a href="http://diveintohtml5.org/everything.html#indexeddb">#</a></dt>
<dd><code>return !!window.indexedDB;</code></dd>
<dt id="websockets">Web Sockets<a href="http://diveintohtml5.org/everything.html#websockets">#</a></dt>
<dd><code>return !!window.WebSocket;</code></dd>
<dt id="websql">Web SQL Database<a href="http://diveintohtml5.org/everything.html#websql">#</a></dt>
<dd><code>return !!window.openDatabase;</code></dd>
<dt id="workers">Web Workers<a href="http://diveintohtml5.org/everything.html#workers">#</a></dt>
<dd><code>return !!window.Worker;</code></dd>
<dt id="widgets">Widgets: am I in one?<a href="http://diveintohtml5.org/everything.html#widgets">#</a></dt>
<dd><code>return typeof widget !== 'undefined';</code></dd>
<dt id="xmlhttprequest-withcredentials">XMLHttpRequest: cross-domain requests<a href="http://diveintohtml5.org/everything.html#xmlhttprequest-withcredentials">#</a></dt>
<dd><code>return "withCredentials" in new XMLHttpRequest;</code></dd>
<dt id="xmlhttprequest-formdata">XMLHttpRequest: send as form data<a href="http://diveintohtml5.org/everything.html#xmlhttprequest-formdata">#</a></dt>
<dd><code>return !!window.FormData;</code></dd>
<dt id="xmlhttprequest-upload">XMLHttpRequest: upload progress events<a href="http://diveintohtml5.org/everything.html#xmlhttprequest-upload">#</a></dt>
<dd><code>return "upload" in new XMLHttpRequest;</code></dd>
</dl>
<form action="//www.google.com/cse"> </form>
<p><script src="j/667.js"></script><script type="text/javascript">// <![CDATA[
$('dt[id]').each(function() {$('<a class=hl>#</a>').attr('href', '#' + this.id).appendTo(this);});
// ]]&gt;</script></p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/html5/alphabetical-html5-guide-to-detecting-everything.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Peeks, Pokes and Pointers</title>
		<link>http://livecms.com/html5/html5-peeks-pokes-and-pointers.html</link>
		<comments>http://livecms.com/html5/html5-peeks-pokes-and-pointers.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 00:19:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=154</guid>
		<description><![CDATA[&#160; Common abbreviations (you&#8217;ll see these throughout this chart): $new=document.createElement $bool=function(any){return!(any=="no"&#124;&#124;!any)} Most new features can be detected in JavaScript. To test for HTML5 video support, create a &#60;video&#62; element and check for a property in its DOM: if("canPlayType" in $new("video")){...} &#8230; <a href="http://livecms.com/html5/html5-peeks-pokes-and-pointers.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<table><!-- giveupandusetables.com --></p>
<tbody>
<tr>
<td colspan="8"></td>
</tr>
<tr>
<td colspan="8"><em>Common abbreviations (you&#8217;ll see these throughout this chart):</em></td>
</tr>
<tr>
<td colspan="4"><strong>$new</strong>=<code>document.createElement</code></td>
<td colspan="4"><strong>$bool</strong>=<code>function(any){return!(any=="no"||!any)}</code></td>
</tr>
<tr>
<td colspan="8"><em>Most new features can be detected in JavaScript. To test for HTML5 video support, create a <code>&lt;video&gt;</code> element and check for a property in its DOM: <code>if("canPlayType" in $new("video")){...}</code> See <a href="detect.html">Chapter 2: Detecting HTML5 Features</a></em>.</td>
</tr>
<tr>
<td colspan="3">
<h2>New elements</h2>
</td>
<td></td>
<td colspan="4">
<h2><span>5 &gt; 2</span> Forms</h2>
</td>
</tr>
<tr>
<td colspan="3"><em>See <a href="semantics.html">Chapter 3: What Does It All Mean?</a></em></td>
<td></td>
<td colspan="4"><em>Backward-compatible with HTML 4. See <a href="forms.html">Chapter 9: A Form of Madness</a>.</em></td>
</tr>
<tr>
<td colspan="3"><strong>Test for support</strong></td>
<td></td>
<td colspan="4"><strong>Test for support</strong></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-command">&lt;command&gt;</a></strong></td>
<td><code>"type" in $new("command")</code></td>
<td></td>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#constraints">Validation</a></strong></td>
<td colspan="2"><code>"noValidate" in $new("form")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-datalist-element">&lt;datalist&gt;</a></strong></td>
<td><code>"options" in $new("datalist")</code></td>
<td></td>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-pattern-attribute">Regex constraint</a></strong></td>
<td colspan="2"><code>"pattern" in $new("input")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-details-element">&lt;details&gt;</a></strong></td>
<td><code>"open" in $new("details")</code></td>
<td></td>
<td></td>
<td class="dots"><strong><a href="forms.html#placeholder">Placeholder text</a></strong></td>
<td colspan="2"><code>"placeholder" in $new("input")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-output-element">&lt;output&gt;</a></strong></td>
<td><code>"value" in $new("output")</code></td>
<td></td>
<td></td>
<td class="dots"><strong><a href="forms.html#autofocus">Autofocus</a></strong></td>
<td colspan="2"><code>"autofocus" in $new("input")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-progress-element">&lt;progress&gt;</a></strong></td>
<td><code>"value" in $new("progress")</code></td>
<td></td>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-required-attribute">Required</a></strong></td>
<td colspan="2"><code>"required" in $new("input")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-meter-element">&lt;meter&gt;</a></strong></td>
<td><code>"value" in $new("meter")</code></td>
<td></td>
<td colspan="4"><strong><a href="forms.html">New input types</a></strong> <em>Browsers may customize style or input methods.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-time-element">&lt;time&gt;</a></strong></td>
<td><code>"valueAsDate" in $new("time")</code></td>
<td></td>
<td></td>
<td class="dots"><code>type="search"</code></td>
<td colspan="2">search box</td>
</tr>
<tr>
<td class="dots" colspan="2"><strong>Text annotations</strong></td>
<td><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-ruby-element"><code>&lt;ruby&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-rt-element"><code>&lt;rt&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-rp-element"><code>&lt;rp&gt;</code></a></td>
<td></td>
<td></td>
<td class="dots"><span><code>type="number"</code></span></td>
<td colspan="2">spinbox</td>
</tr>
<tr>
<td colspan="3"><strong>Semantics</strong> <em>Usable in all browsers. <a href="//code.google.com/p/html5shiv"></a>IE &lt; 9 requires a shim.</em></td>
<td></td>
<td></td>
<td class="dots"><span><code>type="range"</code></span></td>
<td colspan="2">slider</td>
</tr>
<tr>
<td></td>
<td colspan="2"><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-article-element"><code>&lt;article&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-aside-element"><code>&lt;aside&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-header-element"><code>&lt;header&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-hgroup-element"><code>&lt;hgroup&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-footer-element"><code>&lt;footer&gt;</code></a>,</td>
<td></td>
<td></td>
<td class="dots"><span><code>type="color"</code></span></td>
<td colspan="2">color picker</td>
</tr>
<tr>
<td></td>
<td colspan="2"><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-section-element"><code>&lt;section&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-nav-element"><code>&lt;nav&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/grouping-content.html#the-figure-element"><code>&lt;figure&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/grouping-content.html#the-figcaption-element"><code>&lt;figcaption&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-mark-element"><code>&lt;mark&gt;</code></a>,</td>
<td></td>
<td></td>
<td class="dots"><span><code>type="tel"</code></span></td>
<td colspan="2">telephone number</td>
</tr>
<tr>
<td></td>
<td colspan="2"><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-summary-element"><code>&lt;summary&gt;</code></a></td>
<td></td>
<td></td>
<td class="dots"><span><code>type="url"</code></span></td>
<td colspan="2">web address</td>
</tr>
<tr>
<td class="dots" colspan="2"><span><strong>Newly documented</strong></span></td>
<td><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#the-embed-element"><code>&lt;embed&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-keygen-element"><code>&lt;keygen&gt;</code></a>, <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-wbr-element"><code>&lt;wbr&gt;</code></a></td>
<td></td>
<td></td>
<td class="dots"><span><code>type="email"</code></span></td>
<td colspan="2">email address</td>
</tr>
<tr>
<td colspan="3"><strong><a href="//dev.w3.org/html5/html4-differences/#absent-elements">Obsolete</a></strong> <em>Still supported, but won&#8217;t validate.</em></td>
<td></td>
<td></td>
<td colspan="3"><code>type="date"/"time"/"month"/"week"/"datetime"</code></td>
</tr>
<tr>
<td></td>
<td colspan="3"><code>&lt;basefont&gt;</code>, <code>&lt;big&gt;</code>, <code>&lt;center&gt;</code>, <code>&lt;font&gt;</code>, <code>&lt;s&gt;</code>, <code>&lt;strike&gt;</code>,</td>
<td colspan="4"><strong><a href="detect.html#input-types">Test for new input types</a></strong> <em>All tests follow the same pattern.</em></td>
</tr>
<tr>
<td></td>
<td colspan="3"><code>&lt;frame&gt;</code>, <code>&lt;frameset&gt;</code>, <code>&lt;noframes&gt;</code>, <code>&lt;applet&gt;</code>, <code>&lt;dir&gt;</code>,</td>
<td></td>
<td colspan="3"><code>function() {</code></td>
</tr>
<tr>
<td></td>
<td colspan="3"><code>&lt;isindex&gt;</code>, <code>&lt;tt&gt;</code>, <code>&lt;u&gt;</code>, <code>&lt;acronym&gt;</code> (use <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-abbr-element"><code>&lt;abbr&gt;</code></a>)</td>
<td></td>
<td colspan="3"><code> var i = $new("input");</code></td>
</tr>
<tr>
<td colspan="3" rowspan="5">
<p class="note">Always quote your attribute values unless you&#8217;re a rockstar. Keep your trailing slashes if you like. Validation is still cool: <strong><a href="//html5.validator.nu"></a>html5.validator.nu</strong></p>
</td>
<td rowspan="5"></td>
<td></td>
<td colspan="3"><code> i.setAttribute("type", "<strong>search</strong>");</code></td>
</tr>
<tr>
<td></td>
<td colspan="3"><code> return i.type !== "text";</code></td>
</tr>
<tr>
<td></td>
<td colspan="3"><code>}</code></td>
</tr>
<tr>
<td colspan="4"><em>Some browers claim to &#8220;support&#8221; an input type but offer no default</em></td>
</tr>
<tr>
<td colspan="4"><em>user interface. <a href="//www.modernizr.com"></a>Modernizr can detect this.</em></td>
</tr>
<tr>
<td colspan="8">
<h2><span>look ma, no plugins</span> Multimedia</h2>
</td>
</tr>
<tr>
<td colspan="8"><em>Encode video with <a href="//firefogg.org"></a>Firefogg (Theora), <a href="//handbrake.fr"></a>HandBrake (H.264), or <a href="//www.mirovideoconverter.com"></a>Miro Video Encoder (multiple). See <a href="video.html">Chapter 5: Video on the Web</a>.</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><span><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#audio">&lt;audio&gt;</a> support</strong></span></td>
<td colspan="6"><code>"canPlayType" in $new("audio")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><span><strong><a href="//en.wikipedia.org/wiki/Vorbis">Vorbis</a></strong></span></td>
<td colspan="6"><code>$bool($new("audio").canPlayType('audio/ogg; codecs="vorbis"'))</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><span><strong><a href="//en.wikipedia.org/wiki/MP3">MP3</a></strong></span></td>
<td colspan="6"><code>$bool($new("audio").canPlayType('audio/mpeg;'))</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><span><strong><a href="//en.wikipedia.org/wiki/Advanced_Audio_Coding">AAC</a></strong></span></td>
<td colspan="6"><code>$bool($new("audio").canPlayType('audio/mp4; codecs="mp4a.40.2"'))</code></td>
</tr>
<tr>
<td class="dots" colspan="2"><span><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#video">&lt;video&gt;</a> support</strong></span></td>
<td colspan="6"><code>"canPlayType" in $new("video")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><span><strong><a href="//en.wikipedia.org/wiki/WebM">WebM</a></strong></span></td>
<td colspan="6"><code>$bool($new("video").canPlayType('video/webm; codecs="vp8, vorbis"'))</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><span><strong><a href="//en.wikipedia.org/wiki/Theora">Theora</a></strong></span></td>
<td colspan="6"><code>$bool($new("video").canPlayType('video/ogg; codecs="theora"'))</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><span><strong><a href="//en.wikipedia.org/wiki/H.264/MPEG-4_AVC">H.264</a></strong></span></td>
<td colspan="6"><code>$bool($new("video").canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'))</code></td>
</tr>
<tr>
<td class="dots" colspan="2"><span><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#htmlmediaelement">Properties</a></strong></span></td>
<td colspan="6"><em>These apply to both <code>&lt;audio&gt;</code> and <code>&lt;video&gt;</code> elements.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-src">src</a></code></span></td>
<td>string</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-currentsrc">currentSrc</a></code></span></td>
<td colspan="2">string, read-only</td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-preload">preload</a></code></span></td>
<td>string</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-tracks">tracks</a></code></span></td>
<td colspan="2">array of <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#timedtrack">TimedTrack</a> objects</td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-currenttime">currentTime</a></code></span></td>
<td>in seconds</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-buffered">buffered</a></code></span></td>
<td colspan="2"><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#timeranges">TimeRanges</a> object, read-only</td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-initialtime">initialTime</a></code></span></td>
<td>in seconds, read-only</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-played">played</a></code></span></td>
<td colspan="2">TimeRanges object, read-only</td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-duration">duration</a></code></span></td>
<td>in seconds, read-only</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-seekable">seekable</a></code></span></td>
<td colspan="2">TimeRanges object, read-only</td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-startoffsettime">startOffsetTime</a></code></span></td>
<td>datetime, read-only</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-networkstate">networkState</a></code></span></td>
<td colspan="2">enumerated, read-only</td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-paused">paused</a></code></span></td>
<td>boolean</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-readystate">readyState</a></code></span></td>
<td colspan="2">enumerated, read-only</td>
</tr>
<tr>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-ended">ended</a></code></span></td>
<td>boolean, read-only</td>
<td></td>
<td></td>
<td class="dots"><span><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-error">error.code</a></code></span></td>
<td colspan="2">enumerated, read-only</td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-autoplay">autoplay</a></code></td>
<td>boolean</td>
<td></td>
<td colspan="4" rowspan="6">
<p class="note">List multiple <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#the-source-element"><code>&lt;source&gt;</code></a> elements in an <code>&lt;audio&gt;</code> or <code>&lt;video&gt;</code>. HTML5-supporting browsers don&#8217;t render children of <code>&lt;video&gt;</code>, so put your <a href="video.html#ie">Flash fallback</a> there. Audio and video must be served with the proper MIME type, so check your <code>Content-Type</code> headers!</p>
</td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-loop">loop</a></code></td>
<td>boolean</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-controls">controls</a></code></td>
<td>boolean</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-volume">volume</a></code></td>
<td>0.0 to 1.0, default = 1.0</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-muted">muted</a></code></td>
<td>boolean</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-playbackrate">playbackRate</a></code></td>
<td>default = 1.0</td>
<td></td>
</tr>
<tr>
<td colspan="3">
<h2>Offline</h2>
</td>
<td></td>
<td colspan="4">
<h2><span><a href="//isgeolocationpartofhtml5.com"></a>IsGeolocationPartOfHTML5.com</span> Geolocation</h2>
</td>
</tr>
<tr>
<td colspan="3"><em>See <a href="offline.html">Chapter 8: Let&#8217;s Take This Offline</a>.</em></td>
<td></td>
<td colspan="4"><em>Location sharing is always opt-in. See <a href="geolocation.html">Chapter 6: You Are Here</a>.</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><span><strong><a href="detect.html#offline">Test for support</a></strong></span></td>
<td><code>window.applicationCache</code></td>
<td></td>
<td class="dots" colspan="2"><span><strong><a href="detect.html#geolocation">Test for support</a></strong></span></td>
<td colspan="2"><code>navigator.geolocation</code></td>
</tr>
<tr>
<td class="dots" colspan="2"><span><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#attr-html-manifest">&lt;html manifest&gt;</a></strong></span></td>
<td><em>Links to cache manifest.</em></td>
<td></td>
<td colspan="4"><strong><a href="//www.w3.org/TR/geolocation-API/#geolocation_interface">Functions</a></strong></td>
</tr>
<tr>
<td colspan="3"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#manifests">Cache manifest sections</a></strong></td>
<td></td>
<td></td>
<td colspan="3"><code>Position getCurrentPosition(callback, <em title="optional">err, opt</em>);</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong>CACHE:</strong></td>
<td>Always cached. No wildcards.</td>
<td></td>
<td></td>
<td colspan="3"><code>long watchPosition(callback, <em title="optional">err, opt</em>);</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong>NETWORK:</strong></td>
<td>Never cached. &#8220;*&#8221; wildcards.</td>
<td></td>
<td></td>
<td colspan="3"><code>void clearWatch(watchId);</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong>FALLBACK:</strong></td>
<td>Pairs; second is used offline.</td>
<td></td>
<td></td>
<td colspan="3"><code>void callback(position);</code> <em>Called on success</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#appcacheevents">Events</a></strong></td>
<td><em>First four are most common.</em></td>
<td></td>
<td></td>
<td colspan="3"><code>void err(positionError);</code> <em>Called on error</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><code>checking</code></td>
<td>always first</td>
<td></td>
<td colspan="4"><strong><a href="//www.w3.org/TR/geolocation-API/#position-options">PositionOptions object</a></strong></td>
</tr>
<tr>
<td></td>
<td class="dots"><code>downloading</code></td>
<td>found manifest, fetching stuff</td>
<td></td>
<td></td>
<td class="dots"><code>timeout</code></td>
<td colspan="2">in milliseconds</td>
</tr>
<tr>
<td></td>
<td class="dots"><code>progress</code></td>
<td>still fetching stuff</td>
<td></td>
<td></td>
<td class="dots"><code>maximumAge</code></td>
<td colspan="2">also milliseconds</td>
</tr>
<tr>
<td></td>
<td class="dots"><code>cached</code></td>
<td>all resources cached</td>
<td></td>
<td></td>
<td class="dots"><code>enableHighAccuracy</code></td>
<td colspan="2">true or false</td>
</tr>
<tr>
<td></td>
<td class="dots"><code>noupdate</code></td>
<td>manifest hasn&#8217;t changed</td>
<td></td>
<td colspan="4"><em><a href="//www.w3.org/TR/geolocation-API/#position">Position object</a> (in callback) has <code>timestamp</code> and <code>coords</code>.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><code>updateready</code></td>
<td>call <code>swapCache()</code> to activate</td>
<td></td>
<td colspan="4"><strong><a href="//www.w3.org/TR/geolocation-API/#coordinates_interface">Coordinates object</a></strong> <em>Unsupported properties will be <code>null</code>.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><code>obsolete</code></td>
<td>manifest is 404 (or 410)</td>
<td></td>
<td></td>
<td class="dots"><code>latitude</code></td>
<td colspan="2">in decimal degrees</td>
</tr>
<tr>
<td></td>
<td class="dots"><code>error</code></td>
<td>it all went wrong somewhere</td>
<td></td>
<td></td>
<td class="dots"><code>longitude</code></td>
<td colspan="2">also decimal degrees</td>
</tr>
<tr>
<td colspan="3" rowspan="8">
<p class="note">HTTP semantics still apply to resources listed in the cache manifest, so check your <code>Expires</code> and <code>Cache-Control</code> headers. Manifest must be served as <code>text/cache-manifest</code>, so check your <code>Content-Type</code> headers too. If <em>any</em> required resource fails to load, application will not work offline.</p>
</td>
<td rowspan="8"></td>
<td></td>
<td class="dots"><code>altitude</code></td>
<td colspan="2">meters above the <a href="//en.wikipedia.org/wiki/Reference_ellipsoid">reference ellipsoid</a></td>
</tr>
<tr>
<td></td>
<td class="dots"><code>accuracy</code></td>
<td colspan="2">in meters</td>
</tr>
<tr>
<td></td>
<td class="dots"><code>altitudeAccuracy</code></td>
<td colspan="2">also in meters</td>
</tr>
<tr>
<td></td>
<td class="dots"><code>heading</code></td>
<td colspan="2">degrees CCW from true north</td>
</tr>
<tr>
<td></td>
<td class="dots"><code>speed</code></td>
<td colspan="2">in meters/second</td>
</tr>
<tr>
<td colspan="4"><em><a href="//www.w3.org/TR/geolocation-API/#position-error">PositionError object</a> (in err callback) has <code>message</code> and <code>code</code>:</em></td>
</tr>
<tr>
<td></td>
<td colspan="3">TIMEOUT, POSITION_UNAVAILABLE,</td>
</tr>
<tr>
<td></td>
<td colspan="3">PERMISSION_DENIED, or UNKNOWN_ERROR</td>
</tr>
<tr>
<td colspan="8">
<h2><span>Math is hard. Let&#8217;s go shopping!</span> Canvas</h2>
</td>
</tr>
<tr>
<td colspan="8"><em>Paths are like tracing in pencil; nothing is drawn until <code>fill()</code> or <code>stroke()</code>! See <a href="canvas.html">Chapter 4: Let&#8217;s Call It A Draw(ing) Surface</a>.</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="detect.html#canvas">Basic support</a></strong></td>
<td colspan="6"><code>"getContext" in $new("canvas")</code></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="detect.html#canvas-text">Text support</a></strong></td>
<td colspan="6"><code>typeof $new("canvas").fillText=="function"</code></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong>Functions</strong></td>
<td colspan="6"><em>Root path is implicit; subpaths must be explicit. <code>drawImage()</code> can also draw video or canvas.</em></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-beginpath">beginPath();</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage">drawImage(image,dx,dy,<em title="optional">dw,dh</em>);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-quadraticcurveto">quadraticCurveTo(cpx,cpy,x,y);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-closepath">closePath();</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-rotate">rotate(angle);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-beziercurveto">bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-moveto">moveTo(x,y);</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-translate">translate(x,y);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-arc">arc(x,y,radius,startAngle,endAngle,anticlockwise);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-lineto">lineTo(x,y);</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-arcto">arcTo(x1,y1,x2,y2,radius);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-getimagedata">getImageData(sx,sy,sw,sh);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-rect">rect(x,y,w,h);</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-ispointinpath">isPointInPath(x,y);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-putimagedata">putImageData(imagedata,dx,dy,x,y,w,h);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fill">fill();</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fillrect">fillRect(x,y,w,h);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-filltext">fillText(text,x,y,<em title="optional">maxWidth</em>);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-stroke">stroke();</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-strokerect">strokeRect(x,y,w,h);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-stroketext">strokeText(text,x,y,<em title="optional">maxWidth</em>);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-clip">clip();</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-clearrect">clearRect(x,y,w,h);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-measuretext">measureText(text);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-save">save();</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-settransform">setTransform(a,b,c,d,e,f);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-createlineargradient">createLinearGradient(x0,y0,x1,y1);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-restore">restore();</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-transform">transform(a,b,c,d,e,f);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-createradialgradient">createRadialGradient(x0,y0,r0,x1,y1,r1);</a></code></td>
</tr>
<tr>
<td></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-scale">scale(x,y);</a></code></td>
<td><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-createimagedata">createImageData(sw,sh);</a></code></td>
<td></td>
<td colspan="4"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-createpattern">createPattern(image,repetition);</a></code></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong>Properties</strong></td>
<td colspan="6"><em>All properties are read/write. <code>fillStyle</code> and <code>strokeStyle</code> can also be a gradient or pattern.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fillstyle">fillStyle</a></code></td>
<td>CSS color, default = &#8220;black&#8221;</td>
<td></td>
<td class="dots" colspan="2"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-shadowcolor">shadowColor</a></code></td>
<td colspan="2">CSS color, default = &#8220;black&#8221;</td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-strokestyle">strokeStyle</a></code></td>
<td>CSS color, default = &#8220;black&#8221;</td>
<td></td>
<td class="dots" colspan="2"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-shadowoffsetx">shadowOffsetX</a></code></td>
<td colspan="2">in pixels, default = 0</td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-font">font</a></code></td>
<td>CSS font, default = &#8220;10px sans-serif&#8221;</td>
<td></td>
<td class="dots" colspan="2"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-shadowoffsety">shadowOffsetY</a></code></td>
<td colspan="2">in pixels, default = 0</td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-textalign">textAlign</a></code></td>
<td>enumerated, default = &#8220;start&#8221;</td>
<td></td>
<td class="dots" colspan="2"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-shadowblur">shadowBlur</a></code></td>
<td colspan="2">in pixels, default = 0</td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-textbaseline">textBaseline</a></code></td>
<td>enumerated, default = &#8220;alphabetic&#8221;</td>
<td></td>
<td colspan="4" rowspan="6">
<p class="note">Learn about states! A <a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-state">canvas state</a> includes the clipping path, all properties, and all transformations. <code>save()</code> pushes a state onto the stack and <code>restore()</code> pops it off.</p>
</td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-globalalpha">globalAlpha</a></code></td>
<td>0.0 (transparent) to 1.0 (opaque)</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-linewidth">lineWidth</a></code></td>
<td>in pixels, default = 1</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-linecap">lineCap</a></code></td>
<td>enumerated, default = &#8220;butt&#8221;</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-linejoin">lineJoin</a></code></td>
<td>enumerated, default = &#8220;miter&#8221;</td>
<td></td>
</tr>
<tr>
<td></td>
<td class="dots"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-miterlimit">miterLimit</a></code></td>
<td>float, default = 10</td>
<td></td>
</tr>
<tr>
<td colspan="8">
<h2>Bits &amp; Bytes</h2>
</td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#the-doctype">Doctype</a></strong></td>
<td colspan="6"><code>&lt;!DOCTYPE html&gt;</code> <em>Triggers <a href="semantics.html#the-doctype">standards-based rendering</a> in all browsers. There is no &#8220;quirks mode&#8221; in HTML5.</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#attr-meta-charset">Text encoding</a></strong></td>
<td colspan="6"><code>&lt;meta charset="utf-8"&gt;</code> <em><a href="//code.google.com/p/doctype/wiki/ArticleUtf7">Always declare a charset</a>, even if you&#8217;re a rockstar. UTF-8 is always a safe choice.</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="//wiki.whatwg.org/wiki/HTML_vs._XHTML">Optional end tags</a></strong></td>
<td colspan="6"><code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>, <code>&lt;body&gt;</code>, <code>&lt;li&gt;</code>, <code>&lt;p&gt;</code>, <code>&lt;dt&gt;</code>, <code>&lt;dd&gt;</code>, <code>&lt;colgroup&gt;</code>, <code>&lt;option&gt;</code>, <code>&lt;optgroup&gt;</code>, <code>&lt;rt&gt;</code>, <code>&lt;rp&gt;</code>,</td>
</tr>
<tr>
<td colspan="2"></td>
<td colspan="6"><code>&lt;thead&gt;</code>, <code>&lt;tbody&gt;</code>, <code>&lt;tfoot&gt;</code>, <code>&lt;tr&gt;</code>, <code>&lt;td&gt;</code>. <em>Exception: always close <code>&lt;p&gt;</code> before <code>&lt;table&gt;</code> to avoid IE weirdness.</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="//wiki.whatwg.org/wiki/HTML_vs._XHTML">Optional start tags</a></strong></td>
<td colspan="6"><code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>, <code>&lt;body&gt;</code>, <code>&lt;tbody&gt;</code>, <code>&lt;colgroup&gt;</code>. <em>Amaze your friends! Skip the <code>&lt;html&gt;</code> tags and still validate!</em></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong><a href="//dev.w3.org/html5/html4-differences/#new-attributes">New attributes</a></strong></td>
<td colspan="6"><code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-media">&lt;a media&gt;</a></code>, <code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/links.html#ping">&lt;a ping&gt;</a></code>, <code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#attr-base-target">&lt;base target&gt;</a></code>, <code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#attr-style-scoped">&lt;style scoped&gt;</a></code>, <code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-async">&lt;script async&gt;</a></code>, <code><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/grouping-content.html#attr-ol-reversed">&lt;ol reversed&gt;</a></code></td>
</tr>
<tr>
<td colspan="2"><strong>Miscellaneous tests</strong></td>
<td colspan="6"><em>See <a href="everything.html">The All-In-One Almost-Alphabetical No-Bullshit Guide to Detecting Everything</a>.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//dev.w3.org/2006/webapi/WebSimpleDB"></a>IndexedDB</strong></td>
<td><code>window.indexedDB</code></td>
<td></td>
<td class="dots" colspan="2"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#contenteditable">contentEditable</a></strong></td>
<td colspan="2"><code>"isContentEditable" in $new("a")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-workers/current-work"></a>Web Workers</strong></td>
<td><code>window.Worker</code></td>
<td></td>
<td class="dots" colspan="2"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#dnd">Drag-and-drop</a></strong></td>
<td colspan="2"><code>"draggable" in $new("span")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//dev.w3.org/html5/websockets"></a>Web Sockets</strong></td>
<td><code>window.WebSocket</code></td>
<td></td>
<td class="dots" colspan="2"><strong><a href="//dev.w3.org/2006/webapi/FileAPI"></a>File API</strong></td>
<td colspan="2"><code>typeof FileReader!=="undefined"</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#web-messaging">X-doc messaging</a></strong></td>
<td><code>window.postMessage</code></td>
<td></td>
<td class="dots" colspan="2"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#undo">Undo history</a></strong></td>
<td colspan="2"><code>typeof UndoManager!=="undefined"</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//dev.w3.org/html5/webdatabase"></a>Web SQL</strong></td>
<td><code>window.openDatabase</code></td>
<td></td>
<td class="dots" colspan="2"><strong><a href="//blog.whatwg.org/whats-next-in-html-episode-2-sandbox">&lt;iframe sandbox&gt;</a></strong></td>
<td colspan="2"><code>"sandbox" in $new("iframe")</code></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//dev.w3.org/html5/webstorage"></a>Web Storage</strong></td>
<td colspan="6"><code>"localStorage" in window &amp;&amp; window["localStorage"] !== null</code> <em>See <a href="storage.html">Chapter 7: Local Storage</a>.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//www.whatwg.org/specs/web-apps/current-work/multipage/history.html#the-history-interface">History API</a></strong></td>
<td colspan="6"><code>window.history &amp;&amp; window.history.pushState</code> <em>See <a href="history.html">Chapter 11: History <abbr>API</abbr></a>.</em></td>
</tr>
<tr>
<td></td>
<td class="dots"><strong><a href="//hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more"></a>Inline SVG</strong></td>
<td colspan="6"><code>function() { var e=$new("div"); e.innerHTML="&lt;svg&gt;&lt;/svg&gt;";</code></td>
</tr>
<tr>
<td colspan="2"></td>
<td colspan="6"><code> return window.SVGSVGElement &amp;&amp; e.firstChild instanceof window.SVGSVGElement}</code></td>
</tr>
<tr>
<td colspan="8">
<h2><span>Serial Number 110302</span> Credits</h2>
</td>
</tr>
<tr>
<td class="dots" colspan="2"><strong>Writing</strong></td>
<td><a href="//diveintomark.org"></a>Mark Pilgrim</td>
<td></td>
<td class="dots" colspan="2"><strong>References</strong></td>
<td colspan="2"><a href="//www.whatwg.org/specs/web-apps/current-work/multipage"></a>HTML5, <a href="//dev.w3.org/html5/html4-differences"></a>HTML-diff, <a href="//wiki.whatwg.org/wiki/HTML_vs._XHTML">HTML vs. XHTML</a></td>
</tr>
<tr>
<td class="dots" colspan="2"><strong>Code</strong></td>
<td><a href="//www.modernizr.com"></a>Modernizr (<a href="//paulirish.com"></a>Paul Irish <em>et. al.</em>)</td>
<td></td>
<td class="dots" colspan="2"><strong>Inspiration</strong></td>
<td colspan="2"><a href="//www.lazilong.com/apple_II/bbros"></a>Beagle Bros</td>
</tr>
<tr>
<td class="dots" colspan="2"><strong>Typography</strong></td>
<td><a href="//www.theleagueofmoveabletype.com/fonts/4-chunk">Chunk</a>, <a href="//www.gust.org.pl/projects-1/e-foundry/latin-modern">Latin Modern</a></td>
<td></td>
<td class="dots" colspan="2"><strong>License</strong></td>
<td colspan="2"><a title="Creative Commons Attribution 3.0 Unported" rel="license" href="//creativecommons.org/licenses/by/3.0">CC-BY-3.0</a></td>
</tr>
<tr>
<td id="td1">&nbsp;</td>
<td id="td2">&nbsp;</td>
<td id="td3">&nbsp;</td>
<td id="td4">&nbsp;</td>
<td id="td5">&nbsp;</td>
<td id="td6">&nbsp;</td>
<td id="td7">&nbsp;</td>
<td id="td8"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/html5/html5-peeks-pokes-and-pointers.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DeSlice &#8211; The Ultimate Provider of Design Slicing Services</title>
		<link>http://livecms.com/tools/deslice-the-ultimate-provider-of-design-slicing-services.html</link>
		<comments>http://livecms.com/tools/deslice-the-ultimate-provider-of-design-slicing-services.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 00:16:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=152</guid>
		<description><![CDATA[DeSlice is engaged in providing professional slicing services which include XHTML/CSS coding from PSD, PNG etc files into valid markup or CMS like TYPO3, Joomla, WordPress, ExpressionEngine, Drupal, osCommerce and many others. All that is required from you as a client is to provide the image of the layout of the client website; DeSlice will promptly deliver the XHTML, and CSS files equivalent to the original design image. <a href="http://livecms.com/tools/deslice-the-ultimate-provider-of-design-slicing-services.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The work ethics of DeSlice is so empowered that web designers/developers are least hesitant to delegate some of their work out of their busy work schedule related to the technical aspect of coding, while focusing on their basic expertise of designing web pages and websites (and all that sustaining a profit).</p>
<p>DeSlice is also the favorite service provider for coding to all the new web designers who want to make a mark with their web-designing jobs; as DeSlice provide the best standards of coding, enhancing the look of your website design. However, DeSlice believes that quality work can only be provided with good co-ordination between the client and the service provider. Therefore, DeSlice ensures that all the job descriptions and the preference of a client is clarified before an order is place for coding.</p>
<p>It is also important that a client provide adequate information to DeSlice if you appreciate coding of high standards. Such as, it is imperative that you (client) provides the Source file of the design, for which coding is required. You may however choose the various formats available in which you want your coding to be supplied. You may also send a compressed (flattened) image of the page look, as per your expectation. It will help in turning off the additional layers in the source files (if any).</p>
<p>Moreover, DeSlice offers the option for clients to provide additional description of any definite requirements. In addition, it is a prerequisite to provide the actual font files to display the image correctly, in case if the client is using custom fonts and haven&#8217;t traced the outlines of the fonts.</p>
<p>DeSlice also ensures that ample care is taken before the client uploads the design-work, to facilitate faster slicing of the designs. Therefore, it is imperative that the designs are to be submitted only in PSD and PNG files created either in Adobe PhotoshopÆ (.PSD), Macromedia FireworksÆ (.PNG) or Adobe IllustratorÆ (.AI) or even HTML (existing markup). It is also essential that Outlines be created while sending an Adobe Illustrator design.</p>
<p>DeSlice has excellent record of accomplishing turnaround time for delivery within one or three days, and that too at high levels of client satisfaction. And this high standards in its service is evident from the fact that DeSlice, with expertise in cross-browser compatibility, makes sure that your design template works on browsers like Mozilla Firefox, Safari, Opera and of course Internet Explorer 6 &#038; 7. It also takes enough care to make your website standard compliant by confirming that your document authenticates using the W3C XHTML and CSS validator.</p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/tools/deslice-the-ultimate-provider-of-design-slicing-services.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3 Cool Cell Phone Tricks For You</title>
		<link>http://livecms.com/tools/3-cool-cell-phone-tricks-for-you.html</link>
		<comments>http://livecms.com/tools/3-cool-cell-phone-tricks-for-you.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 00:11:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[cell]]></category>
		<category><![CDATA[phones]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=149</guid>
		<description><![CDATA[Cell phones have become ubiquitous.  It is now unusual to find anyone who does not have one of the little beasties.  The obvious next step was to seek a means to ensure your cell phone is unique and different from all of the others out there.  A variety of features exist in varying combinations and there are the usual tricks like customizing the picture on the screen or the ringtone.  These are almost all more style than substance.  

Weíve all experienced the ringtone that... <a href="http://livecms.com/tools/3-cool-cell-phone-tricks-for-you.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-150" title="cellphone" src="http://livecms.com/wp-content/uploads/2011/04/cellphone-231x250.gif" alt="" width="231" height="250" />Cell phones have become ubiquitous.  It is now unusual to find anyone who does not have one of the little beasties.  The obvious next step was to seek a means to ensure your cell phone is unique and different from all of the others out there.  A variety of features exist in varying combinations and there are the usual tricks like customizing the picture on the screen or the ringtone.  These are almost all more style than substance.</p>
<p>Weíve all experienced the ringtone that outstays its welcome and then just wonít go away or a ringtone that is just particularly inopportune for some reason.  There are also stories of just the wrong cell phone wallpaper showing the bosses relative or some other potentially embarrassing sight.  Some people actually use those phones for something other than status symbols.  Here are a couple of tricks for those.</p>
<p>One potentially useful trick is the doggie whistle.  For cell phones that allow multiple ring tones, using the inaudible dog whistle for one provides a handy method to discourage annoying dogs that might chase you as you jog, harass you as you walk or some other hassle.</p>
<p>Another useful trick is that of habitually locking the phoneís keys when you replace it into a pocket, purse or other container.  The random presses of buttons that otherwise occur are a drain on battery power unless the phone has been told to ignore them with the lock command, and can potentially save money if the phone might accidentally hit the correct combination to make a call.  Another useful feature to save battery power is airplane mode, for those times when you do not desire to answer the phone but do expect to need the phone&#8217;s other features, such as a planner function or even clock.</p>
<p>Finally, cell phones are terribly convenient.  Carrying around a phone book isnít.  Yet conventional directory assistance costs can add up.  The alternative is 800-FREE411, or 800-373-3411.  This is an ad supported directory assistance that can be used to find numbers you havenít stored on your phone without running up those directory assistance charges.</p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/tools/3-cool-cell-phone-tricks-for-you.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8 Easy Ways To Stop Spam</title>
		<link>http://livecms.com/tools/8-easy-ways-to-stop-spam.html</link>
		<comments>http://livecms.com/tools/8-easy-ways-to-stop-spam.html#comments</comments>
		<pubDate>Sun, 13 Mar 2011 13:26:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[fight spam]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=143</guid>
		<description><![CDATA[Yahoo and Hotmail provide this feature in order to keep your private email address strictly for your friends and family members and only. The secondary address, you can use for your subscriptions and other purposes. If your secondary address is abused from spammers and your inbox is filled with spam messages, then you can delete it and create another secondary email address. <a href="http://livecms.com/tools/8-easy-ways-to-stop-spam.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yahoo and Hotmail provide this feature in order to keep your private email address strictly for your friends and family members and only. The secondary address, you can use for your subscriptions and other purposes. If your secondary address is abused from spammers and your inbox is filled with spam messages, then you can delete it and create another secondary email address.</p>
<p><strong>Use the Spam arrest service.</strong></p>
<p><img class="alignleft size-medium wp-image-145" title="300px-Spammed-mail-folder" src="http://livecms.com/wp-content/uploads/2011/03/300px-Spammed-mail-folder-250x138.png" alt="" width="250" height="138" />When you signup for Spam Arrest, you will receive a spamarrest.com email address. You can also protect your existing email accounts by forwarding them to your Spam Arrest email address, or by having Spam Arrest periodically poll them. In that way over 90% of your spam messages will be filtered.</p>
<p><strong>Use your e-mail&#8217;s filters.</strong></p>
<p>Almost all email applications have this feature. You can create filters blocking spam words like ìmake money, opportunities, Viagra, e.t.c. Doing that, you will block many of your spam messages but not all of them.</p>
<p><strong>NEVER post your email.</strong></p>
<p>Don&#8217;t post your email on forums, websites, message boards, guest books and other online places. You should also avoid posting your contact email address on your website. Spammers use software robots and extract email addresses from thousands of websites. If you want to display your email at your website change it to jpeg photo with Photoshop or other image design software.</p>
<p><strong>The use of email blocking tools.</strong></p>
<p>Yahoo for instance has this excellent tool which can block up to 500 email addresses (the Free option, the paid one provide more) and this amount of spam emails will never reach your mailbox. Other web mail services provide similar features too.</p>
<p><strong>The preinstalled filter in your email application.</strong></p>
<p>If you use outlook express you can click ìmessageî (from windows 98 versions and later) and then click ìBlock senderî. Just doing that you will block many of your unsolicited emails.</p>
<p><strong>Do Not respond to spam at all costs.</strong></p>
<p>When you receive a spam message which asks you to click a link for whatever reason (fake unsubscribe and other) do not click it. If you do that, the spammers will now instantly that they deal with a real email address.</p>
<p><strong>Do Not Ever open unknown messages with attachments.</strong></p>
<p>This is critical. Most of the times the attachment will be a virus (especially if itís exe or zip format) If you open it you will activate the virus it contains and harm your computer. Accept email attachments ONLY from well known resources such as friends, business colleagues e.t.c. You should also have installed an antivirus which scans your emails before they are saved into your hard drive.</p>
<p>Excellent tools and resources to fight spam are these below:<br />
<a href="http://www.mailwasher.net">http://www.mailwasher.net</a><br />
<a href="http://www.sunbelt-software.com/products.cfm">http://www.sunbelt-software.com/products.cfm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/tools/8-easy-ways-to-stop-spam.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Analytics drive statistics of your Site</title>
		<link>http://livecms.com/tools/google-analytics-drive-statistics-of-your-site.html</link>
		<comments>http://livecms.com/tools/google-analytics-drive-statistics-of-your-site.html#comments</comments>
		<pubDate>Sat, 12 Mar 2011 10:26:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[page]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=133</guid>
		<description><![CDATA[Among all the free web site stats analyzer, I think Google analytics is the best solution for your site because of its utility, richness and depth analysis. You are able to make informed editorial, navigational and page design decisions to boost your site's traffic and effectiveness with the data that Google gives you. <a href="http://livecms.com/tools/google-analytics-drive-statistics-of-your-site.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Among all the free web site stats analyzer, I think Google analytics is the best solution for your site because of its utility, richness and depth analysis. You are able to make informed editorial, navigational and page design decisions to boost your site&#8217;s traffic and effectiveness with the data that Google gives you.</p>
<p><strong>Signup &amp; installation</strong></p>
<p><img class="alignleft size-medium wp-image-134" title="Google Analytics" src="http://livecms.com/wp-content/uploads/2011/03/Google-Analytics-250x162.jpg" alt="" width="250" height="162" />Google Analytics was launched in 2005; growth was initially slow due to the frustrating waiting list system initiated by Google to avoid over stretching their servers. Now the waiting list has been removed and anybody can sign up to use this great service.</p>
<p>You just need to visit Google analytics and signup for free Google analytics account.</p>
<p>Once your account is set up, to get Google Analytics tracking your site&#8217;s page views, drop a snippet of JavaScript onto your site&#8217;s pages (much like Sitemeter.) The guide should help you find your way around the new system. You just have to copy paste the JavaScript in the pages you want Google to track.</p>
<p>E.g.</p>
<p>&lt;script src=&#8221;http://www.google-analytics.com/urchin.js&#8221; type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;</p>
<p>_uacct = &#8220;UA-13541654-30&#8243;;</p>
<p>urchinTracker();<br />
&lt;/script&gt;</p>
<p>If you&#8217;re a blogger, just include the Google Analytics code into all your blogging software&#8217;s templates.</p>
<p><strong>Powerful report generating tool</strong></p>
<p>Google Analytics has all the features you&#8217;d expect from a high-end analytics offering. It also provides tightly integrated AdWords support to view AdWords ROI metrics without importing cost data or add keyword tracking codes.</p>
<p>If you have an AdWords account, you can use Google Analytics directly from the AdWords interface. Google Analytics also calculates ROI metrics from automatically imported cost and keyword tracking data, by saving you time.</p>
<p>There are various ways to track your different needs for your site.</p>
<p>If your site allows downloads you can keep record of your downloads by simply adding a script in your site.</p>
<p>E.g.</p>
<p>&lt;a href=&#8221;http://www.example.co.uk/files/map.pdf&#8221;onClick=&#8221;javascript:urchinTracker (&#8216;/downloads/map&#8217;); &#8220;&gt;</p>
<p><strong>Tracking ecommerce site</strong></p>
<p>Tracking where your visitor come from is the most important thing you should know. You come to know from which search engine visitors come searching for your site.</p>
<p>Sales reports by traffic sources can be found under the &#8220;Traffic Sources &gt; All Traffic Sources&#8221; section of the menu.</p>
<p><strong>Tracking your sales</strong></p>
<p>To track your sales you will need to use server side script on your confirmation page (the page people see after they complete a transaction on your site) to populate a form in the following format:</p>
<p>body onLoad=&#8221;javascript:__utmSetTrans()&#8221;&gt;</p>
<form style="display: none;"> <textarea id="utmtrans">UTM:T|[order-id]|[affiliation]| [total]|[tax]| [shipping]|[city]|[state]|[country] UTM:I|[order-id]|[sku/code]|[productname]|[category]|[price]| [quantity] </textarea> </form>
<p><strong>Example</strong></p>
<p>UTM:T|34535|Main Store|111108.06|8467.06|10.00|San Diego|CA|USA</p>
<p>UTM:I|34535|XF-1024|Urchin T-Shirt|Shirts|11399.00|9</p>
<p>UTM:I|34535|CU-3424|Urchin Drink Holder|Accessories|20.00|2</p>
<p>Once you have populated the form, GA will start tracking your sales right away.</p>
<p><strong>Redesign of your site</strong></p>
<p>If you are planning to redesign your site and want to keep your screen resolution according to the most commonly used resolution, according to different browsers or flash installed ask Google analytics for your queries. Just go to ëweb design parametersí for all the valuable data you want!</p>
<p>Above listed features is only the scratch of Google analytics. According to me Google analytics is one of the best web sites analyzing report generating tool build so far.</p>
<p>If you have not used Google analytics yet try it and I am sure you will love its rich features.</p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/tools/google-analytics-drive-statistics-of-your-site.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring Joomla 1.6, The Content Management System</title>
		<link>http://livecms.com/open-source/exploring-joomla-1-6-the-content-management-system.html</link>
		<comments>http://livecms.com/open-source/exploring-joomla-1-6-the-content-management-system.html#comments</comments>
		<pubDate>Sat, 12 Mar 2011 10:15:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Joomla]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Australia]]></category>
		<category><![CDATA[eCommerce]]></category>
		<category><![CDATA[Melbourne]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Site Development]]></category>
		<category><![CDATA[Website Designers]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://livecms.com/?p=128</guid>
		<description><![CDATA[Nested categories, ACL, improved language support &#038; SEO, built-in redirects, template styles, &#038; much more. New features for designers, developers, admins, and webmasters, certain to make you happy! <a href="http://livecms.com/open-source/exploring-joomla-1-6-the-content-management-system.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You might have heard some things about Joomla and what it is.  Let me assure you Joomla is a lot more than what you ever thought was possible.  Joomla allows you the end user to add, edit and delete content within your own website.  You can modify text in a WYSIWYG editor.  Move and change images on the page.  Create menu items and add search optimised content to the pages.  Joomla will also allow you to plugin almost any addon imagineable &#8211; which can transform your Joomla website from a basic run of the mill website to a professional photo gallery, blog, video library, ecommerce website and these are just to name a few addons.</p>
<p><strong><img class="alignright size-medium wp-image-131" title="joomla" src="http://livecms.com/wp-content/uploads/2011/03/joomla-250x185.jpg" alt="" width="250" height="185" />So, what is Joomla 1.6?</strong></p>
<p><strong>Designer</strong></p>
<p>Joomla! sites all look the same! You can’t do unique designs with a CMS! These are the two biggest myths out in the Joomla! world today. Joomla! is easy for designers to learn and love, and we’ve got the features and functionality to prove it!</p>
<ul>
<li><strong>Core layout files are tableless:</strong> New for Joomla! 1.6, all core output files are written in XHTML 1.0 Strict. HTML 5 is also supported in Joomla! 1.6.</li>
<li><strong>New core templates:</strong> Joomla! 1.6 ships with new core templates. On the administrator side, Bluestork is the default template, and Hathor is a fully accessible template to support those with various types of disabilities. On the site side, Joomla! 1.6 ships with Atomic and Beez2 (yes, the bees are gone!), plus the legacy Milkyway template.</li>
<li><strong>Template styles:</strong> On occasion, you want a slightly different look to one page or a handful of pages on the site. Previously, this might mean coding a completely different template. Now, with template styles, you can easily create minor template variations, which can then be assigned to specific pages on the website.</li>
<li><strong>Template overrides vs Layout overrides:</strong> In Joomla! 1.5, you could change the look of some of Joomla’s output files via template overrides. However, you couldn’t change those output files just for a few pages. With the new improved layout overrides, you can alter the look of specific menu items, components, modules, and categories.</li>
<li><strong>Legacy layer in Milkyway:</strong> Did you use the core Joomla! output files (without template overrides) in a Joomla! 1.5 site that you need to upgrade to Joomla! 1.6? If so, use the legacy layer in the Milkyway template for quick compatibility of look and feel, without reworking your CSS to match the new tableless output in Joomla! 1.6. (The html folder will be available as separate download.)</li>
<li><strong>Codemirror editor:</strong> Finally, there’s a color-coded editor for easier HTML and CSS editing in Joomla!</li>
<li><strong>Media Manager improvements:</strong> The Flash-based media uploader is back! Once more, you can upload multiple images at once to the Media Manager.</li>
<li><strong>SEO features:</strong> Meta-keywords and meta-descriptions can be assigned to articles, categories, and menu items, and you can easily add a site name to the HTML page title.</li>
<li><strong>Nested categories:</strong> With infinite layers of categories, creating a representation of your site map in Joomla! is a breeze.</li>
<li><strong>Easy extension updates:</strong> You know you should keep Joomla! up-to-date, but do you keep your extensions up-to-date as well? You can easily update those extensions from within Joomla!, without visiting dozens of extension developer’s websites, in Joomla! 1.6.</li>
</ul>
<p><strong>Developer</strong></p>
<p>Joomla! 1.6 takes Content Management Systems to a new level, not only for the ease of use and intuitive functions provided to webmasters and users, but also for the added integration and extendability provided to Component developers. We’ve compiled a quick list of the top 10 reasons why Joomla! 1.6 provides more power to developers. So here it is, Joomla! 1.6 makes a developers life easier by&#8230;</p>
<h3>…Providing New and Improved User Functions.</h3>
<ul>
<li><strong>New Core Functions for Automatic Extension Updates:</strong> One of the hardest things for developers and end users alike is getting Webmasters to update their extensions. The update process has been, at best, clunky, and many times well nigh impossible for the average user. Joomla! 1.6’s new update manager allows developers to build in automatic update functions allowing their users to update to new versions with just a few clicks!</li>
<li><strong>New Package Installation Capability:</strong> For developers that offer a suite of components or extensions that rely on companion extensions, this one is for you. Developers can now package their components allowing users to install one file and include multiple extensions all at the same time!</li>
<li><strong>Easily included Language Capabilities:</strong> With Joomla! 1.6’s new language structure, developers are allowed to include additional language packages right with their extensions. This makes installing and extending your website by adding languages a breeze, and also makes updating components simple.</li>
</ul>
<h3>&#8230;Providing Code Improvements for Easy Integration.</h3>
<ul>
<li><strong>Integrated ACL Capability:</strong> Joomla! 1.6’s new ACL structure has been the talk of the “Joomla!sphere” for end-users. But developers benefit from this as well! The development team has made it very easy to include these advanced ACL features inside of any 3rd party component. With just a few code changes your component can allow your users to take advantage of the revolutionary ACL structure for their users!</li>
<li><strong>Upgraded System Requirements:</strong> The new operating requirements for Joomla! 1.6 (particularly PHP 5.2) offers developers a great advantage by allowing them to take advantage of object-oriented programming and functionality. This allows developers to keep on the leading edge of development and delivering the latest in functionality!</li>
</ul>
<h3>&#8230;Providing a Uniform Component Structure.</h3>
<ul>
<li><strong>New Plugin Format:</strong> With the release of Joomla! 1.6, plugins now have the same common structure as components and modules. Giving each their own directories allows developers to use a universal format for development for all joomla! add-ons.</li>
<li><strong>Consistent Component Programming:</strong> Joomla! 1.6 provides a new and cohesive method for building components. The ability for developers to “Learn By Example” and look at the core components allows developers to easily integrate their ideas into the Joomla! framework. In fact, the Joomla! Development Team has even included sample code for developers to use as they build components for Joomla! 1.6!</li>
<li><strong>Easy Migration to 1.6:</strong> With Legacy Mode (the ability for components built for older versions of Joomla! to work on the current version) gone in Joomla! 1.6, all developers will have to upgrade their components to be compatible with the new version. Fortunately, Joomla! developers have made it very easy for you to upgrade your components. Developers that are already familiar with the 1.5 API and MVC structure will be able to upgrade their existing components with ease!</li>
</ul>
<h3>&#8230;Providing Improved API Abilities.</h3>
<ul>
<li><strong>New Query Building Class:</strong> The new Joomla! 1.6 API provides an intuitive query building class allowing developers to build queries programatically. Besides easing some of the headaches of developing for Joomla! this helps set the stage for allowing Joomla! to be compatible with other Database engines.</li>
<li><strong>Brand New Forms API:</strong> The move from the JForm class to the JParameter class brings an increased efficiency to Joomla! development. Besides the ability to automatically filter input, the JParameter class keeps developers from having to duplicate needless code for different forms. The new class also presents developers with extendability to easily create their own forms within this framework.</li>
</ul>
<p><strong>Administrator</strong></p>
<p>Joomla! 1.6 ushers in a new era for Website Administrators. With a multitude of new changes and advancement in usability and added functions, especially for administrators, Joomla! 1.6 presents an ideal CMS that is both powerful and flexible, as well as being easy to use and control. Check out some of our top reasons why Joomla! 1.6 is <em>THE</em> CMS for Website Administrators.</p>
<ul>
<li><strong>New Administrator Functions:</strong> Site Administrators will notice the new look of Joomla! 1.6 from the moment they log in. From the brand new Administrator Navigation menu, to the added functions of “Save &amp; Add” in Content, the new Joomla! is all about efficiency and saving you time, while still giving you the familiar options and control you need.</li>
<li><strong>New Admin. Template Choices:</strong> Joomla! 1.6 offers a whole new look at the Administrator Interface with some new templates that extend the Joomla! system. The new template functions allow Administrators to present a simplified and intuitive Administrator Interface to their Managers and other users.</li>
<li><strong>Advanced ACL:</strong> The buzz around Joomla! 1.6 is the release of the revolutionary Joomla! Access Control System. Administrators can now easily restrict Joomla! users from content using the new Access Control Levels right out of the box! What used to be left to the domain of third party extensions or, in many cases, was not even possible now can be accomplished with a few simple clicks! Here is a quick list of some of the capabilities ACL provides: Unlimited user groups A user can be assigned to multiple groups
<ul>
<li>Unlimited access levels</li>
<li>Any combination of groups can be assigned to any access level</li>
<li>Access permissions can be set at multiple levels in hierarchy: Site, Component, Category, Object</li>
<li>Permissions can be inherited from parent Groups and parent Categories for faster user management.</li>
</ul>
</li>
<li><strong>New Module Configuration Options:</strong> The new module configuration options will save administrators around the world headaches as they try to publish their content on their pages. With the added ability to now publish modules on “All Pages Except Selected”, presenting your module content where you want it, and, more importantly, keeping it hidden where you don’t want it, is now standard.</li>
<li><strong>New Category Structure:</strong> To make your life easier, Joomla 1.6 no longer has Sections. It has nested categories instead. That means you can now have a main category with unlimited sub-categories that can have their own sub-categories, etc.. There is no limit to how deep your multi-level category hierarchy can be and the neat thing about this new setup is that you have complete transparency – you can easily view and manage your categories at every level.</li>
<li><strong>New SEO Functions:</strong> New advanced SEO features such as the ability to add Meta descriptions and keywords to categories as well as change the page title depending on the article view, and add the site name to the Title, means that Site Administrators will be able to easily control and present their sites content the way they want to!</li>
<li><strong>New 404 Redirect Component:</strong> The addition of a Joomla1 Core Component handling 404 redirects means peace of mind for Site Administrators. Now, automatically re-routing users from an old page to the new one without them hitting the dreaded “404, Page Not Found” view is an easy reality!</li>
<li><strong>New Template Styles Functions:</strong> The added ability to create multiple instances of your site templates, each with different controls and the ability to edit the template for each instance means the days of changing and uploading the same template multiple times just to get that perfect look on your pages is gone! Now administrators can get the look and feel they want by simply creating a new Template Style right in their Control Panel!</li>
<li><strong>Language Overrides:</strong> Joomla! 1.6 gives site Administrators the ability to implement custom language overrides and protect them from disappearing every time you upgrade! The new custom override functions give you the ability to edit your emails, system messages, and more once, and never have to worry about them again!</li>
<li><strong>Manual User Approval:</strong> Sick of spam users clogging your User Manager and Database? Joomla! 1.6 has that solved! The new ability to allow administrators to manually approve new registered users means that every new user can have the careful eye of the Administrator making sure that your membership isn’t clogged with bogus or fake users!</li>
</ul>
<p><strong>Webmaster</strong></p>
<p>Sometimes it’s the little things that make us happiest, and for Joomla! webmasters, there’s so many little things to make you happy!</p>
<ul>
<li><strong>Save &amp; New, Save &amp; Copy:</strong> Joomla! 1.6 is all about efficiency, including how long it takes you to create new content! With the new options to “Save &amp; Create New” applied to content editing, adding content to your site just got easier … and faster!</li>
<li><strong>Module Assignment:</strong> Joomla! 1.6 makes it easy for Webmasters to pinpoint their content even more with the added features to module positioning. With the new ability to publish on “All Pages Except Selected”, getting your content where you want it is a lot easier.</li>
<li><strong>Joomla! remembers where you were:</strong> Ever edit article number 45 in your article manager and save it only to have to flip back through the pages to get back to it? Joomla! 1.6 puts an end to that! Joomla! now remembers where you were and saves your place for you!</li>
<li><strong>Media Manager improvements:</strong> Joomla! 1.6 brings major improvements to Joomla!’s media manager. A flash based uploader makes things easier, and the ability for users to upload multiple files at one time makes life easier, and, needless to say, saves you a lot of time in uploading your media to Joomla!</li>
<li><strong>Installer improvements:</strong> One of the biggest hassles for Joomla! webmasters was the process needed to update 3rd party components. With Joomla! 1.6, problems gone! Joomla! now has an update interface allowing Webmasters to update their components to current versions with just a couple clicks!</li>
<li><strong>Redirect component:</strong> With the addition of the Core Redirect Component, Joomla! saves you a headache by allowing you to automatically redirect old links to new pages, and saves your visitors an eyesore and hassle by keeping them away from the “404 Page Not Found” and getting them right where they need to go!</li>
<li><strong>SEO features:</strong> With the new SEO features in Joomla! 1.6, creating custom Meta descriptions for categories, and added flexibility for title and descriptions in articles and pages is now possible! Worried about your websites rankings or usability? Use some of these added tools to give you a boost!</li>
<li><strong>Template styles:</strong> Sick of being stuck to whatever your template allows? Joomla! 1.6 offers a whole new world of versatility by allowing Webmasters to create Template Styles. Pretty much, you can easily clone your template to apply custom changes or edits to it, and then assign it to specific menu items to create unique pages!</li>
<li><strong>Assign modules and templates within a menu item:</strong> Joomla! 1.6 extends the ability for Webmasters to present their content where they want it, how they want it. With the ability to easily select the template and template style right from the menu interface, Joomla! saves you time, and makes presenting your content a breeze!</li>
<li><strong>Translation now has more effective pluralization support:</strong> “One Foot, Two Foot &#8230;” simple language differences like presenting plural words typically plagued Joomla! websites with its limited ability to handle plurality across languages leaving Joomla! interfaces riddles with Dr. Seuss references from books long forgotten. No More! With Joomla! 1.6, improved language features present the user with a wider array of options for language support.</li>
</ul>
<p>Joomla is an award winning, web based, Content Management System(CMS) that gives website administrators the power to control their website by adding, editing and deleting content.</p>
<p>From a business perspective what does this mean to the average business owner?  Well, I setting up a Joomla website you can probably anticipate that being provided with the ability to manage content on the website is going to cost more to setup than setting up a simple static website.  So it only stands to prove that you need to be prepared to see the benefits in being given this extra functionality.  Understanding what impact this will have on your business is important and also analysing the cost to benefit of this functionality.</p>
<p>Simply put, what having a CMS website means is that the administrator or business owner then has much more freedom to make immediate changes to their website without need for a programmer or webmaster.  The freedom to make changes to your website without the need to hire web site developer or web programmer normally needed to make changes for you.</p>
<p>Joomla also has the added benefit of being open source so it free for everyone to use so long as the GNU/GPL license is maintained &#8211; which is not an issue at all.</p>
<p>So, why not consider using Joomla for your next business website? &#8211; it may just give you the edge and control that you are looking for!</p>
]]></content:encoded>
			<wfw:commentRss>http://livecms.com/open-source/exploring-joomla-1-6-the-content-management-system.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

