Skip to content
Snippets Groups Projects
Commit 2272f9b4 authored by Arnaud Levy's avatar Arnaud Levy
Browse files

wip

parent b37b1a29
No related branches found
No related tags found
No related merge requests found
Showing
with 49 additions and 30 deletions
......@@ -62,14 +62,11 @@ class Communication::Block < ApplicationRecord
after_commit :save_and_sync_about, on: [:update, :destroy]
def data=(value)
# Symbol does not work (:data)
attributes['data'] = default_data
# Template data setter will write properly sanitized values to block data
template.data = value
attributes['data'] = template.parse(value).to_json
end
def data
attributes['data'] ||= default_data
template.to_json
end
def git_dependencies
......@@ -91,12 +88,6 @@ class Communication::Block < ApplicationRecord
protected
def default_data
{
'elements': []
}
end
def attach_template_blobs
self.template_images = template.active_storage_blobs
end
......
class Communication::Block::Component::Base
attr_reader :property, :template
def initialize(property, template)
@property = property.to_s
@template = template
end
def value
data[property]
end
def value=(v)
data[property] = v
end
def data
template.data
end
end
class Communication::Block::Component::RichText < Communication::Block::Component::Base
end
class Communication::Block::Template
class Communication::Block::Template::Base
class_attribute :fields
attr_reader :block
......@@ -36,11 +36,11 @@ class Communication::Block::Template
sanitizer_type = sanitizers[kind]
class_eval <<-CODE, __FILE__, __LINE__ + 1
def #{property}
#{ kind == :image ? "extract_image_alt_and_credit(data, '#{property}')" : "data['#{property}']" }
Communication::Block::Component::#{kind.classify}.new(property, self).value
end
def #{property}=(value)
data['#{property}'] = #{ sanitizer_type ? "Osuny::Sanitizer.sanitize(value, '#{sanitizer_type}')" : "value" }
Communication::Block::Component::#{kind.classify}.new(property, self).value = value
end
CODE
end
......@@ -73,6 +73,12 @@ class Communication::Block::Template
protected
def default_data
{
'elements': []
}
end
def update_field(field, json)
name = field[:name]
value = json["#{name}"]
......
class Communication::Block::Template::CallToAction < Communication::Block::Template
class Communication::Block::Template::CallToAction < Communication::Block::Template::Base
def sanitized_data
{
"text" => Osuny::Sanitizer.sanitize(text),
......
class Communication::Block::Template::Chapter < Communication::Block::Template
class Communication::Block::Template::Chapter < Communication::Block::Template::Base
has_rich_text :text
has_rich_text :notes
has_image :image
......
class Communication::Block::Template::Datatable < Communication::Block::Template
class Communication::Block::Template::Datatable < Communication::Block::Template::Base
def build_git_dependencies
end
end
class Communication::Block::Template::Definition < Communication::Block::Template
class Communication::Block::Template::Definition < Communication::Block::Template::Base
def definitions
@definitions ||= elements.map { |element| definition(element) }
.compact
......
class Communication::Block::Template::Embed < Communication::Block::Template
class Communication::Block::Template::Embed < Communication::Block::Template::Base
def build_git_dependencies
end
......
class Communication::Block::Template::File < Communication::Block::Template
class Communication::Block::Template::File < Communication::Block::Template::Base
def build_git_dependencies
files.each do |file|
add_dependency file.blob
......
class Communication::Block::Template::Gallery < Communication::Block::Template
class Communication::Block::Template::Gallery < Communication::Block::Template::Base
LAYOUTS = [:grid, :carousel].freeze
......
class Communication::Block::Template::Image < Communication::Block::Template
class Communication::Block::Template::Image < Communication::Block::Template::Base
def sanitized_data
{
"text" => Osuny::Sanitizer.sanitize(text),
......
class Communication::Block::Template::KeyFigure < Communication::Block::Template
class Communication::Block::Template::KeyFigure < Communication::Block::Template::Base
def build_git_dependencies
end
......
class Communication::Block::Template::OrganizationChart < Communication::Block::Template
class Communication::Block::Template::OrganizationChart < Communication::Block::Template::Base
def build_git_dependencies
add_dependency persons
persons.each do |person|
......
class Communication::Block::Template::Page < Communication::Block::Template
class Communication::Block::Template::Page < Communication::Block::Template::Base
has_rich_text :text
LAYOUTS = [:grid, :list, :cards].freeze
......
class Communication::Block::Template::Partner < Communication::Block::Template
class Communication::Block::Template::Partner < Communication::Block::Template::Base
def build_git_dependencies
add_dependency active_storage_blobs
add_dependency organizations
......
class Communication::Block::Template::Post < Communication::Block::Template
class Communication::Block::Template::Post < Communication::Block::Template::Base
def build_git_dependencies
add_dependency category unless category.nil?
add_dependency selected_posts
......
class Communication::Block::Template::Testimonial < Communication::Block::Template
class Communication::Block::Template::Testimonial < Communication::Block::Template::Base
def build_git_dependencies
add_dependency active_storage_blobs
end
......
class Communication::Block::Template::Timeline < Communication::Block::Template
class Communication::Block::Template::Timeline < Communication::Block::Template::Base
def description
"#{data['description']}"
......
class Communication::Block::Template::Video < Communication::Block::Template
class Communication::Block::Template::Video < Communication::Block::Template::Base
has_string :url
has_text :transcription
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment