implemented tag filtering
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -10,15 +10,19 @@
|
|||||||
<nav />
|
<nav />
|
||||||
<div>
|
<div>
|
||||||
<h1>Event List</h1>
|
<h1>Event List</h1>
|
||||||
<div id="eventnav"></div>
|
<span id="eventnav">
|
||||||
|
<button onclick="fetchLastMonth()">Load previous month</button>
|
||||||
|
<button onclick="fetchLastYear()">Load previous year</button>
|
||||||
|
</span>
|
||||||
|
<span id="tag_selection"></span>
|
||||||
<table id="eventlist">
|
<table id="eventlist">
|
||||||
<tr>
|
<tr class="head">
|
||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th>Start</th>
|
<th>Start</th>
|
||||||
<th>End</th>
|
<th>End</th>
|
||||||
<th>Location</th>
|
<th>Location</th>
|
||||||
<th>Title</th>
|
<th>Title</th>
|
||||||
<th>Tags</th>
|
<th>Tags – click to filter!</th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -38,4 +38,23 @@ body.event {
|
|||||||
text-align: justify;
|
text-align: justify;
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#close_overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
background: chocolate;
|
||||||
|
z-index: 1000;
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid yellow;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tag_selection {
|
||||||
|
background: orange;
|
||||||
|
padding: 3px 10px;
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
var start = null;
|
var start = null;
|
||||||
var end = null;
|
var end = null;
|
||||||
|
var tags = new Set();
|
||||||
|
|
||||||
function addCell(row,content,id){
|
function addCell(row,content,id){
|
||||||
var a = document.createElement('a');
|
var a = document.createElement('a');
|
||||||
@@ -13,6 +14,10 @@ function addCell(row,content,id){
|
|||||||
function addRow(json){
|
function addRow(json){
|
||||||
var table = document.getElementById('eventlist');
|
var table = document.getElementById('eventlist');
|
||||||
var row = table.insertRow(1);
|
var row = table.insertRow(1);
|
||||||
|
if (json.tags){
|
||||||
|
var tagList = json.tags.join(' ');
|
||||||
|
row.setAttribute('class',tagList);
|
||||||
|
}
|
||||||
addCell(row,json.id,json.id);
|
addCell(row,json.id,json.id);
|
||||||
addCell(row,json.start,json.id);
|
addCell(row,json.start,json.id);
|
||||||
addCell(row,json.end,json.id);
|
addCell(row,json.end,json.id);
|
||||||
@@ -43,11 +48,9 @@ function fetchEvents(start, end){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function fetchLastMonth(){
|
function fetchLastMonth(){
|
||||||
console.log('fetchLastMonth, start = ',start);
|
|
||||||
var startDate = new Date(Date.parse(start+'-01'));
|
var startDate = new Date(Date.parse(start+'-01'));
|
||||||
var month = startDate.getMonth() +1;
|
var month = startDate.getMonth() +1;
|
||||||
var year = startDate.getFullYear();
|
var year = startDate.getFullYear();
|
||||||
console.log({start:start,month:month,year:year});
|
|
||||||
month -= 1;
|
month -= 1;
|
||||||
if (month < 1) {
|
if (month < 1) {
|
||||||
year--;
|
year--;
|
||||||
@@ -55,12 +58,10 @@ function fetchLastMonth(){
|
|||||||
}
|
}
|
||||||
end = start;
|
end = start;
|
||||||
start = year + '-' + (month<10 ? '0' : '') + month;
|
start = year + '-' + (month<10 ? '0' : '') + month;
|
||||||
console.log({start:start,month:month,year:year});
|
|
||||||
fetchEvents(start,end);
|
fetchEvents(start,end);
|
||||||
}
|
}
|
||||||
|
|
||||||
function fetchLastYear(){
|
function fetchLastYear(){
|
||||||
console.log('fetchLastYear');
|
|
||||||
var startDate = new Date(Date.parse(start+'-01'));
|
var startDate = new Date(Date.parse(start+'-01'));
|
||||||
var month = startDate.getMonth() +1;
|
var month = startDate.getMonth() +1;
|
||||||
var year = startDate.getFullYear();
|
var year = startDate.getFullYear();
|
||||||
@@ -73,7 +74,8 @@ function fetchLastYear(){
|
|||||||
async function handleEvents(response){
|
async function handleEvents(response){
|
||||||
if (response.ok){
|
if (response.ok){
|
||||||
var json = await response.json();
|
var json = await response.json();
|
||||||
json.forEach(addRow)
|
json.forEach(addRow);
|
||||||
|
updateTagVisibility();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,33 +85,52 @@ function loadCurrentEvents(){
|
|||||||
var year = now.getFullYear();
|
var year = now.getFullYear();
|
||||||
var month = now.getMonth() + 1;
|
var month = now.getMonth() + 1;
|
||||||
start = year + '-' + (month < 10 ? '0' : '') + month;
|
start = year + '-' + (month < 10 ? '0' : '') + month;
|
||||||
updateLoader(start);
|
|
||||||
fetchEvents(start,end);
|
fetchEvents(start,end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showOverlay(url){
|
function showOverlay(url){
|
||||||
var div = document.getElementById('overlay');
|
var div = document.getElementById('overlay');
|
||||||
|
div.innerHTML = '';
|
||||||
var iframe = document.createElement('iframe');
|
var iframe = document.createElement('iframe');
|
||||||
iframe.src = url;
|
iframe.src = url;
|
||||||
div.appendChild(iframe);
|
div.appendChild(iframe);
|
||||||
div.style.display = 'block';
|
div.style.display = 'block';
|
||||||
div.onclick = e => div.style.display = 'none';
|
div.onclick = e => div.style.display = 'none';
|
||||||
|
var btn = document.createElement('div');
|
||||||
|
btn.id = 'close_overlay';
|
||||||
|
btn.innerHTML = '✖';
|
||||||
|
div.appendChild(btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleTag(tag){
|
function toggleTag(tag){
|
||||||
alert(`toggleTag(${tag})`);
|
if (tags.has(tag)){
|
||||||
|
tags.delete(tag);
|
||||||
|
} else {
|
||||||
|
tags.add(tag);
|
||||||
|
}
|
||||||
|
updateTagVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateLoader(){
|
function updateTagVisibility(){
|
||||||
var nav = document.getElementById('eventnav');
|
var selection = document.getElementById('tag_selection');
|
||||||
nav.innerHTML = '';
|
selection.innerHTML = 'Selected Tags: ';
|
||||||
var lastMonth = document.createElement('button');
|
selection.style.display = tags.size > 0 ? 'inline' : 'none';
|
||||||
lastMonth.innerHTML = 'Load previous month';
|
tags.forEach(tag => {
|
||||||
lastMonth.onclick = e => fetchLastMonth();
|
var btn = document.createElement('button');
|
||||||
var lastYear = document.createElement('button');
|
btn.onclick = e => toggleTag(tag);
|
||||||
lastYear.innerHTML = 'Load previous year';
|
btn.innerHTML = tag;
|
||||||
lastYear.onclick = e => fetchLastYear();
|
selection.appendChild(btn);
|
||||||
nav.appendChild(lastMonth);
|
selection.appendChild(document.createTextNode(' '));
|
||||||
nav.appendChild(lastYear);
|
});
|
||||||
|
var table = document.getElementById('eventlist');
|
||||||
|
for (var tr of table.getElementsByTagName('tr')){
|
||||||
|
var classes = tr.getAttribute('class');
|
||||||
|
if (classes =='head') continue;
|
||||||
|
var all = true;
|
||||||
|
tags.forEach(tag => {
|
||||||
|
if (classes.indexOf(tag)<0) all = false;
|
||||||
|
});
|
||||||
|
tr.style.display = all ? 'table-row' : 'none';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user