basic filter support
This commit is contained in:
parent
aeae866998
commit
09bdb7d61a
8 changed files with 246 additions and 38 deletions
34
lib/filters/filtergui.js
Normal file
34
lib/filters/filtergui.js
Normal 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
|
||||
}
|
||||
}
|
||||
})
|
32
lib/filters/genericnode.js
Normal file
32
lib/filters/genericnode.js
Normal 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
33
lib/filters/nodefilter.js
Normal 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
|
||||
}
|
||||
}
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue