Mercurial > gui
diff navigation.urs @ 7:48a4180171b0
Shifted some more generic theme navigation code to the library.
Also generalized formatting options a bit for popupNav.
author | Karn Kallio <kkallio@eka> |
---|---|
date | Fri, 06 May 2011 23:00:22 -0430 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/navigation.urs Fri May 06 23:00:22 2011 -0430 @@ -0,0 +1,66 @@ +(* A navigation is a collection of navigation bars (menus) made of links of + * which up to one may be marked as active, optional isolated links not part of + * menu bars and also optional message or status zones containing xml. The + * programmer can provide a way to format these elements into a collection of + * pieces of xml which can then be inserted into themes. *) + +functor Make(M : sig + con linkPos :: {Unit} + (* The collection of isolated links. Should be inferred. *) + + val linkFolder : folder linkPos + (* Implementation detail; should be inferred. *) + + con navbarPos :: {Unit} + (* The collection of navbars. *) + + con msgPos :: {Unit} + (* The collection of optional status or message xml pieces. *) + + val msgFolder : folder msgPos + (* Implementation detail; should be inferred. *) + + con linkStyles :: {Type} = mapU (option css_class) linkPos + (* The collection of isolated links, with an optional CSS class + * which will be applied to that link. *) + + con themePos :: {Unit} + (* The positions in the theme to generate xml for. *) + + val linkStyles : $linkStyles + (* The input optional link positions and styles. *) + + val formatNav : $(mapU xbody navbarPos) -> $(mapU xbody linkPos) -> $(mapU xbody msgPos) + -> $(mapU xbody themePos) + (* The way to format the collections of navbars, links and message + * zones into pieces of xml for the theme positions. *) + + end) : sig + + con modeLs :: {Type} -> Type = fn r :: {Type} => $(map Navbar.mode r) + con barLs :: {Type} -> Type = fn r :: {Type} => $(map Navbar.navBar r) + + con linkLs :: {Unit} -> Type = fn r :: {Unit} => $(mapU (option Navbar.navItem) r) + con msgLs :: {Unit} -> Type = fn r :: {Unit} => $(mapU (option xbody) r) + + class shape + + val shape_npos : shape $(mapU xbody M.navbarPos) + + con crush :: {Type} -> Type = fn r :: {Type} => $(map (fn _ => xbody) r) + + con navigation :: {Type} -> Type = fn m :: {Type} => {Nav : barLs m, + Link : linkLs M.linkPos, + Msg : msgLs M.msgPos} + (* Represents a complete navigation ensemble. *) + + val mkNav : m ::: {Type} -> shape (crush m) -> modeLs m -> barLs m + -> linkLs M.linkPos -> msgLs M.msgPos + -> navigation m + (* Builds a navigation from input elements of navbars, isolated links and messages. *) + + val toXml : m ::: {Type} -> folder m -> shape (crush m) -> modeLs m + -> navigation m -> $(mapU xbody M.themePos) + (* Renders a navigation to xml pieces suitable for inclusion in a theme. *) + +end