From e1deefb4aeb51fef8f6b04d21fdb3f125c140c5f Mon Sep 17 00:00:00 2001 From: Max Hunt Date: Sat, 16 May 2020 21:40:07 +0100 Subject: [PATCH] Update --- firebase-debug.log | 13 + functions/views/add-item.ejs | 2 +- functions/views/edit-item.ejs | 29 +- functions/views/js/fAuth.js | 120 +------- functions/views/js/fAuth.src.js | 119 ++++++++ functions/views/js/fdb.js | 518 +------------------------------- functions/views/js/fdb.src.js | 518 ++++++++++++++++++++++++++++++++ 7 files changed, 662 insertions(+), 657 deletions(-) create mode 100644 firebase-debug.log create mode 100644 functions/views/js/fAuth.src.js create mode 100644 functions/views/js/fdb.src.js diff --git a/firebase-debug.log b/firebase-debug.log new file mode 100644 index 0000000..a96ad10 --- /dev/null +++ b/firebase-debug.log @@ -0,0 +1,13 @@ +[debug] [2020-05-16T19:40:26.375Z] ---------------------------------------------------------------------- +[debug] [2020-05-16T19:40:26.376Z] Command: /usr/local/bin/node /usr/local/bin/firebase deploy +[debug] [2020-05-16T19:40:26.377Z] CLI Version: 8.2.0 +[debug] [2020-05-16T19:40:26.377Z] Platform: darwin +[debug] [2020-05-16T19:40:26.377Z] Node Version: v12.16.2 +[debug] [2020-05-16T19:40:26.378Z] Time: Sat May 16 2020 20:40:26 GMT+0100 (British Summer Time) +[debug] [2020-05-16T19:40:26.378Z] ---------------------------------------------------------------------- +[debug] [2020-05-16T19:40:26.378Z] +[debug] [2020-05-16T19:40:26.386Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] +[debug] [2020-05-16T19:40:26.387Z] > authorizing via signed-in user +[debug] [2020-05-16T19:40:26.387Z] [iam] checking project project-gg-3b754 for permissions ["cloudfunctions.functions.create","cloudfunctions.functions.delete","cloudfunctions.functions.get","cloudfunctions.functions.list","cloudfunctions.functions.update","cloudfunctions.operations.get","firebase.projects.get","firebasehosting.sites.update"] +[debug] [2020-05-16T19:40:26.389Z] >>> HTTP REQUEST POST https://cloudresourcemanager.googleapis.com/v1/projects/project-gg-3b754:testIamPermissions + {"permissions":["cloudfunctions.functions.create","cloudfunctions.functions.delete","cloudfunctions.functions.get","cloudfunctions.functions.list","cloudfunctions.functions.update","cloudfunctions.operations.get","firebase.projects.get","firebasehosting.sites.update"]} diff --git a/functions/views/add-item.ejs b/functions/views/add-item.ejs index de1d275..22db911 100644 --- a/functions/views/add-item.ejs +++ b/functions/views/add-item.ejs @@ -59,7 +59,7 @@ - +
diff --git a/functions/views/edit-item.ejs b/functions/views/edit-item.ejs index 2604481..742b9de 100644 --- a/functions/views/edit-item.ejs +++ b/functions/views/edit-item.ejs @@ -50,30 +50,19 @@
+ -
+

Edit product

