
Folks, I am proposing to extend the xhtml package slightly to better support attribute munging. Currently you would use (!) to add a bunch of attributes to an element, thus: b1 = button noHtml ! [name "go", value "go"] The problem, as pointed out by mistuke[1] is that there is no way to safely add attributes as this could result in an attribute being bound ambiguously and illegally [2] thus: b2 = b1 ! [value "oops"] Apparently this can lead Haddock to generate illegal (X)HTML [1]. My proposed solution is to add a new CHANGEATTRS class with the overloaded function: changeAttrs :: CHANGEATTRS a => a -> ([HtmlAttr] -> [HtmlAttr]) -> a and to export a function for analysing the (abstract) HtmlAttr type: htmlAttrPair :: HtmlAttr -> (String, String) CHANGEATTRS/changeAttrs/htmlAttrPair works just like ADDATTRS/(!) except that the attributes can be analysed and transformed. extend_name :: Html -> Html extend_name h = h `changeAttrs` map f where f a = case htmlAttrPair a of ("name",nm) -> name $ "foo_" ++ nm _ -> a Finally, I have an embarrassing confession to make -- I forgot that I should be getting the changes reviewed here -- even for such a modest widening of the API -- and have already put out 3000.2.1 with these additions onto Hackage! Comments and feedback welcome though, Chris [1] https://github.com/haskell/xhtml/issues/2 [2] http://www.w3.org/WAI/GL/WCAG20-TECHS/H94.html
participants (1)
-
Chris Dornan