require "ecr/macros" require "html" module Guff class HTMLPageView 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: "", style: "", 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/page.ecr") end end