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|

Reply via email to