diff --git a/README.md b/README.md
index 304a16f1..cb6a0a07 100755
--- a/README.md
+++ b/README.md
@@ -1,89 +1,21 @@
Assignment 2 - Short Stack: Basic Two-tier Web Application using HTML/CSS/JS and Node.js
===
+## Work-Play Balance
-Due: September 9th, by 11:59 AM.
+The website intends to help user find a balance between work and leisure tasks in their day. It helps to combat a
+person's unhealthy tendency to either work, or stay unproductive for a long period of time. The website has a table
+showing their list of tasks and a single bar visualization to show the work-play ratio on that day. These address
+the problem as intended as they help keep track of the user's tasks. Possible future plans for this include displaying
+more interactive visualizations related to the results.
-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
----
-
-Note that there is a very large range of application areas and possibilities that meet these baseline requirements.
-Games, internet of things, organizational tools, commerce, media - all are possibilities with a two-tiered form-focused web application.
-
-Do not limit yourselves to any of the examples given below.
-Examples like the upcoming `efficiency_ratio` idea for the `cars` dataset are meant to be illustrative and easy to understand.
-They are not intended to be sensible or useful ideas.
-
-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 `cars` dataset with `year`, `horsepower`, and `fuel_efficiency` may create a new field `efficiency_ratio` by dividing `fuel_efficiency` by `horsepower`
-
-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
-
-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 sizing of the primary visual elements in the application:
- - CSS to cause at least one element to be horizontally centered on the page
- - CSS to cause at least one pair of elements to appear side-by-side
- - 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:
-
-1. Fork the starting project code. 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
-
-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.
-Images are encouraged, along with concise, high-level text.
-
-Here is a sample formula for summarizing your activities, talk about:
-- the domain area the project pertains to
-- the main challenges or problems the application addresses
-- the key innovations that make it possible to address the problem
-- the main results of the implementation, does it really address the problem?
-- any additional implications of the resulting application, or possibly areas for future work that have been discovered as part of the design and implementation activities
-
-(Note that when I use the above formula, I aim to have only one sentence per thought in order to remain concise.)
-
-http://a2-charlieroberts.glitch.me
+https://a2-rkayastha98.glitch.me/
## Technical Achievements
-- **Tech Achievement 1**: Using a combination of...
-- **Tech Achievement 2**: ...
+- **Tech Achievement 1**: Used an html form to add in a task
+- **Tech Achievement 2**: I have code to update an array on the server side every time a new task is added and then
+ displays the results of the current dataset in three different forms;I have code to delete an array of the server side on the click of a button for any row on
+ the tables, and changes the displays subsequently.
### Design/Evaluation Achievements
-- **Design Achievement 1**: Shown in `style.css`, the code...
-- **Design Achievement 2**: We tested the application with n=X users, finding that...
+- **Design Achievement 1**: Used google fonts for the heading and the table fonts; Used css in a separate stylesheet
+- **Design Achievement 2**: Used gridbox, justify-content, and align items to align all contents on the webpage; Used element selectors, id selectors, class selectors, and relative selectors for the css
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..0bb7e544
--- /dev/null
+++ b/index.html
@@ -0,0 +1,307 @@
+
+
+
+ CS4241 Assignment 2
+
+
+
+
+
+
+
+
+
+
+ Work-Play Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Time
+
Event
+
+
+
+
+
00:00
+
+
+
+
01:00
+
+
+
+
02:00
+
+
+
+
03:00
+
+
+
+
04:00
+
+
+
+
05:00
+
+
+
+
06:00
+
+
+
+
07:00
+
+
+
+
08:00
+
+
+
+
09:00
+
+
+
+
10:00
+
+
+
+
11:00
+
+
+
+
12:00
+
+
+
+
13:00
+
+
+
+
14:00
+
+
+
+
15:00
+
+
+
+
16:00
+
+
+
+
17:00
+
+
+
+
18:00
+
+
+
+
19:00
+
+
+
+
20:00
+
+
+
+
21:00
+
+
+
+
22:00
+
+
+
+
23:00
+
+
+
+
+
+
+ History
+
+
+
+
+
+
+
+
+
+
+
Event Name
+
Event Description
+
Start Time
+
Duration
+
Type
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package.json b/package.json
index 988f135f..5005a35a 100755
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
{
- "name": "",
- "version": "",
- "description": "",
- "author": "",
+ "name": "Work-Play Balance",
+ "version": "1.0",
+ "description": "Application to keep track of tasks",
+ "author": "Rimsha Kayastha",
"scripts": {
"start": "node server.improved.js"
},
diff --git a/public/css/style.css b/public/css/style.css
index d5f842ab..7cee9259 100755
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -1 +1,108 @@
-/*Style your own assignment! This is fun! */
\ No newline at end of file
+/*Style your own assignment! This is fun! */
+body{
+ background-color:aliceblue;
+}
+
+#addBox{
+ padding: 10px;
+ box-shadow: 2px 5px 5px saddlebrown;
+ border: solid darksalmon;
+ background-color: darksalmon;
+}
+
+header{
+ color: white;
+ font-family: "Aclonica";
+ font-size: 100px;
+ text-align: center;
+
+}
+
+#pBar {
+ background-color: #20201F;
+ border-radius: 5px; /* (heightOfInnerDiv / 2) + padding */
+ padding: 4px;
+}
+
+#prog{
+ background-color: darksalmon;
+ width: 50%;
+ /* Adjust with JavaScript */
+ height: 50px;
+ border-radius: 2px;
+}
+
+.tg {border-collapse:collapse;border-spacing:0;}
+.tg td{border-color: lightskyblue;border-style:solid;border-width:5px;font-family:Arial, sans-serif;font-size:14px;
+ overflow:hidden;padding:20px 10px;word-break:normal;}
+.tg th{border-color: lightskyblue;border-style:solid;border-width:5px;font-family:Arial, sans-serif;font-size:14px;
+ font-weight:normal;overflow:hidden;padding:20px 10px;word-break:normal;}
+.tg .tg-cly1{text-align:center;vertical-align:middle; font-family: 'Andika';font-size:15px}
+.tg .tg-0lax{text-align:center;vertical-align:top;font-family: 'Andika';font-size:15px}
+
+
+/* width */
+::-webkit-scrollbar {
+ width: 20px;
+}
+
+/* Track */
+::-webkit-scrollbar-track {
+ box-shadow: inset 0 0 5px grey;
+ border-radius: 5px;
+}
+
+/* Handle */
+::-webkit-scrollbar-thumb {
+ background: darksalmon;
+ border-radius: 5px;
+}
+
+/* Handle on hover */
+::-webkit-scrollbar-thumb:hover {
+ background: #b30000;
+}
+
+#add_box:hover{
+ color: #b30000;
+}
+
+.item1{grid-area: header;}
+.item2{grid-area: menu;}
+.item3{grid-area: right;}
+.item4{grid-area: main;}
+
+.grid-container{
+ display: grid;
+ grid-template-areas:
+ 'header header header header header header'
+ 'menu main main main main right'
+ 'menu main main main main right';
+ grid-gap: 10px;
+ padding: 10px;
+}
+
+button{
+ background-color: darksalmon;
+ color: white;
+ padding: 10px;
+ width: 13vw;
+}
+
+.item2{
+ background-color: darksalmon;
+ text-align:center;
+ display:flex;
+ align-content:space-between;
+ justify-content:space-between;
+ flex-direction:column;
+ width: 15vw;
+ margin: 15px;
+ box-shadow: 2px 5px 5px saddlebrown;
+ border: solid darksalmon;
+}
+
+.item2 > button{
+ background-color: white;
+ color: darksalmon;
+}
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
deleted file mode 100755
index c56d620e..00000000
--- a/public/index.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- CS4241 Assignment 2
-
-
-
-
-
-
-
diff --git a/public/js/scripts.js b/public/js/scripts.js
index de052eae..4baffe64 100755
--- a/public/js/scripts.js
+++ b/public/js/scripts.js
@@ -1,3 +1,37 @@
-// Add some Javascript code here, to run on the front end.
+console.log("Welcome to assignment 2!")
-console.log("Welcome to assignment 2!")
\ No newline at end of file
+var addBox=document.getElementById("addBox")
+var cal=document.getElementById("cal")
+var hist=document.getElementById("hist")
+var today=document.getElementById("today")
+var prog=document.getElementById("playProg")
+
+document.getElementById("addBtn").addEventListener("click",function () {
+ if (addBox.style.visibility === 'hidden') {
+ addBox.style.visibility = 'visible';
+ const button = document.querySelector( '#submit' )
+ button.onclick = submit
+ } else {
+ addBox.style.visibility = 'hidden';
+ }
+
+})
+
+document.getElementById("history").addEventListener("click",function () {
+ hist.style.display = 'inline';
+ cal.style.display="none";
+ prog.style.display='none'
+ document.getElementById("mainContainer").style.overflowY="hidden"
+})
+
+document.getElementById("today").addEventListener("click", function () {
+ cal.style.display='inline'
+ hist.style.display='none'
+ prog.style.display='none'
+ document.getElementById("mainContainer").style.overflowY="scroll"
+})
+
+document.getElementById("progress").addEventListener("click", function () {
+ playProg()
+ document.getElementById("mainContainer").style.overflowY="hidden"
+})
diff --git a/server.improved.js b/server.improved.js
index 26673fc0..a23d3e0b 100644
--- a/server.improved.js
+++ b/server.improved.js
@@ -1,27 +1,24 @@
const http = require( 'http' ),
- fs = require( 'fs' ),
- // IMPORTANT: you must run `npm install` in the directory for this assignment
- // to install the mime library used in the following line of code
- mime = require( 'mime' ),
- dir = 'public/',
- port = 3000
-
-const appdata = [
- { 'model': 'toyota', 'year': 1999, 'mpg': 23 },
- { 'model': 'honda', 'year': 2004, 'mpg': 30 },
- { 'model': 'ford', 'year': 1987, 'mpg': 14}
-]
+ fs = require( 'fs' ),
+ // IMPORTANT: you must run `npm install` in the directory for this assignment
+ // to install the mime library used in the following line of code
+ mime = require( 'mime' ),
+ url = require('url'),
+ dir = 'public/',
+ port = 3000
+
+var calArray=[]
const server = http.createServer( function( request,response ) {
if( request.method === 'GET' ) {
- handleGet( request, response )
+ handleGet( request, response )
}else if( request.method === 'POST' ){
- handlePost( request, response )
+ handlePost( request, response )
}
})
const handleGet = function( request, response ) {
- const filename = dir + request.url.slice( 1 )
+ const filename = dir + request.url.slice( 1 )
if( request.url === '/' ) {
sendFile( response, 'public/index.html' )
@@ -32,41 +29,67 @@ const handleGet = function( request, response ) {
const handlePost = function( request, response ) {
let dataString = ''
-
- request.on( 'data', function( data ) {
- dataString += data
- })
-
- request.on( 'end', function() {
- console.log( JSON.parse( dataString ) )
-
- // ... do something with the data here!!!
-
- response.writeHead( 200, "OK", {'Content-Type': 'text/plain' })
- response.end()
- })
+
+ switch(request.url){
+ case '/submit':
+ request.on( 'data', function( data ) {
+ dataString += data
+ })
+
+ request.on( 'end', function() {
+ var obj=JSON.parse( dataString )
+
+ var hh=(parseInt(obj["eventETime"].substring(0,2))-parseInt((obj["eventSTime"]).substring(0,2)))*60
+ var mm=parseInt((obj["eventETime"]).substring(3,5))-parseInt((obj["eventSTime"]).substring(3,5))
+
+ obj["duration"]= (hh+mm).toString()
+
+ calArray.push(obj)
+
+ response.writeHead( 200, "OK", {'Content-Type': 'text/plain' })
+ response.end(JSON.stringify(calArray[calArray.length-1]))
+ })
+
+
+ break;
+ case '/delete':
+ request.on( 'data', function( data ) {
+ dataString += data
+ })
+
+ request.on( 'end', function() {
+ // var obj=JSON.parse( dataString )
+
+ response.writeHead( 200, "OK", {'Content-Type': 'text/plain' })
+ response.end()
+ })
+
+ delete calArray[parseInt(dataString)]
+ break;
+ }
}
+
const sendFile = function( response, filename ) {
- const type = mime.getType( filename )
+ const type = mime.getType( filename )
- fs.readFile( filename, function( err, content ) {
+ fs.readFile( filename, function( err, content ) {
- // if the error = null, then we've loaded the file successfully
- if( err === null ) {
+ // if the error = null, then we've loaded the file successfully
+ if( err === null ) {
- // status code: https://httpstatuses.com
- response.writeHeader( 200, { 'Content-Type': type })
- response.end( content )
+ // status code: https://httpstatuses.com
+ response.writeHeader( 200, { 'Content-Type': type })
+ response.end( content )
- }else{
+ }else{
- // file not found, error code 404
- response.writeHeader( 404 )
- response.end( '404 Error: File Not Found' )
+ // file not found, error code 404
+ response.writeHeader( 404 )
+ response.end( '404 Error: File Not Found' )
- }
- })
+ }
+ })
}
-server.listen( process.env.PORT || port )
+server.listen( process.env.PORT || port )
\ No newline at end of file
diff --git a/shrinkwrap.yaml b/shrinkwrap.yaml
new file mode 100644
index 00000000..f6d7ea4f
--- /dev/null
+++ b/shrinkwrap.yaml
@@ -0,0 +1,15 @@
+dependencies:
+ mime: 2.4.6
+packages:
+ /mime/2.4.6:
+ dev: false
+ engines:
+ node: '>=4.0.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==
+registry: 'https://registry.npmjs.org/'
+shrinkwrapMinorVersion: 9
+shrinkwrapVersion: 3
+specifiers:
+ mime: ^2.4.4