oop-closures.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. //Password
  2. function Password(parent = document.body, open = false){
  3. const input = document.createElement('input');
  4. const btn = document.createElement('button');
  5. parent.append(input, btn);
  6. let value = '';
  7. let readProp = open;
  8. btn.innerText = readProp ? 'show' : 'hide' ;
  9. this.setValue = newValue => {
  10. if (newValue != ' ' && newValue && newValue !== value)
  11. value = newValue
  12. }
  13. this.setOpen = newOpen => {
  14. if (newOpen != readProp && newOpen != undefined)
  15. readProp = newOpen
  16. }
  17. input.oninput = this.onChange = (input) => {
  18. value = input.data;
  19. }
  20. btn.onclick = this.onOpenChange = (newOpen) => {
  21. readProp = !readProp;
  22. btn.innerText = readProp ? 'show' : 'hide';
  23. if (readProp){
  24. input.setAttribute('type','password')
  25. } else input.setAttribute('type','text')
  26. }
  27. this.getValue = () => value;
  28. this.getOpen = () => readProp;
  29. }
  30. //let p = new Password(root, true)
  31. // p.onChange = data => console.log(data)
  32. // p.onOpenChange = open => console.log(open)
  33. //p.setValue('qwerty')
  34. //console.log(p.getValue())
  35. //p.setOpen(true)
  36. //console.log(p.getOpen())
  37. /*
  38. LoginForm
  39. С помощью предыдущего кода Password сделайте форму логина, кнопка в которой будет активна только если и login и пароль не пусты */
  40. /* function Form(parent = document.body, open = false, active = false){
  41. const form = document.createElement('form');
  42. const input = document.createElement('input');
  43. const inputLog = document.createElement('input');
  44. const btn = document.createElement('button');
  45. const btnSend = document.createElement('button');
  46. form.append(input, inputLog, btn, btnSend);
  47. parent.append(form);
  48. let value = '';
  49. let login = '';
  50. let readProp = open;
  51. let btnActive = active;
  52. btn.innerText = readProp ? 'hide password' : 'show password';
  53. btnSend.innerText = btnActive ? 'SEND' : ' Enter data';
  54. input.oninput = this.onChange = () => {
  55. value = input.value;
  56. if (value && login) {
  57. btnActive = true;
  58. console.log(btnActive)
  59. } else if (!value || !login){
  60. btnActive = false;
  61. console.log('false')
  62. }
  63. if (btnActive) {
  64. btnSend.removeAttribute('disabled','')
  65. btnSend.setAttribute('enabled','')
  66. } else {
  67. btnSend.removeAttribute('enabled','')
  68. btnSend.setAttribute('disabled','')
  69. }
  70. }
  71. inputLog.oninput = this.onChange = () => {
  72. login = inputLog.value;
  73. if (value && login) {
  74. btnActive = true;
  75. console.log(btnActive)
  76. } else if (!value || !login){
  77. btnActive = false;
  78. console.log('false')
  79. }
  80. if (btnActive) {
  81. btnSend.removeAttribute('disabled','')
  82. btnSend.setAttribute('enabled','')
  83. } else {
  84. btnSend.removeAttribute('enabled','')
  85. btnSend.setAttribute('disabled','')
  86. }
  87. }
  88. btn.onclick = this.onOpenChange = (e, newOpen) => {
  89. e.preventDefault();
  90. readProp = !readProp;
  91. btn.innerText = readProp ? 'show password' : 'hide password';
  92. if (readProp){
  93. input.setAttribute('type','password')
  94. } else input.setAttribute('type','text')
  95. }
  96. if (btnActive) {
  97. btnSend.removeAttribute('disabled','')
  98. btnSend.setAttribute('enabled','')
  99. } else {
  100. btnSend.removeAttribute('enabled','')
  101. btnSend.setAttribute('disabled','')
  102. }
  103. this.onsubmit = function(){
  104. formUploader.setFormLoading(form);
  105. }
  106. } */
  107. /*
  108. LoginForm Constructor
  109. оформите предыдущую задачу как функцию-конструктор. Продумайте и предусмотрите геттеры, сеттеры и колбэки. */
  110. /* function Form(parent = document.body, open = false, active = false){
  111. const form = document.createElement('form');
  112. const input = document.createElement('input');
  113. const inputLog = document.createElement('input');
  114. const btn = document.createElement('button');
  115. const btnSend = document.createElement('button');
  116. form.append(input, inputLog, btn, btnSend);
  117. parent.append(form);
  118. let value = '';
  119. let login = '';
  120. let readProp = open;
  121. let btnActive = active;
  122. btn.innerText = readProp ? 'hide password' : 'show password';
  123. input.oninput = this.onChange = () => {
  124. value = input.value;
  125. this.password = value;
  126. if (value && login) {
  127. btnActive = true;
  128. console.log(btnActive)
  129. } else if (!value || !login){
  130. btnActive = false;
  131. console.log('false')
  132. }
  133. if (btnActive) {
  134. btnSend.removeAttribute('disabled','')
  135. btnSend.setAttribute('enabled','')
  136. } else {
  137. btnSend.removeAttribute('enabled','')
  138. btnSend.setAttribute('disabled','')
  139. }
  140. btnSend.innerText = btnActive ? 'SEND' : ' Enter data';
  141. }
  142. inputLog.oninput = this.onChange = () => {
  143. login = inputLog.value;
  144. this.login = login;
  145. console.log(login)
  146. if (value && login) {
  147. btnActive = true;
  148. console.log(btnActive)
  149. } else if (!value || !login){
  150. btnActive = false;
  151. console.log('false')
  152. }
  153. if (btnActive) {
  154. btnSend.removeAttribute('disabled','')
  155. btnSend.setAttribute('enabled','')
  156. } else {
  157. btnSend.removeAttribute('enabled','')
  158. btnSend.setAttribute('disabled','')
  159. }
  160. btnSend.innerText = btnActive ? 'SEND' : ' Enter data';
  161. }
  162. btn.onclick = this.onOpenChange = (e, newOpen) => {
  163. e.preventDefault();
  164. readProp = !readProp;
  165. btn.innerText = readProp ? 'show password' : 'hide password';
  166. if (readProp){
  167. input.setAttribute('type','password')
  168. } else input.setAttribute('type','text')
  169. }
  170. if (btnActive) {
  171. btnSend.removeAttribute('disabled','')
  172. btnSend.setAttribute('enabled','')
  173. } else {
  174. btnSend.removeAttribute('enabled','')
  175. btnSend.setAttribute('disabled','')
  176. }
  177. this.onsubmit = function(){
  178. formUploader.setFormLoading(form);
  179. }
  180. btnSend.innerText = btnActive ? 'SEND' : ' Enter data';
  181. this.login = login;
  182. this.password = value;
  183. this.getData = () => `Login : ${this.login} Passwqord: ${this.password}`;
  184. this.getLogin = () => this.login;
  185. this.getPassword = () => this.password;
  186. this.setLogin = (newLogin) => {
  187. this.login = newLogin;
  188. }
  189. this.setPassword = (newPassword) => {
  190. this.password = newPassword;
  191. }
  192. } */
  193. //let form1 = new Form(root, true, false);
  194. /* Password Verify
  195. С помощью Password сделайте пару инпутов, которые проверяют введеный пароль (в двух полях ввода) на совпадение. Кнопка должна активизироваться при совпадающих паролях. При открытом пароле второе поле вводы должно пропадать с экрана Таким образом:
  196. Когда Password в скрытом режиме - появляется второй инпут (<input type='password'>) с паролем в скрытом режиме
  197. Когда Password в открытом режиме - второй инпут пропадат */
  198. function PasswordVerify(parent = document.body, open = false) {
  199. const input = document.createElement('input');
  200. const inputVerify = document.createElement('input');
  201. const btn = document.createElement('button');
  202. const btnSend = document.createElement('button');
  203. parent.append(input, inputVerify, btn, btnSend);
  204. let value = '';
  205. let passVerify = null;
  206. let btnActive = false;
  207. let readProp = open;
  208. btn.innerText = readProp ? 'show' : 'hide' ;
  209. btnSend.innerText = btnActive ? 'SEND' : ' Enter data';
  210. inputVerify.style.display = readProp ? 'block' : 'none';
  211. this.setValue = newValue => {
  212. if (newValue != ' ' && newValue)
  213. console.log(newValue);
  214. value = newValue
  215. if (value && !readProp ) {
  216. btnActive = true;
  217. } else if (!value || !passVerify){
  218. btnActive = false;
  219. }
  220. if (btnActive) {
  221. btnSend.removeAttribute('disabled','')
  222. btnSend.setAttribute('enabled','')
  223. } else {
  224. btnSend.removeAttribute('enabled','')
  225. btnSend.setAttribute('disabled','')
  226. }
  227. btnSend.innerText = btnActive ? 'SEND' : ' Enter data';
  228. }
  229. this.setPasswordVerify = newVerify => {
  230. passVerify = newVerify;
  231. if (newVerify && newVerify == value)
  232. console.log(newVerify, value)
  233. console.log(newVerify == value)
  234. if (value && passVerify) {
  235. btnActive = true;
  236. } else if (!value || !passVerify){
  237. btnActive = false;
  238. }
  239. if (btnActive && passVerify == value) {
  240. btnSend.removeAttribute('disabled','')
  241. btnSend.setAttribute('enabled','')
  242. } else {
  243. btnSend.removeAttribute('enabled','')
  244. btnSend.setAttribute('disabled','')
  245. }
  246. btnSend.innerText = btnActive ? 'SEND' : ' Enter data';
  247. if (passVerify == value) btnActive = true;
  248. }
  249. this.setOpen = newOpen => {
  250. if (newOpen != readProp && newOpen != undefined)
  251. readProp = newOpen
  252. }
  253. input.oninput = this.onChange = (input) => {
  254. value = input.data;
  255. this.setValue(value);
  256. }
  257. inputVerify.oninput = this.onChange = (inputVerify) => {
  258. passVerify = inputVerify.data;
  259. this.setPasswordVerify(passVerify);
  260. }
  261. btn.onclick = this.onOpenChange = (newOpen) => {
  262. readProp = !readProp;
  263. btn.innerText = readProp ? 'show' : 'hide';
  264. inputVerify.style.display = readProp ? 'block' : 'none';
  265. if (readProp){
  266. input.setAttribute('type','password')
  267. } else {
  268. input.setAttribute('type','text')
  269. }
  270. }
  271. if (btnActive) {
  272. btnSend.removeAttribute('disabled','')
  273. btnSend.setAttribute('enabled','')
  274. } else {
  275. btnSend.removeAttribute('enabled','')
  276. btnSend.setAttribute('disabled','')
  277. }
  278. }
  279. let pass1 = new PasswordVerify(root, false)