From 42280f6cc1cea9946d3430de70c939ccc7692291 Mon Sep 17 00:00:00 2001 From: charlie roberts Date: Mon, 7 Sep 2020 10:34:42 -0400 Subject: [PATCH 1/7] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 304a16f1..b5f0d390 100755 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ Assignment 2 - Short Stack: Basic Two-tier Web Application using HTML/CSS/JS and Node.js === -Due: September 9th, by 11:59 AM. +Due: September 16th, by 11:59 AM. This assignment aims to introduce you to the concepts and practice involved in creating a prototype (i.e. not deployment ready) two-tiered web application. The baseline aims of this assignment involve creating an application that demonstrates the use of several specific pieces of HTML, CSS, JavaScript, and Node.js functionality. -Another aim of this assignment is to establish creative boundaries in which you and your partner can explore designing, implementing, and evaluating usable, useful, novel, and technically efficient web applications. Baseline Requirements --- @@ -30,7 +29,7 @@ Your application is required to demonstrate the use of the following concepts: HTML: - One or more [HTML Forms](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms), with any combination of form tags appropriate for the user input portion of the application - - Clarification: the results page can be implemented in any way. `
`s, `table`s, and `list`s are common choices +- A results page displaying all data currently available on the server. You will most likely use a `` tag for this, but `
` tag for this, but `
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

l#NBhm629sGJHj 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 + + + + CS4241 Assignment 2 + + + + +

+
+
+

Your Class Roster:

+ + + + + + + + + + + + +
First NameLast NameGrade# AccidentsD.O.G. (Date of Graduaton)
+
+ + diff --git a/public/student.html b/public/student.html new file mode 100644 index 00000000..056b0e8a --- /dev/null +++ b/public/student.html @@ -0,0 +1,96 @@ + + + + + CS4241 Assignment 2 + + + + +
+ + +
+ +
+
+
+

Your Class Roster:

+ + + + + + + + + + + + +
First NameLast NameGrade# AccidentsD.O.G. (Date of Graduaton)
+
+ + + \ No newline at end of file diff --git a/server.improved.js b/server.improved.js index 26673fc0..d43dc88d 100644 --- a/server.improved.js +++ b/server.improved.js @@ -25,7 +25,23 @@ const handleGet = function( request, response ) { if( request.url === '/' ) { sendFile( response, 'public/index.html' ) - }else{ + } + else if( request.url === '/professorData') { + var data = '{ "students" : [' + + '{ "firstName":"Rory" , "lastName":"Sullivan" , "Grade":"Senior" , "Accidents":"0" , "DOG":"2021" },' + + '{ "firstName":"Patrick" , "lastName":"Star" , "Grade":"Junior" , "Accidents":"2" , "DOG":"2022" },' + + '{ "firstName":"Spongebob" , "lastName":"Squarepants" , "Grade":"Junior" , "Accidents":"102" , "DOG":"2022" },' + + '{ "firstName":"Sandy" , "lastName":"Cheeks" , "Grade":"Senior" , "Accidents":"0" , "DOG":"2021" },' + + '{ "firstName":"Plankton" , "lastName":"Lawrence" , "Grade":"Freshman" , "Accidents":"4" , "DOG":"2024" },' + + '{ "firstName":"Eugene" , "lastName":"Krabs" , "Grade":"Sophmore" , "Accidents":"3" , "DOG":"2023" },' + + '{ "firstName":"Pearl" , "lastName":"Krabs" , "Grade":"Freshman" , "Accidents":"1" , "DOG":"2024" },' + + '{ "firstName":"Squidward" , "lastName":"Tentacles" , "Grade":"Senior" , "Accidents":"1" , "DOG":"2021" }]}'; + var jsonData = JSON.parse(data); + + response.writeHead(200, {'Content-type': 'text/plain'}) + response.end(JSON.stringify(jsonData)); + } + else{ sendFile( response, filename ) } } @@ -43,7 +59,7 @@ const handlePost = function( request, response ) { // ... do something with the data here!!! response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) - response.end() + response.end(dataString); }) } From b4bd858680b396350f40f4941b46de82fb1660e4 Mon Sep 17 00:00:00 2001 From: Rory Sullivan Date: Wed, 16 Sep 2020 15:17:59 -0400 Subject: [PATCH 6/7] Completed Completed --- Pallette.PNG | Bin 0 -> 6663 bytes README.md | 115 +++++++++++------------------------------- public/css/style.css | 5 ++ public/css/style1.css | 4 ++ public/index.html | 2 +- public/professor.html | 4 ++ public/student.html | 72 +++++++++++++------------- server.improved.js | 51 ++++++++++++++----- 8 files changed, 118 insertions(+), 135 deletions(-) create mode 100644 Pallette.PNG diff --git a/Pallette.PNG b/Pallette.PNG new file mode 100644 index 0000000000000000000000000000000000000000..79804c20c9c741c33987b3de34b854b190b6efa8 GIT binary patch literal 6663 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 3945c152..36154199 100755 --- a/README.md +++ b/README.md @@ -1,93 +1,36 @@ Assignment 2 - Short Stack: Basic Two-tier Web Application using HTML/CSS/JS and Node.js -=== - -Due: September 16th, by 11:59 PM. - -This assignment aims to introduce you to the concepts and practice involved in creating a prototype (i.e. not deployment ready) two-tiered web application. The baseline aims of this assignment involve creating an application that demonstrates the use of several specific pieces of HTML, CSS, JavaScript, and Node.js functionality. - -Baseline Requirements ---- - -Note that there is a very large range of application areas and possibilities that meet these baseline requirements. Make your application do something useful! A todo list, storing / retrieving high scores for a very simple game, have a little fun with it. - -Your application is required to implement the following functionalities: - -- a `Server` which not only serves files, but also maintains a tabular dataset with 3 or more fields related to your application -- a `Results` functionality which shows the entire dataset residing in the server's memory -- a `Form/Entry` functionality which allows a user to add, modify, or delete data items residing in the server's memory -- a `Server Logic` which, upon receiving new or modified "incoming" data, includes and uses a function that adds at least one additional derived field to this incoming data before integrating it with the existing dataset -- the `Derived field` for a new row of data must be computed based on fields already existing in the row. For example, a `todo` dataset with `task`, `priority`, and `creation_date` may generate a new field `deadline` by looking at `creation_date` and `priority` - -Your application is required to demonstrate the use of the following concepts: - -HTML: -- One or more [HTML Forms](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms), with any combination of form tags appropriate for the user input portion of the application -- A results page displaying all data currently available on the server. You will most likely use a `` tag for this, but `
    ` could also work and might be simpler to work with. -- All pages should [validate](https://validator.w3.org) - -CSS: -- CSS styling of the primary visual elements in the application -- Various CSS Selector functionality must be demonstrated: - - Element selectors - - ID selectors - - Class selectors -- CSS positioning and styling of the primary visual elements in the application: - - Use of either a CSS grid or flexbox for layout - - Rules defining fonts for all text used; no default fonts! Be sure to use a web safe font or a font from a web service like [Google Fonts](http://fonts.google.com/) - -- CSS defined in a maintainable, readable form, in external stylesheets - -JavaScript: -- At minimum, a small amount of front-end JavaScript to get / fetch data from the server; a sample is provided in this repository. - -Node.js: -- An HTTP Server that delivers all necessary files and data for the application. A starting point is provided in this repository. - -Deliverables ---- - -Do the following to complete this assignment and acheive a base grade of 85%: - -1. Fork the starting project code (make sure to fork the 2020 repo!). This repo contains some starter code that may be used or discarded as needed. -2. Implement your project with the above requirements. -3. Test your project to make sure that when someone goes to your main page, it displays correctly. -4. Deploy your project to Glitch, and fill in the appropriate fields in your package.json file. -5. Ensure that your project has the proper naming scheme `a2-yourname` so we can find it. -6. Modify the README to the specifications below. -7. Create and submit a Pull Request to the original repo. Label the pull request as follows: a2-gitusername-firstname-lastname - -Acheivements ---- - -Below are suggested technical and design achievements. You can use these to help boost your grade up to an A and customize the assignment to your personal interests. These are recommended acheivements, but feel free to create/implement your own... just make sure you thoroughly describe what you did in your README and why it was challenging. ALL ACHIEVEMENTS MUST BE DESCRIBED IN YOUR README IN ORDER TO GET CREDIT FOR THEM. - -*Technical* -- (10 points) Create a single-page app that both provides a form for users to submit data and always shows the current state of the server-side data. To put it another way, when the user submits data, the server should respond sending back the updated data (including the derived field calculated on the server) and the client should then update its data display. - -*Design/UX* -- (5 points per person, with a max of 10 points) Test your user interface with other students in the class. Define a specific task for them to complete (ideally something short that takes <10 minutes), and then use the [think-aloud protocol](https://en.wikipedia.org/wiki/Think_aloud_protocol) to obtain feedback on your design (talk-aloud is also find). Important considerations when designing your study: - -1. Make sure you start the study by clearly stating the task that you expect your user to accomplish. -2. You shouldn't provide any verbal instructions on how to use your interface / accomplish the task you give them. Make sure that your interface is clear enough that users can figure it out without any instruction, or provide text instructions from within the interface itself. -3. If users get stuck to the point where they give up, you can then provde instruction so that the study can continue, but make sure to discuss this in your README. You won't lose any points for this... all feedback is good feedback! - -You'll need to use sometype of collaborative software that will enable you both to see the test subject's screen and listen to their voice as they describe their thoughts. After completing each study, briefly (one to two sentences for each question) address the following in your README: - -1. Provide the last name of each student you conduct the evaluation with. -2. What problems did the user have with your design? -3. What comments did they make that surprised you? -4. What would you change about the interface based on their feedback? - -*You do not need to actually make changes based on their feedback*. This acheivement is designed to help gain experience testing user interfaces. If you run two user studies, you should answer two sets of questions. - -Sample Readme (delete the above when you're ready to submit, and modify the below so with your links and descriptions) ---- ## Your Web Application Title -Include a very brief summary of your project here. Be sure to include the CSS positioning technique you used, and any required instructions to use your application. +My application is a website for Mrs. Puffs boating school. The front page allows you to choose professor +or student. If you choose professor, you will go to a new webpage with a table of all your students in your +class along with information about them. If you go back and choose student, the new page allows you to enroll +in a class by typing your name. This will display temporarily in the table. However, if you then go back to the +professor page, the professors table has been updated to show a new list of all students in the class, including +whoever had just enrolled. ## Technical Achievements -- **Tech Achievement 1**: Using a combination of... +- **Tech Achievement 1**: Create a single-page app that both provides a form for users to submit data and +always shows the current state of the server-side data. To put it another way, when the user submits data, +the server should respond sending back the updated data (including the derived field calculated on the server) +and the client should then update its data display. ### Design/Evaluation Achievements -- **Design Achievement 1**: +- **Design Achievement 1**: Test your user interface with other students in the class. Define a specific task +for them to complete (enroll a student in a class, ensure success from professors end), and then use the +think-aloud protocol to obtain feedback on your design (talk-aloud is also find). +Provide the last name of each student you conduct the evaluation with. +* Reardon +* Parker +* Morrissey +What problems did the user have with your design? +Originally, the number of car accidents was a decimal number, which is impossible. This has been fixed. The user +found it easy to navigate the site, however suggested a back button instead of using the browsers back button. This +is something that I would implement if given more time. +What comments did they make that surprised you? +They really liked the fact that I had a title page. This is something that I thought many people would have, however +neither Reardon or Morrissey did, so this was a unique feature to them. They also enjoyed that if the user doesnt put +in, for example their last name, the application will catch this and fill the table in with "No Last Name Given". +What would you change about the interface based on their feedback? +If given more time, I would add a back button to my interface to make navigation between pages easier, as mentioned + previously. +- **Design Achievement 2**: I used a color pallete found online in my website. It can be found in the files. \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css index ab174232..475be28a 100755 --- a/public/css/style.css +++ b/public/css/style.css @@ -9,6 +9,10 @@ z-index: 100; } +body{ + font-family: 'Kumbh Sans', sans-serif; +} + #login-content { position: absolute; left: 50%; @@ -28,6 +32,7 @@ } #login-content h1 { + font-family: 'Kumbh Sans', sans-serif; margin: auto; line-height:51px; horizontal-align:middle; diff --git a/public/css/style1.css b/public/css/style1.css index 1e10a262..1d5aa018 100644 --- a/public/css/style1.css +++ b/public/css/style1.css @@ -18,6 +18,10 @@ z-index: -1; } +body{ + font-family: 'Kumbh Sans', sans-serif; +} + #results { margin: 20px; min-height: 100%; diff --git a/public/index.html b/public/index.html index 75c81a8b..4df3ed4d 100755 --- a/public/index.html +++ b/public/index.html @@ -5,7 +5,7 @@ CS4241 Assignment 2 - + diff --git a/public/professor.html b/public/professor.html index dab39d9b..22881a08 100644 --- a/public/professor.html +++ b/public/professor.html @@ -5,12 +5,14 @@ CS4241 Assignment 2 +

    Your Class Roster:

    +

    Students:

@@ -47,6 +49,8 @@

Your Class Roster:

accidents.innerHTML = obj.Accidents; dog.innerHTML = obj.DOG; console.log(obj.firstName); + + document.getElementById("studentNum").innerHTML = "Students: " + (document.getElementById("results").rows.length - 1); }); }) } diff --git a/public/student.html b/public/student.html index 056b0e8a..52db0809 100644 --- a/public/student.html +++ b/public/student.html @@ -5,17 +5,19 @@ CS4241 Assignment 2 + - - +

Enter your first and last name to enroll:

+ +
-

Your Class Roster:

+
@@ -27,37 +29,6 @@

Your Class Roster:

-
# Accidents D.O.G. (Date of Graduaton)
@@ -67,7 +38,7 @@

Your Class Roster:

// prevent default form action from being carried out e.preventDefault() - const input = document.querySelector( '#yourname' ), + const input = document.querySelector( '#yourfname' ), json = { yourname: input.value }, body = JSON.stringify( json ) @@ -80,8 +51,37 @@

Your Class Roster:

return response.text() }) .then( function(text){ + + var row = document.getElementById("results").insertRow(1); + + var fn = row.insertCell(0); + var ln = row.insertCell(1); + var grade = row.insertCell(2); + var accidents = row.insertCell(3); + var dog = row.insertCell(4); + + var json = JSON.parse(text); + var res = json.yourname.split(" "); + if(res.length <= 0) { + fn.innerHTML = "No Name Given"; + ln.innerHTML = "No Last Name Given"; + } + else if(res.length == 1){ + fn.innerHTML = res[0]; + ln.innerHTML = "No Last Name Given"; + } + else { + fn.innerHTML = res[0]; + ln.innerHTML = res[1]; + } + grade.innerHTML = "Freshman"; + accidents.innerHTML = Math.round(Math.random() * Math.floor(20)); + var yog = new Date().getFullYear(); + dog.innerHTML = yog; + console.log(obj.firstName); + document.getElementById("header").innerHTML = text; - console.log(text); + // console.log(text); }) return false diff --git a/server.improved.js b/server.improved.js index d43dc88d..e27dc48a 100644 --- a/server.improved.js +++ b/server.improved.js @@ -1,3 +1,13 @@ +var data = '{ "students" : [' + + '{ "firstName":"Rory" , "lastName":"Sullivan" , "Grade":"Senior" , "Accidents":"0" , "DOG":"2021" },' + + '{ "firstName":"Patrick" , "lastName":"Star" , "Grade":"Junior" , "Accidents":"2" , "DOG":"2022" },' + + '{ "firstName":"Spongebob" , "lastName":"Squarepants" , "Grade":"Junior" , "Accidents":"102" , "DOG":"2022" },' + + '{ "firstName":"Sandy" , "lastName":"Cheeks" , "Grade":"Senior" , "Accidents":"0" , "DOG":"2021" },' + + '{ "firstName":"Plankton" , "lastName":"Lawrence" , "Grade":"Freshman" , "Accidents":"4" , "DOG":"2024" },' + + '{ "firstName":"Eugene" , "lastName":"Krabs" , "Grade":"Sophmore" , "Accidents":"3" , "DOG":"2023" },' + + '{ "firstName":"Pearl" , "lastName":"Krabs" , "Grade":"Freshman" , "Accidents":"1" , "DOG":"2024" },' + + '{ "firstName":"Squidward" , "lastName":"Tentacles" , "Grade":"Senior" , "Accidents":"1" , "DOG":"2021" }]}'; + const http = require( 'http' ), fs = require( 'fs' ), // IMPORTANT: you must run `npm install` in the directory for this assignment @@ -27,15 +37,6 @@ const handleGet = function( request, response ) { sendFile( response, 'public/index.html' ) } else if( request.url === '/professorData') { - var data = '{ "students" : [' + - '{ "firstName":"Rory" , "lastName":"Sullivan" , "Grade":"Senior" , "Accidents":"0" , "DOG":"2021" },' + - '{ "firstName":"Patrick" , "lastName":"Star" , "Grade":"Junior" , "Accidents":"2" , "DOG":"2022" },' + - '{ "firstName":"Spongebob" , "lastName":"Squarepants" , "Grade":"Junior" , "Accidents":"102" , "DOG":"2022" },' + - '{ "firstName":"Sandy" , "lastName":"Cheeks" , "Grade":"Senior" , "Accidents":"0" , "DOG":"2021" },' + - '{ "firstName":"Plankton" , "lastName":"Lawrence" , "Grade":"Freshman" , "Accidents":"4" , "DOG":"2024" },' + - '{ "firstName":"Eugene" , "lastName":"Krabs" , "Grade":"Sophmore" , "Accidents":"3" , "DOG":"2023" },' + - '{ "firstName":"Pearl" , "lastName":"Krabs" , "Grade":"Freshman" , "Accidents":"1" , "DOG":"2024" },' + - '{ "firstName":"Squidward" , "lastName":"Tentacles" , "Grade":"Senior" , "Accidents":"1" , "DOG":"2021" }]}'; var jsonData = JSON.parse(data); response.writeHead(200, {'Content-type': 'text/plain'}) @@ -47,6 +48,7 @@ const handleGet = function( request, response ) { } const handlePost = function( request, response ) { + let dataString = '' request.on( 'data', function( data ) { @@ -54,10 +56,35 @@ const handlePost = function( request, response ) { }) request.on( 'end', function() { - console.log( JSON.parse( dataString ) ) - + console.log( JSON.parse( dataString )) + + var obj = JSON.parse(data); + + var fn; + var ln; + var json = JSON.parse( dataString ); + var res = json.yourname.split(" "); + if(res.length <= 0) { + fn = "No first name given" + ln = "No last name given" + } + else if(res.length == 1){ + fn = res[0]; + ln = "No Last Name Given"; + } + else { + fn = res[0]; + ln = res[1]; + } + + var yog = new Date().getFullYear(); + + var newStr = {"firstName":fn , "lastName":ln , "Grade":"Freshman" , "Accidents":Math.round(Math.random() * Math.floor(20)) , "DOG":yog}; + + + obj['students'].push(newStr); + data = JSON.stringify(obj); // ... do something with the data here!!! - response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) response.end(dataString); }) From 945684c7ac4350e630c1a1fd1a50ce23f1a6844a Mon Sep 17 00:00:00 2001 From: rorysully <37385264+rorysully@users.noreply.github.com> Date: Wed, 16 Sep 2020 15:21:53 -0400 Subject: [PATCH 7/7] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 36154199..b27143e1 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Assignment 2 - Short Stack: Basic Two-tier Web Application using HTML/CSS/JS and Node.js -## Your Web Application Title +## https://a2-rorysully-rory-sullivan.glitch.me/ My application is a website for Mrs. Puffs boating school. The front page allows you to choose professor or student. If you choose professor, you will go to a new webpage with a table of all your students in your class along with information about them. If you go back and choose student, the new page allows you to enroll @@ -33,4 +33,4 @@ in, for example their last name, the application will catch this and fill the ta What would you change about the interface based on their feedback? If given more time, I would add a back button to my interface to make navigation between pages easier, as mentioned previously. -- **Design Achievement 2**: I used a color pallete found online in my website. It can be found in the files. \ No newline at end of file +- **Design Achievement 2**: I used a color pallete found online in my website. It can be found in the files.