|
|
|
@ -1,11 +1,36 @@
@@ -1,11 +1,36 @@
|
|
|
|
|
var keyTimer = null; |
|
|
|
|
var selectedTags = new Set(); |
|
|
|
|
var marker = NULL; |
|
|
|
|
var marker = null; |
|
|
|
|
|
|
|
|
|
function fetchTags(text){ |
|
|
|
|
if (text) fetch('/api/tags?infix='+text).then(handleTags); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function removeParent(target){ |
|
|
|
|
var p = target.parentNode; |
|
|
|
|
p.parentNode.removeChild(p); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function addLink(evt){ |
|
|
|
|
var input = element('link-url'); |
|
|
|
|
var url = input.value; |
|
|
|
|
var name = prompt('Description for '+url,'Homepage'); |
|
|
|
|
var span = document.createElement('span'); |
|
|
|
|
span.innerHTML = `<a href="${url}">${name}</a><a onclick="removeParent(this)">❌</a> `; |
|
|
|
|
element('link-list').appendChild(span); |
|
|
|
|
input.value = ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function addImage(evt){ |
|
|
|
|
var input = element('image-url'); |
|
|
|
|
var url = input.value; |
|
|
|
|
var span = document.createElement('span'); |
|
|
|
|
span.innerHTML = `<img src="${url}" /><a onclick="removeParent(this)">❌</a> `; |
|
|
|
|
element('attachment-list').appendChild(span); |
|
|
|
|
input.value = ''; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async function handleTags(response){ |
|
|
|
|
if (response.ok){ |
|
|
|
|
var tags = await response.json(); |
|
|
|
@ -13,8 +38,8 @@ async function handleTags(response){
@@ -13,8 +38,8 @@ async function handleTags(response){
|
|
|
|
|
console.log("no proposals!"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
var select = document.getElementById('proposals'); |
|
|
|
|
var input = document.getElementById('tags-input'); |
|
|
|
|
var select = element('proposals'); |
|
|
|
|
var input = element('tags-input'); |
|
|
|
|
if (!select) return; |
|
|
|
|
select.innerHTML = ''; |
|
|
|
|
tags.forEach(tag => { |
|
|
|
@ -35,7 +60,7 @@ async function handleTags(response){
@@ -35,7 +60,7 @@ async function handleTags(response){
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function onMapClick(e) { |
|
|
|
|
document.getElementById('coords').value = `${e.latlng.lat}, ${e.latlng.lng}`; |
|
|
|
|
element('coords').value = `${e.latlng.lat}, ${e.latlng.lng}`; |
|
|
|
|
if (marker) marker.setLatLng(e.latlng); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -43,15 +68,66 @@ function onMapClick(e) {
@@ -43,15 +68,66 @@ function onMapClick(e) {
|
|
|
|
|
function tagKeyPress(e){ |
|
|
|
|
var input = e.target; |
|
|
|
|
if (e.keyCode == 13){ |
|
|
|
|
selectedTags.add(input.value); |
|
|
|
|
var list = document.getElementById('taglist'); |
|
|
|
|
var btn = document.createElement('button'); |
|
|
|
|
btn.innerHTML = input.value; |
|
|
|
|
list.appendChild(btn); |
|
|
|
|
list.appendChild(document.createTextNode(' ')); |
|
|
|
|
var tag = input.value; |
|
|
|
|
if (!tag) return; |
|
|
|
|
var list = element('taglist'); |
|
|
|
|
if (selectedTags.size<1) list.innerHTML = ''; |
|
|
|
|
list.innerHTML += `<span><button onclick="this.parentNode.parentNode.removeChild(this.parentNode);" title="click to remove">${input.value}</button> </span>`; |
|
|
|
|
selectedTags.add(tag); |
|
|
|
|
input.value = ''; |
|
|
|
|
var btn = element('save'); |
|
|
|
|
btn.removeAttribute("disabled"); |
|
|
|
|
btn.onclick= function(){ saveEvent(); }; |
|
|
|
|
console.log(btn); |
|
|
|
|
} else { |
|
|
|
|
if (keyTimer != null) clearTimeout(keyTimer); |
|
|
|
|
setTimeout(() => fetchTags(input.value),500); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function getTags(){ |
|
|
|
|
var list = element('taglist'); |
|
|
|
|
var buttons = list.getElementsByTagName('button'); |
|
|
|
|
var tags = []; |
|
|
|
|
for(let i = 0;i < buttons.length; i++){ |
|
|
|
|
tags.push(buttons[i].innerHTML); |
|
|
|
|
} |
|
|
|
|
return tags; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function getLinks(){ |
|
|
|
|
var list = element('link-list'); |
|
|
|
|
var anchors = list.getElementsByTagName('a'); |
|
|
|
|
var links = []; |
|
|
|
|
for(let i = 0;i < anchors.length; i++){ |
|
|
|
|
var anchor = anchors[i]; |
|
|
|
|
if (anchor.href) links.push({description:anchor.innerHTML,url:anchor.href}); |
|
|
|
|
} |
|
|
|
|
return links; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function getAttachments(){ |
|
|
|
|
var list = element('attachment-list'); |
|
|
|
|
var images = list.getElementsByTagName('img'); |
|
|
|
|
var urls = []; |
|
|
|
|
for(let i = 0;i < images.length; i++){ |
|
|
|
|
var img = images[i]; |
|
|
|
|
if (img.src) urls.push(img.src); |
|
|
|
|
} |
|
|
|
|
return urls; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function saveEvent(){ |
|
|
|
|
var event = { |
|
|
|
|
title : element('title').value, |
|
|
|
|
description : element('description').value, |
|
|
|
|
location : element('location').value, |
|
|
|
|
start : element('start').value, |
|
|
|
|
end : element('end').value, |
|
|
|
|
tags: getTags(), |
|
|
|
|
links: getLinks(), |
|
|
|
|
coords: element('coords').value, |
|
|
|
|
attachments: getAttachments() |
|
|
|
|
}; |
|
|
|
|
console.log(event); |
|
|
|
|
} |