Commit f1b8f01a authored by Romain Loth's avatar Romain Loth

WIP: better init tina

grouped several init actions to Tinaweb.init() function and created a new index by sizes to avoid calling AlgorithmForSliders each time
parent bfa91ce5
'use strict;'
var TW = {}
// POSSIBLE: group like TW.settings ?
TW.geomap = false;
TW.colorByAtt = false;
TW.twittertimeline = false;
......@@ -64,7 +67,6 @@ var TinaWebJS = function () {};
var sizeMult = [];
sizeMult[TW.catSoc] = 0.0;
sizeMult[TW.catSem] = 0.0;
......@@ -132,6 +134,9 @@ TW.debugFlags = {
initialShowAll: false,
}
// triggers overriding sigma.canvas renderers: nodes.def, labels.def, edges.def
TW.ourRendering = true ;
// ============ < / DEVELOPER OPTIONS > ============
......@@ -156,9 +161,7 @@ var sigmaJsDrawingProperties = {
nodeBorderColor: "default", // vs. node
// for custom TW node renderer with borders
// (if twNodeRendBorder, triggers overriding sigma.canvas.nodes.def)
twNodeRendBorder: true,
twNodeRendBorderSize: 1, // (for all normal nodes, iff twNodeRendBorder)
twNodeRendBorderSize: 1, // (for all normal nodes, iff TW.nodeRendBorder)
twNodeRendBorderColor: "#222",
// twNodeRendBorderColor: "#eee",
......
......@@ -336,7 +336,128 @@ TinaWebJS = function ( sigmacanvas ) {
this.sigmacanvas = sigmacanvas;
this.init = function () {
console.log("hola mundo")
console.warn("TW settings", TW)
let initErrMsg = null
if (typeof sigma == 'undefined') {
initErrMsg = "no sigma library"
}
else {
this.prepareSigmaCustomIndices(sigma)
if (TW.ourRendering)
this.prepareSigmaCustomRenderers(sigma)
}
if (initErrMsg) {
console.error(initErrMsg)
}
}
this.prepareSigmaCustomIndices = function(sigmaModule) {
// register direct access methods for nNodes nEdges
sigmaModule.classes.graph.addMethod('nNodes', function() {
return this.nodesArray.length;
});
sigmaModule.classes.graph.addMethod('nEdges', function() {
return this.edgesArray.length;
});
// register an index for nodes by size (<= origNode.size||origiNode.weight)
sigmaModule.classes.graph.addIndex('nodesBySize', {
constructor: function() {
this.nodesBySize = {};
},
addNode: function(n) {
if (n.size) {
let sizekey = parseFloat(n.size)
if (!this.nodesBySize[sizekey])
this.nodesBySize[sizekey] = {}
this.nodesBySize[sizekey][n.id] = true
}
},
dropNode: function(n) {
if (n.size) {
delete(this.nodesBySize[n.size][n.id])
}
}
});
// @aSizeSelector can be:
// - a numeric value
// - a range (ordered array of 2 numeric values)
sigmaModule.classes.graph.addMethod('getNodesBySize', function(aSizeSelector) {
let res = []
// shortcut case for commodity: entire index if no arg
if (isUndef(aSizeSelector)) {
res = this.nodesBySize
}
// normal cases
else if (isNumeric(aSizeSelector)) {
let sizekey = parseFloat(aSizeSelector)
if (this.nodesBySize[sizekey]) {
res = Object.keys(this.nodesBySize[sizekey])
}
}
else if (Array.isArray(aSizeSelector)
&& aSizeSelector.length == 2
&& isNumeric(aSizeSelector[0])
&& isNumeric(aSizeSelector[1])
) {
let sizeMin = parseFloat(aSizeSelector[0])
let sizeMax = parseFloat(aSizeSelector[1])
// the available sizes
let sortedSizes = Object.keys(this.nodesBySize).sort(function(a,b){return a-b})
// the nodes with sizes in range
for (var k in sortedSizes) {
let val = sortedSizes[k]
if (val > sizeMax) {
break
}
if (val >= sizeMin) {
res = res.concat(Object.keys(this.nodesBySize[val]))
}
}
}
return res;
});
}
// register our renderers in sigma module
this.prepareSigmaCustomRenderers = function(sigmaModule) {
// £TODO group the rendering primitives it all together
// and perhaps move here where the preparation occurs
var tempo = new SigmaUtils();
// custom nodes rendering
// overriding the def is simplest
// (could also do it by type)
sigmaModule.canvas.nodes.def = tempo.twRender.canvas.nodes.withBorders
// custom edges rendering registered under 'curve'
sigmaModule.canvas.edges.curve = tempo.twRender.canvas.edges.curve
sigmaModule.canvas.edges.line = tempo.twRender.canvas.edges.line
// custom labels rendering
// - based on the normal one sigma.canvas.labels.def
// - additionnaly supports 'active/forcelabel' node property (magnify x 3)
sigmaModule.canvas.labels.def = tempo.twRender.canvas.labels.largeractive
// custom hovers rendering
// - based on the normal one sigma.canvas.hovers.def
// - additionnaly magnifies all labels x 2
// - 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"')
}
this.SearchListeners = function () {
......
......@@ -764,7 +764,7 @@ function NodeWeightFilter( categories , sliderDivID , type_attrb , type , crit
}
// ids per weight level
// £TODO make this into a type_attrb index (eg weight index) instead of recalculating each time
// £TODO should now use live index TW.partialGraph.graph.getNodesBySize()
var filterparams = AlgorithmForSliders ( TW.Nodes , type , type_attrb , criteria)
// console.log("NodeWeightFilter: "+type)
// console.log(filterparams)
......
......@@ -18,6 +18,10 @@ function compareNumbers(a, b) {
return a - b;
}
function isNumeric(a) {
return parseFloat(a) == a ;
}
//python range(a,b) | range(a)
function calc_range(begin, end) {
if (typeof end === "undefined") {
......
......@@ -374,8 +374,13 @@ else {
}
// [ Initiating Sigma-Canvas ]
// POSS: ideally this should take a TW.settings as parameter
var twjs_ = new TinaWebJS('#sigma-contnr');
// add our tw rendering and index customizations into sigma module
twjs_.init()
// overriding pixelRatio is possible if we need very high definition
if (TW.overSampling) {
var realRatio = sigma.utils.getPixelRatio
......@@ -464,28 +469,6 @@ else {
console.info("sigma settings", customSettings)
// custom nodes rendering
if (customSettings['twNodeRendBorder']) {
// overriding the def is simplest
// (could also do it by type)
sigma.canvas.nodes.def = sigma_utils.twRender.canvas.nodes.withBorders
}
// custom edges rendering registered under 'curve'
sigma.canvas.edges.curve = sigma_utils.twRender.canvas.edges.curve
sigma.canvas.edges.line = sigma_utils.twRender.canvas.edges.line
// custom labels rendering
// - based on the normal one sigma.canvas.labels.def
// - additionnaly supports 'active/forcelabel' node property (magnify x 3)
sigma.canvas.labels.def = sigma_utils.twRender.canvas.labels.largeractive
// custom hovers rendering
// - based on the normal one sigma.canvas.hovers.def
// - additionnaly magnifies all labels x 2
// - additionnaly supports 'active/forcelabel' node property (magnify x 3)
sigma.canvas.hovers.def = sigma_utils.twRender.canvas.hovers.largerall
// ==================================================================
// sigma js library invocation (https://github.com/jacomyal/sigma.js)
......
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