diff options
author | Paul Duncan <pabs@pablotron.org> | 2016-03-08 17:21:09 -0500 |
---|---|---|
committer | Paul Duncan <pabs@pablotron.org> | 2016-03-08 17:21:09 -0500 |
commit | bc86dbf55dd2c134fc2e5d0e6bf8cefbe6b1ceba (patch) | |
tree | b78eff68e72f080767dffb0a61a40f6bd08e9b8b /src/guff/views/html/page.cr | |
parent | 0f3de66b4b824394305caff297d5a5f829d79b2e (diff) | |
download | old-guff-bc86dbf55dd2c134fc2e5d0e6bf8cefbe6b1ceba.tar.bz2 old-guff-bc86dbf55dd2c134fc2e5d0e6bf8cefbe6b1ceba.zip |
refactor html views
Diffstat (limited to 'src/guff/views/html/page.cr')
-rw-r--r-- | src/guff/views/html/page.cr | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/guff/views/html/page.cr b/src/guff/views/html/page.cr new file mode 100644 index 0000000..c300070 --- /dev/null +++ b/src/guff/views/html/page.cr @@ -0,0 +1,66 @@ +require "ecr/macros" +require "html" + +module Guff + class PageHTMLView + property :charset + property :lang + property :title + property :body + property :scripts + property :styles + property :metas + property :body_id + property :body_class + + FORMATS = { + attr: "%s='%s'", + meta: "<meta %s/>", + style: "<link rel='stylesheet' type='text/css' href='%s'/>", + script: "<script type='text/javascript' src='%s'></script>", + } + + def initialize(@title = "" : String, @body = "" : String) + @charset = "utf-8" + @lang = "en-US" + @scripts = [] of String + @styles = [] of String + @metas = [] of Hash(String, String) + end + + def body_attrs + { + "id": @body_id, + "class": @body_class, + }.map { |k, v| attr(k, v) }.join(" ") + end + + def page_headers : String + (@metas.map { |meta| + FORMATS[:meta] % [meta.map { |k, v| attr(k, v) }.join(" ")] + } + @styles.map { |path| + FORMATS[:style] % [h(path)] + }).join("") + end + + def page_footers : String + @scripts.map { |path| + FORMATS[:style] % [h(path)] + }.join("") + end + + def h(s : String?) : String + s ? HTML.escape(s) : "" + end + + def attr(k : String, v : String?) : String + v ? FORMATS[:attr] % [k, h(v)] : "" + end + + def content_type + "text/html; charset=%s" % [@charset] + end + + ECR.def_to_s("./src/guff/views/ecrs/page.ecr") + end +end |