Commit 98bf373c authored by Romain Loth's avatar Romain Loth

better sliders skeleton for bipartite case

faster NodeWeightFilter with the new index, harmonized calls and signatures for nodes and edges functions, TODO check lastFilter updating
parent 0c101924
......@@ -184,9 +184,8 @@
</a></li>
<li><a>
<!-- TODO fix: category0 -> category1 switching -->
Label size<br>
<div id="slidercat0nodessize" class="settingslider"></div>
<div id="sliderlabelsize" class="settingslider"></div>
</a></li>
<li class="dropdown">
......@@ -205,10 +204,8 @@
</li>
-->
<!-- TODO fix: category0 -> category1 switching -->
<li class="weight-selectors">
<!-- <a> -->
<!-- Create a subgraph -->
<li class="weight-selectors category0">
<!-- Create a subgraph over nodes from TW.categories[0] (docs or def nodes)-->
<table>
<tr>
<td class="slider-legend">
......@@ -226,7 +223,8 @@
</tr>
</table>
</li>
<!-- <li class="weight-selectors">
<li class="weight-selectors category1">
<!-- Create a subgraph over nodes from TW.categories[1] (terms)-->
<table>
<tr class="weight-selector">
<td class="slider-legend">
......@@ -243,7 +241,7 @@
</td>
</tr>
</table>
</li> -->
</li>
</ul>
......
......@@ -224,7 +224,9 @@ html, body {
box-shadow: 0px 2px 6px #000;
}
.category1 {
display: none; /* initial display off but turned on when changetype */
}
.grey {
color: #cccccc; font-style: italic;
......
......@@ -364,42 +364,45 @@ TinaWebJS = function ( sigmacanvas ) {
return this.edgesArray.length;
});
// register an index for nodes by size (<= origNode.size||origiNode.weight)
// register an index for nodes by type and size (<= origNode.size||origNode.weight)
sigmaModule.classes.graph.addIndex('nodesBySize', {
constructor: function() {
this.nodesBySize = {};
},
addNode: function(n) {
if (n.size) {
if (n.type && n.size) {
let sizekey = parseFloat(n.size)
if (!this.nodesBySize[sizekey])
this.nodesBySize[sizekey] = {}
this.nodesBySize[sizekey][n.id] = true
if (!this.nodesBySize[n.type])
this.nodesBySize[n.type] = {}
if (!this.nodesBySize[n.type][sizekey])
this.nodesBySize[n.type][sizekey] = {}
this.nodesBySize[n.type][sizekey][n.id] = true
}
},
dropNode: function(n) {
if (n.size) {
delete(this.nodesBySize[n.size][n.id])
if (n.type && n.size) {
delete(this.nodesBySize[n.type][n.size][n.id])
}
}
});
// @ntype: a node type from TW.categories
// @aSizeSelector can be:
// - a numeric value
// - a range (ordered array of 2 numeric values)
sigmaModule.classes.graph.addMethod('getNodesBySize', function(aSizeSelector) {
sigmaModule.classes.graph.addMethod('getNodesBySize', function(ntype, aSizeSelector) {
let res = []
// shortcut case for commodity: entire index if no arg
if (isUndef(aSizeSelector)) {
res = this.nodesBySize
res = this.nodesBySize[ntype]
}
// normal cases
else if (isNumeric(aSizeSelector)) {
let sizekey = parseFloat(aSizeSelector)
if (this.nodesBySize[sizekey]) {
res = Object.keys(this.nodesBySize[sizekey])
if (this.nodesBySize[ntype][sizekey]) {
res = Object.keys(this.nodesBySize[ntype][sizekey])
}
}
else if (Array.isArray(aSizeSelector)
......@@ -411,7 +414,7 @@ TinaWebJS = function ( sigmacanvas ) {
let sizeMax = parseFloat(aSizeSelector[1])
// the available sizes
let sortedSizes = Object.keys(this.nodesBySize).sort(function(a,b){return a-b})
let sortedSizes = Object.keys(this.nodesBySize[ntype]).sort(function(a,b){return a-b})
// the nodes with sizes in range
for (var k in sortedSizes) {
......@@ -420,7 +423,7 @@ TinaWebJS = function ( sigmacanvas ) {
break
}
if (val >= sizeMin) {
res = res.concat(Object.keys(this.nodesBySize[val]))
res = res.concat(Object.keys(this.nodesBySize[ntype][val]))
}
}
}
......@@ -457,7 +460,7 @@ TinaWebJS = function ( sigmacanvas ) {
// - additionnaly supports 'active/forcelabel' node property (magnify x 3)
sigmaModule.canvas.hovers.def = tempo.twRender.canvas.hovers.largerall
console.log('tw renderers registered in sigma module"')
console.log('tw renderers registered in sigma module')
}
this.SearchListeners = function () {
......@@ -725,6 +728,8 @@ TinaWebJS = function ( sigmacanvas ) {
}
});
// £TODO test if still needed
pushSWClick("social");
cancelSelection(false);
......@@ -965,18 +970,25 @@ TinaWebJS = function ( sigmacanvas ) {
if (TW.filterSliders) {
NodeWeightFilter ( categories , "#slidercat0nodesweight" , categories[0], "type" ,"size");
EdgeWeightFilter("#slidercat0edgesweight", "label" , "nodes1", "weight");
// args: for display: target div ,
// for context: family/type prop value,
// for values: the property to filter
NodeWeightFilter ( "#slidercat0nodesweight" ,
categories[0] ,
"size"
);
EdgeWeightFilter("#slidercat0edgesweight",
getCurrentTypeString(),
"weight"
);
}
$("#category1").hide();
//finished
var labelSizeTimeout = null
$("#slidercat0nodessize").freshslider({
$("#sliderlabelsize").freshslider({
step:.5,
min:0,
max:5,
......
This diff is collapsed.
......@@ -368,11 +368,6 @@ else {
console.error("== currently unhandled categorization of node types ==", TW.categories)
}
for(var i in TW.categories) {
TW.Filters[i] = {}
TW.Filters[i]["#slidercat"+i+"edgesweight"] = true;
}
// [ Initiating Sigma-Canvas ]
// POSS: ideally this should take a TW.settings as parameter
......@@ -508,6 +503,10 @@ else {
// here 'type' means: the categorie(s) that is (are) currently displayed
TW.partialGraph.states[1].type = initialState;
TW.partialGraph.states[1].LouvainFait = false;
// by default category0 is the initial type
$(".category1").hide();
// [ / Poblating the Sigma-Graph ]
......@@ -570,51 +569,38 @@ else {
if (TW.filterSliders) {
// £TODO test with comex2
if(typestring=="0|1") {
$("#category0").hide();
$("#category1").show();
if($("#slidercat1nodesweight").html()=="")
NodeWeightFilter( this.categories , "#slidercat1nodesweight" , this.categories[1], "type" ,"size");
// recreate sliders after perimeter changes
// £TODO fix conditions (was if #slider.html == '' or if level changed)
// atm on any state change
if($("#slidercat1edgesweight").html()=="")
EdgeWeightFilter("#slidercat1edgesweight", "label" , "nodes2", "weight");
// terms
if(typestring=="0|1") {
$(".category0").hide();
$(".category1").show();
if(present.level!=past.level) {
NodeWeightFilter( this.categories , "#slidercat1nodesweight" , this.categories[1], "type" ,"size");
EdgeWeightFilter("#slidercat1edgesweight", "label" , "nodes2", "weight");
}
set_ClustersLegend ( "clust_default" )
NodeWeightFilter( "#slidercat1nodesweight" , TW.categories[1], "size");
EdgeWeightFilter("#slidercat1edgesweight", typestring, "weight");
}
// docs
if(typestring=="1|0") {
$("#category0").show();
$("#category1").hide();
if($("#slidercat0nodesweight").html()=="")
NodeWeightFilter( this.categories , "#slidercat0nodesweight" , this.categories[0], "type" ,"size");
$(".category0").show();
$(".category1").hide();
if($("#slidercat0edgesweight").html()=="")
EdgeWeightFilter("#slidercat0edgesweight", "label" , "nodes1", "weight");
if(present.level!=past.level) {
NodeWeightFilter( this.categories , "#slidercat0nodesweight" , this.categories[0], "type" ,"size");
EdgeWeightFilter("#slidercat0edgesweight", "label" , "nodes1", "weight");
}
set_ClustersLegend ( "clust_default" )
NodeWeightFilter( "#slidercat0nodesweight" , TW.categories[0], "size");
EdgeWeightFilter("#slidercat0edgesweight", typestring, "weight");
}
// terms and docs
if(typestring=="1|1") {
$("#category0").show();
$("#category1").show();
// if(present.level!=past.level) {
NodeWeightFilter ( this.categories , "#slidercat0nodesweight" , this.categories[0], "type" ,"size");
EdgeWeightFilter("#slidercat0edgesweight", "label" , "nodes1", "weight");
NodeWeightFilter( this.categories , "#slidercat1nodesweight" , this.categories[1], "type" ,"size");
EdgeWeightFilter("#slidercat1edgesweight", "label" , "nodes2", "weight");
// }
$(".category0").show();
$(".category1").show();
NodeWeightFilter( "#slidercat0nodesweight" , TW.categories[0], "size");
NodeWeightFilter( "#slidercat1nodesweight" , TW.categories[1], "size");
EdgeWeightFilter("#slidercat0edgesweight", "1|0", "weight");
EdgeWeightFilter("#slidercat1edgesweight", "0|1", "weight");
}
}
......@@ -628,10 +614,6 @@ else {
for (var k in filterEls) {
if (filterEls[k] && filterEls[k].style) filterEls[k].style.display="none"
}
// document.getElementById('slidercat0nodesweight').style.display="none"
// document.getElementById('slidercat0edgesweight').style.display="none"
// document.getElementById('slidercat1nodesweight').style.display="none"
// document.getElementById('slidercat1edgesweight').style.display="none"
}
TW.FA2Params = {
......@@ -688,6 +670,8 @@ else {
);
}
// adapt the enviroment to monopartite vs. bipartite cases
if( TW.categories.length==1 ) {
$("#changetype").hide();
$("#taboppos").remove();
......
......@@ -106,6 +106,12 @@ function getCurrentType() {
return currentTypes.join('-')
}
function getCurrentTypeString() {
let lastState = TW.partialGraph.states.slice(-1)[0]
return lastState.type.map(Number).join('|')
}
function highlightSelectedNodes(flag){
console.log("\t***methods.js:highlightSelectedNodes(flag)"+flag+" selEmpty:"+is_empty(selections))
......@@ -201,8 +207,8 @@ function RefreshState(newNOW){
$("#semLoader").hide();
$("#category-B").show();
setTimeout(function(){
EdgeWeightFilter("#sliderBEdgeWeight", "label" , "nodes2", "weight");
NodeWeightFilter ( "#sliderBNodeWeight" , "NGram", "type" , "size");
EdgeWeightFilter("#sliderBEdgeWeight", "0|1", "weight");
NodeWeightFilter ( "#sliderBNodeWeight" , "NGram", "size");
},30)
} else {
$("#semLoader").css('visibility', 'visible');
......
......@@ -948,7 +948,7 @@ function dictfyJSON( data , categories ) {
let typestring = findEdgeType(nodes, source, target)
// save edge property
// save edge "type" in categ property
edge.categ = typestring
TW.Relations = updateRelations( TW.Relations,
typestring,
......
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