Browse Source

implemented fetching of previous month/year

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
main
Stephan Richter 6 months ago
parent
commit
5b05b85717
  1. 23
      de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java
  2. 3
      de.srsoftware.cal.web/src/main/resources/event.html
  3. 4
      de.srsoftware.cal.web/src/main/resources/index.html
  4. 0
      de.srsoftware.cal.web/src/main/resources/script/common.js
  5. 52
      de.srsoftware.cal.web/src/main/resources/script/event.js
  6. 118
      de.srsoftware.cal.web/src/main/resources/script/index.js

23
de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java

@ -4,8 +4,7 @@ package de.srsoftware.cal.db; @@ -4,8 +4,7 @@ package de.srsoftware.cal.db;
import static de.srsoftware.tools.Optionals.*;
import static de.srsoftware.tools.Result.transform;
import static de.srsoftware.tools.Strings.camelCase;
import static de.srsoftware.tools.jdbc.Condition.equal;
import static de.srsoftware.tools.jdbc.Condition.moreThan;
import static de.srsoftware.tools.jdbc.Condition.*;
import static de.srsoftware.tools.jdbc.Query.MARK;
import static java.lang.System.Logger.Level.*;
@ -221,15 +220,17 @@ public class MariaDB implements Database { @@ -221,15 +220,17 @@ public class MariaDB implements Database {
@Override
public List<Appointment> list(LocalDateTime from, LocalDateTime till) throws SQLException {
var list = new ArrayList<Appointment>();
var results = Query //
.select("appointments.*", "GROUP_CONCAT(keyword) AS tags")
.from(APPOINTMENTS)
.leftJoin(AID, "appointment_tags", AID)
.leftJoin("tid", "tags", "tid")
.groupBy(AID)
.sort("start")
.where("start", moreThan(from))
.exec(connection);
var query = Query //
.select("appointments.*", "GROUP_CONCAT(keyword) AS tags")
.from(APPOINTMENTS)
.leftJoin(AID, "appointment_tags", AID)
.leftJoin("tid", "tags", "tid")
.groupBy(AID)
.sort("start DESC");
nullable(from).ifPresent(start -> query.where("start", moreThan(start)));
nullable(till).ifPresent(end -> query.where("end",lessThan(end)));
var results = query.exec(connection);
while (results.next()) createAppointmentOf(results).optional().ifPresent(list::add);
results.close();
return list;

3
de.srsoftware.cal.web/src/main/resources/event.html

@ -3,7 +3,8 @@ @@ -3,7 +3,8 @@
<meta charset="UTF-8" />
<title>SRSoftware OpenCloudCal</title>
<link rel="stylesheet" href="occ.css" />
<script src="/static/script/occ.js"></script>
<script src="/static/script/common.js"></script>
<script src="/static/script/event.js"></script>
</head>
<body class="event">
<nav />

4
de.srsoftware.cal.web/src/main/resources/index.html

@ -3,12 +3,14 @@ @@ -3,12 +3,14 @@
<meta charset="UTF-8" />
<title>SRSoftware OpenCloudCal</title>
<link rel="stylesheet" href="/static/occ.css" />
<script src="/static/script/occ.js"></script>
<script src="/static/script/common.js"></script>
<script src="/static/script/index.js"></script>
</head>
<body>
<nav />
<div>
<h1>Event List</h1>
<div id="eventnav"></div>
<table id="eventlist">
<tr>
<th>ID</th>

0
de.srsoftware.cal.web/src/main/resources/script/common.js

52
de.srsoftware.cal.web/src/main/resources/script/event.js

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
function addDescription(json){
var desc = json.description ? json.description : '';
if (desc.indexOf('<')<0) desc = desc.replace(/\r?\n|\r/g,'<br/>');
document.getElementById('description').innerHTML = desc;
}
function attachmentList(json){
var attachments = document.getElementById('attachments');
attachments.innerHTML = '';
for (var attachment of json){
if (attachment.mime.startsWith('image')){
var img = document.createElement('img');
img.src = attachment.url;
attachments.appendChild(img);
}
}
}
async function handleEventData(response){
if (response.ok){
var json = await response.json();
document.getElementsByTagName('h1')[0].innerHTML = json.title ? json.title : '';
document.getElementById('time').innerHTML = json.start + (json.end ? '…'+json.end : '');
addDescription(json);
document.getElementById('tags').innerHTML = "Tags: "+json.tags.join(" ");
var links = document.getElementById('links');
links.innerHTML = "";
links.appendChild(linkList(json.links));
attachmentList(json.attachments);
}
}
function linkList(json){
var ul = document.createElement('ul');
for (var inner of json) {
var a = document.createElement('a');
a.href = inner.url;
a.innerHTML = inner.description;
a.target = '_blank';
var li = document.createElement('li')
li.appendChild(a);
ul.appendChild(li);
}
return ul;
}
function loadEventData(){
const urlParams = new URLSearchParams(window.location.search);
var id = urlParams.get('id');
if (id) fetch('/api/event?id='+id).then(handleEventData);
}

118
de.srsoftware.cal.web/src/main/resources/script/occ.js → de.srsoftware.cal.web/src/main/resources/script/index.js

@ -1,15 +1,6 @@ @@ -1,15 +1,6 @@
var start = null;
var end = null;
function fetchEvents(start, end){
var path = '/api/events/list';
if (start) {
path += '?start='+start;
if (end) path+= '&end='+end;
}
fetch(path).then(handleEvents);
}
function addCell(row,content,id){
var a = document.createElement('a');
if (content){
@ -19,18 +10,9 @@ function addCell(row,content,id){ @@ -19,18 +10,9 @@ function addCell(row,content,id){
row.insertCell().appendChild(a);
}
function showOverlay(url){
var div = document.getElementById('overlay');
var iframe = document.createElement('iframe');
iframe.src = url;
div.appendChild(iframe);
div.style.display = 'block';
div.onclick = e => div.style.display = 'none';
}
function addRow(json){
var table = document.getElementById('eventlist');
var row = table.insertRow();
var row = table.insertRow(1);
addCell(row,json.id,json.id);
addCell(row,json.start,json.id);
addCell(row,json.end,json.id);
@ -51,51 +33,41 @@ function createTags(tagList){ @@ -51,51 +33,41 @@ function createTags(tagList){
return td;
}
async function handleEventData(response){
if (response.ok){
var json = await response.json();
document.getElementsByTagName('h1')[0].innerHTML = json.title ? json.title : '';
document.getElementById('time').innerHTML = json.start + (json.end ? '…'+json.end : '');
addDescription(json);
document.getElementById('tags').innerHTML = "Tags: "+json.tags.join(" ");
var links = document.getElementById('links');
links.innerHTML = "";
links.appendChild(linkList(json.links));
attachmentList(json.attachments);
}
}
function addDescription(json){
var desc = json.description ? json.description : '';
if (desc.indexOf('<')<0) desc = desc.replace(/\r?\n|\r/g,'<br/>');
document.getElementById('description').innerHTML = desc;
function fetchEvents(start, end){
var path = '/api/events/list';
if (start) {
path += '?start='+start;
if (end) path+= '&end='+end;
}
fetch(path).then(handleEvents);
}
function attachmentList(json){
var attachments = document.getElementById('attachments');
attachments.innerHTML = '';
for (var attachment of json){
if (attachment.mime.startsWith('image')){
var img = document.createElement('img');
img.src = attachment.url;
attachments.appendChild(img);
}
function fetchLastMonth(){
console.log('fetchLastMonth, start = ',start);
var startDate = new Date(Date.parse(start+'-01'));
var month = startDate.getMonth() +1;
var year = startDate.getFullYear();
console.log({start:start,month:month,year:year});
month -= 1;
if (month < 1) {
year--;
month+=12;
}
end = start;
start = year + '-' + (month<10 ? '0' : '') + month;
console.log({start:start,month:month,year:year});
fetchEvents(start,end);
}
function linkList(json){
var ul = document.createElement('ul');
for (var inner of json) {
var a = document.createElement('a');
a.href = inner.url;
a.innerHTML = inner.description;
a.target = '_blank';
var li = document.createElement('li')
li.appendChild(a);
ul.appendChild(li);
}
return ul;
function fetchLastYear(){
console.log('fetchLastYear');
var startDate = new Date(Date.parse(start+'-01'));
var month = startDate.getMonth() +1;
var year = startDate.getFullYear();
if (month <= 1) year --;
month = 1;
start = year + '-' + (month<10 ? '0' : '') + month;
fetchEvents(start,end);
}
async function handleEvents(response){
@ -111,19 +83,33 @@ function loadCurrentEvents(){ @@ -111,19 +83,33 @@ function loadCurrentEvents(){
var year = now.getFullYear();
var month = now.getMonth() + 1;
start = year + '-' + (month < 10 ? '0' : '') + month;
updateLoader(start);
fetchEvents(start,end);
}
}
function loadEventData(){
const urlParams = new URLSearchParams(window.location.search);
var id = urlParams.get('id');
if (id){
fetch('/api/event?id='+id).then(handleEventData)
}
function showOverlay(url){
var div = document.getElementById('overlay');
var iframe = document.createElement('iframe');
iframe.src = url;
div.appendChild(iframe);
div.style.display = 'block';
div.onclick = e => div.style.display = 'none';
}
function toggleTag(tag){
alert(`toggleTag(${tag})`);
}
function updateLoader(){
var nav = document.getElementById('eventnav');
nav.innerHTML = '';
var lastMonth = document.createElement('button');
lastMonth.innerHTML = 'Load previous month';
lastMonth.onclick = e => fetchLastMonth();
var lastYear = document.createElement('button');
lastYear.innerHTML = 'Load previous year';
lastYear.onclick = e => fetchLastYear();
nav.appendChild(lastMonth);
nav.appendChild(lastYear);
}
Loading…
Cancel
Save