From f25ffe345fcde52fb7bf8b58ca8991b4f20c21a6 Mon Sep 17 00:00:00 2001 From: Hiroto Fukui Date: Fri, 24 Nov 2017 16:58:05 +0900 Subject: [PATCH] Introduce babel support --- lib/slim/embedded.rb | 12 +++++++++++- test/core/test_embedded_engines.rb | 22 ++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/lib/slim/embedded.rb b/lib/slim/embedded.rb index d155b8ff..8bad62a5 100644 --- a/lib/slim/embedded.rb +++ b/lib/slim/embedded.rb @@ -132,7 +132,16 @@ def collect_newlines(body) # Basic tilt engine class TiltEngine < Engine def on_slim_embedded(engine, body) - tilt_engine = Tilt[engine] || raise(Temple::FilterError, "Tilt engine #{engine} is not available.") + begin + tilt_engine = Tilt[engine] + rescue + if engine == :balel + raise(Temple::FilterError, "babel engine is available for Tilt version 2.0.2 or above.") + else + raise(Temple::FilterError, "Tilt engine #{engine} is not available.") + end + end + tilt_options = options[engine.to_sym] || {} [:multi, tilt_render(tilt_engine, tilt_options, collect_text(body)), collect_newlines(body)] end @@ -253,6 +262,7 @@ def on_slim_embedded(engine, body) # These engines are executed at compile time register :coffee, JavaScriptEngine, engine: TiltEngine register :opal, JavaScriptEngine, engine: TiltEngine + register :babel, JavaScriptEngine, engine: TiltEngine register :less, TagEngine, tag: :style, attributes: { type: 'text/css' }, engine: TiltEngine register :styl, TagEngine, tag: :style, attributes: { type: 'text/css' }, engine: TiltEngine register :sass, TagEngine, :pretty, tag: :style, attributes: { type: 'text/css' }, engine: SassEngine diff --git a/test/core/test_embedded_engines.rb b/test/core/test_embedded_engines.rb index ae108d60..60398fe4 100644 --- a/test/core/test_embedded_engines.rb +++ b/test/core/test_embedded_engines.rb @@ -114,7 +114,7 @@ def test_render_with_wiki def test_render_with_javascript # Keep the trailing space behind "javascript: "! source = %q{ -javascript: +javascript: $(function() {}); @@ -139,6 +139,24 @@ def test_render_with_opal assert_match '$puts("hello from opal")', render(source) end + def test_render_with_babel + begin + # HACK: babel-transpiler registers itself in Tilt + require 'babel-transpiler' + rescue LoadError + return + end + + source = %q{ +babel: + const str = 'World' + alert(`Hello ${str}`) +p Hi +} + assert_html %{

Hi

}, source + end + + def test_render_with_javascript_with_tabs source = "javascript:\n\t$(function() {});\n\talert('hello')\np Hi" assert_html "

Hi

", source @@ -148,7 +166,7 @@ def test_render_with_javascript_including_variable # Keep the trailing space behind "javascript: "! source = %q{ - func = "alert('hello');" -javascript: +javascript: $(function() { #{func} }); } assert_html %q||, source