forked from gsamokovarov/web-console
-
Notifications
You must be signed in to change notification settings - Fork 177
/
Copy pathview.rb
58 lines (52 loc) · 1.99 KB
/
view.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# frozen_string_literal: true
module WebConsole
class View < ActionView::Base
# Execute a block only on error pages.
#
# The error pages are special, because they are the only pages that
# currently require multiple bindings. We get those from exceptions.
def only_on_error_page(*args)
yield if Thread.current[:__web_console_exception].present?
end
# Execute a block only on regular, non-error, pages.
def only_on_regular_page(*args)
yield if Thread.current[:__web_console_binding].present?
end
# Render JavaScript inside a script tag and a closure.
#
# Allows writing JavaScript that will automatically get wrapped in
# a script tag and enclosed in a closure, so we don't have to worry about
# leaking globals, unless we explicitly want to.
def render_javascript(template)
assign(template: template)
assign(nonce: @env["action_dispatch.content_security_policy_nonce"])
render(template: template, layout: "layouts/javascript")
end
# Render inlined string to be used inside of JavaScript code.
#
# The inlined string is returned as an actual JavaScript string. You
# don't need to wrap the result yourself.
def render_inlined_string(template)
render(template: template, layout: "layouts/inlined_string")
end
# Custom ActionView::Base#render wrapper which silences all the log
# printings.
#
# Helps to keep the Rails logs clean during errors.
def render(*)
if (logger = WebConsole.logger) && logger.respond_to?(:silence)
WebConsole.logger.silence { super }
else
super
end
end
# Override method for ActionView::Helpers::TranslationHelper#t.
#
# This method escapes the original return value for JavaScript, since the
# method returns a HTML tag with some attributes when the key is not found,
# so it could cause a syntax error if we use the value in the string literals.
def t(key, options = {})
j super
end
end
end