diff --git a/HelloWeb/build.xml b/HelloWeb/build.xml new file mode 100644 index 0000000000000000000000000000000000000000..21452eab775d5660008b4984bf8560036a951e1a --- /dev/null +++ b/HelloWeb/build.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See commented blocks below for --> +<!-- some examples of how to customize the build. --> +<!-- (If you delete it and reopen the project it will be recreated.) --> +<!-- By default, only the Clean and Build commands use this build script. --> +<!-- Commands such as Run, Debug, and Test only use this build script if --> +<!-- the Compile on Save feature is turned off for the project. --> +<!-- You can turn off the Compile on Save (or Deploy on Save) setting --> +<!-- in the project's Project Properties dialog box.--> +<project name="HelloWeb" default="default" basedir="."> + <description>Builds, tests, and runs the project HelloWeb.</description> + <import file="nbproject/build-impl.xml"/> + <!-- + + There exist several targets which are by default empty and which can be + used for execution of your tasks. These targets are usually executed + before and after some main targets. They are: + + -pre-init: called before initialization of project properties + -post-init: called after initialization of project properties + -pre-compile: called before javac compilation + -post-compile: called after javac compilation + -pre-compile-single: called before javac compilation of single file + -post-compile-single: called after javac compilation of single file + -pre-compile-test: called before javac compilation of JUnit tests + -post-compile-test: called after javac compilation of JUnit tests + -pre-compile-test-single: called before javac compilation of single JUnit test + -post-compile-test-single: called after javac compilation of single JUunit test + -pre-dist: called before archive building + -post-dist: called after archive building + -post-clean: called after cleaning build products + -pre-run-deploy: called before deploying + -post-run-deploy: called after deploying + + Example of pluging an obfuscator after the compilation could look like + + <target name="-post-compile"> + <obfuscate> + <fileset dir="${build.classes.dir}"/> + </obfuscate> + </target> + + For list of available properties check the imported + nbproject/build-impl.xml file. + + + Other way how to customize the build is by overriding existing main targets. + The target of interest are: + + init-macrodef-javac: defines macro for javac compilation + init-macrodef-junit: defines macro for junit execution + init-macrodef-debug: defines macro for class debugging + do-dist: archive building + run: execution of project + javadoc-build: javadoc generation + + Example of overriding the target for project execution could look like + + <target name="run" depends="<PROJNAME>-impl.jar"> + <exec dir="bin" executable="launcher.exe"> + <arg file="${dist.jar}"/> + </exec> + </target> + + Notice that overridden target depends on jar target and not only on + compile target as regular run target does. Again, for list of available + properties which you can use check the target you are overriding in + nbproject/build-impl.xml file. + + --> +</project> diff --git a/HelloWeb/web/js/.gitkeep b/HelloWeb/web/js/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/HelloWeb/web/js/app.js b/HelloWeb/web/js/app.js new file mode 100644 index 0000000000000000000000000000000000000000..dbea0f5c367dec9b0cb20f3b11c4ce40644838a3 --- /dev/null +++ b/HelloWeb/web/js/app.js @@ -0,0 +1,102 @@ +function loginValidation() { + var username = document.forms["loginform"]["username"]; + var pwd = document.forms["loginform"]["password"]; + var usrVerify = Validate(username, "empty"); + var pwdVerify = Validate(pwd, "empty"); + return (usrVerify && pwdVerify); +} + +function editProfileValidation() { + var name = document.forms["editprofile-form"]["your-name"]; + var phone = document.forms["editprofile-form"]["phone-number"]; + var nameVerify = Validate(name, "empty", 0, 20, "length"); + var phoneVerify = Validate(phone, "empty", 9, 12, "length"); + return (nameVerify && phoneVerify); +} + +function Validate(inputArea, type1, min = 0, max = 0, type2 = null, type3 = null) { + var error = GetErrorMessage(inputArea.value, type1, min, max); + if(error === "") { + if (type2 != null) { + error = GetErrorMessage(inputArea.value, type2, min, max); + console.log(type2 + "length"); + } + if (error === "") { + if (type3 != null) { + error = GetErrorMessage(inputArea.value, type3, min, max); + } + } + } + if(error !== "" && inputArea.nextElementSibling === null) { + var errorEl = document.createElement("p"); + errorEl.innerHTML = error; + errorEl.className = "error"; + insertAfterElement(errorEl, inputArea); + + inputArea.addEventListener("blur", function() { + var error = GetErrorMessage(inputArea.value, type1, min, max); + if(error === "") { + if (type2 != null) { + error = GetErrorMessage(inputArea.value, type2, min, max); + } + if (error === "") { + if (type3 != null) { + error = GetErrorMessage(inputArea.value, type3, min, max); + } + } + } + if (error === ""){ + this.nextSibling.remove(); + } + },true); + } + return (error === ""); +} + +function insertAfterElement(el, src) { + src.parentNode.insertBefore(el, src.nextSibling); +} + + +function GetErrorMessage(textArea, type, min = 0, max = 0) { + var validateText = ""; + switch(type) { + case "empty" : + if(isEmpty(textArea)) { + validateText = "Fill in the field"; + } + break; + case "email" : + if(!isEmail(textArea)) { + validatedText = "Invalid Email Address"; + } + break; + case "number" : + if(isNumber(textArea)){ + validateText = "Fill in with only number"; + } + break; + case "length" : + if (!isLengthEqual(textArea,min,max)){ + validateText = "Character must be between " + min.toString() + " and " + max.toString() + " long"; + } + break; + } + return validateText; +} + +function isEmpty(textArea) { + return (textArea.match(/^s+$/) || textArea == ""); +} + +function isNumber(textArea) { + return (!isNaN(textArea)); +} + +function isLengthEqual(textArea, min, max){ + return (textArea.length >= min && textArea.length <= max); +} + +function isEmail(textArea) { + return (textArea.match(/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/)); +} \ No newline at end of file diff --git a/HelloWeb/web/js/history.js b/HelloWeb/web/js/history.js new file mode 100644 index 0000000000000000000000000000000000000000..4e4b3f528dfb96a699cdbb10ad6ba0b731005f5a --- /dev/null +++ b/HelloWeb/web/js/history.js @@ -0,0 +1,41 @@ + +function tabActive(tag) { + var tabUser = document.getElementById('user-his'); + var tabDriver = document.getElementById('driver-his'); + var order = document.getElementsByClassName('order-list'); + var driver = document.getElementsByClassName('driver-list'); + + if (tag == 'user') { + order[0].classList.add("active-list"); + driver[0].classList.remove("active-list"); + tabUser.classList.add('active'); + tabDriver.classList.remove('active'); + } + else { + driver[0].classList.add("active-list"); + order[0].classList.remove("active-list"); + tabDriver.classList.add('active'); + tabUser.classList.remove('active'); + } +} + +tabActive('user'); + +function hideThis(user) { + updateHide(user); + console.log(user[0]); +} + +function updateHide(history) +{ + var data = "user=" + history[0] + "&driver=" + history[1] + "&date=" + history[4]; + var xhr; + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + } else if (window.ActiveXObject) { + xhr = new ActiveXObject("Microsoft.XMLHTTP"); + } + xhr.open("GET", "/history/update", true); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(data); +} \ No newline at end of file diff --git a/HelloWeb/web/js/selectdriver.js b/HelloWeb/web/js/selectdriver.js new file mode 100644 index 0000000000000000000000000000000000000000..2d7b38f4833461051ad76f37a3eac112a88b0156 --- /dev/null +++ b/HelloWeb/web/js/selectdriver.js @@ -0,0 +1,97 @@ +var prefDriver = document.getElementById("pref-driver"); +var otherDriver = document.getElementById("other-driver"); +var driverSumRating = []; +var driverCountRating = []; +var driverNameList = []; + +for (var i = 0; i < driverArr.length; i++) { + for(var j = 0; j < ratingArr.length; j++) { + if(driverArr[i] === ratingArr[j]["usernameDriver"]){ + driverSumRating[driverArr[i]] = (driverSumRating[driverArr[i]] === undefined) ? parseFloat(ratingArr[j]["rating"]) : driverSumRating[driverArr[i]] + parseFloat(ratingArr[j]["rating"]); + driverCountRating[driverArr[i]] = (driverCountRating[driverArr[i]] === undefined) ? 1 : driverCountRating[driverArr[i]]+1; + } + } + for(var k = 0; k < driverNameArr.length; k++) { + if(driverArr[i] === driverNameArr[k]["username"]){ + driverNameList[driverArr[i]] = driverNameArr[k]["fullname"]; + break; + } + } +} + +for(var j = 0; j < ratingArr.length; j++) { + if(preferredDriver === ratingArr[j]["usernameDriver"]){ + driverSumRating[preferredDriver] = (driverSumRating[preferredDriver] === undefined) ? parseFloat(ratingArr[j]["rating"]) : driverSumRating[preferredDriver] + parseFloat(ratingArr[j]["rating"]); + driverCountRating[preferredDriver] = (driverCountRating[preferredDriver] === undefined) ? 1 : driverCountRating[preferredDriver]+1; + } +} +for(var k = 0; k < driverNameArr.length; k++) { + if(preferredDriver === driverNameArr[k]["username"]){ + driverNameList[preferredDriver] = driverNameArr[k]["fullname"]; + break; + } +} + +if(preferredDriver !== "") { + CreateDriverDisplay(prefDriver, preferredDriver); +} else { + CreateNotFoundDisplay(prefDriver); +} + +if(driverArr.length > 0) { + for (var i = 0; i < driverArr.length; i++) { + CreateDriverDisplay(otherDriver, driverArr[i]); + } +} else { + CreateNotFoundDisplay(otherDriver); +} + +function CreateDriverDisplay(driverType, driverUsrName) { + var newForm = driverType.appendChild(document.createElement("form")); + var newContainer = newForm.appendChild(document.createElement("div")); + var newImg = newContainer.appendChild(document.createElement("img")); + var newName = newContainer.appendChild(document.createElement("div")); + var newRating = newContainer.appendChild(document.createElement("div")); + var postUsrName = newContainer.appendChild(document.createElement("input")); + var newPickLoc = newContainer.appendChild(document.createElement("input")); + var newDest = newContainer.appendChild(document.createElement("input")); + var newBtn = newContainer.appendChild(document.createElement("input")); + + + var avgRating = (driverSumRating[driverUsrName]/driverCountRating[driverUsrName]).toFixed(1).toString(); + + newForm.setAttribute('method', 'post'); + newForm.setAttribute('action', '/order/' + user + '/completeorder'); + newContainer.classList.add("driver-content"); + + newImg.classList.add("driver-pic"); + newImg.setAttribute('src', '/public/img/' + driverUsrName); + + newName.classList.add("driver-name-disp"); + newName.innerHTML = driverNameList[driverUsrName]; + + newRating.classList.add("driver-rating-disp"); + newRating.innerHTML = "★" + avgRating + " <span class='vote-disp'>(" + driverCountRating[driverUsrName] + " votes)</span>"; + + postUsrName.setAttribute('type', 'hidden'); + postUsrName.setAttribute('name', 'driver-username'); + postUsrName.setAttribute('value', driverUsrName); + + newPickLoc.setAttribute('type','hidden'); + newPickLoc.setAttribute('name','pickLoc'); + newPickLoc.setAttribute('value', pickLoc); + newDest.setAttribute('type','hidden'); + newDest.setAttribute('name','dest'); + newDest.setAttribute('value', dest); + + newBtn.classList.add("accept-button"); + newBtn.classList.add("select-driver-btn"); + newBtn.setAttribute('type','submit'); + newBtn.setAttribute('value','Select Driver'); +} + +function CreateNotFoundDisplay(driverType) { + var newContainer = driverType.appendChild(document.createElement("div")); + newContainer.classList.add("driver-not-found"); + newContainer.innerHTML = "Nothing to display."; +} \ No newline at end of file diff --git a/HelloWeb/web/js/signup.js b/HelloWeb/web/js/signup.js new file mode 100644 index 0000000000000000000000000000000000000000..43a9342a95538b30e1b8bf663cf3fc0a0b62718f --- /dev/null +++ b/HelloWeb/web/js/signup.js @@ -0,0 +1,44 @@ +function checkData(name, element) +{ + var data = "?" + name + "=" + document.forms["signupform"][name].value; + var xhr; + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + } else if (window.ActiveXObject) { + xhr = new ActiveXObject("Microsoft.XMLHTTP"); + } + + xhr.open("GET", "/validation" + data, true); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(null); + xhr.onload = function() { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + if (xhr.responseText === 'OK') { + document.getElementById(element).innerHTML = "√"; + } else { + document.getElementById(element).innerHTML = "X"; + } + } + else { + alert('There was a problem with the request.'); + } + } + } +} + +function signupValidation() { + var username = document.forms["signupform"]["username"]; + var password = document.forms["signupform"]["password"]; + var cpassword = document.forms["signupform"]["confirm-password"]; + var email = document.forms["signupform"]["email"]; + var fullname = document.forms["signupform"]["your-name"]; + var phone = document.forms["signupform"]["phone"]; + var usrVerify = Validate(username, "empty"); + var pwdVerify = Validate(password, "empty"); + var cpwdVerify = Validate(cpassword, "empty"); + var emailVerify = Validate(email, "empty", 0, 0, "email"); + var fullnameVerify = Validate(fullname, "empty", 0, 20, "length"); + var phoneVerify = Validate(phone, "empty", 9, 12, "length"); + return (usrVerify && pwdVerify && cpwdVerify && emailVerify && fullnameVerify && phoneVerify); +} \ No newline at end of file