blob: 4c61fca17bc16fa582f14210ccf412282cb7ee1e [file] [log] [blame]
#
# Commit pending comments and approvals. Build a default commit message,
# and allow it to be changed.
#
class Commit < Vue
def initialize
@disabled = false
end
# default attributes for the button associated with this form
def self.button
{
text: 'commit',
class: 'btn_primary',
disabled: Server.offline || Minutes.complete || Minutes.draft_posted,
data_toggle: 'modal',
data_target: '#commit-form'
}
end
# commit form: allow the user to confirm or edit the commit message
def render
_ModalDialog.commit_form! color: 'blank' do
# header
_h4 'Commit message'
# single text area input field
_textarea.commit_text! value: @message, rows: 5,
disabled: @disabled, label: 'Commit message'
# buttons
_button.btn_default 'Close', data_dismiss: 'modal'
_button.btn_primary 'Submit', onClick: self.click, disabled: @disabled
end
end
# autofocus on comment text
def mounted()
jQuery('#commit-form').on 'shown.bs.modal' do
document.getElementById('commit-text').focus()
end
end
# update message on re-display
def created()
pending = @@server.pending
messages = []
# common format for message lines
append = proc do |title, list|
next unless list
if list.length > 0 and list.length < 6
titles = []
Agenda.index.each do |item|
titles << item.title if list.include? item.attach
end
messages << "#{title} #{titles.join(', ')}"
elsif list.length > 1
messages << "#{title} #{list.length} reports"
end
end
append 'Approve', pending.approved
append 'Unapprove', pending.unapproved
append 'Flag', pending.flagged
append 'Unflag', pending.unflagged
# list (or number) of comments made with this commit
comments = pending.comments.keys().length
if comments > 0 and comments < 6
titles = []
Agenda.index.each do |item|
titles << item.title if pending.comments[item.attach]
end
messages << "Comment on #{titles.join(', ')}"
elsif comments > 1
messages << "Comment on #{comments} reports"
end
# identify (or number) action item(s) updated with this commit
if pending.status
if pending.status.length == 1
item = pending.status.first
text = item.text
if item.pmc or item.date
text += ' ['
text += " #{item.pmc}" if item.pmc
text += " #{item.date}" if item.date
text += ' ]'
end
messages << "Update AI: #{text}"
elsif pending.status.length > 1
messages << "Update #{pending.status.length} action items"
end
end
@message = messages.join("\n")
end
# on click, disable the input fields and buttons and submit
def click(event)
@disabled = true
post 'commit', message: @message, initials: User.initials do |response|
Agenda.load response.agenda, response.digest
Pending.load response.pending
@disabled = false
# delay jQuery updates to give Vue a chance to make updates first
setTimeout 300 do
jQuery('#commit-form').modal(:hide)
document.body.classList.remove('modal-open')
jQuery('.modal-backdrop').remove();
end
end
end
end