Implement draft updating thread in /my_account/sign_up/index.html.jst (avoids possibi...
[ndcode_site.git] / my_account / sign_up / index.html.jst
index 339458e..060cee5 100644 (file)
@@ -154,29 +154,28 @@ return async env => {
     },
     // scripts
     async _out => {
-      //script(src="/js/api_call.js") {}
+      //script(src="/js/utils.js") {}
 
       script {
-        let draft_timeout_running = false
-        let draft_timeout_handler = async () => {
-          draft_timeout_running = false
-          await api_call(
-            '/api/account/sign_up/set_draft.json',
-            {
-              email: document.getElementById('email').value.slice(0, 256).toLowerCase(),
-              given_names: document.getElementById('given-names').value.slice(0, 256),
-              family_name: document.getElementById('family-name').value.slice(0, 256),
-              contact_me: document.getElementById('contact-me').checked ? true : false
+        let input_semaphore = new BinarySemaphore(false)
+        ;(
+          async () => {
+            while (true) {
+              await input_semaphore.acquire()
+              await new Promise(resolve => setTimeout(resolve, 3000))
+              input_semaphore.try_acquire()
+              await api_call(
+                '/api/account/sign_up/set_draft.json',
+                {
+                  email: document.getElementById('email').value.slice(0, 256).toLowerCase(),
+                  given_names: document.getElementById('given-names').value.slice(0, 256),
+                  family_name: document.getElementById('family-name').value.slice(0, 256),
+                  contact_me: document.getElementById('contact-me').checked ? true : false
+                }
+              )
             }
-          )
-          //console.log('draft', await api_call('/api/account/sign_up/get_draft.json'))
-        }
-        let draft_change_handler = () => {
-          if (!draft_timeout_running) {
-            draft_timeout_running = true
-            setTimeout(draft_timeout_handler, 5000)
           }
-        }
+        )() // ignore returned promise (start thread)
 
         let details
         let card_1 = async () => {
@@ -271,25 +270,29 @@ return async env => {
           'DOMContentLoaded',
           () => {
             document.getElementById('given-names').addEventListener(
-              'change',
-              draft_change_handler
+              'input',
+              () => {input_semaphore.release()}
             )
             document.getElementById('family-name').addEventListener(
-              'change',
-              draft_change_handler
+              'input',
+              () => {input_semaphore.release()}
             )
             document.getElementById('email').addEventListener(
-              'change',
-              draft_change_handler
-            )
-            document.getElementById('password').addEventListener(
-              'change',
-              draft_change_handler
+              'input',
+              () => {input_semaphore.release()}
             )
+            //document.getElementById('password').addEventListener(
+            //  'input',
+            //  () => {input_semaphore.release()}
+            //)
             document.getElementById('contact-me').addEventListener(
-              'change',
-              draft_change_handler
+              'input',
+              () => {input_semaphore.release()}
             )
+            //document.getElementById('verification-code').addEventListener(
+            //  'input',
+            //  () => {input_semaphore.release()}
+            //)
 
             let image_seq = 1
             document.getElementById('card-1-new-code').addEventListener(