diff --git a/app/src/main/java/com/amigo/control/DashboardController.java b/app/src/main/java/com/amigo/control/DashboardController.java index e6caa77..cc17a69 100644 --- a/app/src/main/java/com/amigo/control/DashboardController.java +++ b/app/src/main/java/com/amigo/control/DashboardController.java @@ -1,13 +1,62 @@ package com.amigo.control; +import java.util.List; + +import com.amigo.match.DemoMatching; +import com.amigo.match.Match; +import com.amigo.present.UserPresenter; +import com.amigo.user.User; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.servlet.ModelAndView; @Controller public class DashboardController { + @Autowired + UserPresenter presenter; + @GetMapping("/dashboard") - public String showDashboard() { - return "dashboard"; + public ModelAndView showDashboard(@ModelAttribute User user) { + if (!user.isValid() && !presenter.hasUser()) { + return new ModelAndView("error-page"); + } + if (user.isValid()) { + presenter.setUser(user); + } + ModelAndView mav = new ModelAndView("dashboard"); + presenter.populate(mav.getModel()); + return mav; + } + + @GetMapping("/matching-screen") + public ModelAndView showMatchingScreen() { + ModelAndView mav = new ModelAndView("matching-screen"); + User currentUser = presenter.getUser(); + var allMatches = DemoMatching.doMatching(currentUser); + List matchList = allMatches.get(currentUser.getId()); + currentUser.setCurrentMatches(matchList); + + int counter = 0; + for (var each : currentUser.getCurrentMatches()) { + UserPresenter p = new UserPresenter(); + if (each.getUser1() == currentUser){ + p.setUser(each.getUser2()); + } + else { + p.setUser(each.getUser1()); + } + p.setSuffix(String.valueOf(++counter)); + p.populate(mav.getModel()); + } + return mav; + } + + @GetMapping("/*") + public String showError() { + return "error-page"; } } diff --git a/app/src/main/java/com/amigo/control/DatabaseController.java b/app/src/main/java/com/amigo/control/DatabaseController.java index ae69bed..7a5bed6 100644 --- a/app/src/main/java/com/amigo/control/DatabaseController.java +++ b/app/src/main/java/com/amigo/control/DatabaseController.java @@ -37,6 +37,13 @@ public class DatabaseController { return "Saved"; } + @GetMapping("/testaddcourse") + public @ResponseBody String testAddCourse() { + Course course = new Course("CSC101", "LEC0101", "TUT0101"); + courseRepository.save(course); + return "Saved"; + } + /** * Returns all the courses saved in the database */ diff --git a/app/src/main/java/com/amigo/control/RegistrationController.java b/app/src/main/java/com/amigo/control/RegistrationController.java index c5c56b1..2a96b5e 100644 --- a/app/src/main/java/com/amigo/control/RegistrationController.java +++ b/app/src/main/java/com/amigo/control/RegistrationController.java @@ -1,29 +1,30 @@ package com.amigo.control; -import javax.naming.Binding; -import javax.servlet.http.HttpServletRequest; - +import com.amigo.course.Course; +import com.amigo.course.CourseRepository; import com.amigo.form.CourseForm; import com.amigo.form.CourseFormList; import com.amigo.form.InterestForm; import com.amigo.form.RegistrationForm; +import com.amigo.user.UserBuilder; import com.amigo.validate.CourseValidator; import com.amigo.validate.RegistrationValidator; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.View; import org.springframework.web.servlet.mvc.support.RedirectAttributes; /** * Controller for account creation. + *

+ * This controller is used throughout the user registration process (currently 3 + * screens). Once registration is successful, a new {@code User} object is + * created and control is passed on to {@link DashboardController}. */ @Controller public class RegistrationController { @@ -36,8 +37,14 @@ public class RegistrationController { @Autowired CourseValidator courseValidator; + + @Autowired + UserBuilder userBuilder; + + @Autowired + CourseRepository courseRepository; - @GetMapping("/") + @GetMapping({"/", "/index"}) public String showWelcomePage(Model model) { model.addAttribute("regForm", new RegistrationForm()); return "index"; @@ -48,7 +55,7 @@ public String showWelcomePage(Model model) { * * @param form a Data Access Object representing the registration form */ - @PostMapping("/") + @PostMapping({"/", "/index"}) public String validateRegistration(Model model, @ModelAttribute("regForm") RegistrationForm form, BindingResult result) { validator.validate(form, result); @@ -56,6 +63,7 @@ public String validateRegistration(Model model, @ModelAttribute("regForm") Regis model.addAttribute("errorMessage", result.getAllErrors().get(0).getCode()); return "index"; } + userBuilder.populate(form); return "redirect:/register-courses"; } @@ -76,7 +84,13 @@ public String validateCourses(Model model, @ModelAttribute CourseFormList course model.addAttribute("courseForms", new CourseFormList()); return "register-courses"; } + else { + for (CourseForm form : courseForms.getCourseList()) { + courseRepository.save(new Course(form.getCourseCode(), form.getLectureCode(), form.getTutorialCode())); + } + } + userBuilder.populate(courseForms); return "redirect:/register-interests"; } @@ -87,8 +101,9 @@ public String showRegisterInterestPage(Model model) { } @PostMapping("/register-interests") - public String validateInterests(Model model, @ModelAttribute("interestForm") InterestForm interestForm) { - System.out.println(interestForm.getHobbies()); + public String validateInterests(RedirectAttributes attributes, @ModelAttribute("interestForm") InterestForm interestForm) { + userBuilder.populate(interestForm); + attributes.addFlashAttribute("user", userBuilder.createUser()); return "redirect:/dashboard"; } } diff --git a/app/src/main/java/com/amigo/form/CourseForm.java b/app/src/main/java/com/amigo/form/CourseForm.java index 0b87d7f..550cef4 100644 --- a/app/src/main/java/com/amigo/form/CourseForm.java +++ b/app/src/main/java/com/amigo/form/CourseForm.java @@ -10,7 +10,6 @@ public String getCourseCode() { return courseCode; } public void setCourseCode(String courseCode) { - System.out.println(courseCode); this.courseCode = courseCode; } public String getLectureCode() { diff --git a/app/src/main/java/com/amigo/match/DemoMatching.java b/app/src/main/java/com/amigo/match/DemoMatching.java new file mode 100644 index 0000000..dc687f3 --- /dev/null +++ b/app/src/main/java/com/amigo/match/DemoMatching.java @@ -0,0 +1,48 @@ +package com.amigo.match; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.amigo.course.CourseSetFactory; +import com.amigo.user.ProfileFactory; +import com.amigo.user.User; +import com.amigo.user.UserFactory; + +public class DemoMatching { + + public static Map> doMatching(User user) { + Matcher matcher = new Matcher(); + List users = createDemoUsers(); + users.add(user); + return matcher.match(users); + } + + private static List createDemoUsers() { + ArrayList users = new ArrayList(); + ProfileFactory profileFactory = new ProfileFactory(); + CourseSetFactory courseSetFactory = new CourseSetFactory(); + UserFactory userFactory = new UserFactory(); + var p1 = profileFactory.createProfile("Toni", 2, "Linguistics", courseSetFactory.createCourseSet("CSC207,LIN102,LIN101"), + "", "Chess", "Ice Skating", "Taylor Swift", "Eat Manpuku"); + var p2 = profileFactory.createProfile("Ikshat", 2, "Computer Science", courseSetFactory.createCourseSet("CSC207,CSC301,CSC209"), + "", "Sleep", "Rock Climbing", "Zachary Knowles", "Play Video Games"); + var p3 = profileFactory.createProfile("Rue", 2, "Computer Science", courseSetFactory.createCourseSet("CSC207,CSC236,CSC209"), + "", "Poetry", "Ew Sports", "BTS", "Read"); + var p4 = profileFactory.createProfile("Adrian", 2, "Gender Studies", courseSetFactory.createCourseSet("ECO101,CSC207,MAT237"), + "", "Economics", "Ski", "Illenium", "Breathe"); + var p5 = profileFactory.createProfile("Dien", 2, "Computational Biology and Bioinformatics", courseSetFactory.createCourseSet("CSC207,CSC236,BIO101"), + "", "Makeup", "Dance", "Blackpink", "Makeup Even More"); + var p6 = profileFactory.createProfile("Lawrence", 2, "Chemistry", courseSetFactory.createCourseSet("CHM101,CHM102,CSC207,MAT237"), + "", "Crypto", "Run", "Pop", "Lift Weights"); + + users.add(userFactory.createUser(p1)); + users.add(userFactory.createUser(p2)); + users.add(userFactory.createUser(p3)); + users.add(userFactory.createUser(p4)); + users.add(userFactory.createUser(p5)); + users.add(userFactory.createUser(p6)); + + return users; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/amigo/present/UserPresenter.java b/app/src/main/java/com/amigo/present/UserPresenter.java new file mode 100644 index 0000000..b7a4540 --- /dev/null +++ b/app/src/main/java/com/amigo/present/UserPresenter.java @@ -0,0 +1,57 @@ +package com.amigo.present; + +import java.util.Map; + +import com.amigo.user.User; + +import org.springframework.stereotype.Controller; + +/** + * A presenter that populates the model for dashboard page given a specific + * user. + */ +@Controller +public class UserPresenter { + + private User user; + + /** + * The suffix used to distinguish each attribute set. + */ + private String suffix = ""; + + /** + * Returns whether there is currently a {@code User} object associated with this + * presenter. + */ + public boolean hasUser() { + return user != null; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public void setSuffix(String suffix) { + this.suffix = suffix; + } + + /** + * Populates the ModelMap with attributes taken from the user. + */ + public void populate(Map map) { + if (user == null) { + throw new IllegalStateException("User not set with setUser()"); + } + map.put("name" + (suffix.equals("") ? "" : "_" + suffix), user.getProfile().getName()); + map.put("hobbies" + (suffix.equals("") ? "" : "_" + suffix), user.getProfile().getHobbies()); + map.put("sports" + (suffix.equals("") ? "" : "_" + suffix), user.getProfile().getSportInterest()); + map.put("music" + (suffix.equals("") ? "" : "_" + suffix), user.getProfile().getMusInterest()); + map.put("recreational" + (suffix.equals("") ? "" : "_" + suffix), user.getProfile().getRecInterest()); + map.put("courses" + (suffix.equals("") ? "" : "_" + suffix), user.getProfile().getCoursesAsString()); + } +} diff --git a/app/src/main/java/com/amigo/user/Profile.java b/app/src/main/java/com/amigo/user/Profile.java index fb0ec7d..68226ac 100644 --- a/app/src/main/java/com/amigo/user/Profile.java +++ b/app/src/main/java/com/amigo/user/Profile.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.HashSet; +import java.util.stream.Collectors; import javax.persistence.Entity; import com.amigo.course.Course; @@ -24,7 +25,9 @@ public class Profile { /** * Creates a profile using the default constructor */ - public Profile() {} + public Profile() { + this.courses = new HashSet<>(); + } /** * Creates a profile containing a name, year of study, program of study, courses, contact info and interests. @@ -97,11 +100,15 @@ public HashSet getCourses() { public ArrayList getCoursesList() { ArrayList coursesStringList = new ArrayList<>(); for (Course course : courses) { - coursesStringList.add(course.toString()); + coursesStringList.add(course.getCourseCode()); } return coursesStringList; } + public String getCoursesAsString() { + return getCoursesList().stream().collect(Collectors.joining(" ")); + } + /** * Returns the profile's contact info */ diff --git a/app/src/main/java/com/amigo/user/ProfileFactory.java b/app/src/main/java/com/amigo/user/ProfileFactory.java index d787735..8a36038 100644 --- a/app/src/main/java/com/amigo/user/ProfileFactory.java +++ b/app/src/main/java/com/amigo/user/ProfileFactory.java @@ -5,7 +5,7 @@ import java.util.HashSet; -public class ProfileFactory{ +public class ProfileFactory { /** * Constructor for ProfileFactory diff --git a/app/src/main/java/com/amigo/user/User.java b/app/src/main/java/com/amigo/user/User.java index f894846..d31dec7 100644 --- a/app/src/main/java/com/amigo/user/User.java +++ b/app/src/main/java/com/amigo/user/User.java @@ -28,7 +28,9 @@ public class User { /** * Creates a user using the default constructor */ - public User() {} + public User() { + this.currentMatches = new ArrayList<>(); + } /** * Creates a user containing an id, an email, a password, a profile and an empty list of current matches. @@ -48,6 +50,10 @@ public Profile getProfile() { return profile; } + public void setProfile(Profile profile) { + this.profile = profile; + } + /** * Returns a user's id */ @@ -55,6 +61,9 @@ public String getId() { return id; } + public void setId(String id) { + this.id = id; + } /** * Returns a user's email @@ -63,6 +72,10 @@ public String getEmail() { return email; } + public void setEmail(String email) { + this.email = email; + } + /** * Returns a user's password */ @@ -106,4 +119,16 @@ public String toStringCurrentMatches() { } return namesCurrentMatches.toString(); } + + public void setPassword(String password) { + this.password = password; + } + + /** + * Returns whether the user object has been properly instantiated and has its + * attributes set. + */ + public boolean isValid() { + return profile != null; + } } diff --git a/app/src/main/java/com/amigo/user/UserBuilder.java b/app/src/main/java/com/amigo/user/UserBuilder.java new file mode 100644 index 0000000..8a30274 --- /dev/null +++ b/app/src/main/java/com/amigo/user/UserBuilder.java @@ -0,0 +1,75 @@ +package com.amigo.user; + +import com.amigo.course.Course; +import com.amigo.form.CourseForm; +import com.amigo.form.CourseFormList; +import com.amigo.form.InterestForm; +import com.amigo.form.RegistrationForm; + +import org.springframework.stereotype.Service; + +/** + * Builder for {@code User} objects. + */ +@Service +public class UserBuilder { + + // TODO: assign ID to user + private User user; + private Profile profile; + + public UserBuilder() { + this.reset(); + } + + /** + * Populates the {@code User} object with attributes from the registration form. + */ + public void populate(RegistrationForm form) { + profile.setName(form.getFirstName() + " " + form.getLastName()); + user.setEmail(form.getEmail()); + user.setPassword(form.getPassword()); + } + + /** + * Populates the {@code User} object with attributes from the course form. + */ + public void populate(CourseFormList form) { + for (var each : form.getCourseList()) { + populateCourse(each); + } + } + + private void populateCourse(CourseForm form) { + Course c = new Course(form.getCourseCode(), form.getLectureCode(), form.getTutorialCode()); + profile.addCourses(c); + } + + /** + * Populates the {@code User} object with attributes from the interest form. + */ + public void populate(InterestForm form) { + profile.setHobbies(form.getHobbies()); + profile.setRecInterest(form.getRecreational()); + profile.setMusInterest(form.getMusic()); + profile.setSportInterest(form.getSports()); + } + + + public User createUser() { + user.setProfile(this.profile); + String id = this.profile.getName().split(" ")[0].toLowerCase() + (int) (1000 * Math.random() + 1); + user.setId(id); + User u = this.user; + reset(); + return u; + } + + /** + * Discards all previous attributes. + */ + private void reset() { + user = new User(); + profile = new Profile(); + } +} diff --git a/app/src/main/java/com/amigo/user/UserFactory.java b/app/src/main/java/com/amigo/user/UserFactory.java index 5622671..88aa20d 100644 --- a/app/src/main/java/com/amigo/user/UserFactory.java +++ b/app/src/main/java/com/amigo/user/UserFactory.java @@ -1,11 +1,9 @@ package com.amigo.user; -public class UserFactory{ - /** - * Constructs for UserFactory. - */ - public UserFactory() { - } +/** + * Factory that curates form input and creates a {@code User} object. + */ +public class UserFactory { /** * Generates a random ID for a Profile and create a User using the Profile and ID. @@ -19,4 +17,5 @@ public User createUser(Profile profile) { String password = "password123"; return new User(profile, id, email, password); } + } diff --git a/app/src/main/resources/static/css/amigos.css b/app/src/main/resources/static/css/amigos.css index bb4742f..edcfe14 100644 --- a/app/src/main/resources/static/css/amigos.css +++ b/app/src/main/resources/static/css/amigos.css @@ -1,3 +1,15 @@ +.w-layout-grid { + display: -ms-grid; + display: grid; + grid-auto-columns: 1fr; + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: auto auto; + grid-template-rows: auto auto; + grid-row-gap: 16px; + grid-column-gap: 16px; +} + .body { margin-bottom: 0px; margin-left: 0px; @@ -44,7 +56,7 @@ display: flex; margin-top: 0px; margin-right: 0px; - padding: 0px 30px 75px; + padding: 0px 30px 30px; -webkit-box-orient: horizontal; -webkit-box-direction: normal; -webkit-flex-direction: row; @@ -123,12 +135,12 @@ display: flex; padding-top: 60px; padding-bottom: 0%; - padding-left: 0px; + padding-left: 20px; } .column-4 { - padding-bottom: 4%; - padding-left: 0px; + padding: 86px 170px 0% 0px; + font-size: 100%; } .heading { @@ -832,7 +844,7 @@ } .image-9 { - position: absolute; + position: fixed; left: auto; top: 0%; right: 0%; @@ -851,16 +863,661 @@ .form-2 { margin-right: -42px; + padding-top: 20%; + padding-right: 0px; + padding-left: 0px; +} + +.normal-text-style-copy { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-top: -25px; + padding-top: 0px; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + font-size: 30px; +} + +.grid { + margin-top: 30px; + grid-auto-flow: column dense; + grid-column-gap: 0px; + grid-row-gap: 35px; + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: minmax(230px, 1fr) minmax(230px, 1fr); + grid-template-rows: minmax(230px, 1fr) minmax(230px, 1fr); + border-style: none solid none none; + border-width: 1px 0px 1px 1px; + border-color: #000; + background-clip: border-box; + -webkit-text-fill-color: inherit; +} + +.div-block-8 { + padding-right: 237px; + padding-bottom: 104px; +} + +.image-10 { + padding-bottom: 0px; +} + +.profile-pic { + position: static; + left: -17px; + top: 0%; + right: 0%; + bottom: auto; + display: inline-block; + margin-right: auto; + margin-left: 20px; + padding-left: 0px; + float: none; + border-radius: 50px; + -o-object-fit: fill; + object-fit: fill; +} + +.div-for-match-1 { + margin-top: 0px; + margin-left: 10px; + border: 1px none #000; +} + +.grid-2 { + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: auto auto auto auto; + grid-template-rows: auto auto auto auto; +} + +.match-1-info-grid { + margin-left: 25px; + grid-column-gap: 2px; + grid-row-gap: 0px; + -ms-grid-rows: minmax(0px, 1fr) auto auto auto; + grid-template-rows: minmax(0px, 1fr) auto auto auto; +} + +.grid-4 { + grid-column-gap: 5px; + grid-row-gap: 4px; + -ms-grid-columns: 1fr; + grid-template-columns: 1fr; + -ms-grid-rows: auto auto; + grid-template-rows: auto auto; +} + +.username { + display: inline; + overflow: visible; + margin-top: 10px; + padding-top: 0px; + padding-left: 20px; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; +} + +.match-2-pic { + position: static; + left: auto; + top: 0%; + right: 0%; + bottom: auto; + display: inline-block; + margin-right: auto; + margin-left: 20px; + padding-left: 0px; + float: none; + border-radius: 50px; + -o-object-fit: fill; + object-fit: fill; +} + +.match-2-username { + display: inline-block; + margin-top: 10px; + padding-left: 15px; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; +} + +.match-2-info-grid { + margin-left: 25px; + grid-column-gap: 2px; + grid-row-gap: 0px; + -ms-grid-rows: minmax(0px, 1fr) auto auto auto; + grid-template-rows: minmax(0px, 1fr) auto auto auto; +} + +.div-for-match-2 { + margin-left: 20px; + padding-top: 0px; +} + +.div-for-match-3 { + padding-right: 10px; +} + +.match-3-pic { + position: static; + left: auto; + top: 0%; + right: 0%; + bottom: auto; + display: inline-block; + margin-right: auto; + margin-left: 20px; + padding-left: 0px; + float: none; + border-radius: 50px; + -o-object-fit: fill; + object-fit: fill; +} + +.match-3-username { + display: inline-block; + margin-top: 10px; + padding-left: 15px; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; +} + +.match-3-info-grid { + margin-left: 25px; + grid-column-gap: 2px; + grid-row-gap: 0px; + -ms-grid-rows: minmax(0px, 1fr) auto auto auto; + grid-template-rows: minmax(0px, 1fr) auto auto auto; +} + +.div-for-match-4 { + padding-right: 10px; +} + +.match-4-pic { + position: static; + left: auto; + top: 0%; + right: 0%; + bottom: auto; + display: inline-block; + margin-right: auto; + margin-left: 20px; + padding-left: 0px; + float: none; + border-radius: 50px; + -o-object-fit: fill; + object-fit: fill; +} + +.match-4-username { + display: inline-block; + margin-top: 10px; + padding-left: 15px; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; +} + +.match-4-info-grid { + margin-left: 25px; + grid-column-gap: 2px; + grid-row-gap: 0px; + -ms-grid-rows: minmax(0px, 1fr) auto auto auto; + grid-template-rows: minmax(0px, 1fr) auto auto auto; +} + +.div-block-9 { + padding-bottom: 55px; +} + +.div-block-10 { + display: block; + padding-top: 0px; + padding-bottom: 0px; +} + +.profile { + margin-left: 10px; + padding: 10px 50px 10px 20px; + border-radius: 5px; + background-color: #e9e9e9; + background-image: url('../images/account.png'); + background-position: 90% 50%; + background-size: 30%; + background-repeat: no-repeat; + font-family: Raleway, sans-serif; + color: #0f0e0e; + font-weight: 500; +} + +.bold-text { + color: #1d1818; +} + +.home { + margin-left: 40px; + padding-right: 50px; + padding-left: 20px; + border-radius: 5px; + background-color: #e9e9e9; + background-image: url('../images/Home.png'); + background-position: 80% 35%; + background-size: 25px; + background-repeat: no-repeat; + color: #0f0e0e; + font-weight: 500; +} + +.match-pool { + margin-left: 10px; + padding: 10px 40px 10px 20px; + border-radius: 5px; + background-color: #e9e9e9; + background-image: url('../images/match-pool-icon.png'); + background-position: 90% 50%; + background-size: 15%; + background-repeat: no-repeat; + font-family: Raleway, sans-serif; + color: #0f0e0e; + font-weight: 500; +} + +.match-pool-copy { + margin-left: 10px; + padding: 10px 40px 10px 20px; + border-radius: 5px; + background-color: #e9e9e9; + background-image: url('../images/match-pool-icon.png'); + background-position: 90% 50%; + background-size: 15%; + background-repeat: no-repeat; + font-family: Raleway, sans-serif; + color: #0f0e0e; + font-weight: 500; +} + +.grid-5 { + grid-row-gap: 6px; + -ms-grid-columns: 1fr; + grid-template-columns: 1fr; + -ms-grid-rows: auto auto auto auto auto auto auto auto auto auto; + grid-template-rows: auto auto auto auto auto auto auto auto auto auto; +} + +.div-for-profile-copy { + margin-top: -50px; + margin-left: 30%; + padding-left: 0px; + border: 1px none #000; +} + +.profile-pic-copy { + position: static; + left: -17px; + top: 0%; + right: 0%; + bottom: auto; + display: inline-block; + margin-right: auto; + margin-left: 0px; + padding-left: 0px; + float: none; + border-radius: 50px; + -o-object-fit: fill; + object-fit: fill; +} + +.button-5 { + margin-right: 300px; + border-radius: 5px; + background-image: -webkit-gradient(linear, left top, right top, from(#1a73e9), to(#6c92f4)); + background-image: linear-gradient(90deg, #1a73e9, #6c92f4); + text-align: center; +} + +.button-5-copy { + margin-right: 300px; + border-radius: 5px; + background-image: -webkit-gradient(linear, left top, right top, from(#1a73e9), to(#6c92f4)); + background-image: linear-gradient(90deg, #1a73e9, #6c92f4); + text-align: center; +} + +.button-5-copy-copy { + margin-right: 300px; + border-radius: 5px; + background-image: -webkit-gradient(linear, left top, right top, from(#1a73e9), to(#6c92f4)); + background-image: linear-gradient(90deg, #1a73e9, #6c92f4); + text-align: center; +} + +.button-5-copy-copy-copy { + margin-right: 300px; + border-radius: 5px; + background-image: -webkit-gradient(linear, left top, right top, from(#1a73e9), to(#6c92f4)); + background-image: linear-gradient(90deg, #1a73e9, #6c92f4); + text-align: center; +} + +.home-copy { + margin-top: -10px; + margin-left: 40px; + padding-right: 50px; + padding-left: 20px; + border-radius: 5px; + background-color: #e9e9e9; + background-image: url('../images/Home.png'); + background-position: 80% 40%; + background-size: 25%; + background-repeat: no-repeat; + color: #0f0e0e; + font-weight: 500; +} + +.div-block-11 { + padding-top: 10px; +} + +.view-matches { + margin-left: 10px; + padding: 10px 50px 10px 20px; + border-radius: 5px; + background-color: #e9e9e9; + background-image: url('../images/Eye.png'); + background-position: 90% 50%; + background-size: 20%; + background-repeat: no-repeat; + font-family: Raleway, sans-serif; + color: #0f0e0e; + font-weight: 500; +} + +.text-field-4 { + margin-right: 0px; + background-color: #f2f2f2; +} + +.text-field-5 { + background-color: #f2f2f2; +} + +.form-3 { + margin-top: 40px; +} + +.field-label-5 { + font-size: 20px; +} + +.form-block { + padding-top: 30px; +} + +.heading-10 { + display: block; + margin-left: 40px; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-flex: 0; + -webkit-flex: 0 auto; + -ms-flex: 0 auto; + flex: 0 auto; +} + +.enter-course-detail { + margin-right: -42px; + padding-top: 0%; padding-right: 0px; padding-left: 0px; } +.sign-out { + margin-left: 10px; + padding: 10px 40px 10px 20px; + border-radius: 5px; + background-color: #e9e9e9; + background-image: url('../images/lock.png'); + background-position: 90% 50%; + background-size: 20%; + background-repeat: no-repeat; + font-family: Raleway, sans-serif; + color: #0f0e0e; + font-weight: 500; +} + +.heading-11 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 500%; + font-weight: 500; +} + +.heading-12 { + padding-top: 20px; + padding-right: 0px; + font-size: 150%; +} + +.image-9-copy { + position: relative; + left: 50%; + top: -59px; + right: auto; + bottom: 0%; + display: block; + margin-top: 10px; + -webkit-align-self: auto; + -ms-flex-item-align: auto; + -ms-grid-row-align: auto; + align-self: auto; + -webkit-box-flex: 0; + -webkit-flex: 0 auto; + -ms-flex: 0 auto; + flex: 0 auto; + text-align: left; +} + +.div-block-12 { + margin-left: -15px; + padding-left: 0px; +} + @media screen and (max-width: 991px) { .text-block-2-copy-copy { left: 225px; } } +#w-node-_58ef5489-6995-c249-6e87-a6ad2f52c0b8-727523c4 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_5cc9eaae-d95c-d923-d660-28f1547a16ac-727523c4 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_9ffa7a2f-0d92-bc86-7085-ed5f5b96ba7a-727523c4 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_31c8c668-211d-b1a0-3f15-da8fdee96d9c-727523c4 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_58c50f53-e6e4-3d8b-895e-f3c4d66655ec-74ea40a1 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-e0ee71ce-ba8a-06a9-3812-cc2b04a642d6-48d27bcf { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_01c9933c-ed07-8d44-bf9a-0a0c8e82c838-7d59ff1e { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_022f8e36-a97c-3f1c-9e1f-4a2e8636bc5c-8a38db31 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_58ef5489-6995-c249-6e87-a6ad2f52c0b8-2d83d0f6 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_5cc9eaae-d95c-d923-d660-28f1547a16ac-2d83d0f6 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_9ffa7a2f-0d92-bc86-7085-ed5f5b96ba7a-2d83d0f6 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_31c8c668-211d-b1a0-3f15-da8fdee96d9c-2d83d0f6 { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + +#w-node-_58c50f53-e6e4-3d8b-895e-f3c4d66655ec-cbb2641c { + -ms-grid-row: span 1; + grid-row-start: span 1; + -ms-grid-row-span: 1; + grid-row-end: span 1; + -ms-grid-column: span 2; + grid-column-start: span 2; + -ms-grid-column-span: 2; + grid-column-end: span 2; +} + .form-error { margin-top: 10px; padding: 10px; diff --git a/app/src/main/resources/static/images/Empty-profile-icon.png b/app/src/main/resources/static/images/Empty-profile-icon.png new file mode 100644 index 0000000..b0f8338 Binary files /dev/null and b/app/src/main/resources/static/images/Empty-profile-icon.png differ diff --git a/app/src/main/resources/templates/dashboard.html b/app/src/main/resources/templates/dashboard.html index 549ba55..40af1c5 100644 --- a/app/src/main/resources/templates/dashboard.html +++ b/app/src/main/resources/templates/dashboard.html @@ -1,33 +1,32 @@ - + - Main Account Page - - + Dashboard + + -

- Home - Match Pool - Socials - View Match - Sign out + Home + Match Pool + Socials + View Match + Sign out
@@ -38,24 +37,23 @@

Amigos

-

Username

+

Name

Hobbies

-
This is some text inside of a div block.
+
This is some text inside of a div block.

Sports Interests

-
This is some text inside of a div block.
+
This is some text inside of a div block.

Music Interests

-
This is some text inside of a div block.
+
This is some text inside of a div block.

Recreation Interests

-
This is some text inside of a div block.
+
This is some text inside of a div block.

Current Courses

-
This is some text inside of a div block.
+
This is some text inside of a div block.
- \ No newline at end of file diff --git a/app/src/main/resources/templates/log-in-success.html b/app/src/main/resources/templates/error-page.html similarity index 64% rename from app/src/main/resources/templates/log-in-success.html rename to app/src/main/resources/templates/error-page.html index a5b2267..8ad97a8 100644 --- a/app/src/main/resources/templates/log-in-success.html +++ b/app/src/main/resources/templates/error-page.html @@ -1,13 +1,11 @@ - - - + + - Log in successful page - - + Error page + + - @@ -20,18 +18,25 @@
-

Amigos

-
From classmates to Amigos

login successful
+

Amigos

+
From classmates to Amigos
+
+
+
+

Sorry!

+

We ran into an error.
It will be fixed soon!
Meanwhile, please navigate
back to the homepage, or grab a warm drink while it's being fixed!

+
-
diff --git a/app/src/main/resources/templates/index.html b/app/src/main/resources/templates/index.html index db2ddfc..6d88f4b 100644 --- a/app/src/main/resources/templates/index.html +++ b/app/src/main/resources/templates/index.html @@ -21,7 +21,7 @@