Guest User

Untitled

a guest
Jan 7th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.54 KB | None | 0 0
  1. const url = location.pathname;
  2. (function() {
  3. const username = document.getElementById("username");
  4. const alertMessage = document.getElementById("alertMessage");
  5. const numMessage = document.getElementById('numMessage');
  6. const userForm = document.getElementById("userForm");
  7. const saveBtn = document.querySelector("#userForm .btn");
  8. const fieldset = document.querySelector("#userForm fieldset");
  9. const textarea = document.getElementById('textarea');
  10. const alertPassword = document.getElementById('alertPassword');
  11. const addNumForm = document.getElementById('addNumForm');
  12. const { phone } = addNumForm;
  13.  
  14. addBtn.disabled = true;
  15.  
  16. phone.addEventListener('keydown', () => {
  17. phone.value = phone.value.replace(/\D/,'');
  18. });
  19.  
  20. phone.addEventListener('keyup', () => {
  21. phone.value = phone.value.replace(/\D/,'');
  22. });
  23.  
  24. phone.addEventListener('input', () => {
  25. if (phone.value.length <= 1) {
  26. return addBtn.disabled = true;
  27. }else {
  28. return addBtn.disabled = false;
  29. }
  30. })
  31.  
  32. fetch(Config.API_HOST + url + "?session_token=" + userSession)
  33. .then(response => response.json())
  34. .then(jsonResponse => {
  35. if (jsonResponse.status !== 200) throw Error(jsonResponse.message);
  36. return jsonResponse;
  37. })
  38. .then(userData => {
  39. username.innerHTML = userData.name;
  40. if (userData.phones.length > 0) {
  41. noNumbers.style.display = 'none';
  42. userData.phones.forEach(phone => {
  43. insertNumber(phone);
  44. })
  45. }
  46. for (key in userData) {
  47. let fields = document.getElementsByName(key);
  48. for (var i = 0; i < fields.length; i++) {
  49. if (key === "type") {
  50. fields[i].querySelector(
  51. `option[value=${userData[key]}]`
  52. ).selected = true;
  53. } else {
  54. fields[i].value = userData[key];
  55. }
  56. }
  57. }
  58. })
  59. .catch(error => {
  60. alertMessage.innerHTML = error.message;
  61. fieldset.disabled = true;
  62. alertMessage.style.display = "block";
  63. alertMessage.classList.remove("alert-success");
  64. alertMessage.classList.add("alert-danger");
  65. });
  66.  
  67. userForm.addEventListener("submit", function(event) {
  68. event.preventDefault();
  69. alertMessage.style.display = "none";
  70. fieldset.disabled = true;
  71. saveBtn.innerHTML = "Сохраняем...";
  72. const fields = userForm.getElementsByClassName("form-control");
  73. const body = {};
  74. for (var i = 0; i < fields.length; i++) {
  75. // Вставляет в body имя поля и значение поля
  76. fields[i].classList.remove("is-invalid");
  77. body[fields[i].name] = fields[i].value;
  78. }
  79.  
  80. fetch(Config.API_HOST + url + "?session_token=" + userSession, {
  81. method: "put",
  82. headers: { "Content-type": "application/json" },
  83. body: JSON.stringify(body)
  84. })
  85. .then(response => response.json())
  86. .then(jsonResponse => {
  87. if (jsonResponse.status !== 200) throw jsonResponse;
  88. return jsonResponse;
  89. })
  90. .then(response => {
  91. alertMessage.style.display = "block";
  92. alertMessage.classList.remove("alert-danger");
  93. alertMessage.classList.add("alert-success");
  94. alertMessage.innerHTML = "Изменения сохранены";
  95. fieldset.disabled = false;
  96. saveBtn.innerHTML = "Сохранить";
  97. })
  98. .catch(error => {
  99. alertMessage.innerHTML = error.message;
  100. alertMessage.style.display = "block";
  101. alertMessage.classList.remove("alert-success");
  102. alertMessage.classList.add("alert-danger");
  103. fieldset.disabled = false;
  104. saveBtn.innerHTML = "Сохранить";
  105. if (error.status === 400) {
  106. error.fields.forEach(name => {
  107. let field = document.getElementsByName(name)[0];
  108. field.parentElement.classList.add("is-invalid");
  109. });
  110. }
  111. });
  112. });
  113.  
  114. addNumForm.addEventListener('submit', function(event) {
  115. event.preventDefault();
  116. const fieldset = addNumForm.getElementsByTagName('fieldset')[0];
  117. const editNumForms = document.getElementsByClassName('editNumForm');
  118.  
  119. phone.classList.remove('is-invalid');
  120. numMessage.style.display = 'none';
  121. fieldset.disabled = true;
  122. addBtn.innerHTML = 'Добавляем...'
  123.  
  124. const body = JSON.stringify({number:phone.value})
  125.  
  126. fetch(Config.API_HOST+url + '/add.number?session_token=' + userSession, {
  127. method: 'put',
  128. headers: {'Content-type':'application/json'},
  129. body
  130. })
  131. .then(response => response.json())
  132. .then(jsonResponse =>{
  133. if (jsonResponse.status !== 200) throw new Error(jsonResponse.message);
  134. return jsonResponse;
  135. })
  136. .then(({number}) => {
  137. insertNumber(number);
  138.  
  139. const editForm = editNumForms[0];
  140.  
  141. noNumbers.style.display = 'none';
  142. editForm.classList.add('new-num');
  143. setTimeout(() => editForm.classList.remove('new-num'),400);
  144. addBtn.innerHTML = 'Добавить';
  145. fieldset.disabled = false;
  146. addBtn.disabled = true;
  147. phone.value = '';
  148. })
  149. .catch(error => {
  150. addBtn.innerHTML = 'Добавить';
  151. phone.classList.add('is-invalid');
  152. fieldset.disabled = false;
  153. numMessage.innerHTML = error.message;
  154. numMessage.style.display = 'block';
  155. })
  156.  
  157. })
  158.  
  159. function insertNumber(phone) {
  160. const template = `
  161. <form class="editNumForm" id=${phone}>
  162. <fieldset>
  163. <div>
  164. <input onkeyup='numberValidate(this)' onkeydown= 'numberValidate(this)'
  165. class='numField form-control' type="text"
  166. name="phone" value="${phone}">
  167. <div style='display:inline' onclick='requestOnEditPhone(event)'>
  168. <button type="button" name="save" class="btn btn-primary saveBtn"><span></span></button>
  169. <button type="button" name="delete" class="btn btn-danger delBtn"></button>
  170. <small class="saveMsg text-muted">Сохранено</small>
  171. </div>
  172. </div>
  173. </fieldset>
  174. </form>`;
  175. editNumbers.insertAdjacentHTML('afterbegin',template);
  176. }
  177.  
  178.  
  179. })();
  180.  
  181. function numberValidate(phone) {
  182. phone.value = phone.value.replace(/[^+0-9]/gim,'');
  183. }
  184.  
  185. function requestOnEditPhone(event) {
  186. //parentElement нужен для того чтобы узнать,имя или форму,если нажато на span
  187. const name = event.target.name ? event.target.name : event.target.parentElement.name;
  188. const form = event.target.form ? event.target.form : event.target.parentElement.form;
  189.  
  190.  
  191. const editNumFieldset = form.querySelector('fieldset');
  192. const saveMsgs = Array.from(document.getElementsByClassName('saveMsg'));
  193. const fields = Array.from(editNumbers.getElementsByTagName('input'));
  194.  
  195. saveMsgs.forEach(item => {
  196. item.style.opacity = 0;
  197. })
  198.  
  199.  
  200. fields.forEach(item => {
  201. item.classList.remove('is-invalid');
  202. })
  203.  
  204. editNumFieldset.disabled = true;
  205. if (name === 'save') {
  206. const saveMsg = form.querySelector('.saveMsg');
  207. const { phone } = form;
  208. const body = JSON.stringify({ number:form.id,newNumber:phone.value })
  209.  
  210. fetch(Config.API_HOST+url + '/edit.number?session_token=' + userSession, {
  211. method: 'put',
  212. headers: {'Content-type':'application/json'},
  213. body
  214. })
  215. .then(response => response.json())
  216. .then(jsonResponse =>{
  217. if (jsonResponse.status !== 200) throw new Error(jsonResponse.message);
  218. return jsonResponse;
  219. })
  220. .then(data => {
  221. editNumFieldset.disabled = false;
  222. saveMsg.style.opacity = 1;
  223. })
  224. .catch(error => {
  225. phone.classList.add('is-invalid');
  226. editNumFieldset.disabled = false;
  227. numMessage.innerHTML = error.message;
  228. numMessage.style.display = 'block';
  229. })
  230.  
  231. }else if (name === 'delete'){
  232. const body = JSON.stringify({ number:form.id });
  233.  
  234. fetch(Config.API_HOST+url + '/remove.number?session_token=' + userSession, {
  235. method: 'put',
  236. headers: {'Content-type':'application/json'},
  237. body
  238. })
  239. .then(response => response.json())
  240. .then(jsonResponse =>{
  241. if (jsonResponse.status !== 200) throw new Error(jsonResponse.message);
  242. return jsonResponse;
  243. })
  244. .then(data => {
  245. editNumFieldset.disabled = false;
  246. form.classList.add('delete-num');
  247. //Время за которое завершится анимация
  248. setTimeout( () => {
  249. form.parentElement.removeChild(form)
  250. //если нет форм с номерами-показывем сообщение "Номеров нет"
  251. if (document.getElementsByClassName('editNumForm').length === 0){
  252. noNumbers.style.display = 'block';
  253. }
  254. },700)
  255.  
  256.  
  257. })
  258. .catch(error => {
  259. phone.classList.add('is-invalid');
  260. editNumFieldset.disabled = false;
  261. numMessage.innerHTML = error.message;
  262. numMessage.style.display = 'block';
  263. })
  264.  
  265. }
  266. }
Add Comment
Please, Sign In to add comment