From 7a73162607544204032aa66cce755daf21edebda Mon Sep 17 00:00:00 2001 From: Matt Strapp Date: Tue, 24 May 2022 11:18:46 -0500 Subject: Graduate Signed-off-by: Matt Strapp --- csci4131/hw1/strap012/myContacts.html | 73 +++++++ csci4131/hw1/strap012/myWidgets.html | 33 +++ csci4131/hw2/strap012/MyForm.html | 50 +++++ csci4131/hw2/strap012/carlson.jpg | Bin 0 -> 39588 bytes csci4131/hw2/strap012/gophers-mascot.png | Bin 0 -> 82836 bytes csci4131/hw2/strap012/johnston.jpg | Bin 0 -> 47355 bytes csci4131/hw2/strap012/morrill.jpg | Bin 0 -> 48670 bytes csci4131/hw2/strap012/myContacts.html | 86 ++++++++ csci4131/hw2/strap012/myWidgets.html | 148 ++++++++++++++ csci4131/hw2/strap012/passwordcheck.css | 60 ++++++ csci4131/hw2/strap012/passwordcheck.js | 42 ++++ csci4131/hw2/strap012/shepherd.jpg | Bin 0 -> 675244 bytes csci4131/hw2/strap012/snyder.jpg | Bin 0 -> 45356 bytes csci4131/hw2/strap012/style.css | 61 ++++++ csci4131/hw2/strap012/walter.jpg | Bin 0 -> 150800 bytes csci4131/hw3/strap012/MyForm.html | 55 +++++ csci4131/hw3/strap012/Untitled.png | Bin 0 -> 91 bytes csci4131/hw3/strap012/carlson.jpg | Bin 0 -> 39588 bytes csci4131/hw3/strap012/contacts.js | 221 +++++++++++++++++++++ csci4131/hw3/strap012/gophers-mascot.png | Bin 0 -> 82836 bytes csci4131/hw3/strap012/johnston.jpg | Bin 0 -> 47355 bytes csci4131/hw3/strap012/morrill.jpg | Bin 0 -> 48670 bytes csci4131/hw3/strap012/myContacts.html | 113 +++++++++++ csci4131/hw3/strap012/myWidgets.html | 148 ++++++++++++++ csci4131/hw3/strap012/passwordcheck.css | 60 ++++++ csci4131/hw3/strap012/passwordcheck.js | 42 ++++ csci4131/hw3/strap012/shepherd.jpg | Bin 0 -> 675244 bytes csci4131/hw3/strap012/snyder.jpg | Bin 0 -> 45356 bytes csci4131/hw3/strap012/style.css | 118 +++++++++++ csci4131/hw3/strap012/walter.jpg | Bin 0 -> 150800 bytes csci4131/hw4/strap012/403.html | 11 + csci4131/hw4/strap012/404.html | 11 + csci4131/hw4/strap012/Coffman.html | 14 ++ csci4131/hw4/strap012/Coffman_N_OuttaSpace.html | 27 +++ csci4131/hw4/strap012/MyContacts.html | 114 +++++++++++ csci4131/hw4/strap012/MyForm.html | 56 ++++++ csci4131/hw4/strap012/MyServer.html | 42 ++++ csci4131/hw4/strap012/MyWidgets.html | 149 ++++++++++++++ csci4131/hw4/strap012/OuttaSpace.html | 18 ++ csci4131/hw4/strap012/OuttaSpace.mp3 | Bin 0 -> 735638 bytes csci4131/hw4/strap012/Untitled.png | Bin 0 -> 91 bytes csci4131/hw4/strap012/carlson.jpg | Bin 0 -> 39588 bytes csci4131/hw4/strap012/coffman.jpg | Bin 0 -> 7610 bytes csci4131/hw4/strap012/coffman.png | Bin 0 -> 161853 bytes csci4131/hw4/strap012/contacts.js | 221 +++++++++++++++++++++ csci4131/hw4/strap012/gophers-mascot.png | Bin 0 -> 82836 bytes csci4131/hw4/strap012/johnston.jpg | Bin 0 -> 47355 bytes csci4131/hw4/strap012/morrill.jpg | Bin 0 -> 48670 bytes csci4131/hw4/strap012/passwordcheck.css | 60 ++++++ csci4131/hw4/strap012/passwordcheck.js | 42 ++++ csci4131/hw4/strap012/private.html | 10 + csci4131/hw4/strap012/shepherd.jpg | Bin 0 -> 675244 bytes csci4131/hw4/strap012/snyder.jpg | Bin 0 -> 45356 bytes csci4131/hw4/strap012/strap012.py | 147 ++++++++++++++ csci4131/hw4/strap012/style.css | 118 +++++++++++ csci4131/hw4/strap012/walter.jpg | Bin 0 -> 150800 bytes csci4131/hw5/strap012_hw5/client/addContact.html | 113 +++++++++++ csci4131/hw5/strap012_hw5/client/contacts.html | 73 +++++++ csci4131/hw5/strap012_hw5/client/index.html | 27 +++ csci4131/hw5/strap012_hw5/client/stock.html | 123 ++++++++++++ csci4131/hw5/strap012_hw5/contacts.json | 22 ++ csci4131/hw5/strap012_hw5/createServer.js | 90 +++++++++ csci4131/hw5/strap012_hw5/package.json | 11 + csci4131/hw6/strap012_hw6/README.txt | 2 + csci4131/hw6/strap012_hw6/api/utilities.js | 48 +++++ csci4131/hw6/strap012_hw6/create_accounts_table.js | 41 ++++ csci4131/hw6/strap012_hw6/create_contacts_table.js | 44 ++++ csci4131/hw6/strap012_hw6/dbio.js | 74 +++++++ csci4131/hw6/strap012_hw6/index.js | 109 ++++++++++ .../hw6/strap012_hw6/insert_into_accounts_table.js | 45 +++++ csci4131/hw6/strap012_hw6/login.html | 48 +++++ csci4131/hw6/strap012_hw6/package.json | 18 ++ csci4131/hw6/strap012_hw6/public/addContact.html | 106 ++++++++++ csci4131/hw6/strap012_hw6/public/stock.html | 124 ++++++++++++ csci4131/hw6/strap012_hw6/public/welcome.html | 53 +++++ csci4131/hw7/api/utilities.js | 64 ++++++ csci4131/hw7/create_accounts_table.js | 41 ++++ csci4131/hw7/create_contacts_table.js | 44 ++++ csci4131/hw7/dbconfig.xml | 8 + csci4131/hw7/dbio.js | 136 +++++++++++++ csci4131/hw7/index.js | 109 ++++++++++ csci4131/hw7/insert_into_accounts_table.js | 45 +++++ csci4131/hw7/login.html | 48 +++++ csci4131/hw7/package.json | 21 ++ csci4131/hw7/public/contacts_old.html | 82 ++++++++ csci4131/hw7/public/stock.html | 123 ++++++++++++ csci4131/hw7/public/welcome.html | 53 +++++ csci4131/lec/08ShepherdLabs960.jpg | Bin 0 -> 675244 bytes csci4131/lec/Lec10Ex1.html | 18 ++ csci4131/lec/Lec23Ex1.xml | 5 + csci4131/lec/Lec2Ex1.html | 12 ++ csci4131/lec/Lec3Ex2.html | 32 +++ csci4131/lec/Lec4Ex1.html | 28 +++ csci4131/lec/Lec5Ex1.html | 23 +++ csci4131/lec/Lec6Ex1.html | 39 ++++ csci4131/lec/Lec6Ex2.html | 37 ++++ csci4131/lec/Lec7Ex1.html | 20 ++ csci4131/lec/Lex8Ex1.html | 15 ++ csci4131/lec/gophers-mascot.png | Bin 0 -> 82836 bytes csci4131/lec/lec7big3/CPE.png | Bin 0 -> 4140 bytes csci4131/lec/lec7big3/EPT.png | Bin 0 -> 4319 bytes csci4131/lec/lec7big3/GPP.png | Bin 0 -> 3760 bytes csci4131/lec/lec7big3/GUI.png | Bin 0 -> 4055 bytes csci4131/lec/lec7big3/PERF.png | Bin 0 -> 3282 bytes csci4131/lec/lec7big3/PORT.png | Bin 0 -> 3768 bytes csci4131/lec/lec7big3/RandomPicture.js | 21 ++ csci4131/lec/lec7big3/SEO.png | Bin 0 -> 3862 bytes csci4131/lec/lec7big3/big31.html | 17 ++ csci4131/lec/mystyle8.css | 41 ++++ 109 files changed, 4603 insertions(+) create mode 100644 csci4131/hw1/strap012/myContacts.html create mode 100644 csci4131/hw1/strap012/myWidgets.html create mode 100644 csci4131/hw2/strap012/MyForm.html create mode 100644 csci4131/hw2/strap012/carlson.jpg create mode 100644 csci4131/hw2/strap012/gophers-mascot.png create mode 100644 csci4131/hw2/strap012/johnston.jpg create mode 100644 csci4131/hw2/strap012/morrill.jpg create mode 100644 csci4131/hw2/strap012/myContacts.html create mode 100644 csci4131/hw2/strap012/myWidgets.html create mode 100644 csci4131/hw2/strap012/passwordcheck.css create mode 100644 csci4131/hw2/strap012/passwordcheck.js create mode 100644 csci4131/hw2/strap012/shepherd.jpg create mode 100644 csci4131/hw2/strap012/snyder.jpg create mode 100644 csci4131/hw2/strap012/style.css create mode 100644 csci4131/hw2/strap012/walter.jpg create mode 100644 csci4131/hw3/strap012/MyForm.html create mode 100644 csci4131/hw3/strap012/Untitled.png create mode 100644 csci4131/hw3/strap012/carlson.jpg create mode 100644 csci4131/hw3/strap012/contacts.js create mode 100644 csci4131/hw3/strap012/gophers-mascot.png create mode 100644 csci4131/hw3/strap012/johnston.jpg create mode 100644 csci4131/hw3/strap012/morrill.jpg create mode 100644 csci4131/hw3/strap012/myContacts.html create mode 100644 csci4131/hw3/strap012/myWidgets.html create mode 100644 csci4131/hw3/strap012/passwordcheck.css create mode 100644 csci4131/hw3/strap012/passwordcheck.js create mode 100644 csci4131/hw3/strap012/shepherd.jpg create mode 100644 csci4131/hw3/strap012/snyder.jpg create mode 100644 csci4131/hw3/strap012/style.css create mode 100644 csci4131/hw3/strap012/walter.jpg create mode 100644 csci4131/hw4/strap012/403.html create mode 100644 csci4131/hw4/strap012/404.html create mode 100644 csci4131/hw4/strap012/Coffman.html create mode 100644 csci4131/hw4/strap012/Coffman_N_OuttaSpace.html create mode 100644 csci4131/hw4/strap012/MyContacts.html create mode 100644 csci4131/hw4/strap012/MyForm.html create mode 100644 csci4131/hw4/strap012/MyServer.html create mode 100644 csci4131/hw4/strap012/MyWidgets.html create mode 100644 csci4131/hw4/strap012/OuttaSpace.html create mode 100644 csci4131/hw4/strap012/OuttaSpace.mp3 create mode 100644 csci4131/hw4/strap012/Untitled.png create mode 100644 csci4131/hw4/strap012/carlson.jpg create mode 100644 csci4131/hw4/strap012/coffman.jpg create mode 100644 csci4131/hw4/strap012/coffman.png create mode 100644 csci4131/hw4/strap012/contacts.js create mode 100644 csci4131/hw4/strap012/gophers-mascot.png create mode 100644 csci4131/hw4/strap012/johnston.jpg create mode 100644 csci4131/hw4/strap012/morrill.jpg create mode 100644 csci4131/hw4/strap012/passwordcheck.css create mode 100644 csci4131/hw4/strap012/passwordcheck.js create mode 100644 csci4131/hw4/strap012/private.html create mode 100644 csci4131/hw4/strap012/shepherd.jpg create mode 100644 csci4131/hw4/strap012/snyder.jpg create mode 100644 csci4131/hw4/strap012/strap012.py create mode 100644 csci4131/hw4/strap012/style.css create mode 100644 csci4131/hw4/strap012/walter.jpg create mode 100644 csci4131/hw5/strap012_hw5/client/addContact.html create mode 100644 csci4131/hw5/strap012_hw5/client/contacts.html create mode 100644 csci4131/hw5/strap012_hw5/client/index.html create mode 100644 csci4131/hw5/strap012_hw5/client/stock.html create mode 100644 csci4131/hw5/strap012_hw5/contacts.json create mode 100644 csci4131/hw5/strap012_hw5/createServer.js create mode 100644 csci4131/hw5/strap012_hw5/package.json create mode 100644 csci4131/hw6/strap012_hw6/README.txt create mode 100644 csci4131/hw6/strap012_hw6/api/utilities.js create mode 100644 csci4131/hw6/strap012_hw6/create_accounts_table.js create mode 100644 csci4131/hw6/strap012_hw6/create_contacts_table.js create mode 100644 csci4131/hw6/strap012_hw6/dbio.js create mode 100644 csci4131/hw6/strap012_hw6/index.js create mode 100644 csci4131/hw6/strap012_hw6/insert_into_accounts_table.js create mode 100644 csci4131/hw6/strap012_hw6/login.html create mode 100644 csci4131/hw6/strap012_hw6/package.json create mode 100644 csci4131/hw6/strap012_hw6/public/addContact.html create mode 100644 csci4131/hw6/strap012_hw6/public/stock.html create mode 100644 csci4131/hw6/strap012_hw6/public/welcome.html create mode 100644 csci4131/hw7/api/utilities.js create mode 100644 csci4131/hw7/create_accounts_table.js create mode 100644 csci4131/hw7/create_contacts_table.js create mode 100644 csci4131/hw7/dbconfig.xml create mode 100644 csci4131/hw7/dbio.js create mode 100644 csci4131/hw7/index.js create mode 100644 csci4131/hw7/insert_into_accounts_table.js create mode 100644 csci4131/hw7/login.html create mode 100644 csci4131/hw7/package.json create mode 100644 csci4131/hw7/public/contacts_old.html create mode 100644 csci4131/hw7/public/stock.html create mode 100644 csci4131/hw7/public/welcome.html create mode 100644 csci4131/lec/08ShepherdLabs960.jpg create mode 100644 csci4131/lec/Lec10Ex1.html create mode 100644 csci4131/lec/Lec23Ex1.xml create mode 100644 csci4131/lec/Lec2Ex1.html create mode 100644 csci4131/lec/Lec3Ex2.html create mode 100644 csci4131/lec/Lec4Ex1.html create mode 100644 csci4131/lec/Lec5Ex1.html create mode 100644 csci4131/lec/Lec6Ex1.html create mode 100644 csci4131/lec/Lec6Ex2.html create mode 100644 csci4131/lec/Lec7Ex1.html create mode 100644 csci4131/lec/Lex8Ex1.html create mode 100644 csci4131/lec/gophers-mascot.png create mode 100644 csci4131/lec/lec7big3/CPE.png create mode 100644 csci4131/lec/lec7big3/EPT.png create mode 100644 csci4131/lec/lec7big3/GPP.png create mode 100644 csci4131/lec/lec7big3/GUI.png create mode 100644 csci4131/lec/lec7big3/PERF.png create mode 100644 csci4131/lec/lec7big3/PORT.png create mode 100644 csci4131/lec/lec7big3/RandomPicture.js create mode 100644 csci4131/lec/lec7big3/SEO.png create mode 100644 csci4131/lec/lec7big3/big31.html create mode 100644 csci4131/lec/mystyle8.css (limited to 'csci4131') diff --git a/csci4131/hw1/strap012/myContacts.html b/csci4131/hw1/strap012/myContacts.html new file mode 100644 index 0000000..866b999 --- /dev/null +++ b/csci4131/hw1/strap012/myContacts.html @@ -0,0 +1,73 @@ + + + + + My Contacts + + + + + + +

+

University Contacts

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLocationInformationEmailURL
Joan Gabel100 Church Street SE
202 Morrill Hall
Minneapolis MN 55455
President of the University of Minnesotaupres@umn.eduHome Page
Mostafa Kaveh117 Pleasant St SE
105 Walter Library
Minneapolis MN 55455
Dean of the College of Science and Engineeringmos@umn.eduHome Page
John Coleman101 Pleasant Street SE
215 Johnston Hall
Minneapolis MN 55455
Dean of the College of Liberal Artscoleman@umn.eduHome Page
Valery Forbes1475 Gortner Avenue
123 Snyder Hall
St. Paul MN 55108
Dean of the College of Biological Sciencescbsdeans@umn.eduHome Page
Sri Zaheer321 19th Avenue S
Suite 4-300 Carlson School of Management
Minneapolis MN 55455
Dean of the Carlson School of Managementszaheer@umn.eduHome Page
+ + + + diff --git a/csci4131/hw1/strap012/myWidgets.html b/csci4131/hw1/strap012/myWidgets.html new file mode 100644 index 0000000..9d470e5 --- /dev/null +++ b/csci4131/hw1/strap012/myWidgets.html @@ -0,0 +1,33 @@ + + + + My Widgets + + + + + + +
    +
  1. +
  2. +
  3. +
+ + + + diff --git a/csci4131/hw2/strap012/MyForm.html b/csci4131/hw2/strap012/MyForm.html new file mode 100644 index 0000000..261d8df --- /dev/null +++ b/csci4131/hw2/strap012/MyForm.html @@ -0,0 +1,50 @@ + + + + + + There is no form + + + +
+

Simple Form

+
+

+ + + + + + +

+

+ + +

+
+ diff --git a/csci4131/hw2/strap012/carlson.jpg b/csci4131/hw2/strap012/carlson.jpg new file mode 100644 index 0000000..d82c37c Binary files /dev/null and b/csci4131/hw2/strap012/carlson.jpg differ diff --git a/csci4131/hw2/strap012/gophers-mascot.png b/csci4131/hw2/strap012/gophers-mascot.png new file mode 100644 index 0000000..44e62fa Binary files /dev/null and b/csci4131/hw2/strap012/gophers-mascot.png differ diff --git a/csci4131/hw2/strap012/johnston.jpg b/csci4131/hw2/strap012/johnston.jpg new file mode 100644 index 0000000..b8b7f68 Binary files /dev/null and b/csci4131/hw2/strap012/johnston.jpg differ diff --git a/csci4131/hw2/strap012/morrill.jpg b/csci4131/hw2/strap012/morrill.jpg new file mode 100644 index 0000000..144d458 Binary files /dev/null and b/csci4131/hw2/strap012/morrill.jpg differ diff --git a/csci4131/hw2/strap012/myContacts.html b/csci4131/hw2/strap012/myContacts.html new file mode 100644 index 0000000..c1d9f34 --- /dev/null +++ b/csci4131/hw2/strap012/myContacts.html @@ -0,0 +1,86 @@ + + + + + My Contacts + + + + + + + + + +
+

University Contacts

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCategoryLocationInformationEmailURL
Joan GabelIndustry100 Church Street SE
202 Morrill Hall
Minneapolis MN 55455
President of the University of Minnesota
upres@umn.eduHome Page
Mostafa KavehIndustry117 Pleasant St SE
105 Walter Library
Minneapolis MN 55455
Dean of the College of Science and Engineering
mos@umn.eduHome Page
John ColemanIndustry101 Pleasant Street SE
215 Johnston Hall
Minneapolis MN 55455
Dean of the College of Liberal Arts
coleman@umn.eduHome Page
Valery ForbesIndustry1475 Gortner Avenue
123 Snyder Hall
St. Paul MN 55108
Dean of the College of Biological Sciences
cbsdeans@umn.eduHome Page
Sri ZaheerIndustry321 19th Avenue S
Suite 4-300 Carlson School of Management
Minneapolis MN 55455
Dean of the Carlson School of Management
szaheer@umn.eduHome Page
+
+ Goldy Gopher +
+ + + + diff --git a/csci4131/hw2/strap012/myWidgets.html b/csci4131/hw2/strap012/myWidgets.html new file mode 100644 index 0000000..79fc15e --- /dev/null +++ b/csci4131/hw2/strap012/myWidgets.html @@ -0,0 +1,148 @@ + + + + My Widgets + + + + + + + + +

+ + + + + diff --git a/csci4131/hw2/strap012/passwordcheck.css b/csci4131/hw2/strap012/passwordcheck.css new file mode 100644 index 0000000..beceb1c --- /dev/null +++ b/csci4131/hw2/strap012/passwordcheck.css @@ -0,0 +1,60 @@ +#password{ + margin: 0; + padding: 0; + font-family: 'Raleway', sans-serif; + font-size: 15px; + line-height: 1.5; +} +#container { + width: 535px; + background: #ffffff; + padding: 20px; + margin: 90px auto; + border-radius: 5px; + height: 150px; + border: 2px solid gray; +} +#header { + text-align: center; + background-color: #FEFFED; + border-radius: 5px; + margin: -39px -20px 10px -20px; +} +.password{ + padding-top: 10px; +} +#content { + margin-left: 57px; + margin-top: 40px; +} +#register label{ + margin-right:5px; +} +#register input { + padding: 5px 14px; + border: 1px solid #d5d9da; + box-shadow: 0 0 9px #0E34F5 inset; + width: 272px; + font-size: 1em; + height: 25px; +} +#register .short{ + font-weight:bold; + color:#FF0000; + font-size:larger; +} +#register .weak{ + font-weight:bold; + color:orange; + font-size:larger; +} +#register .good{ + font-weight:bold; + color:#2D98F3; + font-size:larger; +} +#register .strong{ + font-weight:bold; + color: limegreen; + font-size:larger; +} diff --git a/csci4131/hw2/strap012/passwordcheck.js b/csci4131/hw2/strap012/passwordcheck.js new file mode 100644 index 0000000..97a2918 --- /dev/null +++ b/csci4131/hw2/strap012/passwordcheck.js @@ -0,0 +1,42 @@ +var input; +var result = document.querySelector("span"); +window.addEventListener('DOMContentLoaded', (event) => { + input = document.getElementsByName("password")[0]; +}); +function checkStrength() { + var password = input.value; + var strength = 0; + if (password.length < 6) { + result.removeAttribute("class"); + result.classList.add('short'); + result.innerHTML = "Too short"; + return; + } + if (password.length > 7) { strength += 1;} + // If password contains both lower and uppercase characters, increase strength value. + if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) { strength += 1;} + // If it has numbers and characters, increase strength value. + if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) { strength += 1;} + // If it has one special character, increase strength value. + if (password.match(/([!,%,&,@,#,$,^,*,?,_,~])/)) { strength += 1;} + // If it has two special characters, increase strength value. + if (password.match(/(.*[!,%,&,@,#,$,^,*,?,_,~].*[!,%,&,@,#,$,^,*,?,_,~])/)) { strength += 1;} + // Calculated strength value, we can return messages + // If value is less than 2 + if (strength < 2) { + result.removeAttribute("class"); + result.classList.add('weak'); + result.innerHTML = 'Weak'; + return; + } else if (strength == 2) { + result.removeAttribute("class"); + result.classList.add('good'); + result.innerHTML = 'Good'; + return; + } else { + result.removeAttribute("class"); + result.classList.add('strong'); + result.innerHTML = 'Strong'; + return; + } +} diff --git a/csci4131/hw2/strap012/shepherd.jpg b/csci4131/hw2/strap012/shepherd.jpg new file mode 100644 index 0000000..d1262f8 Binary files /dev/null and b/csci4131/hw2/strap012/shepherd.jpg differ diff --git a/csci4131/hw2/strap012/snyder.jpg b/csci4131/hw2/strap012/snyder.jpg new file mode 100644 index 0000000..4531a58 Binary files /dev/null and b/csci4131/hw2/strap012/snyder.jpg differ diff --git a/csci4131/hw2/strap012/style.css b/csci4131/hw2/strap012/style.css new file mode 100644 index 0000000..1f03947 --- /dev/null +++ b/csci4131/hw2/strap012/style.css @@ -0,0 +1,61 @@ +body { + background-color:antiquewhite; +} + +.linkTable { + border: 1px solid black; + margin-left: 20px; + background-color: white; + border-collapse: separate; +} + +.smol { + max-height: 100%; + width: 6em; +} + +#bigboi { + float: right; + height: auto; + max-width: 28%; +} + +.Form { + background-color: whitesmoke; + padding-left: 5%; + max-width: 15%; +} + +.grid { + align-content: center; + display: inline-grid; + grid-template-columns: 40% 40%; + grid-template-rows: 30%; + gap: .1em 10%; +} + +.griditem { + padding: 10%; +} + +table, th, td { + max-width: 90%; + overflow-x:auto; + border: 1px solid black; + border-collapse: collapse; +} +table { + float:left; + max-width: 70%; +} +tr:nth-child(even) { + background-color:blanchedalmond; +} +tr:nth-child(odd) { + background-color: burlywood; +} +iframe { + border: 0px; +} + + diff --git a/csci4131/hw2/strap012/walter.jpg b/csci4131/hw2/strap012/walter.jpg new file mode 100644 index 0000000..37d0d56 Binary files /dev/null and b/csci4131/hw2/strap012/walter.jpg differ diff --git a/csci4131/hw3/strap012/MyForm.html b/csci4131/hw3/strap012/MyForm.html new file mode 100644 index 0000000..4e2760d --- /dev/null +++ b/csci4131/hw3/strap012/MyForm.html @@ -0,0 +1,55 @@ + + + + + + There is no form + + + + +
+

