This is an automated email from the ASF dual-hosted git repository.
sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git
The following commit(s) were added to refs/heads/master by this push:
new 9f3ba174 Show existing seconds on form
9f3ba174 is described below
commit 9f3ba17471338ea0a1e2fc2158fe178712bc9e36
Author: Sebb <[email protected]>
AuthorDate: Wed Feb 18 14:16:30 2026 +0000
Show existing seconds on form
---
lib/whimsy/asf/member-files.rb | 23 ++++++++++++-----------
www/members/second_board.cgi | 24 +++++++++++++++++++++---
www/members/second_member.cgi | 24 +++++++++++++++++++++---
3 files changed, 54 insertions(+), 17 deletions(-)
diff --git a/lib/whimsy/asf/member-files.rb b/lib/whimsy/asf/member-files.rb
index 72520af2..cf3d75a9 100644
--- a/lib/whimsy/asf/member-files.rb
+++ b/lib/whimsy/asf/member-files.rb
@@ -113,7 +113,8 @@ module ASF
else
outkey = NAME2OUTPUTKEY[k]
raise ArgumentError.new "Unexpected regex capture name: #{k}" if
outkey.nil?
- v = v.split("\n") if k == 'statement' or k == 'seconds'
+ v = v.split("\n") if k == 'statement'
+ v = v.split(%r{ *[,\n] *}) if k == 'seconds' # split by comma and
newline, stripping spaces
nominee[outkey] = v
end
end
@@ -121,20 +122,20 @@ module ASF
end
end
- # return nomination entry headers
- def self.nomination_headers()
- noms = []
- self.parse_file(NOMINATED_MEMBERS) do |x, _y|
- noms << x
+ # return member nomination entry headers as hash of nominees and seconds
+ def self.nominated_members()
+ noms = {}
+ self.parse_file(NOMINATED_MEMBERS) do |x, y|
+ noms[x] = y['Seconded by']
end
noms
end
- # return board entry headers
- def self.board_headers()
- noms = []
- self.parse_file(NOMINATED_BOARD) do |x, _y|
- noms << x
+ # return board nomination entry headers as hash of nominees and seconds
+ def self.nominated_board()
+ noms = {}
+ self.parse_file(NOMINATED_BOARD) do |x, y|
+ noms[x] = y['Seconded by']
end
noms
end
diff --git a/www/members/second_board.cgi b/www/members/second_board.cgi
index fbb77095..f3d5665f 100755
--- a/www/members/second_board.cgi
+++ b/www/members/second_board.cgi
@@ -40,15 +40,18 @@ def find_mesgid(subject)
nil
end
-def emit_form(title, prev_data)
+def emit_form(title, prev_data, nominees)
_whimsy_panel(title, style: 'panel-success') do
_form.form_horizontal method: 'post' do
field = 'nominee'
_whimsy_forms_select(label: 'Nominee', name: field,
multiple: false,
- options: ASF::MemberFiles.board_headers,
+ options: nominees,
+ selectExtra: {onChange: 'show_seconds()'},
helptext: 'Select the nominee you are seconding for the ASF Board'
)
+ _whimsy_forms_input(label: 'Existing Seconds', name: 'seconds',
readonly: true, value: ''
+ )
_whimsy_forms_input(label: 'Seconded by', name: 'secby', readonly: true,
value: $USER
)
field = 'statement'
@@ -151,6 +154,7 @@ end
# Produce HTML
_html do
+ nominations = ASF::MemberFiles.nominated_board
_body? do
# Countdown until nominations for current meeting close
latest_meeting_dir = ASF::MeetingUtil.latest_meeting_dir
@@ -229,10 +233,24 @@ _html do
_ 'Sorry, no further seconds will be accepted for ballots at
this meeting.'
end
else
- emit_form('Enter your New Board second', {})
+ emit_form('Enter your New Board second', {}, nominations.keys)
end
end
end
end
+ # '_' does not work in _script blocks when wunderbar/bootstrap (i.e.
wunderbar/jquery is included)
+ # so create the JS code as a string
+ jscode = []
+ jscode << 'let map = new Map();'
+ nominations.each do |k,v|
+ jscode << "map.set(#{k.inspect}, #{v.inspect});"
+ end
+ jscode.push <<~'EOJSCODE'
+ function show_seconds() {
+ let nominee = document.getElementById('nominee').value;
+ document.getElementById('seconds').value = map.get(nominee);
+ }
+ EOJSCODE
+ _script jscode.join("\n")
end
end
diff --git a/www/members/second_member.cgi b/www/members/second_member.cgi
index 15d182fc..cde1b40c 100755
--- a/www/members/second_member.cgi
+++ b/www/members/second_member.cgi
@@ -40,15 +40,18 @@ def find_mesgid(subject)
nil
end
-def emit_form(title, prev_data)
+def emit_form(title, prev_data, nominees)
_whimsy_panel(title, style: 'panel-success') do
_form.form_horizontal method: 'post' do
field = 'nominee'
_whimsy_forms_select(label: 'Nominee', name: field,
multiple: false,
- options: ASF::MemberFiles.nomination_headers,
+ options: nominees,
+ selectExtra: {onChange: 'show_seconds()'},
helptext: 'Select the nominee you are seconding for ASF Membership'
)
+ _whimsy_forms_input(label: 'Existing Seconds', name: 'seconds',
readonly: true, value: ''
+ )
_whimsy_forms_input(label: 'Seconded by', name: 'secby', readonly: true,
value: $USER
)
field = 'statement'
@@ -151,6 +154,7 @@ end
# Produce HTML
_html do
+ nominations = ASF::MemberFiles.nominated_members
_body? do
# Countdown until nominations for current meeting close
latest_meeting_dir = ASF::MeetingUtil.latest_meeting_dir
@@ -233,10 +237,24 @@ _html do
# _a 'See existing nominations.', href:
'/members/check_membernoms.cgi'
end
else
- emit_form('Enter your New Member second', {})
+ emit_form('Enter your New Member second', {}, nominations.keys)
end
end
end
end
+ # '_' does not work in _script blocks when wunderbar/bootstrap (i.e.
wunderbar/jquery is included)
+ # so create the JS code as a string
+ jscode = []
+ jscode << 'let map = new Map();'
+ nominations.each do |k,v|
+ jscode << "map.set(#{k.inspect}, #{v.inspect});"
+ end
+ jscode.push <<~'EOJSCODE'
+ function show_seconds() {
+ let nominee = document.getElementById('nominee').value;
+ document.getElementById('seconds').value = map.get(nominee);
+ }
+ EOJSCODE
+ _script jscode.join("\n")
end
end