diff --git a/src/kemal/helpers.cr b/src/kemal/helpers.cr index b1491f8..fcc4414 100644 --- a/src/kemal/helpers.cr +++ b/src/kemal/helpers.cr @@ -2,6 +2,35 @@ require "kilt" CONTENT_FOR_BLOCKS = Hash(String, Proc(String)).new +# content_for is a set of helpers that allows you to capture +# blocks inside views to be rendered later during the request. The most +# common use is to populate different parts of your layout from your view. +# +# The currently supported engines are: ecr and slang. +# +# == Usage +# +# You call +content_for+, generally from a view, to capture a block of markup +# giving it an identifier: +# +# # index.ecr +# <% content_for "some_key" do %> +# ... +# <% end %> +# +# Then, you call +yield_content+ with that identifier, generally from a +# layout, to render the captured block: +# +# # layout.ecr +# <%= yield_content "some_key" %> +# +# == And How Is This Useful? +# +# For example, some of your views might need a few javascript tags and +# stylesheets, but you don't want to force this files in all your pages. +# Then you can put <%= yield_content :scripts_and_styles %> on your +# layout, inside the tag, and each view can call content_for +# setting the appropriate set of tags that should be added to the layout. macro content_for(key) CONTENT_FOR_BLOCKS[{{key}}] = ->() { __kilt_io__ = MemoryIO.new @@ -15,11 +44,6 @@ macro yield_content(key) CONTENT_FOR_BLOCKS[{{key}}].call end -# Uses built-in ECR to render views. -# # Usage -# get '/' do -# render 'hello.ecr' -# end macro render(filename, layout) content = render {{filename}} render {{layout}}