- finishing etrack

- new buttons for main page
- swagger
This commit is contained in:
Szakalakamaka
2020-09-22 10:05:11 +02:00
parent 9f3f2161cb
commit db625b650b
68 changed files with 1736 additions and 494 deletions

View File

@@ -3,13 +3,14 @@
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!--https://github.com/kmtong/logback-redis-appender-->
<appender name="LOGSTASH" class="com.release11.klaus.utilis.RedisAppender">
<host>redis-server</host>
<host>localhost
</host>
<port>6379</port>
<key>logstash</key>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html-->
<Pattern>
{"dateTimeStamp" : "%d{yyyy-MM-dd}T%d{HH:mm:ss}", "businessKeys":["INTERFACE_NAME:%X{INTERFACE_NAME}", "CLIENT_UUID:%X{CLIENT_UUID}", "MESSAGE_ID:%X{MESSAGE_ID}"],"thread":"%t","level":"%-5level", "message":"%msg"}%n
{"dateTimeStamp" : "%d{yyyy-MM-dd}T%d{HH:mm:ss}", "eventId":"%X{eventId}", "interfaceName":"%X{interfaceName}", "clientUUID":"%X{clientUUID}", "messageId":"%X{messageId}", "thread":"%t","level":"%-5level", "message":"%msg"}%n
</Pattern>
</layout>
</appender>

View File

@@ -46,6 +46,10 @@ button:focus {
}
tr[name="tr-button"]:hover{
background-color: #ddd;
cursor: pointer;
}
#pagination-wrapper button {
background: none;
@@ -80,3 +84,28 @@ button[name="removeHeader"] {
transition: background-color 0.3s, color 0.3s;
}
.btn-sort {
border: 0;
padding: 0 20px;
text-align: center;
color: #fff;
text-shadow: 1px 1px 1px #000;
border-radius: 10px;
background-color: rgb(0, 102, 255);
background-image: linear-gradient(to top left,
rgba(0, 0, 0, .2),
rgba(0, 0, 0, .2) 30%,
rgba(0, 0, 0, 0));
}
.btn-sort:hover {
background-color: rgb(153, 194, 255);
cursor: pointer;
}
.active {
background-color: rgb(153, 194, 255);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,178 @@
var state = {
'querySet': [{
"clientUUID": "436c4774-038f-4540-9c18-2691ca9b53d4",
"mockedResponseId": 1908998,
"mediaType": "application/xml",
"messageBody": "body",
"httpHeaders": null,
"httpStatus": 200
}],
'page': 1,
'rows': 10,
'window': 5,
}
var myList, data, previousSort;
state.querySet = listForPagination;
buildTable();
for (let i = 3; i >= 0; i--) {
document.querySelector('#btn-sort-' + i).addEventListener('click', function() {
addButtonListeners(i)
})
}
function addButtonListeners(i) {
var buttons = document.querySelectorAll('.btn-sort');
for (var j = buttons.length - 1; j >= 0; j--) {
buttons[j].classList.remove('active');
}
document.querySelector('#btn-sort-' + i).classList.add('active');
buildTable();
}
function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd)
var pages = Math.ceil(querySet.length / rows);
if (pages === 0) {
pages = 1
}
return {
'querySet': trimmedData,
'pages': pages,
}
}
function pageButtons(pages) {
var wrapper = document.getElementById('pagination-wrapper');
wrapper.innerHTML = ``;
var maxLeft = (state.page - Math.floor(state.window / 2))
var maxRight = (state.page + Math.ceil(state.window / 2))
if (maxLeft < 1) {
maxLeft = 1
maxRight = state.window
}
if (maxRight > pages) {
maxLeft = pages - (state.window - 1)
if (maxLeft < 1) {
maxLeft = 1
}
maxRight = pages
}
for (var page = maxLeft; page <= maxRight; page++) {
if (page === state.page) {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info" name="allMessagesClicked">${page}</button>`
} else {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info">${page}</button>`
}
}
if (state.page != 1) {
wrapper.innerHTML = `<button value=${1} class="page btn btn-sm btn-info">&#171; First</button>` + wrapper.innerHTML
}
if (state.page != pages) {
wrapper.innerHTML += `<button value=${pages} class="page btn btn-sm btn-info">Last &#187;</button>`
}
$('.page').on('click', function() {
$('#table-body').empty()
state.page = Number($(this).val())
buildPage()
})
}
function showBody(elt){
$("#" + elt.id + "-body").toggle();
}
function showTable() {
var table = $('#table-body')
table.empty();
var color;
for (var i = 1; i <= myList.length; i++) {
var j = i + (state.page - 1) * 10;
i % 2 === 0 ? color = "#b3ffff" : color="#e6ffff";
var row = `<tr bgcolor="${color}" id="etrack-tr-${j}" onclick="showBody(this)" name="tr-button">
<td>` + j + `</td>
<td>${myList[i-1].messageId}</td>
<td>${myList[i-1].dateTimeStamp}</td>
<td>${myList[i-1].interfaceName}</td>
</tr>
<tr bgcolor="${color}" id="etrack-tr-${j}-body" name="tr-body" hidden>
<td colspan="4">"${myList[i-1].message}"</td>
</tr>`
table.append(row)
}
for (var i = myList.length + 1; i <= state.rows; i++) {
i % 2 === 0 ? color = "#b3ffff" : color="#e6ffff";
var j = i + (state.page - 1) * 10;
var row = `<tr bgcolor="${color}">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
table.append(row)
}
pageButtons(data.pages)
}
function sortTable() {
var sortBy = document.querySelector('.active').textContent
switch (sortBy) {
case "MessageId":
if (previousSort === "MessageId") {
state.querySet.sort((a, b) => (a.messageId > b.messageId) ? -1 : ((b.messageId > a.messageId) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.messageId > b.messageId) ? 1 : ((b.messageId > a.messageId) ? -1 : 0));
}
break;
case "TimeStamp":
if (previousSort === "TimeStamp") {
state.querySet.sort((a, b) => (a.dateTimeStamp > b.dateTimeStamp) ? -1 : ((b.dateTimeStamp > a.dateTimeStamp) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.dateTimeStamp > b.dateTimeStamp) ? 1 : ((b.dateTimeStamp > a.dateTimeStamp) ? -1 : 0));
}
break;
case "Action":
if (previousSort === "Action") {
state.querySet.sort((a, b) => (a.interfaceName > b.interfaceName) ? -1 : ((b.interfaceName > a.interfaceName) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.interfaceName > b.interfaceName) ? 1 : ((b.interfaceName > a.interfaceName) ? -1 : 0));
}
break;
}
if (previousSort === sortBy) {
previousSort = ""
} else previousSort = sortBy;
}
function prepareTable() {
data = pagination(state.querySet, state.page, state.rows)
myList = data.querySet
}
function buildTable() {
sortTable();
prepareTable();
showTable();
}
function buildPage() {
prepareTable();
showTable();
}

View File

@@ -1,21 +1,47 @@
var state = {
'querySet': [{"clientUUID":"436c4774-038f-4540-9c18-2691ca9b53d4","mockedResponseId":1908998,"mediaType":"application/xml","messageBody":"body","httpHeaders":null,"httpStatus":200}],
'querySet': [{
"clientUUID": "436c4774-038f-4540-9c18-2691ca9b53d4",
"mockedResponseId": 1908998,
"mediaType": "application/xml",
"messageBody": "body",
"httpHeaders": null,
"httpStatus": 200
}],
'page': 1,
'rows': 10,
'window': 5,
}
state.querySet = mockedMessageDtoList;
var myList, data, previousSort;
state.querySet = listForPagination;
buildTable();
for (let i = 3; i >= 0; i--) {
document.querySelector('#btn-sort-' + i).addEventListener('click', function() {
addButtonListeners(i)
})
}
function addButtonListeners(i) {
var buttons = document.querySelectorAll('.btn-sort');
for (var j = buttons.length - 1; j >= 0; j--) {
buttons[j].classList.remove('active');
}
document.querySelector('#btn-sort-' + i).classList.add('active');
buildTable();
}
function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd)
var pages = Math.ceil(querySet.length / rows);
if(pages === 0){pages = 1}
return {
'querySet': trimmedData,
'pages': pages,
@@ -44,12 +70,11 @@ function pageButtons(pages) {
}
for (var page = maxLeft; page <= maxRight; page++) {
if(page === state.page){
if (page === state.page) {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info" name="allMessagesClicked">${page}</button>`
}
else{
} else {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info">${page}</button>`
}
}
}
if (state.page != 1) {
@@ -65,20 +90,18 @@ function pageButtons(pages) {
state.page = Number($(this).val())
buildTable()
buildPage()
})
}
function buildTable() {
function showTable() {
var table = $('#table-body')
var data = pagination(state.querySet, state.page, state.rows)
var myList = data.querySet
for(var i = 1; i<=myList.length; i++){
var j = i + (state.page-1) * 10;
if(i%2 === 0){
table.empty();
for (var i = 1; i <= myList.length; i++) {
var j = i + (state.page - 1) * 10;
if (i % 2 === 0) {
var row = `<tr bgcolor="#b3ffff">
<td>` + j + `</td>
<td>${myList[i-1].mockedResponseId}</td>
@@ -95,7 +118,7 @@ function buildTable() {
</button>
</td>
`
}else{
} else {
var row = `<tr bgcolor="#e6ffff">
<td>` + j + `</td>
<td>${myList[i-1].mockedResponseId}</td>
@@ -112,10 +135,76 @@ function buildTable() {
</button>
</td>
`
}
}
table.append(row)
}
for (var i = myList.length + 1; i <= state.rows; i++) {
var j = i + (state.page - 1) * 10;
if (i % 2 === 0) {
var row = `<tr bgcolor="#b3ffff">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
} else {
var row = `<tr bgcolor="#e6ffff">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
}
table.append(row)
}
pageButtons(data.pages)
}
function sortTable() {
var sortBy = document.querySelector('.active').textContent
switch (sortBy) {
case "MessageId":
if (previousSort === "MessageId") {
state.querySet.sort((a, b) => (a.mockedResponseId > b.mockedResponseId) ? -1 : ((b.mockedResponseId > a.mockedResponseId) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.mockedResponseId > b.mockedResponseId) ? 1 : ((b.mockedResponseId > a.mockedResponseId) ? -1 : 0));
}
break;
case "Media Type":
if (previousSort === "Media Type") {
state.querySet.sort((a, b) => (a.mediaType > b.mediaType) ? -1 : ((b.mediaType > a.mediaType) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.mediaType > b.mediaType) ? 1 : ((b.mediaType > a.mediaType) ? -1 : 0));
}
break;
case "Http Status":
if (previousSort === "Http Status") {
state.querySet.sort((a, b) => (a.httpStatus > b.httpStatus) ? -1 : ((b.httpStatus > a.httpStatus) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.httpStatus > b.httpStatus) ? 1 : ((b.httpStatus > a.httpStatus) ? -1 : 0));
}
break;
}
if (previousSort === sortBy) {
previousSort = ""
} else previousSort = sortBy;
myList = state.querySet;
}
function prepareTable() {
data = pagination(state.querySet, state.page, state.rows)
myList = data.querySet
}
function buildTable() {
sortTable();
prepareTable();
showTable();
}
function buildPage(){
prepareTable();
showTable();
}

View File

@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>R11 Klaus</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Lato:100,300,600" rel="stylesheet" type="text/css">
<link href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" rel="stylesheet" type="text/css">
<link href="/css/styles.css" rel="stylesheet" />
</head>
<body>
<hr>
<section class="page-section" id="main-section">
<div class="row">
<div class="column">
<br>To see your activity history use the form below
<form action="#" th:action="@{/etrack/__${clientUUID}__}" th:object="${eventRequestDto}" method="post">
<input type="text" th:name="clientUUID" th:value="${clientUUID}" hidden />
<br><label>Mocked response id:</label><br>
<input type="text" th:name="mockedResponseId" th:id="mockedResponseId" th:placeholder="all" />
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">mockedResponseId
error
</td>
<br><label>Date from:</label><br>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom
Error
</td>
<br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo
Error
</td>
<div th:if="${#fields.hasAnyErrors()}">
<p th:each="err : ${#fields.allErrors()}" th:text="${err}">...</p>
</div>
<input type="submit" value="See my history"/>
</form>
</div>
<div class="column">
<br>
<table>
<thead>
<tr>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-0">#</p></th>
<th class="tr-pageable"><p class="btn-sort active" id="btn-sort-1">MessageId</p></th>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-2">TimeStamp</p></th>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-3">Action</p></th>
</tr>
</thead>
<tbody id="table-body">
</tbody>
</table>
<div class="container ">
<div id="pagination-wrapper"></div>
</div>
</div>
</div>
</section>
<hr>
<script type="text/javascript" th:inline="javascript">
var listForPagination = /*[[${eventList}]]*/;
</script>
<script src="/js/etrackPaggination.js"></script>
</body>
</html>

View File

@@ -10,30 +10,31 @@
</head>
<body>
<hr>
<section class="page-section" id="main-section" >
<section class="page-section" id="main-section">
<div class="container">
<div class="row">
<div class="column" >
<div class="column">
<br>In order to set mockup response please fill the form below:
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<table>
<input type="text" th:field="*{clientUUID}" th:placeholder="*{clientUUID}" hidden/>
<table>
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<input type="text" th:field="*{clientUUID}" hidden/>
<tr>
<td>Mocked response id:</td>
<td><input type="text" th:field="*{mockedResponseId}"/></td>
<td><input type="text" th:field="*{mockedResponseId}" placeholder="1"/></td>
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">Id
Error
</td>
</tr>
<tr>
<td>Mocked response body:</td>
<td><textarea rows="4" cols="30" th:field="*{messageBody}"></textarea></td>
<td><textarea rows="4" cols="30" th:field="*{messageBody}"
placeholder="Your message body"></textarea></td>
<td th:if="${#fields.hasErrors('messageBody')}" th:errors="*{messageBody}">Body Error</td>
</tr>
<tr>
<td>Mocked response http code status:</td>
<td><input type="text" th:field="*{httpStatus}"></td>
<td><input type="text" th:field="*{httpStatus}" placeholder="200"></td>
<td th:if="${#fields.hasErrors('httpStatus')}" th:errors="*{httpStatus}">HttpStatus Error
</td>
</tr>
@@ -54,7 +55,7 @@
<td><input type="text" name="value" th:value="${entry.key}" disabled="disabled"/></td>
<td>
<input type="text" name="value" th:field="*{httpHeaders[__${entry.key}__]}"/>
<button type="submit" name="removeHeader" th:value="${entry.key}" >
<button type="submit" name="removeHeader" th:value="${entry.key}">
<img src="/img/icons8-cancel-64.png" style="width: 20px;"/>
</button>
</td>
@@ -68,47 +69,65 @@
</select></td>
</tr>
<tr>
<td><input type="submit" value="Save mocked response"/></td>
<td><input type="submit" value="Save my message"/></td>
<td>
<button type="submit" name="newMessage" th:value="*{clientUUID}">
<img src="/img/update-button.png" style="width: 20px;"/>
</button>
</td>
</tr>
</table>
</form>
</form>
</table>
<table>
<tr>
<td>
<p th:if="${mockSaved}">Mock has been saved</p>
<form action="#" th:action="@{/etrack/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}"
method="get">
<p><input type="submit" value="History"/></p>
</form>
</td>
<td>
<form action="#" th:action="@{/home/getMockedResponse}" th:object="${mockedMessageDto}"
method="get">
<input type="text" th:field="*{clientUUID}" hidden/>
<input type="text" th:field="*{mockedResponseId}" hidden/>
<p th:if="${mockSaved}"><input type="submit" value="Test your mock"/></p>
<p th:if="${canTest}"><input type="submit" value="Test your mock"/></p>
</form>
</td>
</tr>
</table>
<p th:if="${mockSaved}">Mock has been saved</p>
</div>
<div class="column">
<br>
<form th:action="@{/home/__${mockedMessageDto.clientUUID}__}" method="post" id="dupa" >
<table>
<thead>
<tr>
<th class="tr-pageable">#</th>
<th class="tr-pageable">MessageId</th>
<th class="tr-pageable">Media Type</th>
<th class="tr-pageable">Http Status</th>
</tr>
</thead>
<tbody id="table-body">
</tbody>
</table>
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<table>
<thead>
<tr>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-0">#</p>
</th>
<th class="tr-pageable">
<p class="btn-sort active" id="btn-sort-1">MessageId</p>
</th>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-2">Media Type</p>
</th>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-3">Http Status</p>
</th>
</tr>
</thead>
<input type="text" th:field="*{clientUUID}" hidden/>
<tbody id="table-body">
</tbody>
</table>
</form>
<div class="container ">
<div id="pagination-wrapper"></div>
</div>
</div>
</div>
</div>
</div>
@@ -118,45 +137,28 @@
<hr>
<div>
<br>In order to set or get responses through curl or http tools you can use urls below.
<br>When you set your response simply set headers and media type of your request that you expect to get in the
response from the next step.
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/delete/<a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/set/ <a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}?httpStatus={httpStatus}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/get/<a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/getAll/<a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>
<br>If you are keen to use the mocking service with bigger amount of messages or automate the process by inserting high amount of random messages please consider using the tools below:
<br><a href="http://[[${localhost}]]:8097/swagger-ui.html">http://[[${localhost}]]:8097/swagger-ui.html</a>
<br>
<br>http://[[${localhost}]]:8097/klaus/v1/delete/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
<br>http://[[${localhost}]]:8097/klaus/v1/set/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}?httpStatus={httpStatus}
<br>http://[[${localhost}]]:8097/klaus/v1/get/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
<br>http://[[${localhost}]]:8097/klaus/v1/getAll/[[${mockedMessageDto.clientUUID}]]
</div>
<hr>
<div>
<br>To see your activity history use the form below
<form action="#" th:action="@{/eventsForm}" th:object="${eventRequestDto}" method="post">
<input type="text" th:name="clientUUID" th:value="${mockedMessageDto.clientUUID}" hidden/>
<br><label>Mocked response id:</label><br>
<input type="text" th:name="mockedResponseId" th:id="mockedResponseId" th:placeholder="all"/>
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">mockedResponseId error</td>
<br><label>Date from:</label><br>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom Error</td>
<br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo Error</td>
<div th:if="${#fields.hasAnyErrors()}">
<p th:each="err : ${#fields.allErrors()}" th:text="${err}">...</p>
</div>
<input type="submit" value="See my history"/>
</form>
</div>
<hr>
</div>
</div>
<script type="text/javascript" th:inline="javascript">
var mockedMessageDtoList = /*[[${mockedMessageDtoList}]]*/;
var listForPagination = /*[[${mockedMessageDtoList}]]*/;
</script>
<script src="/js/paggination.js"></script>
</body>
</html>

View File

@@ -0,0 +1,128 @@
<!DOCTYPE HTML>
<html lang="pl">
<head>
<title>Blog - Release11 - nowoczesne technologie IT.2</title>
<meta name="description" content="Release<sup>11</sup> jest nowoczesną firma zajmującą się automatyzacją procesów biznesowych związanych z wymianą informacji pomiędzy różnymi systemami i zbudowaną w oparciu o uznawane na całym świecie mechanizmy i wzorce." />
<meta name="generator" content="Quick.Cms.Ext v6.4" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="shortcut icon" href="templates/default/img/favicon.ico" />
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,700&amp;subset=latin-ext" rel="stylesheet">
<link rel="stylesheet" href="templates/default/style.css" />
<link rel="stylesheet" href="templates/default/style-sliders.css" />
<link rel="stylesheet" href="templates/default/style-widgets.css" />
<link rel="stylesheet" type="text/css" href="plugins/slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="plugins/slick/slick-theme.css"/>
<link rel="stylesheet" href="plugins/menu/jquery.sidr.light.min.css" />
<link rel="stylesheet" href="plugins/menu/hamburger.css" />
<link rel="stylesheet" href="plugins/aos/aos2.css" />
<link rel="stylesheet" href="templates/default/responsive.css" />
<script src="plugins/jquery.min.js"></script>
<script src="core/common.js"></script>
<script src="core/libraries/quick.slider.min.js"></script>
<meta property="og:url" content="http://rel.qtf.com.pl/blog.html" /><meta property="og:type" content="article" /><meta property="og:title" content="Blog" /><meta property="og:image" content="http://rel.qtf.com.pl/files/default_open_graph_image.jpg" />
</head>
<body id="page42" class="blog">
<nav id="skiplinks" aria-label="skiplinks">
<ul>
<li><a href="#head2">Przejdź do menu głównego</a></li>
<li><a href="#content">Przejdź do treści</a></li>
</ul>
</nav>
<div id="header">
<header id="head1"> <div class="container">
<h1 id="logo"><a href="./"><img src="templates/default/img/Release11logo_color.svg" alt="Release11"/></a></h1>
<nav class="menu-1" aria-label="menu-1"><ul><li><a href="./#slider-1">Start</a></li><li><a href="./#widget-2">Misja</a></li><li class=" drop-down"><a href="./#widget-1">Oferta</a><ul><li><a href="./#widget-9">Administracja systemami IT</a></li><li><a href="./#widget-10">NoSQL DataBases</a></li><li><a href="./#widget-11">Nowoczesna infrastruktura IT</a></li><li><a href="./#widget-12">Technologia XML</a></li><li><a href="./#widget-13">Usługi</a></li><li><a href="./#widget-14">Integracja systemów IT</a></li></ul></li><li><a href="./#widget-4">Bezpieczeństwo</a></li><li><a href="./#widget-5">Dlaczego My</a></li><li><a href="./blog.html">Blog</a></li><li class="selected"><a href="./tools.html">Narzędzia</a></li><li><a href="./#widget-6">Kontakt</a></li></ul></nav>
<div class="hamburger hamburger--stand" id="hamburger-menu">
<div class="hamburger-box">
<div class="hamburger-inner"></div>
</div>
</div>
</div>
</header>
</div>
<div id="container">
<div id="body">
<div class="container">
<div id="content">
<article id="page">
<h1>Blog</h1><div class="content"><ul class="pages-list pages-4"><li id="page-46"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-4.html"><img src="files/700/planszaban2_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-4.html">Tytuł Artykul 4</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-45"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-3.html"><img src="files/700/plansza1_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-3.html">Tytuł Artykul 3</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-44"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-2.html"><img src="files/700/plansza2_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-2.html">Tytuł Artykul 2</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-43"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-1.html"><img src="files/700/planszatel_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-1.html">Tytuł Artykul 1</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div></ul></article>
</div>
</div>
</div>
<div id="foot"> <footer>
<div class="container">
<div class="copy">&copy; 2020 Release<sup>11</sup> - Wszelkie prawa zastrzeżone. <nav class="menu-2" aria-label="menu-2"><ul><li><a href="./polityka-prywatnosci.html">Polityka prywatności</a></li></ul></nav></div>
<!--
Read the license before you change the footer
www.opensolution.org/licenses.html
-->
<div class="power"><a href="http://opensolution.org/">powered by Quick.Cms</a> | <a href="http://www.grafiqa.pl/">design grafiQa.pl</a></div>
<div id="logoFoot"><a href="./"><img src="templates/default/img/Release11logo_szare.svg" alt="Release11" /></a></div>
</div>
</footer>
</div>
</div>
<script src="plugins/jquery.mobile.events-touch.min.js"></script>
<script src="core/libraries/quick.box.min.js"></script>
<script type="text/javascript" src="plugins/slick/slick.min.js"></script>
<script type="text/javascript">
$(function() {
$('#page-14 h2, #page-14 .description').click(function(e) {
//jeżeli popup nie jest widoczny to go pokaż
if (!$('.popup:visible').length) {
$('.popup').fadeIn();
}
e.preventDefault();
return false;
});
//zdarzenie zamknięcia podpinamy pod przycisk close i pod tło popupa
$('.popup .close, .popup .bg, .contact-panel.send .bg, .contact-panel.send .close').click(function() {
$(this).parents('.popup, .contact-panel.send').fadeOut();
});
});
</script>
<script src="plugins/menu/jquery.sidr.min.js"></script>
<script>
$(document).ready(function() {
$('#hamburger-menu').sidr({
name: 'sidr-main',
side: 'right',
source: '.menu-1',
onOpen:function() {
$('#hamburger-menu').toggleClass('is-active');
$('#header').addClass('open_menu');
},
onClose:function() {
$('#hamburger-menu').toggleClass('is-active');
$('#header').removeClass('open_menu');
}
});
});
$( window ).resize(function () {
$.sidr('close', 'sidr');
});
</script>
<script src="plugins/aos/aos.js"></script>
<script>
AOS.init();
</script>
</body>
</html>

View File

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Component;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2020-09-11T10:05:20+0200",
date = "2020-09-21T16:25:27+0200",
comments = "version: 1.3.1.Final, compiler: javac, environment: Java 14.0.1 (Oracle Corporation)"
)
@Component