Commit 86562d73 authored by Romain Loth's avatar Romain Loth

Merge commit '59948f9' into with_tina_1.2 (bipartite edge filters)

parents 31a6a2c6 38b878f4
...@@ -631,6 +631,8 @@ function edgeSizesSteps(eTypeStr) { ...@@ -631,6 +631,8 @@ function edgeSizesSteps(eTypeStr) {
} }
} }
// console.warn ("edgeSizesSteps:", eTypeStr, stepToIdsArray)
return stepToIdsArray return stepToIdsArray
} }
...@@ -639,22 +641,24 @@ function edgeSizesSteps(eTypeStr) { ...@@ -639,22 +641,24 @@ function edgeSizesSteps(eTypeStr) {
// EdgeWeightFilter("#sliderAEdgeWeight", "1", "weight"); // EdgeWeightFilter("#sliderAEdgeWeight", "1", "weight");
// EdgeWeightFilter("#sliderAEdgeWeight", "1|0", "weight"); // EdgeWeightFilter("#sliderAEdgeWeight", "1|0", "weight");
// EdgeWeightFilter("#sliderBEdgeWeight", "0|1", "weight"); // EdgeWeightFilter("#sliderBEdgeWeight", "0|1", "weight");
// EdgeWeightFilter("#sliderBEdgeWeight", "1|1", "weight");
// NB new sigma js: dropEdge is quite slow so we add a waiting cursor // NB new sigma js: dropEdge is quite slow so we add a waiting cursor
function EdgeWeightFilter(sliderDivID , typestr , criteria) { function EdgeWeightFilter(sliderDivID , typestr , criteria) {
if(TW.partialGraph.graph.nEdges()<2) { if(TW.partialGraph.graph.nEdges()<2) {
console.warn('not enough edges for subsets: skipping GUI slider init') console.log('not enough edges for subsets: skipping GUI slider init')
showDisabledSlider(sliderDivID) showDisabledSlider(sliderDivID)
return; return;
} }
// building the index
var stepToIdsArr = edgeSizesSteps(typestr) var stepToIdsArr = edgeSizesSteps(typestr)
var steps = stepToIdsArr.length var steps = stepToIdsArr.length
if(steps<2) { if(steps<2) {
console.warn('no size steps for edges: skipping GUI slider init') console.log('no size steps for edges: skipping GUI slider init')
showDisabledSlider(sliderDivID) showDisabledSlider(sliderDivID)
return; return;
} }
...@@ -662,7 +666,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -662,7 +666,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
// cache initial value // cache initial value
var initialValue=("0-"+(steps-1)); var initialValue=("0-"+(steps-1));
TW.gui.lastFilters[sliderDivID] = initialValue TW.gui.lastFilters[`${sliderDivID}/${typestr}`] = initialValue
var present = TW.states.slice(-1)[0]; var present = TW.states.slice(-1)[0];
...@@ -674,13 +678,31 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -674,13 +678,31 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
return return
} }
//finished
// Relations are of 3 kinds: within nodes0, within nodes1, true bipartite
// 1|0 0|1 1|1
// three-way slider colors to represent that
// orange for terms, green for docs/people/contexts, violet for bipartite
switch (typestr) {
case '1':
case '1|0':
edgeTypeColor = "#FFA500"
break;
case '0|1':
edgeTypeColor = "#27c470"
break;
case '1|1':
edgeTypeColor = "#A40DFF" // or "#E8200C"
break;
}
// legacy technique (should use .hidden more and possibly edg indx by sizes)
$(sliderDivID).freshslider({ $(sliderDivID).freshslider({
range: true, range: true,
step: 1, step: 1,
min:0, min:0,
// green for docs/people, orange for terms bgcolor: edgeTypeColor,
bgcolor: (typestr=="1|0" || typestr=="1")?"#FFA500":"#27c470" ,
max:steps-1, max:steps-1,
value:[0,steps-1], value:[0,steps-1],
onchange:function(low, high) { onchange:function(low, high) {
...@@ -701,10 +723,11 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -701,10 +723,11 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
edgeSlideTimeout = setTimeout ( function () { edgeSlideTimeout = setTimeout ( function () {
var filtervalue = low+"-"+high var filtervalue = low+"-"+high
var lastvalue = TW.gui.lastFilters[sliderDivID] var lastvalue = TW.gui.lastFilters[`${sliderDivID}/${typestr}`]
// sliderDivID+"_"+filtervalue // sliderDivID+"_"+filtervalue
// console.debug("\nprevious value "+lastvalue+" | current value "+filtervalue) console.debug("\nprevious value "+lastvalue+" | current value "+filtervalue)
if(filtervalue!=lastvalue) { if(filtervalue!=lastvalue) {
...@@ -765,7 +788,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -765,7 +788,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
// global level case // global level case
if(present.level) { if(present.level) {
// console.log("\tADD "+eid) console.log("\tADD "+eid)
// n = eid.split(";") // n = eid.split(";")
// if(n.length>1) // if(n.length>1)
// console.log("\t\tsource:("+TW.Nodes[n[0]].x+","+TW.Nodes[n[0]].y+") ||| target:("+TW.Nodes[n[1]].x+","+TW.Nodes[n[1]].y+")") // console.log("\t\tsource:("+TW.Nodes[n[0]].x+","+TW.Nodes[n[0]].y+") ||| target:("+TW.Nodes[n[1]].x+","+TW.Nodes[n[1]].y+")")
...@@ -779,7 +802,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -779,7 +802,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
// NB we assume the sigma convention eid = "nid1;nid2" // NB we assume the sigma convention eid = "nid1;nid2"
let nidkeys = eid.split(';') let nidkeys = eid.split(';')
// console.log(nidkeys) console.log(nidkeys)
if (nidkeys.length != 2) { if (nidkeys.length != 2) {
console.error("invalid edge id:" + eid) console.error("invalid edge id:" + eid)
...@@ -803,7 +826,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -803,7 +826,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
} else { } else {
if(delflag) { if(delflag) {
// console.log("deleting "+ids.join()) console.log("deleting "+eids.join())
for(var i in eids) { for(var i in eids) {
ID = eids[i] ID = eids[i]
if(!isUndef(TW.partialGraph.graph.edges(ID))) { if(!isUndef(TW.partialGraph.graph.edges(ID))) {
...@@ -815,10 +838,9 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -815,10 +838,9 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
// usually very long b/c sigma has to update indexes // usually very long b/c sigma has to update indexes
// <=> shift same arrays many times // <=> shift same arrays many times
totalDeletingTime += (t1-t0) totalDeletingTime += (t1-t0)
// POSS ideally: implement a batch dropEdges // POSS ideally: use .hidden
// or use graph.clear and rebuild the rest
// console.log("\tDEL "+ID) console.log("\tDEL "+ID)
// n = ID.split(";") // n = ID.split(";")
// if(n.length>1) // if(n.length>1)
...@@ -840,9 +862,8 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -840,9 +862,8 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
}, 10) }, 10)
// [ / Starting FA2 ] // [ / Starting FA2 ]
console.log("lastvalue===", lastvalue) // memoize as last value
TW.gui.lastFilters[sliderDivID] = lastvalue TW.gui.lastFilters[`${sliderDivID}/${typestr}`] = filtervalue
// pushFilterValue( sliderDivID , lastvalue )
} }
else { else {
...@@ -851,6 +872,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) { ...@@ -851,6 +872,7 @@ function EdgeWeightFilter(sliderDivID , typestr , criteria) {
// in any case // in any case
setTimeout( function() { setTimeout( function() {
TW.partialGraph.refresh()
TW.gui.elHtml.classList.remove('waiting') TW.gui.elHtml.classList.remove('waiting')
}, 20) }, 20)
...@@ -946,6 +968,11 @@ function NodeWeightFilter( sliderDivID , tgtNodeType , criteria) { ...@@ -946,6 +968,11 @@ function NodeWeightFilter( sliderDivID , tgtNodeType , criteria) {
if(i>=low && i<=high){ if(i>=low && i<=high){
for(var id in ids) { for(var id in ids) {
ID = ids[id] ID = ids[id]
if (! TW.Nodes[ID]) {
console.warn ('nodeslider asks for nonexistatn ID', ID)
continue;
}
TW.Nodes[ID].lock = false; TW.Nodes[ID].lock = false;
if(TW.partialGraph.graph.nodes(ID)) if(TW.partialGraph.graph.nodes(ID))
TW.partialGraph.graph.nodes(ID).hidden = false; TW.partialGraph.graph.nodes(ID).hidden = false;
......
...@@ -71,8 +71,9 @@ TW.pushState = function( args ) { ...@@ -71,8 +71,9 @@ TW.pushState = function( args ) {
$(".for-nodecategory-1").show(); $(".for-nodecategory-1").show();
NodeWeightFilter( "#slidercat0nodesweight" , TW.categories[0], "size"); NodeWeightFilter( "#slidercat0nodesweight" , TW.categories[0], "size");
NodeWeightFilter( "#slidercat1nodesweight" , TW.categories[1], "size"); NodeWeightFilter( "#slidercat1nodesweight" , TW.categories[1], "size");
EdgeWeightFilter("#slidercat0edgesweight", "1|0", "weight");
EdgeWeightFilter("#slidercat1edgesweight", "0|1", "weight"); // only truly bipartite edges => only one GUI slider
EdgeWeightFilter("#slidercat1edgesweight", "1|1", "weight");
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment