From 1c1850deadd7963a4c4e4a926b259a27a1a899c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Thu, 28 May 2020 14:59:46 +0200 Subject: [PATCH] tagsDisplay: for tag2link tags with multiple formatters show selector --- src/category.css | 23 +++++++++++++++++++++++ src/tagsDisplay.js | 42 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/category.css b/src/category.css index 93ef0d8f..31da4eb7 100644 --- a/src/category.css +++ b/src/category.css @@ -161,3 +161,26 @@ .info .infoShowDetails .summary { display: none; } + +dl > dd { + position: relative; +} +.tag2link { + position: absolute; + top: 1em; + left: 0; + border: 1px solid black; + padding: 0.25em; + background: white; + z-index: 1; +} +.tag2link > .closeButton { + float: right; +} +.tag2link > ul { + padding-left: 0; + margin: 0; +} +.tag2link > ul > li { + list-style: none; +} diff --git a/src/tagsDisplay.js b/src/tagsDisplay.js index 08a38220..687af1d3 100644 --- a/src/tagsDisplay.js +++ b/src/tagsDisplay.js @@ -33,6 +33,7 @@ const formatter = [ } ] +let tag2link let compiled = false let defaultTemplate @@ -91,17 +92,54 @@ register_hook('init_callback', (initState, callback) => { return callback() } - let tag2link = JSON.parse(result.body) + tag2link = JSON.parse(result.body) Object.keys(tag2link).forEach(key => { let tag = tag2link[key] + let link = tag.formatter[0].link.replace('$1', '{{ value }}') + + if (tag.formatter.length > 1) { + link = "#\" onclick=\"return tag2link(this, " + JSON.stringify(key).replace(/"/g, '"') + ", {{ value|json_encode }})" + } formatter.push({ regexp: new RegExp("^" + key + "$"), - link: tag.formatter[0].link.replace('$1', '{{ value }}') + link }) }) callback() }) }) + +global.tag2link = function (dom, key, value) { + let div = document.createElement('div') + div.className = 'tag2link' + dom.parentNode.appendChild(div) + + let closeButton = document.createElement('div') + closeButton.className = 'closeButton' + closeButton.innerHTML = '❌' + closeButton.onclick = () => { + dom.parentNode.removeChild(div) + } + div.appendChild(closeButton) + + let selector = document.createElement('ul') + div.appendChild(selector) + + let tag = tag2link[key] + tag.formatter.forEach(formatter => { + let li = document.createElement('li') + + let a = document.createElement('a') + a.target = '_blank' + a.href = formatter.link.replace('$1', value) + a.appendChild(document.createTextNode(formatter.operator)) + + li.appendChild(a) + selector.appendChild(li) + }) + + return false +}