You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.6 KiB

  1. const httpGet = require('./httpGet')
  2. const formatter = require('./tagsDisplay').formatter
  3. let tag2link
  4. register_hook('init_callback', (initState, callback) => {
  5. httpGet('dist/tag2link.json', {}, (err, result) => {
  6. if (err) {
  7. console.error('Can\'t read dist/tag2link.json - execute bin/download_dependencies')
  8. return callback()
  9. }
  10. tag2link = JSON.parse(result.body)
  11. Object.keys(tag2link).forEach(key => {
  12. let tag = tag2link[key]
  13. let link = tag.formatter[0].link.replace('$1', '{{ value }}')
  14. if (tag.formatter.length > 1) {
  15. link = "#\" onclick=\"return tag2link(this, " + JSON.stringify(key).replace(/"/g, '"') + ", {{ value|json_encode }})"
  16. }
  17. formatter.push({
  18. regexp: new RegExp("^" + key + "$"),
  19. link
  20. })
  21. })
  22. callback()
  23. })
  24. })
  25. global.tag2link = function (dom, key, value) {
  26. let div = document.createElement('div')
  27. div.className = 'tag2link'
  28. dom.parentNode.appendChild(div)
  29. let closeButton = document.createElement('div')
  30. closeButton.className = 'closeButton'
  31. closeButton.innerHTML = '❌'
  32. closeButton.onclick = () => {
  33. dom.parentNode.removeChild(div)
  34. }
  35. div.appendChild(closeButton)
  36. let selector = document.createElement('ul')
  37. div.appendChild(selector)
  38. let tag = tag2link[key]
  39. tag.formatter.forEach(formatter => {
  40. let li = document.createElement('li')
  41. let a = document.createElement('a')
  42. a.target = '_blank'
  43. a.href = formatter.link.replace('$1', value)
  44. a.appendChild(document.createTextNode(formatter.operator))
  45. li.appendChild(a)
  46. selector.appendChild(li)
  47. })
  48. return false
  49. }