www/board/agenda/views/models/minutes.js.rb (71 lines of code) (raw):

# # This is the client model for draft Minutes. # class Minutes Vue.util.defineReactive @@list, {} # (re)-load minutes def self.load(list) @@list = list || {} Vue.set @@list, 'attendance', {} unless @@list.attendance end # list of actions created during the meeting def self.actions actions = [] @@list.each_pair do |title, minutes| minutes += "\n\n" pattern = RegExp.new('^(?:@|AI\s+)(\w+):?\s+([\s\S]*?)(\n\n|$)', 'g') match = pattern.exec(minutes) while match actions << {owner: match[1], text: match[2], item: Agenda.find(title)} match = pattern.exec(minutes) end end return actions end # fetch minutes for a given agenda item, by title def self.get(title) return @@list[title] end def self.attendees @@list.attendance end def self.rejected @@list.rejected end # return a list of actual or expected attendee names def self.attendee_names names = [] attendance = Object.keys(@@list.attendance) if attendance.empty? rollcall = Minutes.get('Roll Call') || Agenda.find('Roll-Call').text pattern = Regexp.new('\n ( [a-z]*[A-Z][a-zA-Z]*\.?)+', 'g') while (match=pattern.exec(rollcall)) do name = match[0].sub(/^\s+/, '').split(' ').first names << name unless names.include? name end else attendance.each do |name| next unless @@list.attendance[name].present name = name.split(' ').first names << name unless names.include? name end end names.sort() end # return a list of directors present def self.directors_present rollcall = Minutes.get('Roll Call') || Agenda.find('Roll-Call').text rollcall[/Directors.*Present:\n\n((.*\n)*?)\n/,1].sub(/\n$/, '') end # determine if the meeting has started def self.started @@list.started end # determine if the meeting is over def self.complete @@list.complete end # determine if the draft is ready def self.ready_to_post_draft self.complete and not Server.drafts.include? Agenda.file.sub('_agenda_', '_minutes_') end # determine if the draft is ready def self.draft_posted Server.drafts.include? Agenda.file.sub('_agenda_', '_minutes_') end # determine if committers summary has been sent def self.summary_sent @@list.todos and @@list.todos.summary_sent end end Events.subscribe :minutes do |message| Minutes.load(message.value) if message.agenda == Agenda.file end