mirror of
https://github.com/haml/haml.git
synced 2022-11-09 12:33:31 -05:00
52 lines
1.4 KiB
Ruby
52 lines
1.4 KiB
Ruby
# This is a module compatible with Haml::Helpers.
|
|
# It is included by ActionView in initializer.
|
|
module Hamlit
|
|
module Helpers
|
|
extend self
|
|
|
|
DEFAULT_PRESERVE_TAGS = %w[textarea pre code].freeze
|
|
|
|
def find_and_preserve(input = nil, tags = DEFAULT_PRESERVE_TAGS, &block)
|
|
return find_and_preserve(capture_haml(&block), input || tags) if block
|
|
|
|
tags = tags.each_with_object('') do |t, s|
|
|
s << '|' unless s.empty?
|
|
s << Regexp.escape(t)
|
|
end
|
|
|
|
re = /<(#{tags})([^>]*)>(.*?)(<\/\1>)/im
|
|
input.to_s.gsub(re) do |s|
|
|
s =~ re # Can't rely on $1, etc. existing since Rails' SafeBuffer#gsub is incompatible
|
|
"<#{$1}#{$2}>#{preserve($3)}</#{$1}>"
|
|
end
|
|
end
|
|
|
|
def preserve(input = nil, &block)
|
|
return preserve(capture_haml(&block)) if block
|
|
s = input.to_s.chomp("\n")
|
|
s.gsub!(/\n/, '
')
|
|
s.delete!("\r")
|
|
s
|
|
end
|
|
|
|
def surround(front, back = front, &block)
|
|
output = capture_haml(&block)
|
|
|
|
"#{front}#{output.chomp}#{back}\n"
|
|
end
|
|
|
|
def precede(str, &block)
|
|
"#{str}#{capture_haml(&block).chomp}\n"
|
|
end
|
|
|
|
def succeed(str, &block)
|
|
"#{capture_haml(&block).chomp}#{str}\n"
|
|
end
|
|
|
|
# NOTE: currently Hamlit::Helpers is enabled by default on only
|
|
# Rails environment. Thus you can use capture.
|
|
def capture_haml(*args, &block)
|
|
capture(*args, &block)
|
|
end
|
|
end
|
|
end
|