diff --git a/src/main/java/Team5/SmartTowns/rewards/Badge.java b/src/main/java/Team5/SmartTowns/rewards/Badge.java index 4b3ea048f1162f1881fc50176bfbe39667b166ce..25c231e14e3f0afdd4ecfc2d6e9f352925224097 100644 --- a/src/main/java/Team5/SmartTowns/rewards/Badge.java +++ b/src/main/java/Team5/SmartTowns/rewards/Badge.java @@ -30,7 +30,7 @@ public class Badge { private String findImagePath(){ /* Finds the image in the Path folder, if image is not found assigns default image */ String imgPath = "images/rewards/badges/" + id + ".jpg"; - String notFoundPath = "images/rewards/badges/0.jpg"; + String notFoundPath = "/images/rewards/badges/0.png"; File imgFile = new File("src/main/resources/static/" + imgPath); return imgFile.exists() ? imgPath : notFoundPath; diff --git a/src/main/java/Team5/SmartTowns/users/UserController.java b/src/main/java/Team5/SmartTowns/users/UserController.java index 78c1d94da5567720c65e13608e97e4a2cb143d49..a72718d0062764dc096eb34acc7da8df7d1de4e1 100644 --- a/src/main/java/Team5/SmartTowns/users/UserController.java +++ b/src/main/java/Team5/SmartTowns/users/UserController.java @@ -1,5 +1,6 @@ package Team5.SmartTowns.users; +import Team5.SmartTowns.rewards.Badge; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -17,12 +18,24 @@ public class UserController { new User(3, "johndoe@gmail.com", "Leon Kennedy"), new User(4, "johndoe@gmail.com", "Jill Valentine") ); + static List<Badge> badges = List.of( + new Badge(1, "Badge1", "Bage One is This", 1), + new Badge(2, "Badge1", "Bage One is This", 4), + new Badge(3, "Badge1", "Bage One is This", 4), + new Badge(4, "Badge1", "Bage One is This", 5), + new Badge(5, "Badge1", "Bage One is This", 5), + new Badge(46, "Badge1", "Bage One is This", 5), + new Badge(7, "Badge1", "Bage One is This", 2) + ); @GetMapping("/user/{id}") public ModelAndView getUserPage(@PathVariable int id){ ModelAndView mav = new ModelAndView("rewards/userProfile"); - users.stream().filter(user -> user.getId() == id).findFirst() //Convoluted way of finding the matching user to the id, probably easier to do a hashmap + users.stream() + .filter(user -> user.getId() == id) + .findFirst() //Convoluted way of finding the matching user to the id, probably easier to do a hashmap .ifPresent(result -> mav.addObject("user", result)); + mav.addObject("badges", badges); return mav; } } diff --git a/src/main/resources/static/css/templatingstyle.css b/src/main/resources/static/css/templatingstyle.css index e2955d7c3648632fffed11ecd6c6516b3dda4dff..3819e78cd8f7051d57b75c4f90bc3c6e7914fe0c 100644 --- a/src/main/resources/static/css/templatingstyle.css +++ b/src/main/resources/static/css/templatingstyle.css @@ -11,12 +11,19 @@ body { main { background: #1e1e1e; border-radius: 1vw; - margin-inline: max(1vw, 2em); - margin-block: 1svh; - width: min(90%, 90vw); + margin-inline: 5%; + margin-block: 5%; + width: auto; padding-block: 2svh; padding-inline: 1vw; box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh max(1vw, 1em); + @media only screen and (max-device-width: 500px) { + min-height: 90svh; + } + + @media only screen and (min-device-width: 1000px) { + margin-block: 2.5% + } } diff --git a/src/main/resources/static/css/userProfile.css b/src/main/resources/static/css/userProfile.css index 7e1ea6d4aedb27e90dd0351295950082af9b5432..f2617b279a934f7fdc104023614353dbd8e0edf4 100644 --- a/src/main/resources/static/css/userProfile.css +++ b/src/main/resources/static/css/userProfile.css @@ -25,40 +25,57 @@ } #badgesBar { - background-color: white; border-radius: 1vw; - margin-inline: max(4vw, 3rem); - display: flex; - flex-direction: column; - + display: grid; + grid-template-areas: "header" + "badges"; + overflow-x: scroll; + overflow-y: hidden; + scrollbar-width: none; + scrollbar-color: transparent transparent; + color: white; + @media only screen and (min-device-width: 501px) { + height: 24vw; + } & h2 { + position: absolute; + grid-area: header; margin-inline: 5vw; padding-inline: 2vw; margin-block: 0.5svh; box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh 1vw -1vw; border-bottom: #36454F solid 2px; - font-size: max(2vw, 2em); + font-size: 4vw; + @media only screen and (min-device-width: 501px) { + font-size: 4vw; + } } - - & .badgesContainer { - margin: 1svh 2vw; - padding: 1svh 1vw; - border-inline: solid rgba(194, 98, 188, 0.7) 5px; - border-radius: 10%; - background: linear-gradient(90deg, rgba(255, 215, 0, 0.75), rgba(184, 134, 11, 0.75)); - overflow-x: scroll; - min(18svh, 12em); + & #allBadgesContainer { + margin-top: 3svh; + grid-area: badges; + height: 10svh; align-content: center; display: flex; - - & .badge { - margin-inline: 3vw; - height: min(18svh, 10em); - + @media only screen and (min-device-width: 501px) { + height: 20vw; + margin-top: 6vw; + } + } + & .badgeImg { + margin-inline: 3vw; + height: 8svh; + @media only screen and (min-device-width: 501px) { + height: 15vw; } + transition: 0.3s ease-out 100ms; + } + & .badgeImg:hover { + /*box-shadow: 0 0 20px 10px #bbbb00;*/ + transform: scale(1.5,1.5); } } + #stickersBox { display: flex; flex-direction: column; @@ -94,58 +111,36 @@ /* TOOLTIP CSS MODIFIED FROM: http://www.menucool.com/tooltip/css-tooltip*/ -.tooltip { - display:inline-block; - position:relative; - border-bottom:1px dotted #666; - text-align:left; -} - -.tooltip h3 {margin:12px 0;} - -.tooltip { - display:inline-block; +.popUpBox { + display: flex; position:relative; - border-bottom:1px dotted #666; - text-align:left; -} - -.tooltip h3 {margin:12px 0;} - -.tooltip .right { - min-width:200px; - max-width:18vw; - max-height: 22vw; - top:-20px; - left:50%; - transform:translate(-50%, 10%); + width: 50vw; + height: 50svh; + margin:auto; + align-self: center; + /*transform:translate(-50%, -5%);*/ padding:10px 20px; color:#ffffff; background-color:#009cdc; font-weight:normal; font-size:14px; border-radius:8px; - position:absolute; - z-index:1; + + z-index:99; box-sizing:border-box; box-shadow:0 1px 8px rgba(0,0,0,0.5); visibility:hidden; opacity:0; transition:opacity 0.8s; - overflow: hidden; + overflow: visible; } - -.tooltip:hover .right { +.tooltip:hover .popUpBox { visibility:visible; opacity:1; -} - -.tooltip .right img { - width:400px; - border-radius:8px 8px 0 0; + overflow: visible; } .tooltip .text-content { padding:10px 20px; } -.tooltip .right i { +.tooltip .popUpBox i { position:absolute; top:50%; right:100%; @@ -154,17 +149,5 @@ height:24px; overflow:hidden; } -/*.tooltip .right i::after {*/ -/* content:'';*/ -/* position:absolute;*/ -/* width:12px;*/ -/* height:12px;*/ -/* left:0;*/ -/* top:100%;*/ -/* transform:translate(50%,-50%) rotate(-45deg);*/ -/* background-color:#444444;*/ -/* box-shadow:0 1px 8px rgba(0,0,0,0.5);*/ -/*}*/ - diff --git a/src/main/resources/static/images/rewards/badges/0.png b/src/main/resources/static/images/rewards/badges/0.png new file mode 100644 index 0000000000000000000000000000000000000000..57e379c719f5fe28ba827d7007be9637cfd9ff73 Binary files /dev/null and b/src/main/resources/static/images/rewards/badges/0.png differ diff --git a/src/main/resources/static/scripts/gabScripts.js b/src/main/resources/static/scripts/gabScripts.js deleted file mode 100644 index 3053fc2316552e2f8c588847aa67e1aaa44aed44..0000000000000000000000000000000000000000 --- a/src/main/resources/static/scripts/gabScripts.js +++ /dev/null @@ -1,16 +0,0 @@ -function selectTrail(string, element) { - console.log('Clicked') - let listEl = document.getElementsByClassName('liHeader') - for (let i = 0; i < listEl.length; i++) { - listEl[i].classList.remove('selected') - } - document.getElementById(string).classList.add("selected") - -} - -function updateOutput() { - $.post("test_ajax_frag").done(function (fragment) { - console.log(fragment); - $("#trailInfoBox").replaceWith(fragment); - }); -} \ No newline at end of file diff --git a/src/main/resources/templates/rewards/userProfile.html b/src/main/resources/templates/rewards/userProfile.html index 18aa7d2fb58f84acfbf69197614949084016123c..381c9f0f9b1bc48b01dd49028d40b132563558af 100644 --- a/src/main/resources/templates/rewards/userProfile.html +++ b/src/main/resources/templates/rewards/userProfile.html @@ -23,117 +23,16 @@ <section class="rewards"> <!--Reward lists, badges on top, stickers (larger) on the bottom--> <article id="badgesBar"> <h2>Your Badges: </h2> <!--Shows first earned badges, followed by greyed out badges--> - <div class="badgesContainer"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <img src="../images/badges.png" alt="Badge" class="badge locked"> - <img src="../images/badges.png" alt="Badge" class="badge locked"> + <div id="allBadgesContainer" class="centerFlex"> + <img class="badgeImg" th:each="badge : ${badges}" th:src="@{'..' + ${badge.getImgPath()}}" + th:id="'img' + ${badge.getId()}" th:alt="${badge.getName()}" > </div> </article> <article id="stickersBox"> <!--Need a controller to show earned stickers --> <h2> STICKERS! </h2> <div class="stickersContainer"> - <div class="tooltip"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <div class="right"> - <div class="text-content"> - <h3>Fade in Effect</h3> - <ul> - <li>This demo has fade in/out effect.</li> - <li>It is using CSS opacity, visibility, and transition property to toggle the tooltip.</li> - <li>Other demos are using display property<em>(none or block)</em> for the toggle.</li> - </ul> - </div> - <i></i> - </div> - </div> - <div class="tooltip"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <div class="right"> - <div class="text-content"> - <h3>Fade in Effect</h3> - <ul> - <li>This demo has fade in/out effect.</li> - <li>It is using CSS opacity, visibility, and transition property to toggle the tooltip.</li> - <li>Other demos are using display property<em>(none or block)</em> for the toggle.</li> - </ul> - </div> - <i></i> - </div> - </div> - <div class="tooltip"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <div class="right"> - <div class="text-content"> - <h3>Fade in Effect</h3> - <ul> - <li>This demo has fade in/out effect.</li> - <li>It is using CSS opacity, visibility, and transition property to toggle the tooltip.</li> - <li>Other demos are using display property<em>(none or block)</em> for the toggle.</li> - </ul> - </div> - <i></i> - </div> - </div> - <div class="tooltip"> - <img src="../images/badges.png" alt="Badge" class="badge locked"> - <div class="right"> - <div class="text-content"> - <h3>Fade in Effect</h3> - <ul> - <li>This demo has fade in/out effect.</li> - <li>It is using CSS opacity, visibility, and transition property to toggle the tooltip.</li> - <li>Other demos are using display property<em>(none or block)</em> for the toggle.</li> - </ul> - </div> - <i></i> - </div> - </div> - <div class="tooltip"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <div class="right"> - <div class="text-content"> - <h3>Fade in Effect</h3> - <ul> - <li>This demo has fade in/out effect.</li> - <li>It is using CSS opacity, visibility, and transition property to toggle the tooltip.</li> - <li>Other demos are using display property<em>(none or block)</em> for the toggle.</li> - </ul> - </div> - <i></i> - </div> - </div> - <div class="tooltip"> - <img src="../images/badges.png" alt="Badge" class="badge"> - <div class="right"> - <div class="text-content"> - <h3>Fade in Effect</h3> - <ul> - <li>This demo has fade in/out effect.</li> - <li>It is using CSS opacity, visibility, and transition property to toggle the tooltip.</li> - <li>Other demos are using display property<em>(none or block)</em> for the toggle.</li> - </ul> - </div> - <i></i> - </div> - </div> - <div class="tooltip"> - <img src="../images/badges.png" alt="Badge" class="badge locked"> - <div class="right"> - <div class="text-content"> - <h3>Fade in Effect</h3> - <ul> - <li>This demo has fade in/out effect.</li> - <li>It is using CSS opacity, visibility, and transition property to toggle the tooltip.</li> - <li>Other demos are using display property<em>(none or block)</em> for the toggle.</li> - </ul> - </div> - <i></i> - </div> - </div> + <img class="badgeImg" th:each="badge : ${badges}" th:src="@{'..' + ${badge.getImgPath()}}" + th:id="'img' + ${badge.getId()}" th:alt="${badge.getName()}" > </div> </article> </section>