Commit ee928b44aefcd1dfb9e8171d9f4d6b166fa023b8:
one form at a time
Branch: refs/heads/secmail
Author: Sam Ruby <[email protected]>
Committer: Sam Ruby <[email protected]>
Pusher: rubys <[email protected]>
------------------------------------------------------------
www/secmail/views/forms/icla.js.rb | ++++++ ---
www/secmail/views/forms/memapp.js.rb | + -
www/secmail/views/parts.js.rb | ++++++++++ ----
------------------------------------------------------------
61 changes: 44 additions, 17 deletions.
------------------------------------------------------------
diff --git a/www/secmail/views/forms/icla.js.rb
b/www/secmail/views/forms/icla.js.rb
index d96c41e..f14c2f6 100644
--- a/www/secmail/views/forms/icla.js.rb
+++ b/www/secmail/views/forms/icla.js.rb
@@ -1,11 +1,16 @@
class ICLA < React
+ def initialize
+ @filed = false
+ end
+
def render
- _form action: '../../actions/icla', method: 'post', onSubmit: @@submit do
+ _form action: '../../actions/icla', method: 'post', onSubmit: self.file do
_table.form do
_tr do
_th 'Real Name'
_td do
- _input name: 'realname', value: @realname, required: true
+ _input name: 'realname', value: @realname, required: true,
+ disabled: @filed
end
end
@@ -13,14 +18,15 @@ def render
_th 'Public Name'
_td do
_input name: 'pubname', value: @pubname, required: true,
- onFocus: -> {@pubname ||= @realname}
+ disabled: @filed, onFocus: -> {@pubname ||= @realname}
end
end
_tr do
_th 'E-mail'
_td do
- _input name: 'email', value: @email, required: true, type: 'email'
+ _input name: 'email', value: @email, required: true, type: 'email',
+ disabled: @filed
end
end
@@ -28,7 +34,8 @@ def render
_th 'File Name'
_td do
_input name: 'filename', value: @filename, required: true,
- pattern: '[a-zA-Z][-\w]+(\.[a-z]+)?', onFocus: self.genfilename
+ pattern: '[a-zA-Z][-\w]+(\.[a-z]+)?', onFocus: self.genfilename,
+ disabled: @filed
end
end
end
@@ -68,7 +75,7 @@ def render
end
_button.btn.btn_primary 'Request Account', ref: 'acreq',
- onClick: self.acreq
+ onClick: self.request_account
end
end
@@ -88,7 +95,7 @@ def componentDidUpdate()
document.querySelector("input[name=#{name}]").validity.valid
end
- $file.disabled = !valid
+ $file.disabled = !valid or @filed
# new account request form
valid = true
@@ -99,7 +106,7 @@ def componentDidUpdate()
valid &= input.validity.valid
end
- $acreq.disabled = !valid or !@user
+ $acreq.disabled = !valid or !@user or !@filed
end
# generate file name from the public name
@@ -107,8 +114,16 @@ def genfilename()
@filename ||= @pubname.downcase().gsub(/\W/, '-')
end
+ # handle ICLA form submission
+ def file(event)
+ @@submit.call(event).then {|response|
+ @filed = true
+ alert response.result
+ }
+ end
+
# show new account request window with fields filled in
- def acreq()
+ def request_account()
params = %w{email user pmc podling votelink}.map do |name|
"#{name}=#{encodeURIComponent(self.state[name])}"
end
diff --git a/www/secmail/views/forms/memapp.js.rb
b/www/secmail/views/forms/memapp.js.rb
index 8079c83..83d5145 100644
--- a/www/secmail/views/forms/memapp.js.rb
+++ b/www/secmail/views/forms/memapp.js.rb
@@ -1,4 +1,4 @@
-class MemAPp < React
+class MemApp < React
def render
_p 'Membership Application'
end
diff --git a/www/secmail/views/parts.js.rb b/www/secmail/views/parts.js.rb
index aeab5ca..ff370d4 100644
--- a/www/secmail/views/parts.js.rb
+++ b/www/secmail/views/parts.js.rb
@@ -185,7 +185,7 @@ def burst(event)
@busy = true
HTTP.post('../../actions/burst', data).then {|response|
@attachments = response.attachments
- @selected = response.selected
+ self.selectPart response.selected
self.hideMenu()
window.parent.frames.content.location.href=response.selected
}.catch {|error|
@@ -229,7 +229,7 @@ def rotate_attachment(event)
@busy = true
HTTP.post('../../actions/rotate-attachment', data).then {|response|
@attachments = response.attachments
- @selected = response.selected
+ self.selectPart response.selected
self.hideMenu()
# reload attachment in content pane
@@ -264,9 +264,9 @@ def submit(event)
# submit HTTP post request
@busy = true
- HTTP.post(form.action, data).then {|response|
+ return HTTP.post(form.action, data).then {|response|
@busy = false
- alert response.result
+ return response
}.catch {|error|
alert error
@busy = false
@@ -275,7 +275,19 @@ def submit(event)
# clicking on an attachment selects it
def select(event)
- @selected = event.currentTarget.querySelector('a').getAttribute('href')
+ self.selectPart event.currentTarget.querySelector('a').getAttribute('href')
+ end
+
+ # if selection changes, reset form and radio buttons
+ def selectPart(part)
+ if @selected != part
+ @selected = part
+ @form = nil
+
+ Array(document.querySelectorAll('input[type=radio]')).each do |button|
+ button.checked = false
+ end
+ end
end
# handle keyboard events
@@ -354,9 +366,9 @@ def drop(event)
@busy = true
@drag = nil
HTTP.post('../../actions/drop', data).then {|response|
- @attachments = response.attachments
- @selected = response.selected
@busy = false
+ @attachments = response.attachments
+ self.selectPart response.selected
target.classList.remove 'drop-target'
window.parent.frames.content.location.href=response.selected
}.catch {|error|