Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 15 additions & 17 deletions lib/reactionview/template/handlers/herb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,29 +76,27 @@ def dev_server_port_meta_tag
end

def reactionview_dev_tools_markup(template)
return nil unless ::ReActionView.config.debug_mode_enabled?
return nil unless layout_template?(template)
return nil unless local_template?(template)

markup = +""
<<~HTML
<meta name="herb-debug-mode" content="true">
<meta name="herb-project-path" content="#{Rails.root}">
#{dev_server_port_meta_tag}
#{editor_meta_tag}

if ::ReActionView.config.debug_mode_enabled?
markup << <<~HTML
<meta name="herb-debug-mode" content="true">
<meta name="herb-project-path" content="#{Rails.root}">
#{dev_server_port_meta_tag}
#{editor_meta_tag}

#{ActionController::Base.new.view_context.javascript_include_tag "reactionview-dev-tools.umd.js", defer: true}
HTML
end
#{ActionController::Base.new.view_context.javascript_include_tag "reactionview-dev-tools.umd.js", defer: true}
#{dismiss_hint_template}
HTML
end

if ::ReActionView.config.validation_mode == :overlay
markup << <<~HTML
<template data-herb-dismiss-hint>You can also disable this overlay by setting <code style="color: #ffeb3b; font-family: monospace; font-size: 12pt;">config.validation_mode = :none</code> in <code style="color: #ffeb3b; font-family: monospace; font-size: 12pt;">config/initializers/reactionview.rb</code>.</template>
HTML
end
def dismiss_hint_template
return unless ::ReActionView.config.validation_mode == :overlay

markup.presence
<<~HTML.chomp
<template data-herb-dismiss-hint>You can also disable this overlay by setting <code style="color: #ffeb3b; font-family: monospace; font-size: 12pt;">config.validation_mode = :none</code> in <code style="color: #ffeb3b; font-family: monospace; font-size: 12pt;">config/initializers/reactionview.rb</code>.</template>
HTML
end
end
end
Expand Down
95 changes: 95 additions & 0 deletions test/template/handlers/dev_tools_markup_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# frozen_string_literal: true

require_relative "../../test_helper"

require "action_controller"

class ReActionView::DevToolsMarkupTest < Minitest::Spec
RAILS_ROOT = "/app"
LAYOUT = "/app/app/views/layouts/application.html.erb"
MAILER_LAYOUT = "/app/app/views/layouts/mailer.html.erb"
VIEW = "/app/app/views/users/show.html.erb"

SOURCE = %(<html><head></head><body></body></html>)

DISMISS_HINT = "data-herb-dismiss-hint"

before do
@previous_debug_mode = ReActionView.config.debug_mode
end

after do
ReActionView.config.debug_mode = @previous_debug_mode
ReActionView.config.validation_mode = nil
end

def compile(identifier: LAYOUT, virtual_path: "layouts/application")
template = ActionView::Template.new(
SOURCE,
identifier,
ReActionView::Template::Handlers::Herb,
virtual_path: virtual_path,
format: :html,
locals: []
)

Rails.stub(:root, Pathname.new(RAILS_ROOT)) do
ReActionView::Template::Handlers::Herb.call(template, SOURCE)
end
end

test "does not emit the dismiss hint when debug mode is off" do
ReActionView.config.debug_mode = false
ReActionView.config.validation_mode = :overlay

refute_includes compile, DISMISS_HINT
end

test "does not emit the dismiss hint in mailer layouts when debug mode is off" do
ReActionView.config.debug_mode = false
ReActionView.config.validation_mode = :overlay

refute_includes compile(identifier: MAILER_LAYOUT, virtual_path: "layouts/mailer"), DISMISS_HINT
end

test "emits nothing at all into the head when debug mode is off" do
ReActionView.config.debug_mode = false
ReActionView.config.validation_mode = :overlay

compiled = compile

refute_includes compiled, "herb-debug-mode"
refute_includes compiled, "reactionview-dev-tools"
refute_includes compiled, DISMISS_HINT
end

test "emits the dismiss hint when debug mode is on and validation mode is :overlay" do
ReActionView.config.debug_mode = true
ReActionView.config.validation_mode = :overlay

compiled = compile

assert_includes compiled, DISMISS_HINT
assert_includes compiled, "herb-debug-mode"
end

test "does not emit the dismiss hint when validation mode is not :overlay" do
ReActionView.config.debug_mode = true
ReActionView.config.validation_mode = :none

compiled = compile

refute_includes compiled, DISMISS_HINT
assert_includes compiled, "herb-debug-mode"
end

test "emits nothing for templates that are not layouts" do
ReActionView.config.debug_mode = true
ReActionView.config.validation_mode = :overlay

compiled = compile(identifier: VIEW, virtual_path: "users/show")

refute_includes compiled, DISMISS_HINT
refute_includes compiled, "herb-debug-mode"
end
end
Loading