FMarkup is a tool for creating HTML/CSS documents in pure F#.
open FMarkup open FMarkup.Css let accountsPage accounts = %%[ Doctype.html5 html [ body [ ul [ rule "li" [ // Inline rules are scoped to the parent element font.weight.bold ] [ for a in accounts -> li [ img [ src a.photo width 100 // Inline styles work, too height 100 ] a.name ] ] ] ] ] ] let accountsStyle = style [ rule "body" [ color "silver" background.color "black" ] rule "a" [ text.decoration.none rule ":hover" [ // Rules may be nested text.decoration.underline ] ] ]
Because your views are simple functions, composing templates/layouts/master pages is as simple as creating functions with arguments where markup holes are filled. To render the markup, create an instance of the
HtmlPrinter record. It has two fields:
Format, which specifies whether you want to render HTML or XHTML, and
CssUnit, which specifies what CSS unit value (such as
px) you would like
float values to be rendered with.
Because FMarkup works with
obj list to avoid noise, sometimes it may be necessary to upcast symbols, so the operators
%% are provided to cast to
obj list, respectively.
Virtually all HTML5 and CSS3 symbols are supported. Bindings for some more obscure CSS properties which support multiple values may need to be improved, let me know if you run into any issues.
A module called
FMarkup.Compact is provided with succinct shortcuts to many common artifacts. It contains some experimental operators which may be included later into the main module.
- Futility: https://github.com/danfinch/futility (submodule)
- Dan Finch (firstname.lastname@example.org)