mirror of
https://github.com/haml/haml.git
synced 2022-11-09 12:33:31 -05:00
Support erb filter
This commit is contained in:
parent
4967bfae99
commit
39cfba9309
7 changed files with 26 additions and 14 deletions
|
@ -100,7 +100,7 @@ module Hamlit
|
|||
when :script
|
||||
node.children.empty? && !nuke_inner_whitespace?(node)
|
||||
when :filter
|
||||
!%w[ruby].include?(node.value[:name])
|
||||
!%w[ruby].freeze.include?(node.value[:name])
|
||||
else
|
||||
false
|
||||
end
|
||||
|
|
|
@ -2,6 +2,7 @@ require 'hamlit/filters/base'
|
|||
require 'hamlit/filters/tilt_base'
|
||||
require 'hamlit/filters/coffee'
|
||||
require 'hamlit/filters/css'
|
||||
require 'hamlit/filters/erb'
|
||||
require 'hamlit/filters/escaped'
|
||||
require 'hamlit/filters/less'
|
||||
require 'hamlit/filters/javascript'
|
||||
|
@ -26,6 +27,7 @@ module Hamlit
|
|||
register :coffee, Coffee
|
||||
register :coffeescript, Coffee
|
||||
register :css, Css
|
||||
register :erb, Erb
|
||||
register :escaped, Escaped
|
||||
register :less, Less
|
||||
register :javascript, Javascript
|
||||
|
|
|
@ -4,7 +4,7 @@ module Hamlit
|
|||
def compile(node)
|
||||
temple = [:multi]
|
||||
temple << [:static, "<script>\n".freeze]
|
||||
temple << compile_with_tilt(node, 'coffee')
|
||||
temple << compile_with_tilt(node, 'coffee', indent_width: 2)
|
||||
temple << [:static, "</script>".freeze]
|
||||
temple
|
||||
end
|
||||
|
|
9
lib/hamlit/filters/erb.rb
Normal file
9
lib/hamlit/filters/erb.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
module Hamlit
|
||||
class Filters
|
||||
class Erb < TiltBase
|
||||
def compile(node)
|
||||
compile_with_tilt(node, 'erb')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -4,7 +4,7 @@ module Hamlit
|
|||
def compile(node)
|
||||
temple = [:multi]
|
||||
temple << [:static, "<style>\n".freeze]
|
||||
temple << compile_with_tilt(node, 'less')
|
||||
temple << compile_with_tilt(node, 'less', indent_width: 2)
|
||||
temple << [:static, "</style>".freeze]
|
||||
temple
|
||||
end
|
||||
|
|
|
@ -3,28 +3,29 @@ require 'tilt'
|
|||
module Hamlit
|
||||
class Filters
|
||||
class TiltBase < Base
|
||||
def self.render(name, source)
|
||||
def self.render(name, source, indent_width: 0)
|
||||
text = ::Tilt["t.#{name}"].new { source }.render
|
||||
text.gsub!(/^/, ' '.freeze)
|
||||
return text if indent_width == 0
|
||||
text.gsub!(/^/, ' '.freeze * indent_width)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def compile_with_tilt(node, name)
|
||||
def compile_with_tilt(node, name, indent_width: 0)
|
||||
if Haml::Util.contains_interpolation?(node.value[:text])
|
||||
dynamic_compile(node, name)
|
||||
dynamic_compile(node, name, indent_width: indent_width)
|
||||
else
|
||||
static_compile(node, name)
|
||||
static_compile(node, name, indent_width: indent_width)
|
||||
end
|
||||
end
|
||||
|
||||
def static_compile(node, name)
|
||||
[:static, TiltBase.render(name, node.value[:text])]
|
||||
def static_compile(node, name, indent_width: 0)
|
||||
[:static, TiltBase.render(name, node.value[:text], indent_width: indent_width)]
|
||||
end
|
||||
|
||||
def dynamic_compile(node, name)
|
||||
def dynamic_compile(node, name, indent_width: 0)
|
||||
source = Haml::Util.unescape_interpolation(node.value[:text])
|
||||
[:dynamic, "::Hamlit::Filters::TiltBase.render('#{name}', #{source})"]
|
||||
[:dynamic, "::Hamlit::Filters::TiltBase.render('#{name}', #{source}, indent_width: #{indent_width})"]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,8 +3,7 @@ describe Hamlit::Filters do
|
|||
|
||||
describe '#compile' do
|
||||
it 'renders erb filter' do
|
||||
skip
|
||||
assert_render(<<-HAML, <<-HTML, compatible_only: [], error_with: :faml)
|
||||
assert_render(<<-HAML, <<-HTML, compatible_only: :haml, error_with: :faml)
|
||||
:erb
|
||||
<% if true %>
|
||||
ok
|
||||
|
@ -13,6 +12,7 @@ describe Hamlit::Filters do
|
|||
<% end %>
|
||||
HAML
|
||||
ok
|
||||
|
||||
HTML
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue