Commit 37501b21 by Milovan Samardzic

porukeStilIzmenjeno

parent 09ef0aa2
......@@ -21,6 +21,6 @@ public class MessageController {
Thread.sleep(1000);
message.setFrom( principal.getName());
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 {
this.messagingTemplate = messagingTemplate;
}
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);
}
}
\ No newline at end of file
......@@ -8,22 +8,21 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class KomentarController
{
public class KomentarController {
@Autowired
KomentarRepository komentarRepo;
@Autowired
ZahtevRepository zRepo;
@GetMapping("/profile/moji-zahtevi/sacuvaj-komentar")
public String postSacuvajKomentar( @RequestParam("korisnikId") int korisnikId,
@RequestParam("oglasId") int oglasId,
@RequestParam("zahtevId") int zahtevId,
@RequestParam("ocenaRadio") int ocenaRadio,
@RequestParam("komentar") String text)
{
public String postSacuvajKomentar(@RequestParam("korisnikId") int korisnikId,
@RequestParam("oglasId") int oglasId,
@RequestParam("zahtevId") int zahtevId,
@RequestParam("ocenaRadio") int ocenaRadio,
@RequestParam("komentar") String text) {
try {
komentarRepo.insert( korisnikId, oglasId, text, ocenaRadio);
zRepo.deleteZahtev( zahtevId);
komentarRepo.insert(korisnikId, oglasId, text, ocenaRadio);
zRepo.deleteZahtev(zahtevId);
} catch (Exception e) {
throw new RuntimeException(e);
}
......
......@@ -335,4 +335,49 @@ h3{
.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%);
}
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");
body{
font-family: 'Jost', serif;font-size: 22px;
body {
font-family: 'Jost', serif;
font-size: 22px;
background-color: #fff; /*sredina*/
overflow-x: hidden;
}
.navbar{
.navbar {
background-color: #f9f9f9; /*header*/
}
.navbar a{
.navbar a {
text-decoration: none;
color:#495056;
color: #495056;
}
.navbar-icon-top .navbar-nav .nav-link > .fa {
position: relative;
width: 36px;
......@@ -124,48 +129,51 @@ body{
top: -7px;
}
}
@media (max-width: 996px){
#indexCont{
@media (max-width: 996px) {
#indexCont {
min-height: 900px;
}
}
.container-fluid{
overflow:hidden;
background:#1c1c1c; /*footer*/
color: #627482 !important;
margin-bottom: 0 ;
padding-bottom:0 ;
.container-fluid {
overflow: hidden;
background: #1c1c1c; /*footer*/
color: #627482 !important;
margin-bottom: 0;
padding-bottom: 0;
}
small{
small {
font-size: calc(12px + (15 - 12) * ((100vw - 360px) / (1600 - 360))) !important;
}
.bold-text{
.bold-text {
color: #989c9e !important;
}
.mt-55{
.mt-55 {
margin-top: calc(50px + (60 - 50) * ((100vw - 360px) / (1600 - 360))) !important;
}
h3{
h3 {
font-size: calc(34px + (40 - 34) * ((100vw - 360px) / (1600 - 360))) !important;
}
.social{
.social {
font-size: 21px !important;
}
.rights{
.rights {
font-size: calc(10px + (12 - 10) * ((100vw - 360px) / (1600 - 360))) !important;
}
.form-body{
border-top:2px solid #1c1c1c;
.form-body {
border-top: 2px solid #1c1c1c;
}
.form-holder {
display: flex;
flex-direction: column;
......@@ -200,7 +208,7 @@ h3{
text-align: left;
-webkit-transition: all 0.4s ease;
transition: all 0.4s ease;
color:lightblue;
color: lightblue;
}
.form-content 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;
}
......@@ -246,14 +254,14 @@ h3{
}
.btn-primary{
.btn-primary {
background-color: #6C757D;
outline: none;
border: 0px;
box-shadow: none;
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active{
.btn-primary:hover, .btn-primary:focus, .btn-primary:active {
background-color: #495056;
outline: none !important;
border: none !important;
......@@ -285,22 +293,24 @@ h3{
color: #8D8D8D;
}
.mv-up{
.mv-up {
margin-top: -9px !important;
margin-bottom: 8px !important;
}
.invalid-feedback{
.invalid-feedback {
color: #ff606e;
}
.valid-feedback{
.valid-feedback {
color: #2acc80;
}
#losaSifra{
#losaSifra {
display: none;
margin-top:10px;
margin-top: 10px;
}
.breadcrumb {
background-color: #c5cee4;
......@@ -325,13 +335,14 @@ p {
color: #686868;
}
#slikaProfil{
#slikaProfil {
width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
}
#slikaProfil1{
#slikaProfil1 {
width: 150px;
height: 150px;
border-radius: 50%;
......@@ -349,6 +360,7 @@ p {
.fab.fa-facebook-f {
color: #5999ec;
}
.profilepic {
position: relative;
border-radius: 50%;
......@@ -400,6 +412,7 @@ p {
width: 50%;
text-align: center;
}
#ads {
margin: 30px 0 30px 0;
......@@ -443,10 +456,9 @@ p {
}
#ads .card:hover {
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;
transition: all 0.3s ease;
}
......@@ -486,36 +498,37 @@ p {
border: 2px solid #e6de08;
background: transparent;
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 {
text-transform: uppercase;
font-size: 18px;
}
.container-main{
.container-main {
height: 820px;
}
.pozadinaSVG{
background:
linear-gradient(
to bottom,
hsl(0, 0%, 100%) 0%,
hsl(0, 0%, 99.66%) 8.1%,
hsl(0, 0%, 98.69%) 15.5%,
hsl(0, 0%, 97.16%) 22.5%,
hsl(0, 0%, 95.17%) 29%,
hsl(0, 0%, 92.77%) 35.3%,
hsl(0, 0%, 90.04%) 41.2%,
hsl(0, 0%, 87.07%) 47.1%,
hsl(0, 0%, 83.93%) 52.9%,
hsl(0, 0%, 80.72%) 58.8%,
hsl(0, 0%, 77.57%) 64.7%,
hsl(0, 0%, 74.61%) 71%,
hsl(0, 0%, 71.99%) 77.5%,
hsl(0, 0%, 69.89%) 84.5%,
hsl(0, 0%, 68.5%) 91.9%,
hsl(0, 0%, 68%) 100%
.pozadinaSVG {
background: linear-gradient(
to bottom,
hsl(0, 0%, 100%) 0%,
hsl(0, 0%, 99.66%) 8.1%,
hsl(0, 0%, 98.69%) 15.5%,
hsl(0, 0%, 97.16%) 22.5%,
hsl(0, 0%, 95.17%) 29%,
hsl(0, 0%, 92.77%) 35.3%,
hsl(0, 0%, 90.04%) 41.2%,
hsl(0, 0%, 87.07%) 47.1%,
hsl(0, 0%, 83.93%) 52.9%,
hsl(0, 0%, 80.72%) 58.8%,
hsl(0, 0%, 77.57%) 64.7%,
hsl(0, 0%, 74.61%) 71%,
hsl(0, 0%, 71.99%) 77.5%,
hsl(0, 0%, 69.89%) 84.5%,
hsl(0, 0%, 68.5%) 91.9%,
hsl(0, 0%, 68%) 100%
);
}
......@@ -523,8 +536,82 @@ p {
width: 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-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
......@@ -106,4 +106,7 @@ function promenaProdaja(radio){
}
else
document.getElementById("prodajaLabel").innerText = "Cena po m2";
}
\ No newline at end of file
}
$(document).ready(function() {
$('#rateMe1').mdbRate();
});
\ No newline at end of file
......@@ -23,11 +23,16 @@ function connect() {
}
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() {
console.log("sending private message");
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 @@
</head>
<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">
<ul class="navbar-nav mr-auto">
<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">
<section class="features-icons text-center">
<div class="row fixed-bottom" style="margin-top: 10px">
<div class="col-md-12">
<form class="form-inline">
<div class="form-group">
<label for="private-message">Private Message</label>
<input type="text" id="private-message" class="form-control" placeholder="Enter your message here...">
<div class="form-group d-flex justify-content-start align-items-center flex-wrap w-100">
<div class="col-9">
<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>
<button id="send-private" class="btn btn-default" type="button">Send Private Message</button>
</form>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table id="message-history" class="table table-striped">
<thead>
<tr>
<th>Messages
</th>
</tr>
</thead>
<tbody id="messages">
</tbody>
</table>
<div class="row m-3">
<div class="col-md-12" id="porukaDodaj" style="overflow: scroll">
</div>
</div>
</section>
......
......@@ -194,7 +194,7 @@
</form>
<div>
<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>
......
......@@ -255,25 +255,25 @@
</div>
<div class="col-md-2 d-flex justify-content-center align-items-center">
<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()}}"
alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
border: green 5px solid">
<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()}}"
alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
border: yellow 5px solid">
<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()}}"
alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
border: blue 5px solid">
<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()}}"
alt="slika korisnika"
style="width: 150px;height: 150px;border-radius: 50%;object-fit: cover;
......@@ -288,7 +288,7 @@
Email:<span th:text="${korisnik.getEmail()}"></span><br>
Telefon:<span th:text="${korisnik.getTelefon()}"></span>
</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>
......
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