Commit 37501b21 by Milovan Samardzic

porukeStilIzmenjeno

parent 09ef0aa2
...@@ -21,6 +21,6 @@ public class MessageController { ...@@ -21,6 +21,6 @@ public class MessageController {
Thread.sleep(1000); Thread.sleep(1000);
message.setFrom( principal.getName()); message.setFrom( principal.getName());
service.notifyUser( message.getTo(), message); service.notifyUser( message.getTo(), message);
return new ResponseMessage( HtmlUtils.htmlEscape(message.getFrom() + ": "+ message.getMessageContent())); return new ResponseMessage( HtmlUtils.htmlEscape(message.getFrom() + ":"+ message.getMessageContent()));
} }
} }
package com.example.SkuciSe.configuration.WebSocket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WSController {
@Autowired
private WSService service;
@PostMapping("/send-private-message/{mail}")
public void sendPrivateMessage(@PathVariable("mail") final String mail,
@RequestBody final Message message) {
service.notifyUser(mail, message);
}
}
...@@ -14,7 +14,7 @@ public class WSService { ...@@ -14,7 +14,7 @@ public class WSService {
this.messagingTemplate = messagingTemplate; this.messagingTemplate = messagingTemplate;
} }
public void notifyUser(final String mail, final Message message) { public void notifyUser(final String mail, final Message message) {
ResponseMessage responseMessage = new ResponseMessage( message.getFrom() + ": " + message.getMessageContent()); ResponseMessage responseMessage = new ResponseMessage( message.getFrom() + ":" + message.getMessageContent());
messagingTemplate.convertAndSendToUser(mail, "/topic/private-messages", responseMessage); messagingTemplate.convertAndSendToUser(mail, "/topic/private-messages", responseMessage);
} }
} }
\ No newline at end of file
...@@ -8,22 +8,21 @@ import org.springframework.web.bind.annotation.GetMapping; ...@@ -8,22 +8,21 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@Controller @Controller
public class KomentarController public class KomentarController {
{
@Autowired @Autowired
KomentarRepository komentarRepo; KomentarRepository komentarRepo;
@Autowired @Autowired
ZahtevRepository zRepo; ZahtevRepository zRepo;
@GetMapping("/profile/moji-zahtevi/sacuvaj-komentar") @GetMapping("/profile/moji-zahtevi/sacuvaj-komentar")
public String postSacuvajKomentar( @RequestParam("korisnikId") int korisnikId, public String postSacuvajKomentar(@RequestParam("korisnikId") int korisnikId,
@RequestParam("oglasId") int oglasId, @RequestParam("oglasId") int oglasId,
@RequestParam("zahtevId") int zahtevId, @RequestParam("zahtevId") int zahtevId,
@RequestParam("ocenaRadio") int ocenaRadio, @RequestParam("ocenaRadio") int ocenaRadio,
@RequestParam("komentar") String text) @RequestParam("komentar") String text) {
{
try { try {
komentarRepo.insert( korisnikId, oglasId, text, ocenaRadio); komentarRepo.insert(korisnikId, oglasId, text, ocenaRadio);
zRepo.deleteZahtev( zahtevId); zRepo.deleteZahtev(zahtevId);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
......
...@@ -336,3 +336,48 @@ h3{ ...@@ -336,3 +336,48 @@ h3{
.gradient-bg { .gradient-bg {
background: linear-gradient(90deg, rgba(255,255,255,1) 0%, rgba(251,251,251,1) 10%, rgba(251,251,251,1) 91%, rgba(255,255,255,1) 100%); background: linear-gradient(90deg, rgba(255,255,255,1) 0%, rgba(251,251,251,1) 10%, rgba(251,251,251,1) 91%, rgba(255,255,255,1) 100%);
} }
input.star { display: none; }
label.star {
float: right;
padding: 10px;
font-size: 36px;
color: #grey;
transition: all .2s;
}
input.star:checked ~ label.star:before {
content: '\f005';
color: #FD4;
transition: all .25s;
}
input.star-5:checked ~ label.star:before {
color: #FE7;
text-shadow: 0 0 20px #952;
}
input.star-1:checked ~ label.star:before { color: #F62; }
label.star:hover { transform: rotate(-15deg) scale(1.3); }
label.star:before {
content: '\f006';
font-family: FontAwesome;
}
\ No newline at end of file
@import url("//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"); @import url("//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css");
body{
font-family: 'Jost', serif;font-size: 22px; body {
font-family: 'Jost', serif;
font-size: 22px;
background-color: #fff; /*sredina*/ background-color: #fff; /*sredina*/
overflow-x: hidden; overflow-x: hidden;
} }
.navbar{
.navbar {
background-color: #f9f9f9; /*header*/ background-color: #f9f9f9; /*header*/
} }
.navbar a{
.navbar a {
text-decoration: none; text-decoration: none;
color:#495056; color: #495056;
} }
.navbar-icon-top .navbar-nav .nav-link > .fa { .navbar-icon-top .navbar-nav .nav-link > .fa {
position: relative; position: relative;
width: 36px; width: 36px;
...@@ -124,48 +129,51 @@ body{ ...@@ -124,48 +129,51 @@ body{
top: -7px; top: -7px;
} }
} }
@media (max-width: 996px){
#indexCont{ @media (max-width: 996px) {
#indexCont {
min-height: 900px; min-height: 900px;
} }
} }
.container-fluid{
overflow:hidden; .container-fluid {
background:#1c1c1c; /*footer*/ overflow: hidden;
background: #1c1c1c; /*footer*/
color: #627482 !important; color: #627482 !important;
margin-bottom: 0 ; margin-bottom: 0;
padding-bottom:0 ; padding-bottom: 0;
} }
small{ small {
font-size: calc(12px + (15 - 12) * ((100vw - 360px) / (1600 - 360))) !important; font-size: calc(12px + (15 - 12) * ((100vw - 360px) / (1600 - 360))) !important;
} }
.bold-text{ .bold-text {
color: #989c9e !important; color: #989c9e !important;
} }
.mt-55{ .mt-55 {
margin-top: calc(50px + (60 - 50) * ((100vw - 360px) / (1600 - 360))) !important; margin-top: calc(50px + (60 - 50) * ((100vw - 360px) / (1600 - 360))) !important;
} }
h3{ h3 {
font-size: calc(34px + (40 - 34) * ((100vw - 360px) / (1600 - 360))) !important; font-size: calc(34px + (40 - 34) * ((100vw - 360px) / (1600 - 360))) !important;
} }
.social{ .social {
font-size: 21px !important; font-size: 21px !important;
} }
.rights{ .rights {
font-size: calc(10px + (12 - 10) * ((100vw - 360px) / (1600 - 360))) !important; font-size: calc(10px + (12 - 10) * ((100vw - 360px) / (1600 - 360))) !important;
} }
.form-body{ .form-body {
border-top:2px solid #1c1c1c; border-top: 2px solid #1c1c1c;
} }
.form-holder { .form-holder {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
...@@ -200,7 +208,7 @@ h3{ ...@@ -200,7 +208,7 @@ h3{
text-align: left; text-align: left;
-webkit-transition: all 0.4s ease; -webkit-transition: all 0.4s ease;
transition: all 0.4s ease; transition: all 0.4s ease;
color:lightblue; color: lightblue;
} }
.form-content h3 { .form-content h3 {
...@@ -225,7 +233,7 @@ h3{ ...@@ -225,7 +233,7 @@ h3{
} }
.form-content label, .was-validated .form-check-input:invalid~.form-check-label, .was-validated .form-check-input:valid~.form-check-label{ .form-content label, .was-validated .form-check-input:invalid ~ .form-check-label, .was-validated .form-check-input:valid ~ .form-check-label {
color: #fff; color: #fff;
} }
...@@ -246,14 +254,14 @@ h3{ ...@@ -246,14 +254,14 @@ h3{
} }
.btn-primary{ .btn-primary {
background-color: #6C757D; background-color: #6C757D;
outline: none; outline: none;
border: 0px; border: 0px;
box-shadow: none; box-shadow: none;
} }
.btn-primary:hover, .btn-primary:focus, .btn-primary:active{ .btn-primary:hover, .btn-primary:focus, .btn-primary:active {
background-color: #495056; background-color: #495056;
outline: none !important; outline: none !important;
border: none !important; border: none !important;
...@@ -285,22 +293,24 @@ h3{ ...@@ -285,22 +293,24 @@ h3{
color: #8D8D8D; color: #8D8D8D;
} }
.mv-up{ .mv-up {
margin-top: -9px !important; margin-top: -9px !important;
margin-bottom: 8px !important; margin-bottom: 8px !important;
} }
.invalid-feedback{ .invalid-feedback {
color: #ff606e; color: #ff606e;
} }
.valid-feedback{ .valid-feedback {
color: #2acc80; color: #2acc80;
} }
#losaSifra{
#losaSifra {
display: none; display: none;
margin-top:10px; margin-top: 10px;
} }
.breadcrumb { .breadcrumb {
background-color: #c5cee4; background-color: #c5cee4;
...@@ -325,13 +335,14 @@ p { ...@@ -325,13 +335,14 @@ p {
color: #686868; color: #686868;
} }
#slikaProfil{ #slikaProfil {
width: 100px; width: 100px;
height: 100px; height: 100px;
border-radius: 50%; border-radius: 50%;
object-fit: cover; object-fit: cover;
} }
#slikaProfil1{
#slikaProfil1 {
width: 150px; width: 150px;
height: 150px; height: 150px;
border-radius: 50%; border-radius: 50%;
...@@ -349,6 +360,7 @@ p { ...@@ -349,6 +360,7 @@ p {
.fab.fa-facebook-f { .fab.fa-facebook-f {
color: #5999ec; color: #5999ec;
} }
.profilepic { .profilepic {
position: relative; position: relative;
border-radius: 50%; border-radius: 50%;
...@@ -400,6 +412,7 @@ p { ...@@ -400,6 +412,7 @@ p {
width: 50%; width: 50%;
text-align: center; text-align: center;
} }
#ads { #ads {
margin: 30px 0 30px 0; margin: 30px 0 30px 0;
...@@ -443,10 +456,9 @@ p { ...@@ -443,10 +456,9 @@ p {
} }
#ads .card:hover { #ads .card:hover {
background: #fff; background: #fff;
box-shadow: 12px 15px 20px 0px rgba(46,61,73,0.15); box-shadow: 12px 15px 20px 0px rgba(46, 61, 73, 0.15);
border-radius: 4px; border-radius: 4px;
transition: all 0.3s ease; transition: all 0.3s ease;
} }
...@@ -486,19 +498,20 @@ p { ...@@ -486,19 +498,20 @@ p {
border: 2px solid #e6de08; border: 2px solid #e6de08;
background: transparent; background: transparent;
transition: all 0.3s ease; transition: all 0.3s ease;
box-shadow: 12px 15px 20px 0px rgba(46,61,73,0.15); box-shadow: 12px 15px 20px 0px rgba(46, 61, 73, 0.15);
} }
#ads .ad-title h5 { #ads .ad-title h5 {
text-transform: uppercase; text-transform: uppercase;
font-size: 18px; font-size: 18px;
} }
.container-main{
.container-main {
height: 820px; height: 820px;
} }
.pozadinaSVG{
background: .pozadinaSVG {
linear-gradient( background: linear-gradient(
to bottom, to bottom,
hsl(0, 0%, 100%) 0%, hsl(0, 0%, 100%) 0%,
hsl(0, 0%, 99.66%) 8.1%, hsl(0, 0%, 99.66%) 8.1%,
...@@ -523,8 +536,82 @@ p { ...@@ -523,8 +536,82 @@ p {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.pozadinaSlika{
background-image:url("https://wallpaperaccess.com/full/1895610.jpg"); .pozadinaSlika {
background-image: url("https://wallpaperaccess.com/full/1895610.jpg");
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: cover; background-size: cover;
} }
div.stars {
width: 270px;
display: inline-block;
}
.mt-200 {
margin-top: 200px;
}
input.star {
display: none;
}
label.star {
float: right;
padding: 10px;
font-size: 36px;
color: #4A148C;
transition: all .2s;
}
input.star:checked ~ label.star:before {
content: '\f005';
color: #FD4;
transition: all .25s;
}
input.star-5:checked ~ label.star:before {
color: #FE7;
text-shadow: 0 0 20px #952;
}
input.star-1:checked ~ label.star:before {
color: #F62;
}
label.star:hover {
transform: rotate(-15deg) scale(1.3);
}
label.star:before {
content: '\f006';
font-family: FontAwesome;
}
#messages td{
width: 50px;
}
\ No newline at end of file
...@@ -107,3 +107,6 @@ function promenaProdaja(radio){ ...@@ -107,3 +107,6 @@ function promenaProdaja(radio){
else else
document.getElementById("prodajaLabel").innerText = "Cena po m2"; document.getElementById("prodajaLabel").innerText = "Cena po m2";
} }
$(document).ready(function() {
$('#rateMe1').mdbRate();
});
\ No newline at end of file
...@@ -23,11 +23,16 @@ function connect() { ...@@ -23,11 +23,16 @@ function connect() {
} }
function showMessage(message) { function showMessage(message) {
$("#messages").append("<tr><td>" +message+"</td></tr>"); let mail = message.split(":")[0];
let messageC = message.split(":")[1];
if(mail !== email)
document.getElementById("porukaDodaj").innerHTML+= "<div class=\"row w-100 m-0\"><div class=\"col-6\"></div><div class=\"col-6 d-flex justify-content-center align-items-center p-3 w-50 bg-info rounded\">"+messageC+"</div></div>"
else
document.getElementById("porukaDodaj").innerHTML+= "<div class=\"row w-100\"><div class=\"\"><div class=\"col-6 d-flex justify-content-center align-items-center p-3 w-50 bg-info rounded\">"+messageC+"</div><div class=\"col-6\"></div></div></div>"
} }
function sendPrivateMessage() { function sendPrivateMessage() {
console.log("sending private message"); console.log("sending private message");
stompClient.send("/ws/private-message", {}, JSON.stringify({ 'from':"", 'to':email/*$("#to").val()*/, 'messageContent': $("#private-message").val()})); stompClient.send("/ws/private-message", {}, JSON.stringify({ 'from':"", 'to':email/*$("#to").val()*/, 'messageContent': $("#private-message").val()}));
$("#private-message").val("");
} }
\ No newline at end of file
...@@ -29,108 +29,26 @@ ...@@ -29,108 +29,26 @@
</head> </head>
<body th:object="${loggedUser}"> <body th:object="${loggedUser}">
<nav class="navbar navbar-icon-top navbar-expand-lg p-3">
<a class="navbar-brand" href="#"> </a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent"> <section class="features-icons text-center">
<ul class="navbar-nav mr-auto"> <div class="row fixed-bottom" style="margin-top: 10px">
<li class="nav-item active">
<a class="nav-link" th:href="@{/index}">
<i class="fa fa-home"></i>
Pocetna
<span class="sr-only">(current)</span>
</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/lista-oglasa">
<i class="fa fa-poll-h"></i>
Lista oglasa
<span class="sr-only">(current)</span>
</a>
</li>
<li class="nav-item active">
<a class="nav-link" th:href="@{/onama}">
<i class="fa-sharp fa-solid fa-address-card"></i>
<p>O nama</p>
<span class="sr-only">(current)</span>
</a>
</li>
<li class="nav-item active">
<a class="nav-link" th:href="@{/portfolio}">
<i class="fa-solid fa-briefcase"></i>
<p>Portfolio</p>
<span class="sr-only">(current)</span>
</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0" th:if="${loggedUser != null}">
<a th:href="@{/novi-oglas}">
<button type="button" class="btn btn-primary btn-md mr-2"><i class="fa-solid fa-plus"></i> Postavite
novi oglas
</button>
</a>
</form>
<ul class="navbar-nav">
<li class="nav-item" th:if="${loggedUser == null}">
<a th:href="@{/login}"><i class="fas fa-sign-in-alt" style="color:#495056"></i><span
style="padding:10px;color:#495056">Prijavi se</span></a>
</li>
<li class="nav-item" th:if="${loggedUser == null}">
<a th:href="@{/register}"><i class="fa-solid fa-circle-user" style="color:#495056"></i><span
style="padding:10px;color:#495056">Registruj se</span></a>
</li>
<li th:if="${loggedUser != null}">
<div class="dropdown mr-4">
<button class="btn btn-secondary dropdown-toggle round" type="button" id="dropdownMenuButton"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa-solid fa-circle-user"></i><span style="padding:10px;"
th:text="${loggedUser.getKorisnik().getIme()}"></span>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" th:href="@{/profile}">Moj Profil</a>
<a class="dropdown-item" th:href="@{/profile/moji-oglasi}">Moji Oglasi</a>
<a class="dropdown-item" th:href="@{/profile/moji-zahtevi}">Moji Zahtevi</a>
<a th:if="${loggedUser.getKorisnik().getTipId() == 2}" class="dropdown-item"
th:href="@{/lista-korisnika}">Lista Profila</a>
<form th:action="@{/logout}" method="post" id="my_form" class="dropdown-item">
<a href="#" onclick="document.getElementById('my_form').submit(); return false;"><i
class="fas fa-sign-in-alt"></i><span style="padding:5px;">Odjavi se</span></a>
</form>
</div>
</div>
</li>
</ul>
</div>
</nav>
<section class="features-icons bg-light text-center">
<div class="row" style="margin-top: 10px">
<div class="col-md-12"> <div class="col-md-12">
<form class="form-inline"> <form class="form-inline">
<div class="form-group"> <div class="form-group d-flex justify-content-start align-items-center flex-wrap w-100">
<label for="private-message">Private Message</label> <div class="col-9">
<input type="text" id="private-message" class="form-control" placeholder="Enter your message here..."> <textarea id="private-message" class="form-control m-2 w-100" rows=3
placeholder="Unesite poruku ovde..."></textarea>
</div>
<div class="col-3">
<button id="send-private" class="btn btn-primary m-1" type="button">Posaljite poruku</button>
</div>
</div> </div>
<button id="send-private" class="btn btn-default" type="button">Send Private Message</button>
</form> </form>
</div> </div>
</div> </div>
<div class="row"> <div class="row m-3">
<div class="col-md-12"> <div class="col-md-12" id="porukaDodaj" style="overflow: scroll">
<table id="message-history" class="table table-striped">
<thead>
<tr>
<th>Messages
</th>
</tr>
</thead>
<tbody id="messages">
</tbody>
</table>
</div> </div>
</div> </div>
</section> </section>
......
...@@ -194,7 +194,7 @@ ...@@ -194,7 +194,7 @@
</form> </form>
<div> <div>
<p th:text="'Vlasnik: ' + ${vlasnici[oglasStat.count - 1].ime}"></p> <p th:text="'Vlasnik: ' + ${vlasnici[oglasStat.count - 1].ime}"></p>
<a th:href="'/chat?email='+${vlasnici[oglasStat.count - 1].email}" target="_blank" onclick="window.open(this.href,'mywindow','menubar=1,resizable=0,width=500,height=900')">Posaljite poruku</a> <button class="btn btn-primary" th:onclick="window.open('/chat?email='+[[${vlasnici[oglasStat.count - 1].email}]],'mywindow','menubar=1,width=650,height=900')">Posaljite poruku</button>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -255,25 +255,25 @@ ...@@ -255,25 +255,25 @@
</div> </div>
<div class="col-md-2 d-flex justify-content-center align-items-center"> <div class="col-md-2 d-flex justify-content-center align-items-center">
<img <img
th:if="${zahtevi[korisnikStat.count - 1].status.toString() == 'POTVRDJEN'}" th:if="${zahtevi[korisnikStat.index].status.toString() == 'POTVRDJEN'}"
th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}" th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}"
alt="slika korisnika" alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover; style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
border: green 5px solid"> border: green 5px solid">
<img <img
th:if="${zahtevi[korisnikStat.count - 1].status.toString() == 'CEKANJE'}" th:if="${zahtevi[korisnikStat.index].status.toString() == 'CEKANJE'}"
th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}" th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}"
alt="slika korisnika" alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover; style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
border: yellow 5px solid"> border: yellow 5px solid">
<img <img
th:if="${zahtevi[korisnikStat.count - 1].status.toString() == 'ZAVRSEN'}" th:if="${zahtevi[korisnikStat.index].status.toString() == 'ZAVRSEN'}"
th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}" th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}"
alt="slika korisnika" alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover; style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
border: blue 5px solid"> border: blue 5px solid">
<img <img
th:if="${zahtevi[korisnikStat.count - 1].status.toString() == 'ODBIJEN'}" th:if="${zahtevi[korisnikStat.index].status.toString() == 'ODBIJEN'}"
th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}" th:src="@{'data:image/png;charset=utf-8;base64,'+${korisnik.getSlika()}}"
alt="slika korisnika" alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover; style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
...@@ -288,7 +288,7 @@ ...@@ -288,7 +288,7 @@
Email:<span th:text="${korisnik.getEmail()}"></span><br> Email:<span th:text="${korisnik.getEmail()}"></span><br>
Telefon:<span th:text="${korisnik.getTelefon()}"></span> Telefon:<span th:text="${korisnik.getTelefon()}"></span>
</p> </p>
<a th:href="'/chat?email='+${korisnik.email}" target="_blank" onclick="window.open(this.href,'mywindow','menubar=1,resizable=0,width=500,height=900')">Posaljite poruku</a> <button class="btn btn-primary" th:onclick="window.open('/chat?email='+[[${korisnik.getEmail()}]],'mywindow','menubar=1,width=650,height=900')">Posaljite poruku</button>
</div> </div>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment