Sha256: d3bea3e5c065c507d593bd4806a67e996daa0fb7980f59e0df44f148e0fd64ae
Contents?: true
Size: 1.39 KB
Versions: 10
Compression:
Stored size: 1.39 KB
Contents
# frozen_string_literal: true module Lcms module Engine class ReactMaterialsResolver class << self def resolve(html, document) content = Nokogiri::HTML.fragment(html) content.css("[data-react-class='MaterialsContainer']").each do |node| replace_react(node, document) end content.to_html end private def replace_react(node, document) # rubocop:disable Metrics/PerceivedComplexity node.remove && return if (data = node.attr('data-react-props')).blank? raw_props = if data.match?(/^\d+(?:,\s*\d+)*$/) # comma separated list of numbers, i.e: '123' or '123,432' or '123, 42, 12' { 'material_ids' => data.split(',').map(&:strip), 'activity' => {} } else JSON.parse(data) end node.remove && return if (raw_props['material_ids']).empty? props = PreviewsMaterialSerializer.new(raw_props, document) node.remove && return if props.data && props.data.empty? node.replace(component(props, document)) end def component(props, document) h.react_component('MaterialsContainer', props, prerender: document.content_type != 'none') end def h ActionController::Base.helpers end end end end end
Version data entries
10 entries across 10 versions & 1 rubygems