blob: d9e6d90d57c048d310588d5b8724031a94e051bb [file] [log] [blame]
#
# Layout footer consisting of a previous link, any number of buttons,
# followed by a next link.
#
# Overrides previous and next links when traversal is queue, shepherd, or
# Flagged. Injects the flagged items into the flow on the meeting day
# (last executive officer <-> first flagged/unapproved/missing &&
# last flagged/unapproved/missing <-> first Special order)
#
class Footer < Vue
def render
meeting_day = Minutes.started || Agenda.meeting_day
_footer.navbar.navbar_fixed_bottom class: @@item.color do
#
# Previous link
#
link = @@item.prev
prefix = ''
if @@options.traversal == :queue
prefix = 'queue/'
while link and not link.ready_for_review(User.initials)
link = link.prev
end
link ||= {href: '../queue', title: 'Queue'}
elsif @@options.traversal == :shepherd
prefix = 'shepherd/queue/'
while link and link.shepherd != @@item.shepherd
link = link.prev
end
link ||= {href: "../#{@@item.shepherd}", title: 'Shepherd'}
elsif @@options.traversal == :flagged
prefix = 'flagged/'
while link and link.skippable
if link.attach =~ /^\d[A-Z]/
prefix = ''
break
else
link = link.prev
end
end
unless link
if meeting_day
link = Agenda.index.find do |item|
item.next && item.next.attach =~ /^\d+$/
end
prefix = ''
end
link ||= {href: "flagged", title: 'Flagged'}
end
elsif
meeting_day and @@item.attach =~ /\d/ and
link and link.attach =~ /^[A-Z]/
then
Agenda.index.each do |item|
if not item.skippable and item.attach =~ /^([A-Z]|\d+$)/
prefix = 'flagged/'
link = item
end
end
end
if link
_Link.backlink.navbar_brand text: link.title, rel: 'prev',
href: "#{prefix}#{link.href}", class: link.color
elsif @@item.prev or @@item.next
# without this, Chrome will sometimes make the footer too tall
_a.navbar_brand
end
#
# Buttons
#
_span do
if @@buttons
@@buttons.each do |button|
if button.text
props = {attrs: button.attrs}
if button.attrs.class
props.class = button.attrs.class.split(' ')
delete button.attrs.class
end
Vue.createElement('button', props, button.text)
elsif button.type
Vue.createElement(button.type, {props: button.attrs})
end
end
end
end
#
# Next link
#
link = @@item.next
if @@options.traversal == :queue
while link and not link.ready_for_review(User.initials)
link = link.next
end
link ||= {href: 'queue', title: 'Queue'}
elsif @@options.traversal == :shepherd
while link and link.shepherd != @@item.shepherd
link = link.next
end
link ||= {href: "shepherd/#{@@item.shepherd}", title: 'shepherd'}
elsif @@options.traversal == :flagged
prefix = 'flagged/'
while link and link.skippable
if meeting_day and link.attach !~ /^(\d+|[A-Z]+)$/
prefix = ''
break
else
link = link.next
end
end
link ||= {href: "flagged", title: 'Flagged'}
elsif
meeting_day and link and
@@item.attach =~ /^\d[A-Z]/ and link.attach =~ /^\d/
then
while link and link.skippable and link.attach =~ /^([A-Z]|\d+$)/
link = link.next
end
prefix = 'flagged/'
end
if link
prefix = '' unless link.attach =~ /^([A-Z]|\d+$)/
_Link.nextlink.navbar_brand text: link.title, rel: 'next',
href: "#{prefix}#{link.href}", class: link.color
elsif @@item.prev or @@item.next
# without this, Chrome will sometimes make the footer too tall
_a.nextarea.navbar_brand
end
end
end
end