summaryrefslogtreecommitdiff
path: root/doc/bugs/html5_support.mdwn
blob: 48b63b29a557255f2a35074f95b8e8bdf6210500 (plain)

Some elements of HTML5 can be safely supported by ikiwiki. There are several differences between HTML4 and HTML5.

[[!template id=gitbranch branch=hendry/html5 author="[[Kai_Hendry|hendry]]"]]

Kai, thanks enormously for working on this. I switched a page to the html5 doctype today, and was rather pleasently suprised that it validated, except for the new Cache-Control meta tag. Now I see you're well ahead of me. --[[Joey]]

So, how should ikiwiki support html5? There are basically 3 approaches:

  1. Allow users to add html5 tags to their existing xhtml pages. What has been done so far, can be extended. Basically works in browsers, if you don't care about standards. A good prerequisite for anything else, anyway.
  2. Switch to html5 in eg, ikiwiki 4; users have to deal with any custom markup on their pages/templates that breaks then.
  3. Have both a html5 and a xhtml mode, allow user to select.

The third option seems fairly tractable from what I see here and in your branch. You made only relatively minor changes to 10 templates. It would probably not be too dreadful to put them in ifdefs.

Some of your changes are obvious, like using the new time and and article elements. Others less so, and I'm particularly puzzled by these:

  • Removing the value="Submit" from the button on the commentmoderation form.
  • Removing feedlink.tmpl. What?!
  • Using a h2 for the header of inlinepage.tmpl and page.tmpl, rather than the styled span. Ikiwiki has [[a_reason|todo/Option_to_make_title_an_h1?]] for not using real hN for the header atop a page and here. AFAICS, html5 does not invalidate that.
  • Removing Editurl from inlinepage.tmpl actions. I assume this is your own preference, needs to be removed from branch before I can use it.
  • Removing the pageheader, content, and footer divs which are all used by style.css. Perhaps, the style sheet needs to be updated to use the new elements, like the footer and header.
  • Removal of the favicon from page.tmpl. Surely html5 supports?
  • Removal of BASEURL from page.tmpl, apparently a mistake.
  • Removal of the / between wiki title and page title. Personal preference.
  • Removal of comments div, which is there to be styled.
  • Why use a p rather than the div for addcomments?
  • Moving the action bar to the bottom of the page. Personal preference.
  • Clearly searchquery.tmpl has no business using bad old center tag, but something should still be done to replace it.

(BTW, it would be helpful if you could re-merge master into your branch as it is a bit diverged now.)

Other ideas:

  • Add pubdate attribute to time elements as appropriate.
  • Use aside for the sidebar? Or for the [[templates/note]] template?
  • Use nav for the actionbar
  • Use placeholder in the search box. Allows closing [[this_todo|Add_label_to_search_form_input_field]]
  • Use details tag instead of the javascript in the toggle plugin. (Need to wait on browser support probably.) --[[Joey]]

htmlscrubber.pm needs to not scrub new HTML5 elements

Many added now.

Things I left out, too hard to understand today: Attributes contenteditabl, contextmenu, data-, draggable, hidden, role, aria-. Tags command, keygen, output.

Clearly unsafe: embed.

Apparently cannot be used w/o javascript: menu.

I have not added the new ping attribute, because parsing a space-separeated list of urls to avoid javascript injection is annoying, and the attribute seems generally dubious. --[[Joey]]

HTML5 Validation and t/html.t

validator.nu is the authorative HTML5 validator, however it is almost impossible to sanely introduce as a build dependency because of its insane Java requirements. :( I test locally via cURL, though Debian packages cannot be built with a network dependency.

In the future, hopefully ikiwiki can test for valid HTML5 using Relax NG schema using a Debian package tool rnv.

Validation in the test suite is nice, but I am willing to lose those tests for a while. --[[Joey]]

HTML5 migration issues

article element

This element is poorly supported by browsers. As a workaround, style.css needs:

article {
	display: block;
}

Internet Explorer will display it as a block, though you can't seem to be able to further control the style.

Time element

The time element ideally needs the datatime= attribute set by a template variable with what HTML5 defines as a valid datetime string.

As a workaround:

au:~% grep timeformat natalian.setup
timeformat => '%Y-%m-%d',

Also, the [[plugins/relativedate]] plugin needs to be updated to support relatatizing the contents of time elements. --[[Joey]]