Explorar el Código

login form partly done

miskson hace 3 años
padre
commit
900fedf309
Se han modificado 1 ficheros con 124 adiciones y 0 borrados
  1. 124 0
      hw9/script.js

+ 124 - 0
hw9/script.js

@@ -224,6 +224,31 @@ class PasswordVerify extends Password {
             }
         }
         this.onOpenChange(displayRepeat)
+
+        let isMatch= () => {
+            console.log(this.getHTMLElements())
+            if(this.getHTMLElements().Password_input.value === _repeatField.value) {
+                return true
+            } else {
+                return false
+            }
+        }
+
+        let btnActivate = (bool) => {
+            if(bool) {
+                _successBtn.disabled = false
+            } else {
+                _successBtn.disabled = true
+            }
+        }
+
+        this.getHTMLElements().Password_input.addEventListener('input', () => {
+            btnActivate(isMatch())
+        })
+
+        _repeatField.addEventListener('input',() => {
+            btnActivate(isMatch())
+        })
     }
 }
 
@@ -239,3 +264,102 @@ window.setTimeout(()=> {
     console.log('bang')
     passverif.setOpen(false)
 }, 5000)
+
+//login form 
+function Form(el, data, okCallback, cancelCallback){
+    let formBody = document.createElement('div')
+    let okButton = document.createElement('button')
+    okButton.innerHTML = 'OK'
+
+    let cancelButton = document.createElement('button')
+    cancelButton.innerHTML = 'Cancel'
+
+    formBody.innerHTML = '<h1>тут будет форма после перервы</h1>'
+    if (typeof okCallback === 'function'){
+        formBody.appendChild(okButton);
+        okButton.onclick = (e) => {
+            console.log(this)
+            this.okCallback(e)
+        }
+    }
+
+    if (typeof cancelCallback === 'function'){
+        formBody.appendChild(cancelButton);
+        cancelButton.onclick = cancelCallback
+    }
+
+    el.appendChild(formBody)
+
+
+    let inputCreators = {
+        String(key, value, func){
+            let input = document.createElement('input')
+            input.type = 'text'
+            input.placeholder = key
+            input.value = value
+            input.oninput  = () => func(input.value)
+            return input
+        },
+        Boolean(key, value, func){
+            let input = document.createElement('input')
+            input.type = 'checkbox'
+            input.placeholder = key
+            input.checked = value
+            input.onchecked  = () => func(input.value)
+            return input
+        },
+        Date(key, value, func){
+            //используйте datetime-local
+            let input = document.createElement('input')
+            input.type = 'datetime-local'
+            input.placeholder = key
+            input.value = Date.toISOstring(value).substring(0,10)
+            input.onchange  = () => func(input.value)
+            return input
+        },
+        //и др. по вкусу, например textarea для длинных строк
+    }
+
+
+    let formTable = document.createElement('table')
+    formTable.border = 1
+    for(let key in data) {
+        let tr = document.createElement('tr')
+        let tdKey = document.createElement('td')
+        let tdInput = document.createElement('td')
+        let input = inputCreators[data[key].constructor.name](key, data[key],(value) => {
+            data[key] = value 
+        })
+
+        tdKey.innerText = key
+
+        tdInput.append(input)
+        tr.append(tdKey, tdInput)
+        formTable.append(tr)
+    }
+    okButton.before(formTable)
+
+    this.okCallback     = okCallback
+    this.cancelCallback = cancelCallback
+
+    this.data           = data
+    this.validators     = {}
+}
+
+
+let formContainer = document.createElement('div')
+formContainer.id = 'formContainer'
+document.body.append(formContainer)
+
+let form = new Form(formContainer, {
+    name: 'Anakin',
+    surname: 'Skywalker',
+    married: true,
+    birthday: new Date((new Date).getTime() - 86400000 * 30*365)
+}, () => console.log('ok'),() => console.log('cancel') )
+form.okCallback = () => console.log('ok2')
+
+form.validators.surname = (value, key, data, input) => value.length > 2 && 
+                                                     value[0].toUpperCase() == value[0] &&
+                                                    !value.includes(' ') ? true : 'Wrong name'
+console.log(form)