genericnode.js 1017 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. define(["filters/nodefilter"], function (nodefilter) {
  2. return function (name, key, value, f) {
  3. var negate = false
  4. var refresh
  5. function run(d) {
  6. var o = dictGet(d, key.slice(0))
  7. if (f)
  8. o = f(o)
  9. return o === value ? !negate : negate
  10. }
  11. function setRefresh(f) {
  12. refresh = f
  13. }
  14. function draw(el) {
  15. if (negate)
  16. el.parentNode.classList.add("not")
  17. else
  18. el.parentNode.classList.remove("not")
  19. }
  20. function render(el) {
  21. var label = document.createElement("label")
  22. label.textContent = name + " "
  23. var strong = document.createElement("strong")
  24. strong.textContent = value
  25. draw(el)
  26. label.appendChild(strong)
  27. label.onclick = function () {
  28. negate = !negate
  29. draw(el)
  30. if (refresh)
  31. refresh()
  32. }
  33. el.appendChild(label)
  34. }
  35. return { run: nodefilter(run),
  36. setRefresh: setRefresh,
  37. render: render
  38. }
  39. }
  40. })