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