basic filter support

This commit is contained in:
Nils Schneider 2015-07-08 00:36:57 +02:00
commit 09bdb7d61a
8 changed files with 246 additions and 38 deletions

34
lib/filters/filtergui.js Normal file
View file

@ -0,0 +1,34 @@
define([], function () {
return function (distributor) {
var container = document.createElement("ul")
container.classList.add("filters")
function render(el) {
el.appendChild(container)
}
function filtersChanged(filters) {
while (container.firstChild)
container.removeChild(container.firstChild)
filters.forEach( function (d) {
var li = document.createElement("li")
var div = document.createElement("div")
container.appendChild(li)
li.appendChild(div)
d.render(div)
var button = document.createElement("button")
button.textContent = ""
button.onclick = function () {
distributor.removeFilter(d)
}
li.appendChild(button)
})
}
return { render: render,
filtersChanged: filtersChanged
}
}
})

View file

@ -0,0 +1,32 @@
define(["filters/nodefilter"], function (nodefilter) {
return function (name, key, value, f) {
function run(d) {
var o = dictGet(d, key.slice(0))
if (f)
o = f(o)
return o === value
}
function setRefresh() {
}
function render(el) {
var label = document.createElement("label")
label.textContent = name + " "
var strong = document.createElement("strong")
strong.textContent = value
label.appendChild(strong)
el.appendChild(label)
}
return { run: nodefilter(run),
setRefresh: setRefresh,
render: render
}
}
})

33
lib/filters/nodefilter.js Normal file
View file

@ -0,0 +1,33 @@
define([], function () {
return function (filter) {
return function (data) {
var n = Object.create(data)
n.nodes = {}
for (var key in data.nodes) {
n.nodes[key] = data.nodes[key].filter(filter)
}
var filteredIds = new Set()
n.graph = {}
n.graph.nodes = data.graph.nodes.filter( function (d) {
if (!d.node)
return true
var r = filter(d.node)
if (r)
filteredIds.add(d.id)
return r
})
n.graph.links = data.graph.links.filter( function (d) {
return filteredIds.has(d.source.id) && filteredIds.has(d.target.id)
})
return n
}
}
})