From d48c3ccb5e273730d2643366ecd6aa0dcb22e6f4 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 8 Jul 2019 13:29:53 +0400 Subject: =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3=20javascript=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day9/task5/index.html | 6 +- day9/task5/static/js/constants.js | 135 ++++++++++++ day9/task5/static/js/editForm.js | 56 +++++ day9/task5/static/js/main.js | 276 +----------------------- day9/task5/static/js/overlayButtonsCallbacks.js | 24 +++ day9/task5/static/js/tableCallbacks.js | 45 ++++ day9/task5/static/js/utils.js | 5 + 7 files changed, 273 insertions(+), 274 deletions(-) create mode 100644 day9/task5/static/js/constants.js create mode 100644 day9/task5/static/js/editForm.js create mode 100644 day9/task5/static/js/overlayButtonsCallbacks.js create mode 100644 day9/task5/static/js/tableCallbacks.js create mode 100644 day9/task5/static/js/utils.js diff --git a/day9/task5/index.html b/day9/task5/index.html index 84236b2..f059911 100644 --- a/day9/task5/index.html +++ b/day9/task5/index.html @@ -36,8 +36,12 @@ + - + + + + + diff --git a/day9/task5/static/js/constants.js b/day9/task5/static/js/constants.js new file mode 100644 index 0000000..7078fb4 --- /dev/null +++ b/day9/task5/static/js/constants.js @@ -0,0 +1,135 @@ +const request = { + get: function (url, callback) { + let xmlHttp = new XMLHttpRequest(); + xmlHttp.onreadystatechange = function() { + if (xmlHttp.readyState === 4 && xmlHttp.status === 200) + callback(xmlHttp.responseText); + }; + xmlHttp.open("GET", url, true); + xmlHttp.send(); + }, + + post: function (url, callback, data) { + let xmlHttp = new XMLHttpRequest(); + xmlHttp.onreadystatechange = function() { + if (xmlHttp.readyState === 4 && xmlHttp.status === 200) + callback(xmlHttp.responseText); + }; + xmlHttp.open("POST", url, true); + xmlHttp.send(this.formatParams(data)); + }, + + formatParams: function (params) { + return Object.keys(params).map((key) => { + return key+"="+encodeURIComponent(params[key]) + }).join("&") + } + }; + +const defaultColumnInputs = { + 'service_id': ``, + 'servtype': ``, + 'subtype': ``, + 'user_id': ``, + 'referrer_user_id': ``, + 'state': ``, + + 'creation_date': ``, + 'creation_time': ``, + 'creation_request_sent_date': ``, + 'notified_about_expiration': `` +}; + +const baseFormFields = `
+
+
service_id
+
+
+ +
+
servtype
+
+ +
+
+ +
+
subtype
+
+ +
+
+ +
+
user_id
+
+ +
+
+ +
+
referrer_user_id
+
+ +
+
+ +
+
state
+
+ +
+
+ +
+
creation_date
+
+ +
+
+
+
creation_time
+
+ +
+
+ +
+
creation_request_sent_date
+
+ + +
+
+ +
+
notified_about_expiration
+
+ +
+
+
`; + +const formCreateButtons = `
+ + +
`; + +const formEditButtons = `
+ + +
`; + +const uploadFileHtml = ''; diff --git a/day9/task5/static/js/editForm.js b/day9/task5/static/js/editForm.js new file mode 100644 index 0000000..f3f2bd8 --- /dev/null +++ b/day9/task5/static/js/editForm.js @@ -0,0 +1,56 @@ +function showContentBox() { + let elem = document.getElementById('backgroundTint'); + elem.classList.remove('hidden'); + elem.classList.add('shown'); + + elem = document.getElementById('contentBox'); + elem.classList.remove('hidden'); + elem.classList.add('shown'); +} + +function hideContentBox() { + let elem = document.getElementById('backgroundTint'); + elem.classList.remove('shown'); + elem.classList.add('hidden'); + + elem = document.getElementById('contentBox'); + elem.classList.remove('shown'); + elem.classList.add('hidden'); +} + +function showForm() { + let newEntryBtn = document.getElementById('newEntryBtn'); + newEntryBtn.style.display = 'none'; + + showContentBox(); + let contentBox = document.getElementById('contentBox'); + while (contentBox.firstChild) + contentBox.removeChild(contentBox.firstChild); + + contentBox.appendChild(elementFromHTML(baseFormFields)); + return contentBox; +} + +function hideForm() { + let newEntryBtn = document.getElementById('newEntryBtn'); + newEntryBtn.style.display = 'inline'; + + let contentBox = document.getElementById('contentBox'); + while (contentBox.firstChild) + contentBox.removeChild(contentBox.firstChild); + + hideContentBox(); +} + +function showEditForm() { + let contentBox = showForm(); + contentBox.firstChild.appendChild(elementFromHTML(formEditButtons)); + contentBox.firstChild.action = '/api/update'; +} + +function showCreateForm() { + let contentBox = showForm(); + contentBox.firstChild.appendChild(elementFromHTML(formCreateButtons)); + contentBox.firstChild.action = '/api/add'; + document.getElementById('formServiceId').disabled = false; +} diff --git a/day9/task5/static/js/main.js b/day9/task5/static/js/main.js index 2ac3958..2a45341 100644 --- a/day9/task5/static/js/main.js +++ b/day9/task5/static/js/main.js @@ -1,145 +1,3 @@ -const request = { - get: function (url, callback) { - let xmlHttp = new XMLHttpRequest(); - xmlHttp.onreadystatechange = function() { - if (xmlHttp.readyState === 4 && xmlHttp.status === 200) - callback(xmlHttp.responseText); - }; - xmlHttp.open("GET", url, true); - xmlHttp.send(); - }, - - post: function (url, callback, data) { - let xmlHttp = new XMLHttpRequest(); - xmlHttp.onreadystatechange = function() { - if (xmlHttp.readyState === 4 && xmlHttp.status === 200) - callback(xmlHttp.responseText); - }; - xmlHttp.open("POST", url, true); - xmlHttp.send(this.formatParams(data)); - }, - - formatParams: function (params) { - return Object.keys(params).map((key) => { - return key+"="+encodeURIComponent(params[key]) - }).join("&") - } - }; - -const defaultColumnInputs = { - 'service_id': ``, - 'servtype': ``, - 'subtype': ``, - 'user_id': ``, - 'referrer_user_id': ``, - 'state': ``, - - 'creation_date': ``, - 'creation_time': ``, - 'creation_request_sent_date': ``, - 'notified_about_expiration': `` -}; - -const baseFormFields = `
-
-
service_id
-
-
- -
-
servtype
-
- -
-
- -
-
subtype
-
- -
-
- -
-
user_id
-
- -
-
- -
-
referrer_user_id
-
- -
-
- -
-
state
-
- -
-
- -
-
creation_date
-
- -
-
-
-
creation_time
-
- -
-
- -
-
creation_request_sent_date
-
- - -
-
- -
-
notified_about_expiration
-
- -
-
-
`; - -const formCreateButtons = `
- - -
`; - -const formEditButtons = `
- - -
`; - -const uploadFileHtml = ''; - -function elementFromHTML(html) { - let elem = document.createElement('div'); - elem.innerHTML = html; - return elem.firstChild; -} - function onPageLoad() { request.post(`${HOST}/get`, renderTable, {'type': 'full'}); @@ -147,41 +5,6 @@ function onPageLoad() { btn.innerHTML = uploadFileHtml; } -function onFieldClick(fieldId) { - let fieldElement = document.getElementById(fieldId); - - if (fieldElement.firstChild.nodeName !== 'INPUT' && fieldElement.firstChild.nodeName !== 'SELECT') { - let [columnName, serviceId] = fieldId.split('-'); - fieldElement.innerHTML = defaultColumnInputs[columnName]; - if (columnName === 'creation_request_sent_date') { - let dateElement = fieldElement.firstChild; - let timeElement = fieldElement.childNodes[1]; - - dateElement.onkeyup = timeElement.onkeyup = (event) => { - if (event.code === 'Enter') { - if (dateElement.value !== '' && timeElement.value !== '') - fieldEditSubmit(fieldId, `${dateElement.value} ${timeElement.value}`); - } - }; - } - else { - let inputElement = fieldElement.firstChild; - inputElement.onkeyup = (event) => { - if (event.code === 'Enter') - fieldEditSubmit(fieldId, inputElement.value); - }; - } - } -} - -function fieldEditSubmit(fieldId, value) { - let [columnName, serviceId] = fieldId.split('-'); - request.post(`${HOST}/api/update`, () => {}, { - 'service_id': serviceId, [columnName]: value - }); - document.getElementById(fieldId).innerHTML = value; -} - function renderTable(text) { let data = JSON.parse(text); @@ -201,8 +24,8 @@ function renderTable(text) { headerRow.appendChild(document.createElement('th')); let tableContent = document.createElement('tbody'); - data['content'].forEach((row, rowIndex) => { - row.push(``); + data['content'].forEach((row) => { + row.push(``); row.push(``); let contentRow = document.createElement('tr'); @@ -229,7 +52,7 @@ function renderTable(text) { table.appendChild(tableContent); } -function setupEditFields(service_id) { +function setupEditFormFields(service_id) { showEditForm(); request.post(`${HOST}/get`, (text) => { let row = JSON.parse(text); @@ -245,96 +68,3 @@ function setupEditFields(service_id) { 'type': 'single_id', 'service_id': service_id }); } - -function removeField(service_id) { - request.post(`${HOST}/api/delete`, () => {}, {'service_id': service_id}); - let tableBody = document.getElementById('table').childNodes[1]; - for (let node of tableBody.childNodes) { - if (node.getAttribute('id') === `row_${service_id}`) { - tableBody.removeChild(node); - break - } - } -} - -function showContentBox() { - let elem = document.getElementById('backgroundTint'); - elem.classList.remove('hidden'); - elem.classList.add('shown'); - - elem = document.getElementById('contentBox'); - elem.classList.remove('hidden'); - elem.classList.add('shown'); -} - -function hideContentBox() { - let elem = document.getElementById('backgroundTint'); - elem.classList.remove('shown'); - elem.classList.add('hidden'); - - elem = document.getElementById('contentBox'); - elem.classList.remove('shown'); - elem.classList.add('hidden'); -} - -function showForm() { - let newEntryBtn = document.getElementById('newEntryBtn'); - newEntryBtn.style.display = 'none'; - - showContentBox(); - let contentBox = document.getElementById('contentBox'); - while (contentBox.firstChild) - contentBox.removeChild(contentBox.firstChild); - - contentBox.appendChild(elementFromHTML(baseFormFields)); - return contentBox; -} - -showEditForm = () => { - let contentBox = showForm(); - contentBox.firstChild.appendChild(elementFromHTML(formEditButtons)); - contentBox.firstChild.action = '/api/update'; -}; - -showCreateForm = () => { - let contentBox = showForm(); - contentBox.firstChild.appendChild(elementFromHTML(formCreateButtons)); - contentBox.firstChild.action = '/api/add'; - document.getElementById('formServiceId').disabled = false; -}; - -function hideForm() { - let newEntryBtn = document.getElementById('newEntryBtn'); - newEntryBtn.style.display = 'inline'; - - let contentBox = document.getElementById('contentBox'); - while (contentBox.firstChild) - contentBox.removeChild(contentBox.firstChild); - - hideContentBox(); -} - -function addNewRowOnHover() { - let btn = document.getElementById('newEntryBtn'); - btn.innerText = 'Add new row'; -} - -function addNewRowOnEndHover() { - let btn = document.getElementById('newEntryBtn'); - btn.innerText = '+'; -} - -function uploadFileOnHover() { - let btn = document.getElementById('uploadFileBtn'); - btn.innerHTML = 'Upload File'; -} - -function uploadFileOnEndHover() { - let btn = document.getElementById('uploadFileBtn'); - btn.innerHTML = uploadFileHtml; -} - -function triggerUploadFile() { - let fileInput = document.getElementById('csvFileInput'); - fileInput.click() -} diff --git a/day9/task5/static/js/overlayButtonsCallbacks.js b/day9/task5/static/js/overlayButtonsCallbacks.js new file mode 100644 index 0000000..dd38b7d --- /dev/null +++ b/day9/task5/static/js/overlayButtonsCallbacks.js @@ -0,0 +1,24 @@ +function addNewRowOnHover() { + let btn = document.getElementById('newEntryBtn'); + btn.innerText = 'Add new row'; +} + +function addNewRowOnEndHover() { + let btn = document.getElementById('newEntryBtn'); + btn.innerText = '+'; +} + +function uploadFileOnHover() { + let btn = document.getElementById('uploadFileBtn'); + btn.innerHTML = 'Upload File'; +} + +function uploadFileOnEndHover() { + let btn = document.getElementById('uploadFileBtn'); + btn.innerHTML = uploadFileHtml; +} + +function triggerUploadFile() { + let fileInput = document.getElementById('csvFileInput'); + fileInput.click() +} diff --git a/day9/task5/static/js/tableCallbacks.js b/day9/task5/static/js/tableCallbacks.js new file mode 100644 index 0000000..252e429 --- /dev/null +++ b/day9/task5/static/js/tableCallbacks.js @@ -0,0 +1,45 @@ +function onFieldClick(fieldId) { + let fieldElement = document.getElementById(fieldId); + + if (fieldElement.firstChild.nodeName !== 'INPUT' && fieldElement.firstChild.nodeName !== 'SELECT') { + let [columnName, serviceId] = fieldId.split('-'); + fieldElement.innerHTML = defaultColumnInputs[columnName]; + if (columnName === 'creation_request_sent_date') { + let dateElement = fieldElement.firstChild; + let timeElement = fieldElement.childNodes[1]; + + dateElement.onkeyup = timeElement.onkeyup = (event) => { + if (event.code === 'Enter') { + if (dateElement.value !== '' && timeElement.value !== '') + fieldEditSubmit(fieldId, `${dateElement.value} ${timeElement.value}`); + } + }; + } + else { + let inputElement = fieldElement.firstChild; + inputElement.onkeyup = (event) => { + if (event.code === 'Enter') + fieldEditSubmit(fieldId, inputElement.value); + }; + } + } +} + +function fieldEditSubmit(fieldId, value) { + let [columnName, serviceId] = fieldId.split('-'); + request.post(`${HOST}/api/update`, () => {}, { + 'service_id': serviceId, [columnName]: value + }); + document.getElementById(fieldId).innerHTML = value; +} + +function removeField(service_id) { + request.post(`${HOST}/api/delete`, () => {}, {'service_id': service_id}); + let tableBody = document.getElementById('table').childNodes[1]; + for (let node of tableBody.childNodes) { + if (node.getAttribute('id') === `row_${service_id}`) { + tableBody.removeChild(node); + break + } + } +} diff --git a/day9/task5/static/js/utils.js b/day9/task5/static/js/utils.js new file mode 100644 index 0000000..5d60723 --- /dev/null +++ b/day9/task5/static/js/utils.js @@ -0,0 +1,5 @@ +function elementFromHTML(html) { + let elem = document.createElement('div'); + elem.innerHTML = html; + return elem.firstChild; +} -- cgit v1.2.3