\n}
}
extension('barchart', /{barchart(.*?)}/) do |captures, body|
stacked = '.mc-stacked' if captures.include? 'stacked'
compact = '.compact' if captures.include? 'compact'
negative = '.mc-negative' if captures.include? 'negative'
[
'{:',
'.js-barchart-table',
stacked,
compact,
negative,
'.mc-auto-outdent',
'}'
].join(' ')
end
extension('attached-image', /^!!([0-9]+)/) do |image_number|
image = images[image_number.to_i - 1]
if image
caption = image.caption rescue nil
render_image(image.url, image.alt_text, caption)
else
""
end
end
extension('attachment', /\[embed:attachments:([0-9a-f-]+)\]/) do |content_id, body|
attachment = attachments.detect { |a| a.content_id.match(content_id) }
next "" unless attachment
attachment = AttachmentPresenter.new(attachment)
content = File.read('lib/govspeak/extension/attachment.html.erb')
ERB.new(content).result(binding)
end
extension('attachment inline', /\[embed:attachments:inline:([0-9a-f-]+)\]/) do |content_id, body|
attachment = attachments.detect { |a| a.content_id.match(content_id) }
next "" unless attachment
attachment = AttachmentPresenter.new(attachment)
content = File.read('lib/govspeak/extension/inline_attachment.html.erb')
ERB.new(content).result(binding)
end
def render_image(url, alt_text, caption = nil)
lines = []
lines << ''
lines.join "\n"
end
wrap_with_div('summary', '$!')
wrap_with_div('form-download', '$D')
wrap_with_div('contact', '$C')
wrap_with_div('place', '$P', Govspeak::Document)
wrap_with_div('information', '$I', Govspeak::Document)
wrap_with_div('additional-information', '$AI')
wrap_with_div('example', '$E', Govspeak::Document)
wrap_with_div('call-to-action', '$CTA', Govspeak::Document)
extension('address', surrounded_by("$A")) { |body|
%{\n
\n#{body.sub("\n", "").gsub("\n", " ")}\n
\n}
}
extension("legislative list", /(?<=\A|\n\n|\r\n\r\n)^\$LegislativeList\s*$(.*?)\$EndLegislativeList/m) do |body|
Govspeak::KramdownOverrides.with_kramdown_ordered_lists_disabled do
Kramdown::Document.new(body.strip).to_html.tap do |doc|
doc.gsub!('
', '')
doc.gsub!('
', '')
doc.sub!('', '')
end
end
end
extension("numbered list", /^[ \t]*((s\d+\.\s.*(?:\n|$))+)/) do |body|
steps ||= 0
body.gsub!(/s(\d+)\.\s(.*)(?:\n|$)/) do |b|
"
#{Govspeak::Document.new($2.strip).to_html}
\n"
end
%{\n#{body}}
end
def self.devolved_options
{ 'scotland' => 'Scotland',
'england' => 'England',
'england-wales' => 'England and Wales',
'northern-ireland' => 'Northern Ireland',
'wales' => 'Wales',
'london' => 'London' }
end
devolved_options.each do |k,v|
extension("devolved-#{k}",/:#{k}:(.*?):#{k}:/m) do |body|
%{
This section applies to #{v}
#{Govspeak::Document.new(body.strip).to_html}
\n}
end
end
extension("Priority list", /(?<=\A|\n\n|\r\n\r\n)^\$PriorityList:(\d+)\s*$(.*?)(?:^\s*$|\Z)/m) do |number_to_show, body|
number_to_show = number_to_show.to_i
tagged = 0
Govspeak::Document.new(body.strip).to_html.gsub(/
/) do |match|
if tagged < number_to_show
tagged += 1
'
'
else
match
end
end
end
extension('embed link', /\[embed:link:([0-9a-f-]+)\]/) do |content_id|
link = links.detect { |l| l.content_id.match(content_id) }
next "" unless link
if link.url
%Q{#{encode(link.title)}}
else
encode(link.title)
end
end
def render_hcard_address(contact)
HCardPresenter.from_contact(contact).render
end
private :render_hcard_address
extension('Contact', /\[Contact:([0-9a-f-]+)\]/) do |content_id|
contact = contacts.detect { |c| c.content_id.match(content_id) }
next "" unless contact
@renderer ||= ERB.new(File.read('lib/templates/contact.html.erb'))
@renderer.result(binding)
end
end
end