Simple Form

+
+

+ + + + + + +

+

+ + +

+
+
+ + diff --git a/csci4131/hw3/strap012/Untitled.png b/csci4131/hw3/strap012/Untitled.png new file mode 100644 index 0000000..92a4aa1 Binary files /dev/null and b/csci4131/hw3/strap012/Untitled.png differ diff --git a/csci4131/hw3/strap012/carlson.jpg b/csci4131/hw3/strap012/carlson.jpg new file mode 100644 index 0000000..d82c37c Binary files /dev/null and b/csci4131/hw3/strap012/carlson.jpg differ diff --git a/csci4131/hw3/strap012/contacts.js b/csci4131/hw3/strap012/contacts.js new file mode 100644 index 0000000..8518ef6 --- /dev/null +++ b/csci4131/hw3/strap012/contacts.js @@ -0,0 +1,221 @@ +function change(small, row) { + document.getElementsByClassName("smol")[row].src = small; +} +function lucky() { + var image = ["carlson.jpg", "johnston.jpg", "morrill.jpg", "shepherd.jpg", "snyder.jpg", "walter.jpg"]; + document.getElementById("bigboi").src = image[Math.floor(6 * Math.random())]; +} +let isRotating=0; +function dizzy() { + if (!isRotating) { + document.getElementById("bigboi").classList.remove("isntRotating"); + } else { + document.getElementById("bigboi").classList.add("isntRotating"); + } + isRotating^=1; +} +function check(value) { + if(value==="Other") + document.getElementById('others').style.display = 'block'; + else + document.getElementById('others').style.display = 'none'; +} +let map; +var center = { lat: 44.9727, lng: -93.23540000000003 }; +function initMap() { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition( + (position) => { + curLoc = { + lat: position.coords.latitude, + lng: position.coords.longitude, + }; + }, + () => { + alert("Geolocation failed. Directions will not work."); + } + ) + } + map = new google.maps.Map(document.getElementById("map"), { + center: center, + zoom: 14, + }); + + var service = new google.maps.places.PlacesService(map); + entries = document.getElementsByClassName("entry"); + locations = []; + for (e=0; e" + + "" + newEntry.getElementsByClassName("name")[0].textContent + "" + "
" + + newEntry.getElementsByClassName("category")[0].textContent + "
" + + newEntry.getElementsByClassName("room")[0].textContent + " " + newEntry.getElementsByClassName("street")[0].textContent + "
" + + newEntry.getElementsByClassName("city")[0].textContent + + "", + }, + }); + marker.addListener('click', function () { + if (!this.infoWindow) { + this.infoWindow = new google.maps.InfoWindow({ + content: this.data.content, + }); + this.infoWindow.open(map, this); + } + }) + } +} +var service; +var otherRadius; +var searchMarker = []; +function searchPlaces() { + var request; + if (document.getElementById("places").value!="Other") { + request = { + location: center, + radius: document.getElementById("distance").value, + type: document.getElementById("places").value, + }; + service = new google.maps.places.PlacesService(map); + service.nearbySearch(request, (results, status) => { + if (status === google.maps.places.PlacesServiceStatus.OK && results) { + addPointsSearch(results, false); + } + }); + } else { + request = { + location: center, + radius: document.getElementById("distance").value, + query: document.getElementById("others").value, + }; + otherRadius = request.radius; + service = new google.maps.places.PlacesService(map); + service.textSearch(request, (results, status) => { + if (status === google.maps.places.PlacesServiceStatus.OK && results) { + addPointsSearch(results, true); + } + }); + } +} + +function addPointsSearch(locations, isOther) { + deleteMarkers(); + for (x in locations) { + var marker; + if (isOther) { + if (google.maps.geometry.spherical.computeDistanceBetween(locations[x].geometry.location, map.getCenter()) < parseInt(otherRadius)) { + marker = new google.maps.Marker({ + map, + title: locations[x].name, + position: locations[x].geometry.location, + data: { + content: "" + locations[x].name + "" + + "
" + locations[x].formatted_address + }, + }); + } + } else { + marker = new google.maps.Marker({ + map, + title: locations[x].name, + position: locations[x].geometry.location, + data: { + content: "" + locations[x].name + "" + + "
" + locations[x].vicinity + }, + }); + } + if (marker) { + marker.addListener('click', function () { + if (!this.infoWindow) { + this.infoWindow = new google.maps.InfoWindow({ + content: this.data.content, + }); + this.infoWindow.open(map, this); + } + }) + searchMarker.push(marker); + } + + } +} +function deleteMarkers() { + for (let i = 0; i < searchMarker.length; i++) { + searchMarker[i].setMap(null); + } + searchMarker = []; +} + +var curLoc, directionsService, directionsRenderer; +function directions () { + directionsService = new google.maps.DirectionsService(); + directionsRenderer = new google.maps.DirectionsRenderer(); + document.getElementById("transitList").textContent = ""; + directionsRenderer.setPanel(document.getElementById("transitList")); + directionsRenderer.setMap(map); + var selectedMode = document.getElementById('means').value; + var dest = { + query: document.getElementById("destination").value, + fields: ['name', 'geometry'], + }; + service = new google.maps.places.PlacesService(map); + service.findPlaceFromQuery(dest, function (results, status) { + if (status === google.maps.places.PlacesServiceStatus.OK) { + console.log(results); + doDirections(results[0]); + } + }); +} + +function doDirections(input) { + var means; + var mean = document.getElementsByName('means'); + for (var i = 0; i < mean.length; i++) { + if (mean[i].checked) { + means = mean[i].value; + } + } + + var request = { + origin: curLoc, + destination: input.geometry.location, + // Note that JavaScript allows us to access the constant + // using square brackets and a string value as its + // "property." + travelMode: google.maps.TravelMode[means] + }; + directionsService.route(request, function (result, status) { + if (status == 'OK') { + directionsRenderer.setDirections(result); + } + }); +} + +function initForm() { + map = new google.maps.Map(document.getElementById("formap"), { + center: center, + zoom: 14, + }); +} \ No newline at end of file diff --git a/csci4131/hw3/strap012/gophers-mascot.png b/csci4131/hw3/strap012/gophers-mascot.png new file mode 100644 index 0000000..44e62fa Binary files /dev/null and b/csci4131/hw3/strap012/gophers-mascot.png differ diff --git a/csci4131/hw3/strap012/johnston.jpg b/csci4131/hw3/strap012/johnston.jpg new file mode 100644 index 0000000..b8b7f68 Binary files /dev/null and b/csci4131/hw3/strap012/johnston.jpg differ diff --git a/csci4131/hw3/strap012/morrill.jpg b/csci4131/hw3/strap012/morrill.jpg new file mode 100644 index 0000000..144d458 Binary files /dev/null and b/csci4131/hw3/strap012/morrill.jpg differ diff --git a/csci4131/hw3/strap012/myContacts.html b/csci4131/hw3/strap012/myContacts.html new file mode 100644 index 0000000..6e9293d --- /dev/null +++ b/csci4131/hw3/strap012/myContacts.html @@ -0,0 +1,113 @@ + + + + + My Contacts + + + + + + + + +
+

University Contacts

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCategoryLocationInformationEmailURL
Joan GabelIndustry100 Church Street SE
202 Morrill Hall
Minneapolis MN 55455
President of the University of Minnesota
upres@umn.eduHome Page
Mostafa KavehIndustry117 Pleasant St SE
105 Walter Library
Minneapolis MN 55455
Dean of the College of Science and Engineering
mos@umn.eduHome Page
John ColemanIndustry101 Pleasant Street SE
215 Johnston Hall
Minneapolis MN 55455
Dean of the College of Liberal Arts
coleman@umn.eduHome Page
Valery ForbesIndustry1475 Gortner Avenue
123 Snyder Hall
St. Paul MN 55108
Dean of the College of Biological Sciences
cbsdeans@umn.eduHome Page
Sri ZaheerIndustry321 19th Avenue S
Suite 4-300 Carlson School of Management
Minneapolis MN 55455
Dean of the Carlson School of Management
szaheer@umn.eduHome Page
+ + Goldy Gopher
+ + +
+
+
+
+
+ +
+ Directions to
+
+ + + + + +
+
+
+ + + + + diff --git a/csci4131/hw3/strap012/myWidgets.html b/csci4131/hw3/strap012/myWidgets.html new file mode 100644 index 0000000..79fc15e --- /dev/null +++ b/csci4131/hw3/strap012/myWidgets.html @@ -0,0 +1,148 @@ + + + + My Widgets + + + + + + + + +

+ + + + + diff --git a/csci4131/hw3/strap012/passwordcheck.css b/csci4131/hw3/strap012/passwordcheck.css new file mode 100644 index 0000000..beceb1c --- /dev/null +++ b/csci4131/hw3/strap012/passwordcheck.css @@ -0,0 +1,60 @@ +#password{ + margin: 0; + padding: 0; + font-family: 'Raleway', sans-serif; + font-size: 15px; + line-height: 1.5; +} +#container { + width: 535px; + background: #ffffff; + padding: 20px; + margin: 90px auto; + border-radius: 5px; + height: 150px; + border: 2px solid gray; +} +#header { + text-align: center; + background-color: #FEFFED; + border-radius: 5px; + margin: -39px -20px 10px -20px; +} +.password{ + padding-top: 10px; +} +#content { + margin-left: 57px; + margin-top: 40px; +} +#register label{ + margin-right:5px; +} +#register input { + padding: 5px 14px; + border: 1px solid #d5d9da; + box-shadow: 0 0 9px #0E34F5 inset; + width: 272px; + font-size: 1em; + height: 25px; +} +#register .short{ + font-weight:bold; + color:#FF0000; + font-size:larger; +} +#register .weak{ + font-weight:bold; + color:orange; + font-size:larger; +} +#register .good{ + font-weight:bold; + color:#2D98F3; + font-size:larger; +} +#register .strong{ + font-weight:bold; + color: limegreen; + font-size:larger; +} diff --git a/csci4131/hw3/strap012/passwordcheck.js b/csci4131/hw3/strap012/passwordcheck.js new file mode 100644 index 0000000..97a2918 --- /dev/null +++ b/csci4131/hw3/strap012/passwordcheck.js @@ -0,0 +1,42 @@ +var input; +var result = document.querySelector("span"); +window.addEventListener('DOMContentLoaded', (event) => { + input = document.getElementsByName("password")[0]; +}); +function checkStrength() { + var password = input.value; + var strength = 0; + if (password.length < 6) { + result.removeAttribute("class"); + result.classList.add('short'); + result.innerHTML = "Too short"; + return; + } + if (password.length > 7) { strength += 1;} + // If password contains both lower and uppercase characters, increase strength value. + if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) { strength += 1;} + // If it has numbers and characters, increase strength value. + if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) { strength += 1;} + // If it has one special character, increase strength value. + if (password.match(/([!,%,&,@,#,$,^,*,?,_,~])/)) { strength += 1;} + // If it has two special characters, increase strength value. + if (password.match(/(.*[!,%,&,@,#,$,^,*,?,_,~].*[!,%,&,@,#,$,^,*,?,_,~])/)) { strength += 1;} + // Calculated strength value, we can return messages + // If value is less than 2 + if (strength < 2) { + result.removeAttribute("class"); + result.classList.add('weak'); + result.innerHTML = 'Weak'; + return; + } else if (strength == 2) { + result.removeAttribute("class"); + result.classList.add('good'); + result.innerHTML = 'Good'; + return; + } else { + result.removeAttribute("class"); + result.classList.add('strong'); + result.innerHTML = 'Strong'; + return; + } +} diff --git a/csci4131/hw3/strap012/shepherd.jpg b/csci4131/hw3/strap012/shepherd.jpg new file mode 100644 index 0000000..d1262f8 Binary files /dev/null and b/csci4131/hw3/strap012/shepherd.jpg differ diff --git a/csci4131/hw3/strap012/snyder.jpg b/csci4131/hw3/strap012/snyder.jpg new file mode 100644 index 0000000..4531a58 Binary files /dev/null and b/csci4131/hw3/strap012/snyder.jpg differ diff --git a/csci4131/hw3/strap012/style.css b/csci4131/hw3/strap012/style.css new file mode 100644 index 0000000..9f28572 --- /dev/null +++ b/csci4131/hw3/strap012/style.css @@ -0,0 +1,118 @@ +/* Global */ +body { + background-color:antiquewhite; +} +.linkTable { + border: 1px solid black; + margin-left: 20px; + background-color: white; + border-collapse: separate; +} + +/* Contacts */ +table, th, td { + max-width: 80%; + overflow-x:auto; + border: 1px solid black; + border-collapse: collapse; +} +table { + float:left; + max-width: 60%; +} +tr:nth-child(even) { + background-color:blanchedalmond; +} +tr:nth-child(odd) { + background-color: burlywood; +} +.smol { + max-height: 100%; + width: 6em; +} +.large { + float: right; + max-width: max-content; +} +#bigboi { + width: 25em; + height: 15em; + object-fit: cover; + margin-right: 0; +} +.isRotating { + animation:5s rotate infinite linear; +} +.isntRotating { + animation-play-state: paused; +} +@keyframes rotate{ + 100%{ transform:rotate(1turn) } +} +#map, #formap { + /* clear: both; */ + float: left; + padding-top: 30%; + margin-top: 1em; + margin-left: .2em; + width: 50%; + height: 30%; + max-height: 40%; +} +#formap { + float: right; +} +#transitList { + float: left; + width: 20%; + color: white; +} +.id { + text-align: center; +} +#googlymap { + width: 100%; + overflow: auto; + /* display: flex; */ + /* position: absolute; */ +} + +.inputBox { + float: left; + border: 1px solid black; + width: 25%; +} +.inputBox:nth-child(even) { + background-color:blanchedalmond; +} +.inputBox:nth-child(odd) { + background-color: burlywood; +} +#others { + display:none; +} + +/* Form */ +.Form { + float: left; + background-color: whitesmoke; + padding-left: 5%; + max-width: 25%; +} +/* Widgets */ +.grid { + align-content: center; + display: inline-grid; + grid-template-columns: 40% 40%; + grid-template-rows: 30%; + gap: .1em 10%; +} +.griditem { + padding: 10%; +} +iframe { + border: 0px; +} + + + diff --git a/csci4131/hw3/strap012/walter.jpg b/csci4131/hw3/strap012/walter.jpg new file mode 100644 index 0000000..37d0d56 Binary files /dev/null and b/csci4131/hw3/strap012/walter.jpg differ diff --git a/csci4131/hw4/strap012/403.html b/csci4131/hw4/strap012/403.html new file mode 100644 index 0000000..b73e28f --- /dev/null +++ b/csci4131/hw4/strap012/403.html @@ -0,0 +1,11 @@ + + + 403: FORBIDDEN + + +
+

403: FORBIDDEN


+ Go back to main page +
+ + diff --git a/csci4131/hw4/strap012/404.html b/csci4131/hw4/strap012/404.html new file mode 100644 index 0000000..304d6a0 --- /dev/null +++ b/csci4131/hw4/strap012/404.html @@ -0,0 +1,11 @@ + + + 404: NOT FOUND + + +
+

404: NOT FOUND


+ Go back to main page +
+ + diff --git a/csci4131/hw4/strap012/Coffman.html b/csci4131/hw4/strap012/Coffman.html new file mode 100644 index 0000000..1d68c4b --- /dev/null +++ b/csci4131/hw4/strap012/Coffman.html @@ -0,0 +1,14 @@ + + + + + A well known building + + +
+ Coffman +
+ + + + \ No newline at end of file diff --git a/csci4131/hw4/strap012/Coffman_N_OuttaSpace.html b/csci4131/hw4/strap012/Coffman_N_OuttaSpace.html new file mode 100644 index 0000000..655baa5 --- /dev/null +++ b/csci4131/hw4/strap012/Coffman_N_OuttaSpace.html @@ -0,0 +1,27 @@ + + + + + Gopher and Important Announcement + + + +
+ Coffman +
+

+ OuttaSpace +

+ + + + + \ No newline at end of file diff --git a/csci4131/hw4/strap012/MyContacts.html b/csci4131/hw4/strap012/MyContacts.html new file mode 100644 index 0000000..d30a03e --- /dev/null +++ b/csci4131/hw4/strap012/MyContacts.html @@ -0,0 +1,114 @@ + + + + + My Contacts + + + + + + + + +
+

University Contacts

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCategoryLocationInformationEmailURL
Joan GabelIndustry100 Church Street SE
202 Morrill Hall
Minneapolis MN 55455
President of the University of Minnesota
upres@umn.eduHome Page
Mostafa KavehIndustry117 Pleasant St SE
105 Walter Library
Minneapolis MN 55455
Dean of the College of Science and Engineering
mos@umn.eduHome Page
John ColemanIndustry101 Pleasant Street SE
215 Johnston Hall
Minneapolis MN 55455
Dean of the College of Liberal Arts
coleman@umn.eduHome Page
Valery ForbesIndustry1475 Gortner Avenue
123 Snyder Hall
St. Paul MN 55108
Dean of the College of Biological Sciences
cbsdeans@umn.eduHome Page
Sri ZaheerIndustry321 19th Avenue S
Suite 4-300 Carlson School of Management
Minneapolis MN 55455
Dean of the Carlson School of Management
szaheer@umn.eduHome Page
+ + Goldy Gopher
+ + +
+
+
+
+
+ +
+ Directions to
+
+ + + + + +
+
+
+ + + + + diff --git a/csci4131/hw4/strap012/MyForm.html b/csci4131/hw4/strap012/MyForm.html new file mode 100644 index 0000000..43529cd --- /dev/null +++ b/csci4131/hw4/strap012/MyForm.html @@ -0,0 +1,56 @@ + + + + + + There is no form + + + + +
+

Simple Form

+
+

+ + + + + + +

+

+ + +

+
+
+ + diff --git a/csci4131/hw4/strap012/MyServer.html b/csci4131/hw4/strap012/MyServer.html new file mode 100644 index 0000000..7a2da07 --- /dev/null +++ b/csci4131/hw4/strap012/MyServer.html @@ -0,0 +1,42 @@ + + + MyServer + + + +
+

MyServer Page


+
+ + +
+
+ + + +
+
+
+
+ Go to MyForm page +
+ + diff --git a/csci4131/hw4/strap012/MyWidgets.html b/csci4131/hw4/strap012/MyWidgets.html new file mode 100644 index 0000000..cffd3b5 --- /dev/null +++ b/csci4131/hw4/strap012/MyWidgets.html @@ -0,0 +1,149 @@ + + + + My Widgets + + + + + + + + +

+ + + + + diff --git a/csci4131/hw4/strap012/OuttaSpace.html b/csci4131/hw4/strap012/OuttaSpace.html new file mode 100644 index 0000000..1ca6c63 --- /dev/null +++ b/csci4131/hw4/strap012/OuttaSpace.html @@ -0,0 +1,18 @@ + + + + +Sound Test + + +

+OuttaSpace +

+ + + + + \ No newline at end of file diff --git a/csci4131/hw4/strap012/OuttaSpace.mp3 b/csci4131/hw4/strap012/OuttaSpace.mp3 new file mode 100644 index 0000000..84d11e3 Binary files /dev/null and b/csci4131/hw4/strap012/OuttaSpace.mp3 differ diff --git a/csci4131/hw4/strap012/Untitled.png b/csci4131/hw4/strap012/Untitled.png new file mode 100644 index 0000000..92a4aa1 Binary files /dev/null and b/csci4131/hw4/strap012/Untitled.png differ diff --git a/csci4131/hw4/strap012/carlson.jpg b/csci4131/hw4/strap012/carlson.jpg new file mode 100644 index 0000000..d82c37c Binary files /dev/null and b/csci4131/hw4/strap012/carlson.jpg differ diff --git a/csci4131/hw4/strap012/coffman.jpg b/csci4131/hw4/strap012/coffman.jpg new file mode 100644 index 0000000..603870a Binary files /dev/null and b/csci4131/hw4/strap012/coffman.jpg differ diff --git a/csci4131/hw4/strap012/coffman.png b/csci4131/hw4/strap012/coffman.png new file mode 100644 index 0000000..f23b52c Binary files /dev/null and b/csci4131/hw4/strap012/coffman.png differ diff --git a/csci4131/hw4/strap012/contacts.js b/csci4131/hw4/strap012/contacts.js new file mode 100644 index 0000000..8518ef6 --- /dev/null +++ b/csci4131/hw4/strap012/contacts.js @@ -0,0 +1,221 @@ +function change(small, row) { + document.getElementsByClassName("smol")[row].src = small; +} +function lucky() { + var image = ["carlson.jpg", "johnston.jpg", "morrill.jpg", "shepherd.jpg", "snyder.jpg", "walter.jpg"]; + document.getElementById("bigboi").src = image[Math.floor(6 * Math.random())]; +} +let isRotating=0; +function dizzy() { + if (!isRotating) { + document.getElementById("bigboi").classList.remove("isntRotating"); + } else { + document.getElementById("bigboi").classList.add("isntRotating"); + } + isRotating^=1; +} +function check(value) { + if(value==="Other") + document.getElementById('others').style.display = 'block'; + else + document.getElementById('others').style.display = 'none'; +} +let map; +var center = { lat: 44.9727, lng: -93.23540000000003 }; +function initMap() { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition( + (position) => { + curLoc = { + lat: position.coords.latitude, + lng: position.coords.longitude, + }; + }, + () => { + alert("Geolocation failed. Directions will not work."); + } + ) + } + map = new google.maps.Map(document.getElementById("map"), { + center: center, + zoom: 14, + }); + + var service = new google.maps.places.PlacesService(map); + entries = document.getElementsByClassName("entry"); + locations = []; + for (e=0; e" + + "" + newEntry.getElementsByClassName("name")[0].textContent + "" + "
" + + newEntry.getElementsByClassName("category")[0].textContent + "
" + + newEntry.getElementsByClassName("room")[0].textContent + " " + newEntry.getElementsByClassName("street")[0].textContent + "
" + + newEntry.getElementsByClassName("city")[0].textContent + + "", + }, + }); + marker.addListener('click', function () { + if (!this.infoWindow) { + this.infoWindow = new google.maps.InfoWindow({ + content: this.data.content, + }); + this.infoWindow.open(map, this); + } + }) + } +} +var service; +var otherRadius; +var searchMarker = []; +function searchPlaces() { + var request; + if (document.getElementById("places").value!="Other") { + request = { + location: center, + radius: document.getElementById("distance").value, + type: document.getElementById("places").value, + }; + service = new google.maps.places.PlacesService(map); + service.nearbySearch(request, (results, status) => { + if (status === google.maps.places.PlacesServiceStatus.OK && results) { + addPointsSearch(results, false); + } + }); + } else { + request = { + location: center, + radius: document.getElementById("distance").value, + query: document.getElementById("others").value, + }; + otherRadius = request.radius; + service = new google.maps.places.PlacesService(map); + service.textSearch(request, (results, status) => { + if (status === google.maps.places.PlacesServiceStatus.OK && results) { + addPointsSearch(results, true); + } + }); + } +} + +function addPointsSearch(locations, isOther) { + deleteMarkers(); + for (x in locations) { + var marker; + if (isOther) { + if (google.maps.geometry.spherical.computeDistanceBetween(locations[x].geometry.location, map.getCenter()) < parseInt(otherRadius)) { + marker = new google.maps.Marker({ + map, + title: locations[x].name, + position: locations[x].geometry.location, + data: { + content: "" + locations[x].name + "" + + "
" + locations[x].formatted_address + }, + }); + } + } else { + marker = new google.maps.Marker({ + map, + title: locations[x].name, + position: locations[x].geometry.location, + data: { + content: "" + locations[x].name + "" + + "
" + locations[x].vicinity + }, + }); + } + if (marker) { + marker.addListener('click', function () { + if (!this.infoWindow) { + this.infoWindow = new google.maps.InfoWindow({ + content: this.data.content, + }); + this.infoWindow.open(map, this); + } + }) + searchMarker.push(marker); + } + + } +} +function deleteMarkers() { + for (let i = 0; i < searchMarker.length; i++) { + searchMarker[i].setMap(null); + } + searchMarker = []; +} + +var curLoc, directionsService, directionsRenderer; +function directions () { + directionsService = new google.maps.DirectionsService(); + directionsRenderer = new google.maps.DirectionsRenderer(); + document.getElementById("transitList").textContent = ""; + directionsRenderer.setPanel(document.getElementById("transitList")); + directionsRenderer.setMap(map); + var selectedMode = document.getElementById('means').value; + var dest = { + query: document.getElementById("destination").value, + fields: ['name', 'geometry'], + }; + service = new google.maps.places.PlacesService(map); + service.findPlaceFromQuery(dest, function (results, status) { + if (status === google.maps.places.PlacesServiceStatus.OK) { + console.log(results); + doDirections(results[0]); + } + }); +} + +function doDirections(input) { + var means; + var mean = document.getElementsByName('means'); + for (var i = 0; i < mean.length; i++) { + if (mean[i].checked) { + means = mean[i].value; + } + } + + var request = { + origin: curLoc, + destination: input.geometry.location, + // Note that JavaScript allows us to access the constant + // using square brackets and a string value as its + // "property." + travelMode: google.maps.TravelMode[means] + }; + directionsService.route(request, function (result, status) { + if (status == 'OK') { + directionsRenderer.setDirections(result); + } + }); +} + +function initForm() { + map = new google.maps.Map(document.getElementById("formap"), { + center: center, + zoom: 14, + }); +} \ No newline at end of file diff --git a/csci4131/hw4/strap012/gophers-mascot.png b/csci4131/hw4/strap012/gophers-mascot.png new file mode 100644 index 0000000..44e62fa Binary files /dev/null and b/csci4131/hw4/strap012/gophers-mascot.png differ diff --git a/csci4131/hw4/strap012/johnston.jpg b/csci4131/hw4/strap012/johnston.jpg new file mode 100644 index 0000000..b8b7f68 Binary files /dev/null and b/csci4131/hw4/strap012/johnston.jpg differ diff --git a/csci4131/hw4/strap012/morrill.jpg b/csci4131/hw4/strap012/morrill.jpg new file mode 100644 index 0000000..144d458 Binary files /dev/null and b/csci4131/hw4/strap012/morrill.jpg differ diff --git a/csci4131/hw4/strap012/passwordcheck.css b/csci4131/hw4/strap012/passwordcheck.css new file mode 100644 index 0000000..beceb1c --- /dev/null +++ b/csci4131/hw4/strap012/passwordcheck.css @@ -0,0 +1,60 @@ +#password{ + margin: 0; + padding: 0; + font-family: 'Raleway', sans-serif; + font-size: 15px; + line-height: 1.5; +} +#container { + width: 535px; + background: #ffffff; + padding: 20px; + margin: 90px auto; + border-radius: 5px; + height: 150px; + border: 2px solid gray; +} +#header { + text-align: center; + background-color: #FEFFED; + border-radius: 5px; + margin: -39px -20px 10px -20px; +} +.password{ + padding-top: 10px; +} +#content { + margin-left: 57px; + margin-top: 40px; +} +#register label{ + margin-right:5px; +} +#register input { + padding: 5px 14px; + border: 1px solid #d5d9da; + box-shadow: 0 0 9px #0E34F5 inset; + width: 272px; + font-size: 1em; + height: 25px; +} +#register .short{ + font-weight:bold; + color:#FF0000; + font-size:larger; +} +#register .weak{ + font-weight:bold; + color:orange; + font-size:larger; +} +#register .good{ + font-weight:bold; + color:#2D98F3; + font-size:larger; +} +#register .strong{ + font-weight:bold; + color: limegreen; + font-size:larger; +} diff --git a/csci4131/hw4/strap012/passwordcheck.js b/csci4131/hw4/strap012/passwordcheck.js new file mode 100644 index 0000000..97a2918 --- /dev/null +++ b/csci4131/hw4/strap012/passwordcheck.js @@ -0,0 +1,42 @@ +var input; +var result = document.querySelector("span"); +window.addEventListener('DOMContentLoaded', (event) => { + input = document.getElementsByName("password")[0]; +}); +function checkStrength() { + var password = input.value; + var strength = 0; + if (password.length < 6) { + result.removeAttribute("class"); + result.classList.add('short'); + result.innerHTML = "Too short"; + return; + } + if (password.length > 7) { strength += 1;} + // If password contains both lower and uppercase characters, increase strength value. + if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) { strength += 1;} + // If it has numbers and characters, increase strength value. + if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) { strength += 1;} + // If it has one special character, increase strength value. + if (password.match(/([!,%,&,@,#,$,^,*,?,_,~])/)) { strength += 1;} + // If it has two special characters, increase strength value. + if (password.match(/(.*[!,%,&,@,#,$,^,*,?,_,~].*[!,%,&,@,#,$,^,*,?,_,~])/)) { strength += 1;} + // Calculated strength value, we can return messages + // If value is less than 2 + if (strength < 2) { + result.removeAttribute("class"); + result.classList.add('weak'); + result.innerHTML = 'Weak'; + return; + } else if (strength == 2) { + result.removeAttribute("class"); + result.classList.add('good'); + result.innerHTML = 'Good'; + return; + } else { + result.removeAttribute("class"); + result.classList.add('strong'); + result.innerHTML = 'Strong'; + return; + } +} diff --git a/csci4131/hw4/strap012/private.html b/csci4131/hw4/strap012/private.html new file mode 100644 index 0000000..85c0635 --- /dev/null +++ b/csci4131/hw4/strap012/private.html @@ -0,0 +1,10 @@ + + + Private + + +
+

This file should trigger a 403 response!!!


+
+ + diff --git a/csci4131/hw4/strap012/shepherd.jpg b/csci4131/hw4/strap012/shepherd.jpg new file mode 100644 index 0000000..d1262f8 Binary files /dev/null and b/csci4131/hw4/strap012/shepherd.jpg differ diff --git a/csci4131/hw4/strap012/snyder.jpg b/csci4131/hw4/strap012/snyder.jpg new file mode 100644 index 0000000..4531a58 Binary files /dev/null and b/csci4131/hw4/strap012/snyder.jpg differ diff --git a/csci4131/hw4/strap012/strap012.py b/csci4131/hw4/strap012/strap012.py new file mode 100644 index 0000000..31668af --- /dev/null +++ b/csci4131/hw4/strap012/strap012.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +# See https://docs.python.org/3.2/library/socket.html +# for a decscription of python socket and its parameters +import socket +import os +import stat + + +from threading import Thread +from argparse import ArgumentParser +from urllib.parse import unquote + +BUFSIZE = 4096 +CRLF = '\r\n' +NOT_FOUND = 'HTTP/1.1 404 NOT FOUND{}Connection: close{}{}'.format(CRLF, CRLF, CRLF) +FORBIDDEN = 'HTTP/1.1 403 FORBIDDEN{}Connection: close{}{}'.format(CRLF, CRLF, CRLF) +METHOD_NOT_ALLOWED = 'HTTP/1.1 405 METHOD NOT ALLOWED{}Allow: GET, HEAD, POST {}Connection: close{}{}'.format(CRLF, CRLF, CRLF, CRLF) +OK = 'HTTP/1.1 200 OK{}Connection: close{}'.format(CRLF, CRLF) # head request only + +# check file permissions -is file world readable? +def check_perms(resource): + stmode = os.stat(resource).st_mode + return(getattr(stat, 'S_IROTH') & stmode) > 0 + +# Puts together the HTML for the POST form return +def POST(form): + form = unquote(form) + form = form.replace("+", " ").split("&") + contents = "" + if len(form) == 0: + return contents + for x in form: + x = x.split("=") + contents = contents + "\n" + x[0] + "\n" + x[1] + "\n\n" + table = "" + contents + "
" + ret = "\n\n\n\n\nTest\n\n\n

\nFollowing Form Data Submitted Successfully:


\n{}\n\n".format(table) + return ret +#For Content Type +def getType(type): + if type == "html": + return "text/html" + elif type == "css": + return "text/css" + elif type == "js": + return "text/javascript" + elif type == "mp3": + return "audio/mpeg" + elif type == "jpg" or type == "jpeg": + return "image/jpeg" + elif type == "png": + return "image/png" + else: + raise TypeError + +def getContents(type, file, contents): + if type =="POST": + return b"".join( + [OK.encode(), "{}".format(CRLF).encode(), POST(contents).encode(), "{}{}".format(CRLF, CRLF).encode()]) + returnValue = "".encode() + try: + if file.split("?")[0] == "redirect": + contents = file.split("?")[1].split("=")[-1] + return "HTTP/1.1 307 TEMPORARY REDIRECT{}Connection: close{}Location:{}{}{}".format(CRLF, CRLF, "https://youtube.com/results?search_query=" + contents, CRLF, CRLF).encode() + if not check_perms(file): + raise PermissionError + content = open(file, 'rb') + except FileNotFoundError: + returnValue = NOT_FOUND.encode() + with open("404.html", "rb") as fof: + returnValue = b"".join( + [returnValue, fof.read(), "{}{}".format(CRLF, CRLF).encode()]) + except PermissionError: + returnValue = FORBIDDEN.encode() + with open("403.html", "rb") as forb: + returnValue = b"".join( + [returnValue, forb.read(), "{}{}".format(CRLF, CRLF).encode()]) + else: + returnValue = OK.encode() + if type == "HEAD": + returnValue = b"".join( + [returnValue, "{}{}".format(CRLF, CRLF).encode()]) + elif type == "GET": + ext = getType(file.split(".")[1]) + returnValue = b"".join( + [returnValue, "Content Type: {}".format(ext).encode(), "{}{}".format(CRLF, CRLF).encode()]) + returnValue = b"".join( + [returnValue, content.read(), "{}{}".format(CRLF, CRLF).encode()]) + else: + returnValue= METHOD_NOT_ALLOWED.encode() + content.close() + return returnValue + +def client_recv(client_sock, client_addr): + print('talking to {}'.format(client_addr)) + data = client_sock.recv(BUFSIZE) + data = data.decode('utf-8').strip("\r") + print(data) + data = data.split("\n") + request = data[0].split(" ") + if len(request) > 1: + want = getContents(request[0], request[1][1:], data[-1]) + client_sock.send(want) + client_sock.shutdown(1) + client_sock.close() + + print('connection closed.') + + +class EchoServer: + def __init__(self, host, port): + print("Server") + print('listening on port {}'.format(port)) + self.host = host + self.port = port + + self.setup_socket() + + self.accept() + + self.sock.shutdown() + self.sock.close() + + def setup_socket(self): + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.bind((self.host, self.port)) + self.sock.listen(128) + + def accept(self): + while True: + (client, address) = self.sock.accept() + th = Thread(target=client_recv, args=(client, address)) + th.start() + +def parse_args(): + parser = ArgumentParser() + parser.add_argument('--host', type=str, default='localhost', + help='specify a host to operate on (default: localhost)') + parser.add_argument('-p', '--port', type=int, default=9001, + help='specify a port to operate on (default: 9001)') + args = parser.parse_args() + return (args.host, args.port) + + +if __name__ == '__main__': + (host, port) = parse_args() + EchoServer(host, port) + diff --git a/csci4131/hw4/strap012/style.css b/csci4131/hw4/strap012/style.css new file mode 100644 index 0000000..9f28572 --- /dev/null +++ b/csci4131/hw4/strap012/style.css @@ -0,0 +1,118 @@ +/* Global */ +body { + background-color:antiquewhite; +} +.linkTable { + border: 1px solid black; + margin-left: 20px; + background-color: white; + border-collapse: separate; +} + +/* Contacts */ +table, th, td { + max-width: 80%; + overflow-x:auto; + border: 1px solid black; + border-collapse: collapse; +} +table { + float:left; + max-width: 60%; +} +tr:nth-child(even) { + background-color:blanchedalmond; +} +tr:nth-child(odd) { + background-color: burlywood; +} +.smol { + max-height: 100%; + width: 6em; +} +.large { + float: right; + max-width: max-content; +} +#bigboi { + width: 25em; + height: 15em; + object-fit: cover; + margin-right: 0; +} +.isRotating { + animation:5s rotate infinite linear; +} +.isntRotating { + animation-play-state: paused; +} +@keyframes rotate{ + 100%{ transform:rotate(1turn) } +} +#map, #formap { + /* clear: both; */ + float: left; + padding-top: 30%; + margin-top: 1em; + margin-left: .2em; + width: 50%; + height: 30%; + max-height: 40%; +} +#formap { + float: right; +} +#transitList { + float: left; + width: 20%; + color: white; +} +.id { + text-align: center; +} +#googlymap { + width: 100%; + overflow: auto; + /* display: flex; */ + /* position: absolute; */ +} + +.inputBox { + float: left; + border: 1px solid black; + width: 25%; +} +.inputBox:nth-child(even) { + background-color:blanchedalmond; +} +.inputBox:nth-child(odd) { + background-color: burlywood; +} +#others { + display:none; +} + +/* Form */ +.Form { + float: left; + background-color: whitesmoke; + padding-left: 5%; + max-width: 25%; +} +/* Widgets */ +.grid { + align-content: center; + display: inline-grid; + grid-template-columns: 40% 40%; + grid-template-rows: 30%; + gap: .1em 10%; +} +.griditem { + padding: 10%; +} +iframe { + border: 0px; +} + + + diff --git a/csci4131/hw4/strap012/walter.jpg b/csci4131/hw4/strap012/walter.jpg new file mode 100644 index 0000000..37d0d56 Binary files /dev/null and b/csci4131/hw4/strap012/walter.jpg differ diff --git a/csci4131/hw5/strap012_hw5/client/addContact.html b/csci4131/hw5/strap012_hw5/client/addContact.html new file mode 100644 index 0000000..12bfaa2 --- /dev/null +++ b/csci4131/hw5/strap012_hw5/client/addContact.html @@ -0,0 +1,113 @@ + + + + + + + + + + + + + +

+ +
+
+


+
+ +
+
+
+
+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name +
+ +
+
Category +
+ +
+
Location +
+ +
+
Contact Information +
+ +
+
Email +
+ +
+
Website Name +
+ +
+
Website URL +
+ +
+
+ +
+
+
+
+
+
+
+ + diff --git a/csci4131/hw5/strap012_hw5/client/contacts.html b/csci4131/hw5/strap012_hw5/client/contacts.html new file mode 100644 index 0000000..15e4032 --- /dev/null +++ b/csci4131/hw5/strap012_hw5/client/contacts.html @@ -0,0 +1,73 @@ + + + + + + + + + + + +

+ +
+ + + + + + + + + + + + +
NameCategoryLocationContact InformationEmailWebsite
(URL)
+
+ + + diff --git a/csci4131/hw5/strap012_hw5/client/index.html b/csci4131/hw5/strap012_hw5/client/index.html new file mode 100644 index 0000000..44c5d0f --- /dev/null +++ b/csci4131/hw5/strap012_hw5/client/index.html @@ -0,0 +1,27 @@ + + + + + + + + + + +


+
+
+
Welcome to Contact Management
+
+
+ + diff --git a/csci4131/hw5/strap012_hw5/client/stock.html b/csci4131/hw5/strap012_hw5/client/stock.html new file mode 100644 index 0000000..b55ffcb --- /dev/null +++ b/csci4131/hw5/strap012_hw5/client/stock.html @@ -0,0 +1,123 @@ + + + + + + + + + + + + + +

+ +
+
+
Welcome to Stock Page
+
+
+ +
+
+
+ + + + + + + + + + +
Company +
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+ + + + + + + +
+      
+ +
Company-MetaDataStock-Info
+
+ + + + diff --git a/csci4131/hw5/strap012_hw5/contacts.json b/csci4131/hw5/strap012_hw5/contacts.json new file mode 100644 index 0000000..54149e8 --- /dev/null +++ b/csci4131/hw5/strap012_hw5/contacts.json @@ -0,0 +1,22 @@ +{ + "contacts": [ + { + "name": "President Joan T.A. Gabel", + "category": "Academic", + "location": "202 Morrill Hall\r\n100 Church Street SE\r\nMinneapolis, MN 55455", + "contact": "President of the University of Minnesota System", + "email": "upres@umn.edu", + "website_name": "Home Page", + "website_url": "https://president.umn.edu/" + }, + { + "name": "Professor Dan Challou", + "category": "Academic", + "location": "383 Shepherd Laboratory\r\n100 Union Street SE\r\nMinneapolis, MN 55455", + "contact": "Professor of CSCI 4131 - Internet Programming", + "email": "chal0006@umn.edu", + "website_name": "Course Home Page", + "website_url": "https://canvas.umn.edu/courses/217376" + } + ] +} diff --git a/csci4131/hw5/strap012_hw5/createServer.js b/csci4131/hw5/strap012_hw5/createServer.js new file mode 100644 index 0000000..9c108cd --- /dev/null +++ b/csci4131/hw5/strap012_hw5/createServer.js @@ -0,0 +1,90 @@ + +const http = require('http'); +const url = require('url'); +const fs = require('fs'); +const qs = require('querystring'); + +const port = 9001; +http.createServer(function (req, res) { + var q = url.parse(req.url, true); + var filename = "." + q.pathname; + if(req.url === '/'){ + res.writeHead(301, { 'Location': 'index.html' }); + return res.end("301 Permanent Redirect"); + } + else if (req.url === '/index.html') { + indexPage(req, res, '/index.html'); + } + else if (req.url === '/contacts.html') { + indexPage(req, res, '/contacts.html'); + } + else if (req.url === '/addContact.html') { + indexPage(req, res, '/addContact.html'); + } + else if (req.url === '/stock.html') { + indexPage(req, res, '/stock.html'); + } + else if (req.url === '/contacts.json') { + jsonSock(req, res, 'contacts.json') + } + else if (req.url === "/postContactEntry") { + POST(req, res); + res.writeHead(302, { 'Location': 'contacts.html' }); + return res.end("302 Temporary Redirect"); + } + else{ + res.writeHead(404, {'Content-Type': 'text/html'}); + return res.end("404 Not Found"); + } +}).listen(port); + +function indexPage(req, res, file) { + fs.readFile('client' + file, function(err, html) { + if(err) { + throw err; + } + res.statusCode = 200; + res.setHeader('Content-type', 'text/html'); + res.write(html); + res.end(); + }); +} + +function jsonSock(req, res, file) { + fs.readFile(file, function (err, json) { + if (err) { + throw err; + } + res.statusCode = 200; + res.setHeader('Content-type', 'text/json'); + res.write(json); + res.end(); + }); +} + +function POST(req, res) { + var reqBody = ''; + // server starts receiving the form data + req.on('data', function(data) { + reqBody+= data; + });// server has received all the form data + req.on('end', function() { + var jsonO = {} + var postObj = qs.parse(reqBody); + jsonO["name"] = postObj.name; + jsonO["category"] = postObj.category; + jsonO["location"] = postObj.location; + jsonO["contact"] = postObj.contact; + jsonO["email"] = postObj.email; + jsonO["website_name"] = postObj.website_name; + jsonO["website_url"] = postObj.website_url; + fs.readFile('./contacts.json', 'utf8', function(err, data) { + var file = JSON.parse(data); + file.contacts.push(jsonO); + var string = JSON.stringify(file); + fs.writeFile('./contacts.json', string, function(err, data) { + console.log(string); + }); //Write clojure + }); //Read clojure + }); //req clojure +} \ No newline at end of file diff --git a/csci4131/hw5/strap012_hw5/package.json b/csci4131/hw5/strap012_hw5/package.json new file mode 100644 index 0000000..90f2542 --- /dev/null +++ b/csci4131/hw5/strap012_hw5/package.json @@ -0,0 +1,11 @@ +{ + "name": "strap012_hw5", + "version": "1.0.0", + "description": "Assignment 5", + "main": "createServer.js", + "scripts": { + "test": "node createServer.js" + }, + "author": "strap012", + "license": "ISC" +} diff --git a/csci4131/hw6/strap012_hw6/README.txt b/csci4131/hw6/strap012_hw6/README.txt new file mode 100644 index 0000000..e056441 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/README.txt @@ -0,0 +1,2 @@ +username: charlie +password: tango \ No newline at end of file diff --git a/csci4131/hw6/strap012_hw6/api/utilities.js b/csci4131/hw6/strap012_hw6/api/utilities.js new file mode 100644 index 0000000..65a087f --- /dev/null +++ b/csci4131/hw6/strap012_hw6/api/utilities.js @@ -0,0 +1,48 @@ +const express = require('express') +const db = require ('../dbio') +const router = express.Router() +router.use(express.urlencoded({ extended: true })) + +router.get('/contacts', function (req, res) { + db.getContacts().then(function(table) { + res.send(table) + }); +}); + +router.post('/login', async function(req, res) { + var loginInfo = req.body; + var login = loginInfo.login; + var pwd = loginInfo.password; + let rows = []; + + // Query the database tbl_login with login and hashed password + db.query(login, pwd).then(function(rows) { + // Provided there is no error, and the results set is assigned to a variable named rows: + if (rows.length >= 1) {// the length should be 0 or 1, but this will work for now + //success, set the session, return success + req.session.user = login; + res.json({ status: 'success' }); + } else { + res.json({ status: 'fail' }); + } + }); + +}); + +router.get('/logout', function(req, res) { + if(!req.session.user) { + res.send('Session not started, can not logout!'); + } else { + req.session.destroy(); + res.redirect('/login'); + } +}); + +router.post('/addContact', function(req, res) { + var contact = req.body; + db.addContact(contact).then(function() { + res.redirect('/contacts'); + }); +}); + +module.exports = router; diff --git a/csci4131/hw6/strap012_hw6/create_accounts_table.js b/csci4131/hw6/strap012_hw6/create_accounts_table.js new file mode 100644 index 0000000..61b2602 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/create_accounts_table.js @@ -0,0 +1,41 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + console.log("Connected to database!"); + + const sql = `CREATE TABLE tbl_accounts ( + acc_id INT NOT NULL AUTO_INCREMENT, + acc_name VARCHAR(20), + acc_login VARCHAR(20), + acc_password VARCHAR(200), + PRIMARY KEY (acc_id) + )`; + + console.log("Attempting to create table: tbl_accounts"); + dbCon.query(sql, function (err, result) { + if (err) { + throw err; + } + console.log("Table tbl_accounts created"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw6/strap012_hw6/create_contacts_table.js b/csci4131/hw6/strap012_hw6/create_contacts_table.js new file mode 100644 index 0000000..bcad389 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/create_contacts_table.js @@ -0,0 +1,44 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + console.log("Connected to database!"); + + const sql = `CREATE TABLE tbl_contacts ( + contact_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(30), + category VARCHAR(40), + location VARCHAR(300), + contact_info VARCHAR(200), + email VARCHAR(30), + website VARCHAR(300), + website_url VARCHAR(300) + )`; + + console.log("Attempting to create table: tbl_contacts"); + dbCon.query(sql, function (err, result) { + if (err) { + throw err; + } + console.log("Table tbl_accounts created"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw6/strap012_hw6/dbio.js b/csci4131/hw6/strap012_hw6/dbio.js new file mode 100644 index 0000000..302334b --- /dev/null +++ b/csci4131/hw6/strap012_hw6/dbio.js @@ -0,0 +1,74 @@ +var mysql = require("mysql"); +var bcrypt = require("bcrypt"); + +var connection = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", + password: "6919", + database: "C4131S21U83", + port: 3306 +}); + +connection.connect(function(err) { + if (err) { + throw err; + }; + console.log("Connected to MYSQL database!"); +}); + +function passcheck(user,pass) { + return new Promise(function(resolve, reject) { + connection.query('SELECT * FROM tbl_accounts', function(err, rows, fields) { + let ret = []; + if (err) { + return reject(err); + } + for (var i = 0; i < rows.length; i++) { + if (rows[i].acc_login.localeCompare(user) === 0) { + if (bcrypt.compareSync(pass, rows[i].acc_password)) { + ret += rows[i]; + } + } + } + resolve(ret); + }); + }); +} + +function getContacts() { + return new Promise (function(resolve, reject) { + let conTab = [] + connection.query('SELECT * FROM tbl_contacts', function (err, rows, fields) { + if (err) { + return reject(err); + } + resolve(rows); + }); + }); +} + +function addContacts(contact) { + let newCon = { + name: contact.name, + category: contact.category, + location: contact.location, + contact_info: contact.contact, + email: contact.email, + website_url: contact.website_name, + } + return new Promise(function(resolve, reject) { + connection.query('INSERT tbl_contacts SET ?', newCon, function (err, result) { //Parameterized insert + if (err) throw err; + console.log("Values inserted"); + resolve(); + }); + }); + +} + + + + +exports.addContact = addContacts; +exports.query = passcheck; +exports.getContacts = getContacts; diff --git a/csci4131/hw6/strap012_hw6/index.js b/csci4131/hw6/strap012_hw6/index.js new file mode 100644 index 0000000..851b096 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/index.js @@ -0,0 +1,109 @@ +// YOU CAN USE THIS FILE AS REFERENCE FOR SERVER DEVELOPMENT +const createError = require('http-errors'); + +// Include the express module +const express = require('express'); + +// helps in extracting the body portion of an incoming request stream +var bodyparser = require('body-parser'); + +// Path module - provides utilities for working with file and directory paths. +const path = require('path'); + +// Helps in managing user sessions +const session = require('express-session'); + +// include the mysql module +var mysql = require('mysql'); + +// Bcrypt library for comparing password hashes +const bcrypt = require('bcrypt'); + +// Include the express router. +const utilities = require('./api/utilities'); + +const port = 9001; + +// create an express application +const app = express(); + +// Use express-session +// In-memory session is sufficient for this assignment +app.use(session({ + secret: "csci4131secretkey", + saveUninitialized: true, + resave: false + } +)); + +// middle ware to serve static files +app.use(express.static(path.join(__dirname, 'public'))); + +// server listens on port for incoming connections +app.listen(port, () => console.log('Listening on port', port)); + +app.get('/', function (req, res) { + res.sendFile(path.join(__dirname, 'public/welcome.html')); +}); + +// GET method route for the contacts page. +// It serves contact.html present in public folder +app.get('/contacts', function(req, res) { + if(!req.session.user) { + res.redirect('/login'); + } else { + res.sendFile(path.join(__dirname, 'public/contacts.html')); + } +}); + +app.get('/stocks', function(req, res) { + res.redirect('/stock'); +}) + +app.get('/stock', function (req, res) { + if (!req.session.user) { + res.redirect('/login'); + } else { + res.sendFile(path.join(__dirname, 'public/stock.html')); + } +}); + +app.get('/addContact', function (req, res) { + if (!req.session.user) { + res.redirect('/login'); + } else { + res.sendFile(path.join(__dirname, 'public/addContact.html')); + } +}); + +app.get('/login', function (req, res) { + if (req.session.user) { + res.redirect('/contacts'); + } else { + res.sendFile(path.join(__dirname, 'login.html')); + } +}); + +app.get('/logout', function(req, res) { + res.redirect('/api/logout') +}); + +// Makes Express use a router called utilities +app.use('/api', utilities); + +// function to return the 404 message and error to client +app.use(function (req, res, next) { + next(createError(404)); +}); + +// error handler +app.use(function (err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + // res.render('error'); + res.send(); +}); diff --git a/csci4131/hw6/strap012_hw6/insert_into_accounts_table.js b/csci4131/hw6/strap012_hw6/insert_into_accounts_table.js new file mode 100644 index 0000000..3157ce3 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/insert_into_accounts_table.js @@ -0,0 +1,45 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); +const bcrypt = require('bcrypt'); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + + console.log("Connected to database!"); + + const saltRounds = 10; + const myPlaintextPassword = 'tango'; // replace with password chosen by you OR retain the same value + const passwordHash = bcrypt.hashSync(myPlaintextPassword, saltRounds); + + const rowToBeInserted = { + acc_name: 'charlie', // replace with acc_name chosen by you OR retain the same value + acc_login: 'charlie', // replace with acc_login chosen by you OR retain the same value + acc_password: passwordHash + }; + + console.log("Attempting to insert record into tbl_accounts"); + dbCon.query('INSERT tbl_accounts SET ?', rowToBeInserted, function (err, result) { + if (err) { + throw err; + } + console.log("Table record inserted!"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw6/strap012_hw6/login.html b/csci4131/hw6/strap012_hw6/login.html new file mode 100644 index 0000000..9bb80cc --- /dev/null +++ b/csci4131/hw6/strap012_hw6/login.html @@ -0,0 +1,48 @@ + + + + + + + + + +
+

Login Page

+
+

+
+
+ + +
+
+ + +
+ +
+
+ + + diff --git a/csci4131/hw6/strap012_hw6/package.json b/csci4131/hw6/strap012_hw6/package.json new file mode 100644 index 0000000..db9cf8f --- /dev/null +++ b/csci4131/hw6/strap012_hw6/package.json @@ -0,0 +1,18 @@ +{ + "name": "strap012_hw6", + "version": "1.0.0", + "description": "Assignment 6", + "main": "index.js", + "scripts": { + "test": "node index.js" + }, + "author": "strap012", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.0.1", + "body-parser": "^1.19.0", + "express": "^4.17.1", + "express-session": "^1.17.1", + "mysql": "^2.18.1" + } +} diff --git a/csci4131/hw6/strap012_hw6/public/addContact.html b/csci4131/hw6/strap012_hw6/public/addContact.html new file mode 100644 index 0000000..629f9b2 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/public/addContact.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + + +

+ +
+
+


+
+ +
+
+
+
+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name +
+ +
+
Category +
+ +
+
Location +
+ +
+
Contact Information +
+ +
+
Email +
+ +
+
Website Name +
+ +
+
+ +
+
+
+
+
+
+
+ + diff --git a/csci4131/hw6/strap012_hw6/public/stock.html b/csci4131/hw6/strap012_hw6/public/stock.html new file mode 100644 index 0000000..d63b233 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/public/stock.html @@ -0,0 +1,124 @@ + + + + + + + + + + + + + +

+ +
+
+
Welcome to Stock Page
+
+
+ +
+
+
+ + + + + + + + + + +
Company +
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+ + + + + + + +
+      
+ +
Company-MetaDataStock-Info
+
+ + + + diff --git a/csci4131/hw6/strap012_hw6/public/welcome.html b/csci4131/hw6/strap012_hw6/public/welcome.html new file mode 100644 index 0000000..095023e --- /dev/null +++ b/csci4131/hw6/strap012_hw6/public/welcome.html @@ -0,0 +1,53 @@ + + + + + + + + + Welcome to Node.js + + + + +
+

Welcome to Express (Node.js)

+

The objective of this assignment is to develop a basic website with:

+

Express which is a Node.js web application framework.

+
+

Following are some useful resources:

+ + + +
+
+ +
+ +
+
+
+ +
+
+
+ + diff --git a/csci4131/hw7/api/utilities.js b/csci4131/hw7/api/utilities.js new file mode 100644 index 0000000..12e06aa --- /dev/null +++ b/csci4131/hw7/api/utilities.js @@ -0,0 +1,64 @@ +const express = require('express') +const db = require ('../dbio') +const router = express.Router() +router.use(express.urlencoded({ extended: true })) + +router.get('/contacts', function (req, res) { + db.getContacts().then(function(table) { + res.send(table) + }); +}); + +router.post('/login', async function(req, res) { + var loginInfo = req.body; + var login = loginInfo.login; + var pwd = loginInfo.password; + let rows = []; + + // Query the database tbl_login with login and hashed password + db.query(login, pwd).then(function(rows) { + // Provided there is no error, and the results set is assigned to a variable named rows: + if (rows.length >= 1) {// the length should be 0 or 1, but this will work for now + //success, set the session, return success + req.session.user = login; + res.json({ status: 'success' }); + } else { + res.json({ status: 'fail' }); + } + }); + +}); + +router.get('/logout', function(req, res) { + if(!req.session.user) { + res.send('Session not started, can not logout!'); + } else { + req.session.destroy(); + res.redirect('/login'); + } +}); + +router.post('/addContact', function(req, res) { + var contact = req.body; + db.addContact(contact).then(function(r) { + res.send({flag: r}); + }).catch(function() { + + }) +}); + +router.post('/updateContact', function(req, res) { + var edit = req.body; + db.editContact(edit).then(function(f) { + res.send({flag:f}); + }); +}) + +router.post('/deleteContact', function(req, res) { + var contact = req.body.name; + db.deleteContact(contact).then(function(r) { + res.send({flag: r}); + }) +}) + +module.exports = router; diff --git a/csci4131/hw7/create_accounts_table.js b/csci4131/hw7/create_accounts_table.js new file mode 100644 index 0000000..61b2602 --- /dev/null +++ b/csci4131/hw7/create_accounts_table.js @@ -0,0 +1,41 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + console.log("Connected to database!"); + + const sql = `CREATE TABLE tbl_accounts ( + acc_id INT NOT NULL AUTO_INCREMENT, + acc_name VARCHAR(20), + acc_login VARCHAR(20), + acc_password VARCHAR(200), + PRIMARY KEY (acc_id) + )`; + + console.log("Attempting to create table: tbl_accounts"); + dbCon.query(sql, function (err, result) { + if (err) { + throw err; + } + console.log("Table tbl_accounts created"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw7/create_contacts_table.js b/csci4131/hw7/create_contacts_table.js new file mode 100644 index 0000000..bcad389 --- /dev/null +++ b/csci4131/hw7/create_contacts_table.js @@ -0,0 +1,44 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + console.log("Connected to database!"); + + const sql = `CREATE TABLE tbl_contacts ( + contact_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(30), + category VARCHAR(40), + location VARCHAR(300), + contact_info VARCHAR(200), + email VARCHAR(30), + website VARCHAR(300), + website_url VARCHAR(300) + )`; + + console.log("Attempting to create table: tbl_contacts"); + dbCon.query(sql, function (err, result) { + if (err) { + throw err; + } + console.log("Table tbl_accounts created"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw7/dbconfig.xml b/csci4131/hw7/dbconfig.xml new file mode 100644 index 0000000..a7e83ba --- /dev/null +++ b/csci4131/hw7/dbconfig.xml @@ -0,0 +1,8 @@ + + + cse-mysql-classes-01.cse.umn.edu + C4131S21U83 + 6919 + C4131S21U83 + 3306 + diff --git a/csci4131/hw7/dbio.js b/csci4131/hw7/dbio.js new file mode 100644 index 0000000..96faf93 --- /dev/null +++ b/csci4131/hw7/dbio.js @@ -0,0 +1,136 @@ +var mysql = require("mysql"); +var bcrypt = require("bcrypt"); +var fs = require("fs"); +var xml2js = require("xml2js"); +var parser = new xml2js.Parser(); +var conInfo; +var connection; + +fs.readFile(__dirname + '/dbconfig.xml', function (err, data) { + if (err) throw err; + parser.parseString(data, function (err, result) { + if (err) throw err; + conInfo = result; + }); + connection = mysql.createConnection({ + host: conInfo.dbconfig.host[0], + user: conInfo.dbconfig.user[0], + password: conInfo.dbconfig.password[0], + database: conInfo.dbconfig.database[0], + port: conInfo.dbconfig.port[0] + }); + + connection.connect(function (err) { + if (err) { + throw err; + }; + console.log("Connected to MYSQL database!"); + }); +}); + + + +function passcheck(user,pass) { + return new Promise(function(resolve, reject) { + connection.query('SELECT * FROM tbl_accounts', function(err, rows, fields) { + let ret = []; + if (err) { + return reject(err); + } + for (var i = 0; i < rows.length; i++) { + if (rows[i].acc_login.localeCompare(user) === 0) { + if (bcrypt.compareSync(pass, rows[i].acc_password)) { + ret += rows[i]; + } + } + } + resolve(ret); + }); + }); +} + +function getContacts() { + return new Promise (function(resolve, reject) { + let conTab = [] + connection.query('SELECT * FROM tbl_contacts', function (err, rows, fields) { + if (err) throw err; + resolve(rows); + }); + }); +} + +function addContacts(contact) { + let newCon = { + name: contact.name, + category: contact.category, + location: contact.location, + contact_info: contact.contact, + email: contact.email, + website: contact.website, + } + return new Promise (function (resolve, reject) { + connection.query('SELECT * FROM tbl_contacts where name=?', contact.name, function(err, rows, fields) { + if (err) throw err; + console.log("Table found") + if (rows.length > 0) { + // Duplicate + console.log("found Duplicate name!"); + resolve(false); + } else { + connection.query('INSERT tbl_contacts SET ?', newCon, function (err, result) { //Parameterized insert + if (err) throw err; + console.log("Values inserted."); + resolve(true); + }); + } + }); + }); +} + + + +function editContact(contact) { + let edit = { + name: contact.name, + category: contact.category, + location: contact.location, + contact_info: contact.contact, + email: contact.email, + website: contact.website, + } + + return new Promise(function (resolve, reject) { + connection.query('SELECT * FROM tbl_contacts where name=?', contact.name, function (err, rows, fields) { + if (err) throw err; + if (rows.length == 0) { + console.log("Name Changed!"); + resolve(false); + } else { + connection.query('UPDATE tbl_contacts SET ? WHERE name=?', [edit, edit.name], function(err, result) { + if (err) throw err; + console.log("Value edited successfully?") + resolve(true); + }); + } + }); + }); +} + +function deleteContact(contact) { + return new Promise(function(resolve, reject) { + connection.query('DELETE FROM tbl_contacts WHERE name=?', contact, function (err, result) { + if (err) throw err; + console.log("Row deleted!") + resolve(); + }) + }) +} + + + + +exports.addContact = addContacts; +exports.query = passcheck; +exports.getContacts = getContacts; +exports.deleteContact = deleteContact; +exports.editContact = editContact; diff --git a/csci4131/hw7/index.js b/csci4131/hw7/index.js new file mode 100644 index 0000000..851b096 --- /dev/null +++ b/csci4131/hw7/index.js @@ -0,0 +1,109 @@ +// YOU CAN USE THIS FILE AS REFERENCE FOR SERVER DEVELOPMENT +const createError = require('http-errors'); + +// Include the express module +const express = require('express'); + +// helps in extracting the body portion of an incoming request stream +var bodyparser = require('body-parser'); + +// Path module - provides utilities for working with file and directory paths. +const path = require('path'); + +// Helps in managing user sessions +const session = require('express-session'); + +// include the mysql module +var mysql = require('mysql'); + +// Bcrypt library for comparing password hashes +const bcrypt = require('bcrypt'); + +// Include the express router. +const utilities = require('./api/utilities'); + +const port = 9001; + +// create an express application +const app = express(); + +// Use express-session +// In-memory session is sufficient for this assignment +app.use(session({ + secret: "csci4131secretkey", + saveUninitialized: true, + resave: false + } +)); + +// middle ware to serve static files +app.use(express.static(path.join(__dirname, 'public'))); + +// server listens on port for incoming connections +app.listen(port, () => console.log('Listening on port', port)); + +app.get('/', function (req, res) { + res.sendFile(path.join(__dirname, 'public/welcome.html')); +}); + +// GET method route for the contacts page. +// It serves contact.html present in public folder +app.get('/contacts', function(req, res) { + if(!req.session.user) { + res.redirect('/login'); + } else { + res.sendFile(path.join(__dirname, 'public/contacts.html')); + } +}); + +app.get('/stocks', function(req, res) { + res.redirect('/stock'); +}) + +app.get('/stock', function (req, res) { + if (!req.session.user) { + res.redirect('/login'); + } else { + res.sendFile(path.join(__dirname, 'public/stock.html')); + } +}); + +app.get('/addContact', function (req, res) { + if (!req.session.user) { + res.redirect('/login'); + } else { + res.sendFile(path.join(__dirname, 'public/addContact.html')); + } +}); + +app.get('/login', function (req, res) { + if (req.session.user) { + res.redirect('/contacts'); + } else { + res.sendFile(path.join(__dirname, 'login.html')); + } +}); + +app.get('/logout', function(req, res) { + res.redirect('/api/logout') +}); + +// Makes Express use a router called utilities +app.use('/api', utilities); + +// function to return the 404 message and error to client +app.use(function (req, res, next) { + next(createError(404)); +}); + +// error handler +app.use(function (err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + // res.render('error'); + res.send(); +}); diff --git a/csci4131/hw7/insert_into_accounts_table.js b/csci4131/hw7/insert_into_accounts_table.js new file mode 100644 index 0000000..0be14ce --- /dev/null +++ b/csci4131/hw7/insert_into_accounts_table.js @@ -0,0 +1,45 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); +const bcrypt = require('bcrypt'); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + + console.log("Connected to database!"); + + const saltRounds = 10; + const myPlaintextPassword = 'admin%'; // replace with password chosen by you OR retain the same value + const passwordHash = bcrypt.hashSync(myPlaintextPassword, saltRounds); + + const rowToBeInserted = { + acc_name: 'admin$', // replace with acc_name chosen by you OR retain the same value + acc_login: 'admin$', // replace with acc_login chosen by you OR retain the same value + acc_password: passwordHash + }; + + console.log("Attempting to insert record into tbl_accounts"); + dbCon.query('INSERT tbl_accounts SET ?', rowToBeInserted, function (err, result) { + if (err) { + throw err; + } + console.log("Table record inserted!"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw7/login.html b/csci4131/hw7/login.html new file mode 100644 index 0000000..9bb80cc --- /dev/null +++ b/csci4131/hw7/login.html @@ -0,0 +1,48 @@ + + + + + + + + + +
+

Login Page

+
+

+
+
+ + +
+
+ + +
+ +
+
+ + + diff --git a/csci4131/hw7/package.json b/csci4131/hw7/package.json new file mode 100644 index 0000000..0598cc4 --- /dev/null +++ b/csci4131/hw7/package.json @@ -0,0 +1,21 @@ +{ + "name": "strap012_hw7", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node index.js", + "test": "node index.js" + }, + "author": "", + "license": "MIT", + "dependencies": { + "bcrypt": "^5.0.1", + "body-parser": "^1.19.0", + "express": "^4.17.1", + "express-session": "^1.17.1", + "http-errors": "^1.8.0", + "mysql": "^2.18.1", + "xml2js": "^0.4.23" + } +} diff --git a/csci4131/hw7/public/contacts_old.html b/csci4131/hw7/public/contacts_old.html new file mode 100644 index 0000000..d0131ee --- /dev/null +++ b/csci4131/hw7/public/contacts_old.html @@ -0,0 +1,82 @@ + + + + + + + + + + + +

+ +
+ + + + + + + + + + + + + +
NameCategoryLocationContact InformationEmailWebsite
(URL)
+
+ + + \ No newline at end of file diff --git a/csci4131/hw7/public/stock.html b/csci4131/hw7/public/stock.html new file mode 100644 index 0000000..ae9d077 --- /dev/null +++ b/csci4131/hw7/public/stock.html @@ -0,0 +1,123 @@ + + + + + + + + + + + + + +

+ +
+
+
Welcome to Stock Page
+
+
+ +
+
+
+ + + + + + + + + + +
Company +
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+ + + + + + + +
+      
+ +
Company-MetaDataStock-Info
+
+ + + + diff --git a/csci4131/hw7/public/welcome.html b/csci4131/hw7/public/welcome.html new file mode 100644 index 0000000..095023e --- /dev/null +++ b/csci4131/hw7/public/welcome.html @@ -0,0 +1,53 @@ + + + + + + + + + Welcome to Node.js + + + + +
+

Welcome to Express (Node.js)

+

The objective of this assignment is to develop a basic website with:

+

Express which is a Node.js web application framework.

+
+

Following are some useful resources:

+ + + +
+
+ +
+ +
+
+
+ +
+
+
+ + diff --git a/csci4131/lec/08ShepherdLabs960.jpg b/csci4131/lec/08ShepherdLabs960.jpg new file mode 100644 index 0000000..d1262f8 Binary files /dev/null and b/csci4131/lec/08ShepherdLabs960.jpg differ diff --git a/csci4131/lec/Lec10Ex1.html b/csci4131/lec/Lec10Ex1.html new file mode 100644 index 0000000..a77bc41 --- /dev/null +++ b/csci4131/lec/Lec10Ex1.html @@ -0,0 +1,18 @@ + + + + + Race Condition + + + + + + \ No newline at end of file diff --git a/csci4131/lec/Lec23Ex1.xml b/csci4131/lec/Lec23Ex1.xml new file mode 100644 index 0000000..5568c44 --- /dev/null +++ b/csci4131/lec/Lec23Ex1.xml @@ -0,0 +1,5 @@ + + + Honda Civic + 2001 + \ No newline at end of file diff --git a/csci4131/lec/Lec2Ex1.html b/csci4131/lec/Lec2Ex1.html new file mode 100644 index 0000000..d93bf20 --- /dev/null +++ b/csci4131/lec/Lec2Ex1.html @@ -0,0 +1,12 @@ + + + + + your name on the TAB opened by the browser + + + +

My Favourite Site

+Click here + + \ No newline at end of file diff --git a/csci4131/lec/Lec3Ex2.html b/csci4131/lec/Lec3Ex2.html new file mode 100644 index 0000000..8903571 --- /dev/null +++ b/csci4131/lec/Lec3Ex2.html @@ -0,0 +1,32 @@ + + + + + There is no title + + + +

My nonexistent list of Favorite Movies

+ + + + + + + + + + + + + + + +
Favorite MovieFavorite Actor/Actress in Said Movie
Name of Favorite MovieName of Favorite Actor/Actress
Name of Favorite Movie 2Name of Favorite Actor/Actress 2
+ + \ No newline at end of file diff --git a/csci4131/lec/Lec4Ex1.html b/csci4131/lec/Lec4Ex1.html new file mode 100644 index 0000000..9433abd --- /dev/null +++ b/csci4131/lec/Lec4Ex1.html @@ -0,0 +1,28 @@ + + + + + There is no form + + +

Simple Form

+
+

+ + + + + +

+

+ + +

+
+ \ No newline at end of file diff --git a/csci4131/lec/Lec5Ex1.html b/csci4131/lec/Lec5Ex1.html new file mode 100644 index 0000000..18f98ec --- /dev/null +++ b/csci4131/lec/Lec5Ex1.html @@ -0,0 +1,23 @@ + + + + + + + + Box Model Example + + + + + + +
+

The University of Minnesota

+

Educating the Leaders of Tomorrow for over 100 years. + There is always something happening at the U!

+
+ + + + diff --git a/csci4131/lec/Lec6Ex1.html b/csci4131/lec/Lec6Ex1.html new file mode 100644 index 0000000..7b45e18 --- /dev/null +++ b/csci4131/lec/Lec6Ex1.html @@ -0,0 +1,39 @@ + + + + + + + + Add and Multiply Program + + + + + + \ No newline at end of file diff --git a/csci4131/lec/Lec6Ex2.html b/csci4131/lec/Lec6Ex2.html new file mode 100644 index 0000000..99f5843 --- /dev/null +++ b/csci4131/lec/Lec6Ex2.html @@ -0,0 +1,37 @@ + + + + + Possible HW2 constructs + + + + + + + + + + +
Shepherd Labs 100 Union St SE
Minneapolis, MN 55455
+
+ Goldy Gopher +
+ + + + \ No newline at end of file diff --git a/csci4131/lec/Lec7Ex1.html b/csci4131/lec/Lec7Ex1.html new file mode 100644 index 0000000..d7c46e4 --- /dev/null +++ b/csci4131/lec/Lec7Ex1.html @@ -0,0 +1,20 @@ + + + + + Titles are for better people + + + + + + + + \ No newline at end of file diff --git a/csci4131/lec/Lex8Ex1.html b/csci4131/lec/Lex8Ex1.html new file mode 100644 index 0000000..e08b7ef --- /dev/null +++ b/csci4131/lec/Lex8Ex1.html @@ -0,0 +1,15 @@ + + + + +

Display a Telephone Input Field

+ +
+

+ + Format: 123-456-6789

+ +
+ + + \ No newline at end of file diff --git a/csci4131/lec/gophers-mascot.png b/csci4131/lec/gophers-mascot.png new file mode 100644 index 0000000..44e62fa Binary files /dev/null and b/csci4131/lec/gophers-mascot.png differ diff --git a/csci4131/lec/lec7big3/CPE.png b/csci4131/lec/lec7big3/CPE.png new file mode 100644 index 0000000..d137d51 Binary files /dev/null and b/csci4131/lec/lec7big3/CPE.png differ diff --git a/csci4131/lec/lec7big3/EPT.png b/csci4131/lec/lec7big3/EPT.png new file mode 100644 index 0000000..68b5863 Binary files /dev/null and b/csci4131/lec/lec7big3/EPT.png differ diff --git a/csci4131/lec/lec7big3/GPP.png b/csci4131/lec/lec7big3/GPP.png new file mode 100644 index 0000000..7d8bf3d Binary files /dev/null and b/csci4131/lec/lec7big3/GPP.png differ diff --git a/csci4131/lec/lec7big3/GUI.png b/csci4131/lec/lec7big3/GUI.png new file mode 100644 index 0000000..d7e2ccc Binary files /dev/null and b/csci4131/lec/lec7big3/GUI.png differ diff --git a/csci4131/lec/lec7big3/PERF.png b/csci4131/lec/lec7big3/PERF.png new file mode 100644 index 0000000..807b7a0 Binary files /dev/null and b/csci4131/lec/lec7big3/PERF.png differ diff --git a/csci4131/lec/lec7big3/PORT.png b/csci4131/lec/lec7big3/PORT.png new file mode 100644 index 0000000..3d69844 Binary files /dev/null and b/csci4131/lec/lec7big3/PORT.png differ diff --git a/csci4131/lec/lec7big3/RandomPicture.js b/csci4131/lec/lec7big3/RandomPicture.js new file mode 100644 index 0000000..b5f4d73 --- /dev/null +++ b/csci4131/lec/lec7big3/RandomPicture.js @@ -0,0 +1,21 @@ +var iconImg; + +function randImage() { + var index = Math.floor(Math.random()*7); + + var pictures = ["CPE", "EPT", "GPP", "GUI", "PERF", "PORT", "SEO"]; + var descriptions = ["Common Programming Error", + "Error-Prevention Tip", "Good Programming Practice", + "Look-and-Feel Observation", "Performance Tip", "Portability Tip", + "Software Engineering Observation"]; + + iconImg.src = pictures[index] + ".png"; + iconImg.alt = descriptions[index]; +} + +function start() { + iconImg = document.getElementById("image"); + iconImg.addEventListener("click", randImage, false); +} + +window.addEventListener("load", start); \ No newline at end of file diff --git a/csci4131/lec/lec7big3/SEO.png b/csci4131/lec/lec7big3/SEO.png new file mode 100644 index 0000000..73d4507 Binary files /dev/null and b/csci4131/lec/lec7big3/SEO.png differ diff --git a/csci4131/lec/lec7big3/big31.html b/csci4131/lec/lec7big3/big31.html new file mode 100644 index 0000000..574401a --- /dev/null +++ b/csci4131/lec/lec7big3/big31.html @@ -0,0 +1,17 @@ + + + + + + + + + Random Image Generator + + + + + Common Programming Error + + + \ No newline at end of file diff --git a/csci4131/lec/mystyle8.css b/csci4131/lec/mystyle8.css new file mode 100644 index 0000000..5b2546d --- /dev/null +++ b/csci4131/lec/mystyle8.css @@ -0,0 +1,41 @@ + /* A CSS Style file for formatting "the box" around some block elements */ + + +body { + border: .1875em dotted black; + margin: .625em; + max-width: 90%; + } + +section{ + border: .125em solid black; + max-width: 80%; + margin: 1.25em; /* all four sides */ + padding: .625em; /* all four sides */ + } +h1,p { + border: .0625em dashed black; + padding: .625em; + max-width: 80%; + } +h1{ + margin: .5em 0 .25em; /* .5em top,0 right and left, .25em bottom */ + padding-left: .9375em; +} +p{ + margin: 0; /* all four sides */ + padding-left: .9375em; +} +div { +border: .1875em dotted black; +color: red; +margin: .625em; +} + + + + + + + + \ No newline at end of file -- cgit v1.2.3