-
- +
+ + + + + +
-
- -
- - -
- -
-
- - - - - - - -
diff --git a/functions/views/js/fAuth.js b/functions/views/js/fAuth.js index 893e8e1..e5ed199 100644 --- a/functions/views/js/fAuth.js +++ b/functions/views/js/fAuth.js @@ -1,119 +1 @@ -function checkAuth(){ - firebase.auth().onAuthStateChanged(function(user){ - if (user) { - - try {document.getElementById('uname-dom').innerHTML = "Loading..."} - catch(error){} - - firebase.auth().currentUser.getIdToken().then(function(idToken) { - let url = 'login-user-api' - let data = {uToken: idToken} - let postData = {method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - if (result.success == true) { - if (result.registered) { - document.getElementById('uname-dom').innerHTML = "Hello, " + result.name - } else { - try { - document.getElementById('uname-dom').innerHTML = "Unregistered!" - document.getElementById("notifications").innerHTML = "🔔 | Register your account" - document.getElementById("notifications").setAttribute("href", "registration") - document.getElementById("notifications").setAttribute("style", "color: red;") - } - catch(error){} - if (window.location.href.split('/').pop() != 'registration') { - window.location.replace('registration') - } - } - } - else { - console.log(result.error) - document.getElementById("notifications").innerHTML = "🔔 | What the fuck just happened....." - document.getElementById("notifications").setAttribute("style", "color: pink;") - } - }) - }) - try { - document.getElementById('uname-field').setAttribute("style", "display: block;") - document.getElementById('login-field').setAttribute("style", "display: none;") - - document.getElementById('uname-field').setAttribute("style", "display: block;") - document.getElementById('login-field').setAttribute("style", "display: none;") - } - catch(error) {} - try {document.getElementById('uAuthMsg').setAttribute("style", "display: none;")} - catch(error) {} - try{document.getElementById('authField').setAttribute("style", "display: block;")} - catch(error) {} - } - else { - document.getElementById('uname-field').setAttribute("style", "display: none;") - document.getElementById('login-field').setAttribute("style", "display: block;") - document.getElementById('uname-dom').innerHTML = "Unregistered" - try{document.getElementById('uAuthMsg').setAttribute("style", "display: block;")} - catch(error) {} - try{document.getElementById('authField').setAttribute("style", "display: none;")} - catch(error) {} - } - }) -} - -checkAuth() - - -function signinwithgoogle(){ - var googleAuthProvider = new firebase.auth.GoogleAuthProvider() - firebase.auth().signInWithPopup(googleAuthProvider) - .then(function(data){ - console.log('User signed in...') - }) - .catch(function(error){ - console.log(error) - }) -} - -function signinwithfb(){ - var fbAuthProvider = new firebase.auth.FacebookAuthProvider() - firebase.auth().signInWithPopup(fbAuthProvider) - .then(function(data){ - console.log('User signed in...') - }) - .catch(function(error){ - console.log(error) - }) -} - -function signinwithemail(){ - const txtEmail = document.getElementById('fuid') - const txtPassword = document.getElementById('fpwd') - - var email = txtEmail.value - var pass = txtPassword.value - var auth = firebase.auth() - - auth.signInWithEmailAndPassword(email, pass) - .catch(e => console.log(e.message)) - .then(function(data){ - txtPassword.value = '' - txtEmail.value = '' - }) -} - -function signout(){ - firebase.auth().signOut() - window.location.replace('home') - // window.location.replace(window.location.href.split("?")[0]) -} - -try { - var pwField = document.getElementById("fpwd"); - pwField.addEventListener("keyup", function(event) { - if (event.keyCode === 13) { - event.preventDefault() - document.getElementById("blogin").click() - } - }) -} -catch(error) {} +function checkAuth(){firebase.auth().onAuthStateChanged(function(e){if(e){try{document.getElementById("uname-dom").innerHTML="Loading..."}catch(e){}firebase.auth().currentUser.getIdToken().then(function(e){let t={uToken:e},n={method:"POST",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}};fetch("login-user-api",n).then(e=>e.json()).then(function(e){if(1==e.success)if(e.registered)document.getElementById("uname-dom").innerHTML="Hello, "+e.name;else{try{document.getElementById("uname-dom").innerHTML="Unregistered!",document.getElementById("notifications").innerHTML="🔔 | Register your account",document.getElementById("notifications").setAttribute("href","registration"),document.getElementById("notifications").setAttribute("style","color: red;")}catch(e){}"registration"!=window.location.href.split("/").pop()&&window.location.replace("registration")}else console.log(e.error),document.getElementById("notifications").innerHTML="🔔 | What the fuck just happened.....",document.getElementById("notifications").setAttribute("style","color: pink;")})});try{document.getElementById("uname-field").setAttribute("style","display: block;"),document.getElementById("login-field").setAttribute("style","display: none;"),document.getElementById("uname-field").setAttribute("style","display: block;"),document.getElementById("login-field").setAttribute("style","display: none;")}catch(e){}try{document.getElementById("uAuthMsg").setAttribute("style","display: none;")}catch(e){}try{document.getElementById("authField").setAttribute("style","display: block;")}catch(e){}}else{document.getElementById("uname-field").setAttribute("style","display: none;"),document.getElementById("login-field").setAttribute("style","display: block;"),document.getElementById("uname-dom").innerHTML="Unregistered";try{document.getElementById("uAuthMsg").setAttribute("style","display: block;")}catch(e){}try{document.getElementById("authField").setAttribute("style","display: none;")}catch(e){}}})}function signinwithgoogle(){var e=new firebase.auth.GoogleAuthProvider;firebase.auth().signInWithPopup(e).then(function(e){console.log("User signed in...")}).catch(function(e){console.log(e)})}function signinwithfb(){var e=new firebase.auth.FacebookAuthProvider;firebase.auth().signInWithPopup(e).then(function(e){console.log("User signed in...")}).catch(function(e){console.log(e)})}function signinwithemail(){const e=document.getElementById("fuid"),t=document.getElementById("fpwd");var n=e.value,i=t.value;firebase.auth().signInWithEmailAndPassword(n,i).catch(e=>console.log(e.message)).then(function(n){t.value="",e.value=""})}function signout(){firebase.auth().signOut(),window.location.replace("home")}checkAuth();try{var pwField=document.getElementById("fpwd");pwField.addEventListener("keyup",function(e){13===e.keyCode&&(e.preventDefault(),document.getElementById("blogin").click())})}catch(e){} \ No newline at end of file diff --git a/functions/views/js/fAuth.src.js b/functions/views/js/fAuth.src.js new file mode 100644 index 0000000..893e8e1 --- /dev/null +++ b/functions/views/js/fAuth.src.js @@ -0,0 +1,119 @@ +function checkAuth(){ + firebase.auth().onAuthStateChanged(function(user){ + if (user) { + + try {document.getElementById('uname-dom').innerHTML = "Loading..."} + catch(error){} + + firebase.auth().currentUser.getIdToken().then(function(idToken) { + let url = 'login-user-api' + let data = {uToken: idToken} + let postData = {method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + if (result.success == true) { + if (result.registered) { + document.getElementById('uname-dom').innerHTML = "Hello, " + result.name + } else { + try { + document.getElementById('uname-dom').innerHTML = "Unregistered!" + document.getElementById("notifications").innerHTML = "🔔 | Register your account" + document.getElementById("notifications").setAttribute("href", "registration") + document.getElementById("notifications").setAttribute("style", "color: red;") + } + catch(error){} + if (window.location.href.split('/').pop() != 'registration') { + window.location.replace('registration') + } + } + } + else { + console.log(result.error) + document.getElementById("notifications").innerHTML = "🔔 | What the fuck just happened....." + document.getElementById("notifications").setAttribute("style", "color: pink;") + } + }) + }) + try { + document.getElementById('uname-field').setAttribute("style", "display: block;") + document.getElementById('login-field').setAttribute("style", "display: none;") + + document.getElementById('uname-field').setAttribute("style", "display: block;") + document.getElementById('login-field').setAttribute("style", "display: none;") + } + catch(error) {} + try {document.getElementById('uAuthMsg').setAttribute("style", "display: none;")} + catch(error) {} + try{document.getElementById('authField').setAttribute("style", "display: block;")} + catch(error) {} + } + else { + document.getElementById('uname-field').setAttribute("style", "display: none;") + document.getElementById('login-field').setAttribute("style", "display: block;") + document.getElementById('uname-dom').innerHTML = "Unregistered" + try{document.getElementById('uAuthMsg').setAttribute("style", "display: block;")} + catch(error) {} + try{document.getElementById('authField').setAttribute("style", "display: none;")} + catch(error) {} + } + }) +} + +checkAuth() + + +function signinwithgoogle(){ + var googleAuthProvider = new firebase.auth.GoogleAuthProvider() + firebase.auth().signInWithPopup(googleAuthProvider) + .then(function(data){ + console.log('User signed in...') + }) + .catch(function(error){ + console.log(error) + }) +} + +function signinwithfb(){ + var fbAuthProvider = new firebase.auth.FacebookAuthProvider() + firebase.auth().signInWithPopup(fbAuthProvider) + .then(function(data){ + console.log('User signed in...') + }) + .catch(function(error){ + console.log(error) + }) +} + +function signinwithemail(){ + const txtEmail = document.getElementById('fuid') + const txtPassword = document.getElementById('fpwd') + + var email = txtEmail.value + var pass = txtPassword.value + var auth = firebase.auth() + + auth.signInWithEmailAndPassword(email, pass) + .catch(e => console.log(e.message)) + .then(function(data){ + txtPassword.value = '' + txtEmail.value = '' + }) +} + +function signout(){ + firebase.auth().signOut() + window.location.replace('home') + // window.location.replace(window.location.href.split("?")[0]) +} + +try { + var pwField = document.getElementById("fpwd"); + pwField.addEventListener("keyup", function(event) { + if (event.keyCode === 13) { + event.preventDefault() + document.getElementById("blogin").click() + } + }) +} +catch(error) {} diff --git a/functions/views/js/fdb.js b/functions/views/js/fdb.js index 29b7c24..b3c41b9 100644 --- a/functions/views/js/fdb.js +++ b/functions/views/js/fdb.js @@ -1,517 +1 @@ -function checkFields() { - if (document.getElementById('pName').value && document.getElementById('pDesc').value - && document.getElementById('pLoc').value && document.getElementById('pPrice').value - && document.getElementById('imgInput').files[0]) { - return true - } - return false -} - -async function productSubmitEventHandler(){ - const submitBtn = document.getElementById('pSend') - if (submitBtn.innerHTML == "Submit!") { - if (checkFields()) { - submitBtn.innerHTML = "Uploading..." - submitBtn.disabled = true - - let newProduct = {id: 1,name: "",desc: "",img: "default.png",location: "",stock: 1,status: "on-sale",price: 0,owner: "",holder: ""} - - const nameField = document.getElementById('pName') - const descField = document.getElementById('pDesc') - const locField = document.getElementById('pLoc') - const stockField = document.getElementById('pStock') - const priceField = document.getElementById('pPrice') - let fInput = document.getElementById('imgInput') - - let uid = firebase.auth().currentUser.uid - - newProduct.id = 999 - newProduct.name = nameField.value - newProduct.desc = descField.value - newProduct.location = locField.value - if (stockField.value) {newProduct.stock = stockField.value} - newProduct.price = priceField.value - newProduct.owner = uid - newProduct.holder = uid - - let image = fInput.files[0] - - let imageName = fInput.files[0].name - let imagePackage = {name:imageName, b64:null} - - firebase.auth().currentUser.getIdToken().then(function(idToken){ - let url = 'new-product-api' - let data = {authToken: idToken, product: newProduct, image: imagePackage} - let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - if (result.success) { - let imageRef = firebase.storage().ref(result.imgRef) - imageRef.put(image).then(function(){ - submitBtn.innerHTML = "Done! Go Home..." - submitBtn.disabled = false - submitBtn.setAttribute('style', 'background:#00FF55; transition:0.5s; width:162%;') - }) - .catch(e=>{ - submitBtn.innerHTML = "Error..." - submitBtn.setAttribute('style', 'color:red;') - document.getElementById("api-response").innerHTML = "Error: " + e - document.getElementById("api-response").setAttribute("style", "display: block") - }) - } - else { - submitBtn.innerHTML = "Error..." - submitBtn.setAttribute('style', 'color:red;') - document.getElementById("api-response").innerHTML = "Error: " + result.error - document.getElementById("api-response").setAttribute("style", "display: block") - } - }) - }) - } else { - document.getElementById("api-response").innerHTML = "Fill in all required fields!" - document.getElementById("api-response").setAttribute("style", "display: block") - } - } else { - window.location.replace('home') - } -} - -function productUpdateEventHandler() { - const submitBtn = document.getElementById('pSend') - if (submitBtn.innerHTML == "Update") { - const nameField = document.getElementById('pName') - const descField = document.getElementById('pDesc') - const locField = document.getElementById('pLoc') - const stockField = document.getElementById('pStock') - const priceField = document.getElementById('pPrice') - - const item_id_element = document.getElementById("productID") - const item_id = item_id_element.getAttribute("product_id") - - submitBtn.innerHTML = "Updating..." - submitBtn.disabled = true - - updates = {name: nameField.value, desc: descField.value, location: locField.value, stock: stockField.value, price: priceField.value} - - firebase.auth().currentUser.getIdToken().then(function(idToken){ - let url = 'update-product-api' - let data = {authToken: idToken, product: updates, productID: item_id} - let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - if (result.success) { - submitBtn.setAttribute("style", "width: 300px; background: #00DD00;cursor: pointer;") - submitBtn.innerHTML = "Done!, Go Home..." - submitBtn.disabled = false - } - else { - submitBtn.innerHTML = "Error..." - submitBtn.setAttribute('style', 'color:red;') - document.getElementById("api-response").innerHTML = "Error: " + result.error - document.getElementById("api-response").setAttribute("style", "display: block") - } - }) - }) - } - else { - window.location.replace('home') - } -} - -function updateImgs() { - const storage = firebase.storage() - const imgRef = storage.ref() - - var images = document.getElementsByClassName('dyn-img') - // console.log(images) - Array.from(images).forEach((image) => { - var pathReference = imgRef.child(image.title) - pathReference.getDownloadURL().then(function(url) {image.src = url}).catch(e => {console.log(e.message)}) - }) -} -updateImgs() - -function requestItem(){ - const reqBtn = document.getElementById('req-btn') - const bMessage = document.getElementById('bMsg') - if (reqBtn.innerHTML == "Request!") { - if (firebase.auth().currentUser) { - reqBtn.setAttribute("style", "background: #87e5ff; width:300px;") - reqBtn.innerHTML = "Send?" - bMessage.setAttribute('style', 'display: block;') - } else { - reqBtn.innerHTML = "Please sign in" - reqBtn.setAttribute("style", "background: #FFa5af; width:300px;") - } - } - else if (reqBtn.innerHTML == "Send?") { - if (firebase.auth().currentUser) { - firebase.auth().currentUser.getIdToken().then(function(idToken) { - reqBtn.innerHTML = "Sending..." - reqBtn.disabled = true - let userMessage = bMessage.value - let item_id = document.getElementById("productID").getAttribute("product_id") - const url = 'request-api' - let data = {prodID: item_id, authToken: idToken, usrMsg: userMessage} - let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - console.log(result) - if (result.success == true) { - reqBtn.setAttribute("style", "background: #00DD00; width:520px; transition: 0.7s;") - reqBtn.innerHTML = "Done! Go Home" - reqBtn.disabled = false - } - else { - reqBtn.setAttribute("style", "background: red;") - reqBtn.disabled = true - reqBtn.innerHTML = "ERROR" - document.getElementById("api-response").innerHTML = "Error: " + result.error - document.getElementById("api-response").setAttribute("style", "display: block") - } - }) - }) - } else { - reqBtn.innerHTML = "Please sign in" - } - } - else { - window.location.replace('home') - } -} - -function edit_item() { - firebase.auth().currentUser.getIdToken().then(function(idToken) { - var item_id_element = document.getElementById("productID") - var item_id = item_id_element.getAttribute("product_id") - window.location.replace("edit-item?uToken=" + idToken + '&productid=' + item_id) - }) - .catch(e => {console.log(e)}) -} - -function toggle_sale() { - firebase.auth().currentUser.getIdToken().then(function(idToken) { - let item_id = document.getElementById("productID").getAttribute("product_id") - let item_status = document.getElementById("productID").getAttribute("product_status") - let toggle_sale_btn = document.getElementById("toggleSaleBtn") - toggle_sale_btn.disabled = true - var toggle_status = true - if (item_status == 'on-sale') {toggle_status = false} - const url = 'toggle-sale-api' - let data = {prodID: item_id, authToken: idToken, targetState: toggle_status} - let postData = { method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - console.log(result) - if (result.success == true) { - toggle_sale_btn.setAttribute("style", "background: #00DD00; transition: 0.5s;") - toggle_sale_btn.innerHTML = "Done!" - let sold_btn = document.getElementById("soldBtn") - let edit_button = document.getElementById("editBtn") - sold_btn.disabled = true - edit_button.disabled = true - } else { - toggle_sale_btn.setAttribute("style", "background: red;") - toggle_sale_btn.innerHTML = "ERROR" - document.getElementById("api-response").innerHTML = "Error: " + result.error - document.getElementById("api-response").setAttribute("style", "display: block") - } - }) - .catch (e=>{ - toggle_sale_btn.setAttribute("style", "background: red;") - toggle_sale_btn.innerHTML = "ERROR" - document.getElementById("api-response").innerHTML = "Error: " + e - document.getElementById("api-response").setAttribute("style", "display: block") - }) - }) -} - -function mark_as_sold(){ - firebase.auth().currentUser.getIdToken().then(function(idToken) { - let item_id = document.getElementById("productID").getAttribute("product_id") - let sold_btn = document.getElementById("soldBtn") - const url = 'sold-api' - let data = {prodID: item_id, authToken: idToken} - let postData = { method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - if (result.success == true) { - sold_btn.setAttribute("style", "background: #00DD00; width:200px;") - sold_btn.innerHTML = "Sold!" - sold_btn.disabled = true - let sale_button = document.getElementById("toggleSaleBtn") - let edit_button = document.getElementById("editBtn") - sale_button.disabled = true - edit_button.disabled = true - } - else { - sold_btn.setAttribute("style", "background: red;") - sold_btn.innerHTML = "ERROR" - document.getElementById("api-response").innerHTML = "Error: " + e - document.getElementById("api-response").setAttribute("style", "display: block") - } - }) - .catch (e=>{ - sold_btn.setAttribute("style", "background: red;") - sold_btn.innerHTML = "ERROR" - document.getElementById("api-response").innerHTML = "Error: " + e - document.getElementById("api-response").setAttribute("style", "display: block") - }) - }) -} - -function my_product(productID) { - firebase.auth().currentUser.getIdToken().then(function(idToken) { - window.location.replace("my-product?uToken=" + idToken + '&productid=' + productID) - }) - .catch(e => {console.log(e)}) -} - -function my_products() { - firebase.auth().currentUser.getIdToken().then(function(idToken) { - window.location.replace("my-products?uToken=" + idToken) - }) - .catch(e => {console.log(e)}) -} - -function showShipField(){ - document.getElementById('shippingaddressbutton').setAttribute("style", "display:none;") - document.getElementById('shippingaddressinput').setAttribute("style", "display:block;") - showUserShippingAddress() -} - -function showUserShippingAddress(){ - firebase.auth().currentUser.getIdToken().then(function(idToken){ - let url = 'shipping-adress-get-api' - let data = {authToken: idToken} - let postData = {method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - if (result.success) { - document.getElementById("shippingaddressinput").value = result.address - } - else { - document.getElementById("api-response").innerHTML = "Error: " + result.error - document.getElementById("api-response").setAttribute("style", "display: block") - document.getElementById("shippingaddressinput").value = "" - document.getElementById("shippingaddressinput").placeholder = "Can't retrieve current shipping address" - } - }) - }) -} - -function addShippingAddress(){ - let newAddress = document.getElementById('shippingaddressinput').value - firebase.auth().currentUser.getIdToken().then(function(idToken){ - let url = 'shipping-adress-edit-api' - let data = {authToken: idToken, address: newAddress} - let postData = {method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - if (result.success) { - document.getElementById("shippingaddressinput").value = "" - document.getElementById("shippingaddressinput").placeholder = "Success!" - } - else { - document.getElementById("api-response").innerHTML = "Error: " + result.error - document.getElementById("api-response").setAttribute("style", "display: block") - document.getElementById("shippingaddressinput").value = "" - document.getElementById("shippingaddressinput").placeholder = "ERROR!" - } - }) - }) -} - -function search(keywords){ - window.location.replace('search?search='+keywords) -} - -function u_r_submit(){ - let submitBtn = document.getElementById('u-r-btn') - if (submitBtn.innerHTML == "Submit!") { - submitBtn.disabled = true - if (firebase.auth().currentUser) { - firebase.auth().currentUser.getIdToken().then(function(idToken){ - let firstNameField = document.getElementById('f-name') - let lastNameField = document.getElementById('l-name') - let addressField = document.getElementById('u-address') - let fName = firstNameField.value - let lName = lastNameField.value - let address = addressField.value - let fInput = document.getElementById('imgInput') - let picName = fInput.files[0].name - let image = fInput.files[0] - let userData = {fName:fName, lName:lName, address:address, pPic:picName} - let url = 'register-new-user-api' - let data = {authToken: idToken, data: userData} - let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} - fetch(url, postData) - .then(response => response.json()) - .then(function(result){ - if (result.success) { - let imageRef = firebase.storage().ref(result.imgRef) - submitBtn.innerHTML = "Uploading..." - submitBtn.disabled = true - imageRef.put(image).then(function(){ - submitBtn.setAttribute("style", "background: #00FF00; width: 100%; transition: 0.5s;") - submitBtn.innerHTML = "Success! Go Home..." - submitBtn.disabled = false - }) - .catch(e=>{ - submitBtn.setAttribute("style", "background: red;") - submitBtn.innerHTML = "ERROR" - submitBtn.disabled = false - document.getElementById("api-response").innerHTML = "Error: " + e - document.getElementById("api-response").setAttribute("style", "display: block") - }) - } - else { - submitBtn.setAttribute("style", "background: red;") - submitBtn.innerHTML = "ERROR" - submitBtn.disabled = false - document.getElementById("api-response").innerHTML = "Error: " + result.error - document.getElementById("api-response").setAttribute("style", "display: block") - } - }) - }) - .catch(e=>{ - submitBtn.setAttribute("style", "background: red;") - submitBtn.innerHTML = "AUTH!!!" - document.getElementById("api-response").innerHTML = "Error: " + e - document.getElementById("api-response").setAttribute("style", "display: block") - }) - } else { - submitBtn.setAttribute("style", "background: red;") - submitBtn.disabled = false - submitBtn.innerHTML = "ERROR!" - document.getElementById("api-response").innerHTML = "Error: Please log in" - document.getElementById("api-response").setAttribute("style", "display: block") - } - } else { - window.location.replace('home') - } -} - -function initFileDropListner() { - let dropZone = document.getElementById("dropzone") - if (dropZone) { - let fInput = document.getElementById('imgInput') - dropZone.ondragover = function(){this.className = "dropzone dragover";return false} - dropZone.ondragleave = function(){this.className = "dropzone";return false} - dropZone.onclick = function(){ - fInput.click() - } - fInput.onchange = function(event) { - let addedFile = event.target.files[0] - fileAddSequence(addedFile) - } - dropZone.ondrop = function(event) { - event.preventDefault() - this.className = "dropzone" - let droppedFile = event.dataTransfer.files[0] - fileAddSequence(droppedFile) - } - } -} - -initFileDropListner() - -function fileAddSequence(file){ - let fInput = document.getElementById('imgInput') - if (["image/jpeg", "image/png", "image/gif"].includes(file.type)) { - let fileSize = file.size / 1024 / 1024 - if (fileSize < 10){ - fInput.files[0] = file - let imgPreview = document.getElementById('imgPreview') - let svgElement = document.getElementById('svgElement') - imgPreview.src = URL.createObjectURL(file) - imgPreview.setAttribute('style', 'display: block;') - svgElement.setAttribute('style', 'display: none;') - } else { - document.getElementById("api-response").innerHTML = "Files under 10MB please..." - document.getElementById("api-response").setAttribute("style", "display: block") - } - } else { - document.getElementById("api-response").innerHTML = "Accepted formats: jpeg/jpg, png, gif" - document.getElementById("api-response").setAttribute("style", "display: block") - } -} - -try { - var addressField = document.getElementById("shippingaddressinput") - addressField.addEventListener("keyup", function(event) { - if (event.keyCode === 13) { - event.preventDefault() - if (addressField.value == "Success!" || addressField.value == ""){ - addressField.value = "" - addressField.blur() - } - else { - addShippingAddress() - addressField.blur() - } - } - }) -} -catch(error) {} - -function bSearch(){ - let searchField = document.getElementById("sfield") - if (searchField.value == ""){ - searchField.blur() - } - else { - search(searchField.value) - } -} - - -try { - let searchField = document.getElementById("sfield") - searchField.addEventListener("keyup", function(event) { - if (event.keyCode === 13) { - event.preventDefault() - if (searchField.value == ""){ - searchField.blur() - } - else { - search(searchField.value) - } - } - }) -} -catch(error) {} - -try { - let regAddressField = document.getElementById("u-address") - regAddressField.addEventListener("keyup", function(event) { - if (event.keyCode === 13) { - event.preventDefault() - document.getElementById("u-r-btn").click() - } - }) -} -catch(error) {} - -window.addEventListener("dragover", function(e) { - if (e.target.id != "dropzone") { - e.preventDefault() - e.dataTransfer.effectAllowed = "none" - e.dataTransfer.dropEffect = "none" - } -}) - -window.addEventListener("drop", function(e) { - if (e.target.id != "dropzone") { - e.preventDefault() - e.dataTransfer.effectAllowed = "none" - e.dataTransfer.dropEffect = "none" - } -}) \ No newline at end of file +function checkFields(){return!!(document.getElementById("pName").value&&document.getElementById("pDesc").value&&document.getElementById("pLoc").value&&document.getElementById("pPrice").value&&document.getElementById("imgInput").files[0])}async function productSubmitEventHandler(){const e=document.getElementById("pSend");if("Submit!"==e.innerHTML)if(checkFields()){e.innerHTML="Uploading...",e.disabled=!0;let t={id:1,name:"",desc:"",img:"default.png",location:"",stock:1,status:"on-sale",price:0,owner:"",holder:""};const n=document.getElementById("pName"),d=document.getElementById("pDesc"),r=document.getElementById("pLoc"),o=document.getElementById("pStock"),s=document.getElementById("pPrice");let i=document.getElementById("imgInput"),l=firebase.auth().currentUser.uid;t.id=999,t.name=n.value,t.desc=d.value,t.location=r.value,o.value&&(t.stock=o.value),t.price=s.value,t.owner=l,t.holder=l;let u=i.files[0],c={name:i.files[0].name,b64:null};firebase.auth().currentUser.getIdToken().then(function(n){let d={authToken:n,product:t,image:c},r={method:"POST",body:JSON.stringify(d),headers:{"Content-Type":"application/json"}};fetch("new-product-api",r).then(e=>e.json()).then(function(t){if(t.success){firebase.storage().ref(t.imgRef).put(u).then(function(){e.innerHTML="Done! Go Home...",e.disabled=!1,e.setAttribute("style","background:#00FF55; transition:0.5s; width:162%;")}).catch(t=>{e.innerHTML="Error...",e.setAttribute("style","color:red;"),document.getElementById("api-response").innerHTML="Error: "+t,document.getElementById("api-response").setAttribute("style","display: block")})}else e.innerHTML="Error...",e.setAttribute("style","color:red;"),document.getElementById("api-response").innerHTML="Error: "+t.error,document.getElementById("api-response").setAttribute("style","display: block")})})}else document.getElementById("api-response").innerHTML="Fill in all required fields!",document.getElementById("api-response").setAttribute("style","display: block");else window.location.replace("home")}function productUpdateEventHandler(){const e=document.getElementById("pSend");if("Update"==e.innerHTML){const t=document.getElementById("pName"),n=document.getElementById("pDesc"),d=document.getElementById("pLoc"),r=document.getElementById("pStock"),o=document.getElementById("pPrice"),s=document.getElementById("productID").getAttribute("product_id");e.innerHTML="Updating...",e.disabled=!0,updates={name:t.value,desc:n.value,location:d.value,stock:r.value,price:o.value},firebase.auth().currentUser.getIdToken().then(function(t){let n={authToken:t,product:updates,productID:s},d={method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}};fetch("update-product-api",d).then(e=>e.json()).then(function(t){t.success?(e.setAttribute("style","width: 310px; background: #00DD00;cursor: pointer;"),e.innerHTML="Done!, Go Home...",e.disabled=!1):(e.innerHTML="Error...",e.setAttribute("style","color:red;"),document.getElementById("api-response").innerHTML="Error: "+t.error,document.getElementById("api-response").setAttribute("style","display: block"))})})}else window.location.replace("home")}function updateImgs(){const e=firebase.storage().ref();var t=document.getElementsByClassName("dyn-img");Array.from(t).forEach(t=>{e.child(t.title).getDownloadURL().then(function(e){t.src=e}).catch(e=>{console.log(e.message)})})}function requestItem(){const e=document.getElementById("req-btn"),t=document.getElementById("bMsg");"Request!"==e.innerHTML?firebase.auth().currentUser?(e.setAttribute("style","background: #87e5ff; width:300px;"),e.innerHTML="Send?",t.setAttribute("style","display: block;")):(e.innerHTML="Please sign in",e.setAttribute("style","background: #FFa5af; width:300px;")):"Send?"==e.innerHTML?firebase.auth().currentUser?firebase.auth().currentUser.getIdToken().then(function(n){e.innerHTML="Sending...",e.disabled=!0;let d=t.value;let r={prodID:document.getElementById("productID").getAttribute("product_id"),authToken:n,usrMsg:d},o={method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}};fetch("request-api",o).then(e=>e.json()).then(function(t){console.log(t),1==t.success?(e.setAttribute("style","background: #00DD00; width:520px; transition: 0.7s;"),e.innerHTML="Done! Go Home",e.disabled=!1):(e.setAttribute("style","background: red;"),e.disabled=!0,e.innerHTML="ERROR",document.getElementById("api-response").innerHTML="Error: "+t.error,document.getElementById("api-response").setAttribute("style","display: block"))})}):e.innerHTML="Please sign in":window.location.replace("home")}function edit_item(){firebase.auth().currentUser.getIdToken().then(function(e){var t=document.getElementById("productID").getAttribute("product_id");window.location.replace("edit-item?uToken="+e+"&productid="+t)}).catch(e=>{console.log(e)})}function toggle_sale(){firebase.auth().currentUser.getIdToken().then(function(e){let t=document.getElementById("productID").getAttribute("product_id"),n=document.getElementById("productID").getAttribute("product_status"),d=document.getElementById("toggleSaleBtn");d.disabled=!0;var r=!0;"on-sale"==n&&(r=!1);let o={prodID:t,authToken:e,targetState:r},s={method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json"}};fetch("toggle-sale-api",s).then(e=>e.json()).then(function(e){if(console.log(e),1==e.success){d.setAttribute("style","background: #00DD00; transition: 0.5s;"),d.innerHTML="Done!";let e=document.getElementById("soldBtn"),t=document.getElementById("editBtn");e.disabled=!0,t.disabled=!0}else d.setAttribute("style","background: red;"),d.innerHTML="ERROR",document.getElementById("api-response").innerHTML="Error: "+e.error,document.getElementById("api-response").setAttribute("style","display: block")}).catch(e=>{d.setAttribute("style","background: red;"),d.innerHTML="ERROR",document.getElementById("api-response").innerHTML="Error: "+e,document.getElementById("api-response").setAttribute("style","display: block")})})}function mark_as_sold(){firebase.auth().currentUser.getIdToken().then(function(t){let n=document.getElementById("productID").getAttribute("product_id"),d=document.getElementById("soldBtn");let r={prodID:n,authToken:t},o={method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}};fetch("sold-api",o).then(e=>e.json()).then(function(t){if(1==t.success){d.setAttribute("style","background: #00DD00; width:200px;"),d.innerHTML="Sold!",d.disabled=!0;let e=document.getElementById("toggleSaleBtn"),t=document.getElementById("editBtn");e.disabled=!0,t.disabled=!0}else d.setAttribute("style","background: red;"),d.innerHTML="ERROR",document.getElementById("api-response").innerHTML="Error: "+e,document.getElementById("api-response").setAttribute("style","display: block")}).catch(e=>{d.setAttribute("style","background: red;"),d.innerHTML="ERROR",document.getElementById("api-response").innerHTML="Error: "+e,document.getElementById("api-response").setAttribute("style","display: block")})})}function my_product(e){firebase.auth().currentUser.getIdToken().then(function(t){window.location.replace("my-product?uToken="+t+"&productid="+e)}).catch(e=>{console.log(e)})}function my_products(){firebase.auth().currentUser.getIdToken().then(function(e){window.location.replace("my-products?uToken="+e)}).catch(e=>{console.log(e)})}function showShipField(){document.getElementById("shippingaddressbutton").setAttribute("style","display:none;"),document.getElementById("shippingaddressinput").setAttribute("style","display:block;"),showUserShippingAddress()}function showUserShippingAddress(){firebase.auth().currentUser.getIdToken().then(function(e){let t={authToken:e},n={method:"POST",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}};fetch("shipping-adress-get-api",n).then(e=>e.json()).then(function(e){e.success?document.getElementById("shippingaddressinput").value=e.address:(document.getElementById("api-response").innerHTML="Error: "+e.error,document.getElementById("api-response").setAttribute("style","display: block"),document.getElementById("shippingaddressinput").value="",document.getElementById("shippingaddressinput").placeholder="Can't retrieve current shipping address")})})}function addShippingAddress(){let e=document.getElementById("shippingaddressinput").value;firebase.auth().currentUser.getIdToken().then(function(t){let n={authToken:t,address:e},d={method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}};fetch("shipping-adress-edit-api",d).then(e=>e.json()).then(function(e){e.success?(document.getElementById("shippingaddressinput").value="",document.getElementById("shippingaddressinput").placeholder="Success!"):(document.getElementById("api-response").innerHTML="Error: "+e.error,document.getElementById("api-response").setAttribute("style","display: block"),document.getElementById("shippingaddressinput").value="",document.getElementById("shippingaddressinput").placeholder="ERROR!")})})}function search(e){window.location.replace("search?search="+e)}function u_r_submit(){let e=document.getElementById("u-r-btn");"Submit!"==e.innerHTML?(e.disabled=!0,firebase.auth().currentUser?firebase.auth().currentUser.getIdToken().then(function(t){let n=document.getElementById("f-name"),d=document.getElementById("l-name"),r=document.getElementById("u-address"),o=n.value,s=d.value,i=r.value,l=document.getElementById("imgInput"),u=l.files[0].name,c=l.files[0],a={authToken:t,data:{fName:o,lName:s,address:i,pPic:u}},p={method:"POST",body:JSON.stringify(a),headers:{"Content-Type":"application/json"}};fetch("register-new-user-api",p).then(e=>e.json()).then(function(t){if(t.success){let n=firebase.storage().ref(t.imgRef);e.innerHTML="Uploading...",e.disabled=!0,n.put(c).then(function(){e.setAttribute("style","background: #00FF00; width: 100%; transition: 0.5s;"),e.innerHTML="Success! Go Home...",e.disabled=!1}).catch(t=>{e.setAttribute("style","background: red;"),e.innerHTML="ERROR",e.disabled=!1,document.getElementById("api-response").innerHTML="Error: "+t,document.getElementById("api-response").setAttribute("style","display: block")})}else e.setAttribute("style","background: red;"),e.innerHTML="ERROR",e.disabled=!1,document.getElementById("api-response").innerHTML="Error: "+t.error,document.getElementById("api-response").setAttribute("style","display: block")})}).catch(t=>{e.setAttribute("style","background: red;"),e.innerHTML="AUTH!!!",document.getElementById("api-response").innerHTML="Error: "+t,document.getElementById("api-response").setAttribute("style","display: block")}):(e.setAttribute("style","background: red;"),e.disabled=!1,e.innerHTML="ERROR!",document.getElementById("api-response").innerHTML="Error: Please log in",document.getElementById("api-response").setAttribute("style","display: block"))):window.location.replace("home")}function initFileDropListner(){let e=document.getElementById("dropzone");if(e){let t=document.getElementById("imgInput");e.ondragover=function(){return this.className="dropzone dragover",!1},e.ondragleave=function(){return this.className="dropzone",!1},e.onclick=function(){t.click()},t.onchange=function(e){fileAddSequence(e.target.files[0])},e.ondrop=function(e){e.preventDefault(),this.className="dropzone",fileAddSequence(e.dataTransfer.files[0])}}}function fileAddSequence(e){let t=document.getElementById("imgInput");if(["image/jpeg","image/png","image/gif"].includes(e.type)){if(e.size/1024/1024<10){t.files[0]=e;let n=document.getElementById("imgPreview"),d=document.getElementById("svgElement");n.src=URL.createObjectURL(e),n.setAttribute("style","display: block;"),d.setAttribute("style","display: none;")}else document.getElementById("api-response").innerHTML="Files under 10MB please...",document.getElementById("api-response").setAttribute("style","display: block")}else document.getElementById("api-response").innerHTML="Accepted formats: jpeg/jpg, png, gif",document.getElementById("api-response").setAttribute("style","display: block")}updateImgs(),initFileDropListner();try{var addressField=document.getElementById("shippingaddressinput");addressField.addEventListener("keyup",function(e){13===e.keyCode&&(e.preventDefault(),"Success!"==addressField.value||""==addressField.value?(addressField.value="",addressField.blur()):(addShippingAddress(),addressField.blur()))})}catch(e){}function bSearch(){let e=document.getElementById("sfield");""==e.value?e.blur():search(e.value)}try{let e=document.getElementById("sfield");e.addEventListener("keyup",function(t){13===t.keyCode&&(t.preventDefault(),""==e.value?e.blur():search(e.value))})}catch(e){}try{document.getElementById("u-address").addEventListener("keyup",function(e){13===e.keyCode&&(e.preventDefault(),document.getElementById("u-r-btn").click())})}catch(e){}window.addEventListener("dragover",function(e){"dropzone"!=e.target.id&&(e.preventDefault(),e.dataTransfer.effectAllowed="none",e.dataTransfer.dropEffect="none")}),window.addEventListener("drop",function(e){"dropzone"!=e.target.id&&(e.preventDefault(),e.dataTransfer.effectAllowed="none",e.dataTransfer.dropEffect="none")}); \ No newline at end of file diff --git a/functions/views/js/fdb.src.js b/functions/views/js/fdb.src.js new file mode 100644 index 0000000..e922b53 --- /dev/null +++ b/functions/views/js/fdb.src.js @@ -0,0 +1,518 @@ +// https://javascript-minifier.com +function checkFields() { + if (document.getElementById('pName').value && document.getElementById('pDesc').value + && document.getElementById('pLoc').value && document.getElementById('pPrice').value + && document.getElementById('imgInput').files[0]) { + return true + } + return false +} + +async function productSubmitEventHandler(){ + const submitBtn = document.getElementById('pSend') + if (submitBtn.innerHTML == "Submit!") { + if (checkFields()) { + submitBtn.innerHTML = "Uploading..." + submitBtn.disabled = true + + let newProduct = {id: 1,name: "",desc: "",img: "default.png",location: "",stock: 1,status: "on-sale",price: 0,owner: "",holder: ""} + + const nameField = document.getElementById('pName') + const descField = document.getElementById('pDesc') + const locField = document.getElementById('pLoc') + const stockField = document.getElementById('pStock') + const priceField = document.getElementById('pPrice') + let fInput = document.getElementById('imgInput') + + let uid = firebase.auth().currentUser.uid + + newProduct.id = 999 + newProduct.name = nameField.value + newProduct.desc = descField.value + newProduct.location = locField.value + if (stockField.value) {newProduct.stock = stockField.value} + newProduct.price = priceField.value + newProduct.owner = uid + newProduct.holder = uid + + let image = fInput.files[0] + + let imageName = fInput.files[0].name + let imagePackage = {name:imageName, b64:null} + + firebase.auth().currentUser.getIdToken().then(function(idToken){ + let url = 'new-product-api' + let data = {authToken: idToken, product: newProduct, image: imagePackage} + let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + if (result.success) { + let imageRef = firebase.storage().ref(result.imgRef) + imageRef.put(image).then(function(){ + submitBtn.innerHTML = "Done! Go Home..." + submitBtn.disabled = false + submitBtn.setAttribute('style', 'background:#00FF55; transition:0.5s; width:162%;') + }) + .catch(e=>{ + submitBtn.innerHTML = "Error..." + submitBtn.setAttribute('style', 'color:red;') + document.getElementById("api-response").innerHTML = "Error: " + e + document.getElementById("api-response").setAttribute("style", "display: block") + }) + } + else { + submitBtn.innerHTML = "Error..." + submitBtn.setAttribute('style', 'color:red;') + document.getElementById("api-response").innerHTML = "Error: " + result.error + document.getElementById("api-response").setAttribute("style", "display: block") + } + }) + }) + } else { + document.getElementById("api-response").innerHTML = "Fill in all required fields!" + document.getElementById("api-response").setAttribute("style", "display: block") + } + } else { + window.location.replace('home') + } +} + +function productUpdateEventHandler() { + const submitBtn = document.getElementById('pSend') + if (submitBtn.innerHTML == "Update") { + const nameField = document.getElementById('pName') + const descField = document.getElementById('pDesc') + const locField = document.getElementById('pLoc') + const stockField = document.getElementById('pStock') + const priceField = document.getElementById('pPrice') + + const item_id_element = document.getElementById("productID") + const item_id = item_id_element.getAttribute("product_id") + + submitBtn.innerHTML = "Updating..." + submitBtn.disabled = true + + updates = {name: nameField.value, desc: descField.value, location: locField.value, stock: stockField.value, price: priceField.value} + + firebase.auth().currentUser.getIdToken().then(function(idToken){ + let url = 'update-product-api' + let data = {authToken: idToken, product: updates, productID: item_id} + let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + if (result.success) { + submitBtn.setAttribute("style", "width: 310px; background: #00DD00;cursor: pointer;") + submitBtn.innerHTML = "Done!, Go Home..." + submitBtn.disabled = false + } + else { + submitBtn.innerHTML = "Error..." + submitBtn.setAttribute('style', 'color:red;') + document.getElementById("api-response").innerHTML = "Error: " + result.error + document.getElementById("api-response").setAttribute("style", "display: block") + } + }) + }) + } + else { + window.location.replace('home') + } +} + +function updateImgs() { + const storage = firebase.storage() + const imgRef = storage.ref() + + var images = document.getElementsByClassName('dyn-img') + // console.log(images) + Array.from(images).forEach((image) => { + var pathReference = imgRef.child(image.title) + pathReference.getDownloadURL().then(function(url) {image.src = url}).catch(e => {console.log(e.message)}) + }) +} +updateImgs() + +function requestItem(){ + const reqBtn = document.getElementById('req-btn') + const bMessage = document.getElementById('bMsg') + if (reqBtn.innerHTML == "Request!") { + if (firebase.auth().currentUser) { + reqBtn.setAttribute("style", "background: #87e5ff; width:300px;") + reqBtn.innerHTML = "Send?" + bMessage.setAttribute('style', 'display: block;') + } else { + reqBtn.innerHTML = "Please sign in" + reqBtn.setAttribute("style", "background: #FFa5af; width:300px;") + } + } + else if (reqBtn.innerHTML == "Send?") { + if (firebase.auth().currentUser) { + firebase.auth().currentUser.getIdToken().then(function(idToken) { + reqBtn.innerHTML = "Sending..." + reqBtn.disabled = true + let userMessage = bMessage.value + let item_id = document.getElementById("productID").getAttribute("product_id") + const url = 'request-api' + let data = {prodID: item_id, authToken: idToken, usrMsg: userMessage} + let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + console.log(result) + if (result.success == true) { + reqBtn.setAttribute("style", "background: #00DD00; width:520px; transition: 0.7s;") + reqBtn.innerHTML = "Done! Go Home" + reqBtn.disabled = false + } + else { + reqBtn.setAttribute("style", "background: red;") + reqBtn.disabled = true + reqBtn.innerHTML = "ERROR" + document.getElementById("api-response").innerHTML = "Error: " + result.error + document.getElementById("api-response").setAttribute("style", "display: block") + } + }) + }) + } else { + reqBtn.innerHTML = "Please sign in" + } + } + else { + window.location.replace('home') + } +} + +function edit_item() { + firebase.auth().currentUser.getIdToken().then(function(idToken) { + var item_id_element = document.getElementById("productID") + var item_id = item_id_element.getAttribute("product_id") + window.location.replace("edit-item?uToken=" + idToken + '&productid=' + item_id) + }) + .catch(e => {console.log(e)}) +} + +function toggle_sale() { + firebase.auth().currentUser.getIdToken().then(function(idToken) { + let item_id = document.getElementById("productID").getAttribute("product_id") + let item_status = document.getElementById("productID").getAttribute("product_status") + let toggle_sale_btn = document.getElementById("toggleSaleBtn") + toggle_sale_btn.disabled = true + var toggle_status = true + if (item_status == 'on-sale') {toggle_status = false} + const url = 'toggle-sale-api' + let data = {prodID: item_id, authToken: idToken, targetState: toggle_status} + let postData = { method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + console.log(result) + if (result.success == true) { + toggle_sale_btn.setAttribute("style", "background: #00DD00; transition: 0.5s;") + toggle_sale_btn.innerHTML = "Done!" + let sold_btn = document.getElementById("soldBtn") + let edit_button = document.getElementById("editBtn") + sold_btn.disabled = true + edit_button.disabled = true + } else { + toggle_sale_btn.setAttribute("style", "background: red;") + toggle_sale_btn.innerHTML = "ERROR" + document.getElementById("api-response").innerHTML = "Error: " + result.error + document.getElementById("api-response").setAttribute("style", "display: block") + } + }) + .catch (e=>{ + toggle_sale_btn.setAttribute("style", "background: red;") + toggle_sale_btn.innerHTML = "ERROR" + document.getElementById("api-response").innerHTML = "Error: " + e + document.getElementById("api-response").setAttribute("style", "display: block") + }) + }) +} + +function mark_as_sold(){ + firebase.auth().currentUser.getIdToken().then(function(idToken) { + let item_id = document.getElementById("productID").getAttribute("product_id") + let sold_btn = document.getElementById("soldBtn") + const url = 'sold-api' + let data = {prodID: item_id, authToken: idToken} + let postData = { method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + if (result.success == true) { + sold_btn.setAttribute("style", "background: #00DD00; width:200px;") + sold_btn.innerHTML = "Sold!" + sold_btn.disabled = true + let sale_button = document.getElementById("toggleSaleBtn") + let edit_button = document.getElementById("editBtn") + sale_button.disabled = true + edit_button.disabled = true + } + else { + sold_btn.setAttribute("style", "background: red;") + sold_btn.innerHTML = "ERROR" + document.getElementById("api-response").innerHTML = "Error: " + e + document.getElementById("api-response").setAttribute("style", "display: block") + } + }) + .catch (e=>{ + sold_btn.setAttribute("style", "background: red;") + sold_btn.innerHTML = "ERROR" + document.getElementById("api-response").innerHTML = "Error: " + e + document.getElementById("api-response").setAttribute("style", "display: block") + }) + }) +} + +function my_product(productID) { + firebase.auth().currentUser.getIdToken().then(function(idToken) { + window.location.replace("my-product?uToken=" + idToken + '&productid=' + productID) + }) + .catch(e => {console.log(e)}) +} + +function my_products() { + firebase.auth().currentUser.getIdToken().then(function(idToken) { + window.location.replace("my-products?uToken=" + idToken) + }) + .catch(e => {console.log(e)}) +} + +function showShipField(){ + document.getElementById('shippingaddressbutton').setAttribute("style", "display:none;") + document.getElementById('shippingaddressinput').setAttribute("style", "display:block;") + showUserShippingAddress() +} + +function showUserShippingAddress(){ + firebase.auth().currentUser.getIdToken().then(function(idToken){ + let url = 'shipping-adress-get-api' + let data = {authToken: idToken} + let postData = {method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + if (result.success) { + document.getElementById("shippingaddressinput").value = result.address + } + else { + document.getElementById("api-response").innerHTML = "Error: " + result.error + document.getElementById("api-response").setAttribute("style", "display: block") + document.getElementById("shippingaddressinput").value = "" + document.getElementById("shippingaddressinput").placeholder = "Can't retrieve current shipping address" + } + }) + }) +} + +function addShippingAddress(){ + let newAddress = document.getElementById('shippingaddressinput').value + firebase.auth().currentUser.getIdToken().then(function(idToken){ + let url = 'shipping-adress-edit-api' + let data = {authToken: idToken, address: newAddress} + let postData = {method: 'POST', body: JSON.stringify(data),headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + if (result.success) { + document.getElementById("shippingaddressinput").value = "" + document.getElementById("shippingaddressinput").placeholder = "Success!" + } + else { + document.getElementById("api-response").innerHTML = "Error: " + result.error + document.getElementById("api-response").setAttribute("style", "display: block") + document.getElementById("shippingaddressinput").value = "" + document.getElementById("shippingaddressinput").placeholder = "ERROR!" + } + }) + }) +} + +function search(keywords){ + window.location.replace('search?search='+keywords) +} + +function u_r_submit(){ + let submitBtn = document.getElementById('u-r-btn') + if (submitBtn.innerHTML == "Submit!") { + submitBtn.disabled = true + if (firebase.auth().currentUser) { + firebase.auth().currentUser.getIdToken().then(function(idToken){ + let firstNameField = document.getElementById('f-name') + let lastNameField = document.getElementById('l-name') + let addressField = document.getElementById('u-address') + let fName = firstNameField.value + let lName = lastNameField.value + let address = addressField.value + let fInput = document.getElementById('imgInput') + let picName = fInput.files[0].name + let image = fInput.files[0] + let userData = {fName:fName, lName:lName, address:address, pPic:picName} + let url = 'register-new-user-api' + let data = {authToken: idToken, data: userData} + let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}} + fetch(url, postData) + .then(response => response.json()) + .then(function(result){ + if (result.success) { + let imageRef = firebase.storage().ref(result.imgRef) + submitBtn.innerHTML = "Uploading..." + submitBtn.disabled = true + imageRef.put(image).then(function(){ + submitBtn.setAttribute("style", "background: #00FF00; width: 100%; transition: 0.5s;") + submitBtn.innerHTML = "Success! Go Home..." + submitBtn.disabled = false + }) + .catch(e=>{ + submitBtn.setAttribute("style", "background: red;") + submitBtn.innerHTML = "ERROR" + submitBtn.disabled = false + document.getElementById("api-response").innerHTML = "Error: " + e + document.getElementById("api-response").setAttribute("style", "display: block") + }) + } + else { + submitBtn.setAttribute("style", "background: red;") + submitBtn.innerHTML = "ERROR" + submitBtn.disabled = false + document.getElementById("api-response").innerHTML = "Error: " + result.error + document.getElementById("api-response").setAttribute("style", "display: block") + } + }) + }) + .catch(e=>{ + submitBtn.setAttribute("style", "background: red;") + submitBtn.innerHTML = "AUTH!!!" + document.getElementById("api-response").innerHTML = "Error: " + e + document.getElementById("api-response").setAttribute("style", "display: block") + }) + } else { + submitBtn.setAttribute("style", "background: red;") + submitBtn.disabled = false + submitBtn.innerHTML = "ERROR!" + document.getElementById("api-response").innerHTML = "Error: Please log in" + document.getElementById("api-response").setAttribute("style", "display: block") + } + } else { + window.location.replace('home') + } +} + +function initFileDropListner() { + let dropZone = document.getElementById("dropzone") + if (dropZone) { + let fInput = document.getElementById('imgInput') + dropZone.ondragover = function(){this.className = "dropzone dragover";return false} + dropZone.ondragleave = function(){this.className = "dropzone";return false} + dropZone.onclick = function(){ + fInput.click() + } + fInput.onchange = function(event) { + let addedFile = event.target.files[0] + fileAddSequence(addedFile) + } + dropZone.ondrop = function(event) { + event.preventDefault() + this.className = "dropzone" + let droppedFile = event.dataTransfer.files[0] + fileAddSequence(droppedFile) + } + } +} + +initFileDropListner() + +function fileAddSequence(file){ + let fInput = document.getElementById('imgInput') + if (["image/jpeg", "image/png", "image/gif"].includes(file.type)) { + let fileSize = file.size / 1024 / 1024 + if (fileSize < 10){ + fInput.files[0] = file + let imgPreview = document.getElementById('imgPreview') + let svgElement = document.getElementById('svgElement') + imgPreview.src = URL.createObjectURL(file) + imgPreview.setAttribute('style', 'display: block;') + svgElement.setAttribute('style', 'display: none;') + } else { + document.getElementById("api-response").innerHTML = "Files under 10MB please..." + document.getElementById("api-response").setAttribute("style", "display: block") + } + } else { + document.getElementById("api-response").innerHTML = "Accepted formats: jpeg/jpg, png, gif" + document.getElementById("api-response").setAttribute("style", "display: block") + } +} + +try { + var addressField = document.getElementById("shippingaddressinput") + addressField.addEventListener("keyup", function(event) { + if (event.keyCode === 13) { + event.preventDefault() + if (addressField.value == "Success!" || addressField.value == ""){ + addressField.value = "" + addressField.blur() + } + else { + addShippingAddress() + addressField.blur() + } + } + }) +} +catch(error) {} + +function bSearch(){ + let searchField = document.getElementById("sfield") + if (searchField.value == ""){ + searchField.blur() + } + else { + search(searchField.value) + } +} + + +try { + let searchField = document.getElementById("sfield") + searchField.addEventListener("keyup", function(event) { + if (event.keyCode === 13) { + event.preventDefault() + if (searchField.value == ""){ + searchField.blur() + } + else { + search(searchField.value) + } + } + }) +} +catch(error) {} + +try { + let regAddressField = document.getElementById("u-address") + regAddressField.addEventListener("keyup", function(event) { + if (event.keyCode === 13) { + event.preventDefault() + document.getElementById("u-r-btn").click() + } + }) +} +catch(error) {} + +window.addEventListener("dragover", function(e) { + if (e.target.id != "dropzone") { + e.preventDefault() + e.dataTransfer.effectAllowed = "none" + e.dataTransfer.dropEffect = "none" + } +}) + +window.addEventListener("drop", function(e) { + if (e.target.id != "dropzone") { + e.preventDefault() + e.dataTransfer.effectAllowed = "none" + e.dataTransfer.dropEffect = "none" + } +}) \ No newline at end of file