You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by Sam Ruby <ru...@apache.org> on 2015/12/30 20:25:02 UTC

[whimsy.git] [1/2] Commit ec0715e: precheck userids before submission

Commit ec0715e45dfd8178ea45e295b7d89f098b3d5d07:
    precheck userids before submission


Branch: refs/heads/secmail
Author: Sam Ruby <ru...@intertwingly.net>
Committer: Sam Ruby <ru...@intertwingly.net>
Pusher: rubys <ru...@apache.org>

------------------------------------------------------------
www/secmail/views/actions/check-id.json.rb                   | +++++++ 
www/secmail/views/forms/icla.js.rb                           | ++++++++++++++ -
------------------------------------------------------------
22 changes: 21 additions, 1 deletions.
------------------------------------------------------------


diff --git a/www/secmail/views/actions/check-id.json.rb b/www/secmail/views/actions/check-id.json.rb
new file mode 100644
index 0000000..afe364b
--- /dev/null
+++ b/www/secmail/views/actions/check-id.json.rb
@@ -0,0 +1,7 @@
+# check to see if an id is available
+
+if ASF::Person.new(@id).icla?
+  {message: 'userid is already taken'}
+else
+  {message: ''}
+end
diff --git a/www/secmail/views/forms/icla.js.rb b/www/secmail/views/forms/icla.js.rb
index f14c2f6..720268b 100644
--- a/www/secmail/views/forms/icla.js.rb
+++ b/www/secmail/views/forms/icla.js.rb
@@ -1,6 +1,7 @@
 class ICLA < React
   def initialize
     @filed = false
+    @checked = nil
   end
 
   def render
@@ -48,7 +49,7 @@ def render
         _tr do
           _th 'User ID'
           _td do
-            _input name: 'user', value: @user
+            _input name: 'user', value: @user, onBlur: self.validate_userid
           end
         end
 
@@ -122,6 +123,18 @@ def file(event)
     }
   end
 
+  # validate userid is available
+  def validate_userid(event)
+    return unless @user and @user != @checked
+    input = event.target
+    HTTP.post('../../actions/check-id', id: @user).then {|result|
+      input.setCustomValidity(result.message)
+      @checked = @user
+    }.catch {|message|
+      alert message
+    }
+  end
+
   # show new account request window with fields filled in
   def request_account()
     params = %w{email user pmc podling votelink}.map do |name|