Last active
April 22, 2025 09:29
-
-
Save julik/a9b2102bd486221383437e6961b770a7 to your computer and use it in GitHub Desktop.
Revisions
-
julik renamed this gist
Apr 22, 2025 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
julik created this gist
Apr 22, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,46 @@ # <%= style_for_this_template do %> # width: 128px; # .caption { # font-size: 12px; # text-align: center; # } # <% end %> # <div class="<%= css_class_for_this_template %>"> # <div class="title">Hello!</div> # </div> module StyledTemplatesHelper def css_class_selector_for_this_template ".#{css_class_for_this_template}" end def css_class_for_this_template raise "@current_template is not set, so we can't intuit the wrapping class name for this block" unless @current_template.present? # Rails computes the method name the template will be compiled into. This method name changes with changes to the template # source, and includes the digest-like details and all the other useful bits. compiled_template_method_name = @current_template.method_name # We will use the virtual path as the base for our CSS class template_virtual_path = @current_template.virtual_path _css_class_name = template_virtual_path.gsub(/(\/|_)/, "-") + "-" + Digest::SHA1.hexdigest(compiled_template_method_name)[0..3] end def style_for_this_template(css_source_or_nil = nil) if !block_given? && style_source.blank? raise "You need to either pass the CSS code as the first argument or render it from the passed block" end css_class_name = css_class_for_this_template @styles_already_output ||= Set.new return if @styles_already_output.include?(css_class_name) # https://thepugautomatic.com/2013/06/helpers/ capture do concat("<style>\n".html_safe) concat("\n.#{css_class_name} {\n") concat((block_given? ? yield : css_source_or_nil) + "\n") concat("\n}\n") concat("</style>\n".html_safe) end.tap do @styles_already_output << css_class_name end end end