59 lines
1.5 KiB
Ruby
59 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ChampPresentations::RepetitionPresentation < ChampPresentations::BasePresentation
|
|
attr_reader :libelle
|
|
attr_reader :rows
|
|
|
|
def initialize(libelle, rows)
|
|
@libelle = libelle
|
|
@rows = rows
|
|
end
|
|
|
|
def to_s
|
|
([libelle] + rows.map do |champs|
|
|
champs.map do |champ|
|
|
"#{champ.libelle} : #{champ}"
|
|
end.join("\n")
|
|
end).join("\n\n")
|
|
end
|
|
|
|
def to_tiptap_node
|
|
{
|
|
type: 'orderedList',
|
|
attrs: { class: 'tdc-repetition' },
|
|
content: rows.map do |champs|
|
|
{
|
|
type: 'listItem',
|
|
content: [
|
|
{
|
|
type: 'descriptionList',
|
|
content: champs.map do |champ|
|
|
[
|
|
{
|
|
type: 'descriptionTerm',
|
|
attrs: champ.blank? ? { class: 'invisible' } : nil, # still render libelle so width & alignment are preserved
|
|
content: [
|
|
{
|
|
type: 'text',
|
|
text: champ.libelle
|
|
}
|
|
]
|
|
}.compact,
|
|
{
|
|
type: 'descriptionDetails',
|
|
content: [
|
|
{
|
|
type: 'text',
|
|
text: champ.to_s
|
|
}
|
|
]
|
|
}
|
|
]
|
|
end.flatten
|
|
}
|
|
]
|
|
}
|
|
end
|
|
}
|
|
end
|
|
end
|