Class: ViewInspect::Handlers::HTMLTemplate
- Inherits:
-
Object
- Object
- ViewInspect::Handlers::HTMLTemplate
- Defined in:
- lib/view_inspect/handlers/html_template.rb
Direct Known Subclasses
Constant Summary collapse
- STUB_PREFIX =
"__template_expression_stub__"
Class Method Summary collapse
Instance Method Summary collapse
- #add_file_line(source, filepath) ⇒ Object
- #add_file_line_to_html_tags(source, filepath) ⇒ Object
- #build_html_syntax_error_msg(errors, filepath) ⇒ Object
-
#initialize ⇒ HTMLTemplate
constructor
A new instance of HTMLTemplate.
- #replace_expression_with_stub(source) ⇒ Object
- #replace_stub_with_expression(source) ⇒ Object
Constructor Details
#initialize ⇒ HTMLTemplate
Returns a new instance of HTMLTemplate.
9 10 11 |
# File 'lib/view_inspect/handlers/html_template.rb', line 9 def initialize @expression_stub_map = {} end |
Class Method Details
.expression_regex ⇒ Object
13 14 15 |
# File 'lib/view_inspect/handlers/html_template.rb', line 13 def self.expression_regex raise "must be implemented by subclass" end |
Instance Method Details
#add_file_line(source, filepath) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/view_inspect/handlers/html_template.rb', line 27 def add_file_line(source, filepath) doc = ::Nokogiri::HTML.fragment(source) return source if doc.errors.count > 0 && !ViewInspect.show_html_syntax_error? doc.traverse do |node| if node.is_a?(::Nokogiri::XML::Element) file_line = [filepath, node.line].join(":") node.set_attribute "data-orig-file-line", file_line end end source = CGI.unescapeHTML(doc.inner_html) if doc.errors.length > 0 error_msg = build_html_syntax_error_msg(doc.errors, filepath) "#{error_msg}#{source}" else source end end |
#add_file_line_to_html_tags(source, filepath) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/view_inspect/handlers/html_template.rb', line 17 def (source, filepath) return source if html_layout?(source) # currently dont support html layout templates source = replace_expression_with_stub(source) source = add_file_line(source, filepath) source = replace_stub_with_expression(source) source end |
#build_html_syntax_error_msg(errors, filepath) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/view_inspect/handlers/html_template.rb', line 49 def build_html_syntax_error_msg(errors, filepath) errors_list = errors.inject("") do |result, error| result << "<li>line #{error.line} - #{error.to_s}</li>" result end "<div id='view_inspect_error_message' style='border: solid 1px black; z-index: 9999; position: absolute; margin-left: 200px; width: 800px; padding: 20px; background-color: rgb(255, 229, 229); color: black;'> <h3 style='font-size: 20px; line-height: 30px; font-weight: bold; background-color: lightgray; padding: 5px; display: inline-block; border: solid 1px black;'>Please correct HTML syntax errors in #{filepath}</h3> <ul>#{errors_list}</ul> </div>" end |
#replace_expression_with_stub(source) ⇒ Object
61 62 63 64 65 66 67 68 |
# File 'lib/view_inspect/handlers/html_template.rb', line 61 def replace_expression_with_stub(source) source.gsub(self.class.expression_regex).with_index do |match, index| stub = "#{STUB_PREFIX}#{index}" stub = preserve_linecount(stub, match) @expression_stub_map[stub] = match stub end end |
#replace_stub_with_expression(source) ⇒ Object
70 71 72 73 74 |
# File 'lib/view_inspect/handlers/html_template.rb', line 70 def replace_stub_with_expression(source) @expression_stub_map.inject(source) do |result, (stub, expression)| result = result.sub(stub, expression) end end |