Commit 2ef02e31 authored by Maxime Chazalviel's avatar Maxime Chazalviel

Merge branch 'feature/flux' into feature/fluxUp

# Conflicts:
#	resources/lib/functions/D3Extention.js
#	resources/lib/functions/GraphLink.js
#	resources/lib/functions/GraphMapping.js
#	resources/lib/functions/GraphNetwork.js
#	resources/lib/functions/GraphNode.js
#	resources/lib/functions/GraphStyleEdition.js
#	resources/lib/functions/GraphUtils.js
#	resources/lib/model/NetworkData.js
#	resources/lib/model/NodeData.js
parents 77ea1733 d8b87724
......@@ -14,6 +14,7 @@ Ext.define('metExploreViz.view.form.SelectConditionType', {
{"name":"Continuous"},
{"name":"Discrete"},
{"name":"Flux"},
{"name":"Compare flux"},
{"name":"Suggestion"}
]
},
......
......@@ -60,7 +60,7 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
view.lookupReference('selectConditionType').on({
change : function(that, newVal){
if(newVal=="Flux"){
if(newVal=="Compare flux" || newVal=="Flux" ){
view.lookupReference('opacity').setHidden(false);
view.lookupReference('valueonarrow').setHidden(false);
view.lookupReference('regroupValuesIntoClass').setHidden(false);
......@@ -108,7 +108,7 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
view.lookupReference('selectCondition').on({
change : function(that, newVal, old){
var type = view.lookupReference('selectConditionType').lastValue;
if(type!=="Flux"){
if(type!=="Compare flux"){
if(old)
{
var i = newVal.indexOf(old[0]);
......@@ -217,7 +217,7 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
}
}
var container;
if(session.getMappingDataType()==="Flux"|| Array.isArray(session.isMapped()))
if(session.getMappingDataType()==="Compare flux"|| Array.isArray(session.isMapped()))
container = Ext.getCmp('panel'+session.isMapped()[0].replace(me.regexpPanel, ""));
else
container = Ext.getCmp('panel'+session.isMapped().replace(me.regexpPanel, ""));
......@@ -299,8 +299,8 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
// Remove mapping caption
var oldMapping = session.isMapped();
this.removeGraphMapping(oldMapping);
if(oldMapping!=="false" && oldMapping)
this.removeGraphMapping(oldMapping);
if(session.getMappingDataType()==="Continuous"){
var colorStore = session.getColorMappingsSet();
......@@ -311,7 +311,7 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
}
}
var container;
if(session.getMappingDataType()==="Flux"|| Array.isArray(session.isMapped()))
if(session.getMappingDataType()==="Compare flux"|| Array.isArray(session.isMapped()))
container = Ext.getCmp('panel'+session.isMapped()[0].replace(me.regexpPanel, ""));
else
container = Ext.getCmp('panel'+session.isMapped().replace(me.regexpPanel, ""));
......@@ -400,7 +400,7 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
this.removeGraphMapping(oldMapping);
colorStore = session.getColorMappingsSet();
if(type==="flux"|| Array.isArray(session.isMapped()))
if(type==="Compare flux"|| Array.isArray(session.isMapped()))
container = Ext.getCmp('panel'+session.isMapped()[0].replace(me.regexpPanel, ""));
else
container = Ext.getCmp('panel'+session.isMapped().replace(me.regexpPanel, ""));
......@@ -476,6 +476,10 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
session.setMappingDataType(dataType);
}
if(dataType==="Compare flux"){
metExploreD3.GraphMapping.graphMappingCompareFlux(mappingName, conditionName, fluxType, undefined, undefined, Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
session.setMappingDataType(dataType);
}
if(dataType==="Flux"){
metExploreD3.GraphMapping.graphMappingFlux(mappingName, conditionName, fluxType, undefined, undefined, Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
session.setMappingDataType(dataType);
......@@ -517,7 +521,7 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
}
var cond;
if(type==="flux" || Array.isArray(selectedCondition))
if(type==="Compare flux" || Array.isArray(selectedCondition))
cond = selectedCondition[0];
else
cond = selectedCondition;
......@@ -537,7 +541,7 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
console.log(color);
var colorName = color.getName();
var value = colorName;
if(type==="flux")
if(type==="Compare flux")
value = selectedCondition[i];
i++;
......@@ -746,15 +750,28 @@ Ext.define('metExploreViz.view.form.selectConditionForm.SelectConditionFormContr
}
}
else {
var fluxType;
if (selectedCondition.length === 1) {
fluxType = 'Unique';
metExploreD3.GraphMapping.graphMappingFlux(mapp, selectedCondition, fluxType, networkVizSession.getColorMappingById(color).getValue(), undefined, Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
if(type === "flux"){
if (networkVizSession.getColorMappingsSet()[1]) {
metExploreD3.GraphMapping.graphMappingFlux(mapp, selectedCondition, fluxType, networkVizSession.getColorMappingById(maxValue).getValue(), networkVizSession.getColorMappingById(minValue).getValue(), Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
}
else {
metExploreD3.GraphMapping.graphMappingFlux(mapp, selectedCondition, fluxType, networkVizSession.getColorMappingById(maxValue).getValue(), networkVizSession.getColorMappingById(minValue).getValue(), Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
}
}
else {
fluxType = 'Compare';
metExploreD3.GraphMapping.graphMappingFlux(mapp, selectedCondition, fluxType, networkVizSession.getColorMappingById(maxValue).getValue(), networkVizSession.getColorMappingById(minValue).getValue(), Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
else
{
var fluxType;
if (selectedCondition.length === 1) {
fluxType = 'Unique';
metExploreD3.GraphMapping.graphMappingCompareFlux(mapp, selectedCondition, fluxType, networkVizSession.getColorMappingById(color).getValue(), undefined, Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
}
else {
fluxType = 'Compare';
metExploreD3.GraphMapping.graphMappingCompareFlux(mapp, selectedCondition, fluxType, networkVizSession.getColorMappingById(maxValue).getValue(), networkVizSession.getColorMappingById(minValue).getValue(), Ext.getCmp("opacityCheck").checked, Ext.getCmp("valueonarrowCheck").checked, Ext.getCmp('regroupValuesIntoClassCheck').checked);
}
}
}
}
}
......
......@@ -24,9 +24,9 @@ Ext.define('metExploreViz.view.panel.editModePanel.EditModePanelController', {
click : function()
{
var curveBundling = view.lookupReference('EdgeBundling').getValue();
var flux = _metExploreViz.getSessionById('viz').getMappingDataType()=="Flux";
var flux = _metExploreViz.getSessionById('viz').getMappingDataType()=="Compare flux";
if (flux){
metExploreD3.displayWarning("Can't draw curves", 'The edges bundling option is unavailable with flux visualisation');
metExploreD3.displayWarning("Can't draw curves", 'The edges bundling option is unavailable with flux comparison visualisation');
}
else if (curveBundling == true) {
metExploreD3.GraphStyleEdition.curvedPath = true;
......
......@@ -86,5 +86,26 @@ d3.selection.prototype.addNodeText = function(style) {
.style("y",function(node) { if (node.labelFont) if (node.labelFont.fontY) return node.labelFont.fontY; })
.style("transform",function(node) { if (node.labelFont) if (node.labelFont.fontTransform) return node.labelFont.fontTransform; });
this.filter(function(d){ return d.getBiologicalType()==="reaction"; })
.append("svg:text")
.each(function(d) {
var el = d3.select(this);
var name = "";
el.text('');
var nameDOMFormat = $("<div/>").html(name).text();
var tspan = el.append('tspan').text(nameDOMFormat);
tspan.attr('x', 0).attr('dy', '10');
})
.style("font-size", '12px')
.attr("class", "fluxlabel")
.attr("id", "flux")
.attr("transform", "translate(10, -10)")
.classed('hide', true)
.style("paint-order", "stroke")
.style("fill", "black")
.style("stroke", "white")
.style("stroke-opacity", "0.7")
.attr("dy", ".4em")
.style("font-weight", 'bold')
.style("pointer-events", 'none');
};
......@@ -77,6 +77,22 @@ metExploreD3.GraphLink = {
});
},
fluxesOnLink: function (parent) {
d3.select("#"+parent).select("#D3viz").select("#graphComponent").selectAll("path.link.reaction")
.each(function(link){
var me = this;
var newelemt = me.cloneNode(true);
me.parentNode.appendChild(newelemt);
d3.select(newelemt).datum(link)
.classed("reaction", false)
.classed("flux", true)
.classed("hide", true);
});
},
//arrayValue already scale
funcPathForFlux: function (link, panel, linkId) {
var source, target, path, reaction;
......@@ -633,8 +649,7 @@ metExploreD3.GraphLink = {
metExploreD3.GraphLink.link.remove();
metExploreD3.GraphLink.link.enter()
.insert("svg:g", ":first-child")
metExploreD3.GraphLink.link.enter().insert("svg:g", ":first-child")
.attr("class", "linkGroup")
.append("svg:path")
.attr("class", String)
......@@ -654,6 +669,38 @@ metExploreD3.GraphLink = {
.style("opacity", 1)
.style("stroke-dasharray", null);
d3.select("#" + parent).select("#D3viz").select("#graphComponent")
.selectAll(".fluxlabel")
.classed("hide", true);
d3.select("#" + parent).select("#D3viz").select("#graphComponent").selectAll("path.link.reaction")
.each(function (link) {
d3.select("#graphComponent").select("#markerExit" + link.getId().replace(/ /g, "_"))
.attr("markerWidth", 15).attr("markerHeight", 10)
.attr("stroke", "black")
.style("stroke-width", "1px");
d3.select("#graphComponent").select("#markerEntry" + link.getId().replace(/ /g, "_"))
.attr("markerWidth", 15).attr("markerHeight", 10)
.attr("stroke", "black")
.style("stroke-width", "1px");
});
// d3.select("#"+parent).select("#D3viz").select("#graphComponent").selectAll(".linkGroup")
// .append("svg:text")
// .style("font-size",'6px')
// .attr("class", "linklabel")
// // .classed('hide', true)
// .style("paint-order","stroke")
// .style("stroke-width", 1)
// .style("stroke", "white")
// .style("stroke-opacity", "0.7")
// .attr("dy", ".4em")
// .style("font-weight", 'bold')
// .style("pointer-events", 'none')
// .text('eeee');
if(metExploreD3.getGeneralStyle().isDisplayedPathwaysOnLinks())
metExploreD3.GraphCaption.majCaptionPathwayOnLink();
......@@ -662,7 +709,7 @@ metExploreD3.GraphLink = {
loadLinksForFlux: function (parent, networkData, linkStyle, metaboliteStyle, showValues, conditionName) {
d3.select("#" + parent).select("#D3viz").select("#graphComponent").selectAll(".linkGroup").remove();
_metExploreViz.getSessionById(parent).setMappingDataType("Flux");
_metExploreViz.getSessionById(parent).setMappingDataType("Compare flux");
var divs = d3.select("#" + parent).select("#D3viz").select("#graphComponent").selectAll("path.link.reaction")
.data(networkData.getLinks())
......@@ -700,6 +747,46 @@ metExploreD3.GraphLink = {
metExploreD3.GraphNetwork.tick('viz');
},
showValues : function(parent){
d3.select("#" + parent).select("#D3viz").select("#graphComponent").selectAll("g.node").filter(function (t) { return t.getBiologicalType()==="reaction" })
.select('.fluxlabel')
.each(function(reaction) {
var mappingName = _metExploreViz.getSessionById("viz").getActiveMapping();
var mapping = _metExploreViz.getMappingByName(mappingName);
var conditions = mapping.getConditions();
var map1 = reaction.getMappingDataByNameAndCond(mappingName, conditions[0]);
var map2 = reaction.getMappingDataByNameAndCond(mappingName, conditions[1]);
var map = map1;
if (map == null)
var flux = 0;
else {
if (isNaN(map.getMapValue()))
var flux = 0;
else
var flux = Number.parseFloat(map.getMapValue()).toFixed(2);
}
if (map2 == null)
var sd = "";
else {
if (isNaN(map2.getMapValue()))
var sd = "";
else
var sd = " σ"+Number.parseFloat(map2.getMapValue()).toFixed(2);
}
var el = d3.select(this);
var text = flux + sd;
el.text('');
var nameDOMFormat = $("<div/>").html(text).text();
var tspan = el.append('tspan').text(nameDOMFormat);
if (i > 0)
tspan.attr('x', 0).attr('dy', '10');
})
.classed('hide', false);
},
showValue : function(parent, conditionName, fluxType){
d3.select("#" + parent).select("#D3viz").select("#graphComponent").selectAll(".linkGroup")
.append("svg:text")
......@@ -751,7 +838,7 @@ metExploreD3.GraphLink = {
.style("paint-order", "stroke")
.style("stroke-width", 1)
.style("stroke", function () {
return d3.select(this.parentNode).select("path#link").style('fill');
return d3.select(this.parentNode).select("path.link").style('fill');
})
.style("stroke-opacity", "0.7")
.attr("dy", ".4em")
......@@ -876,7 +963,8 @@ metExploreD3.GraphLink = {
.attr("transform", d3.select("#"+panel).select("#D3viz").select("#graphComponent").attr("transform"));
if (metExploreD3.GraphStyleEdition.curvedPath === true){
var flux = _metExploreViz.getSessionById(panel).getMappingDataType()==="Flux";
var flux = _metExploreViz.getSessionById(panel).getMappingDataType()=="Compare flux";
if(flux) {
funcPath = metExploreD3.GraphLink.funcPathForFlux;
d3.select("#"+panel).select("#D3viz").select("#graphComponent")
......@@ -889,23 +977,14 @@ metExploreD3.GraphLink = {
}
}
else {
var scale = metExploreD3.getScaleById("viz");
var flux = _metExploreViz.getSessionById(panel).getMappingDataType()=="Flux";
if(scale.getZoomScale()<0.5){
funcPath = metExploreD3.GraphLink.funcPath1;
var flux = _metExploreViz.getSessionById(panel).getMappingDataType()=="Compare flux";
if(flux) {
funcPath = metExploreD3.GraphLink.funcPathForFlux;
}
else
{
if(flux) {
funcPath = metExploreD3.GraphLink.funcPathForFlux;
}
else {
funcPath = metExploreD3.GraphLink.funcPath3;
}
funcPath = metExploreD3.GraphLink.funcPath3;
}
// If you want to use selection on compartments path
......@@ -965,6 +1044,7 @@ metExploreD3.GraphLink = {
return node.getBiologicalType()=="reaction";
});
var links = d3.select("#"+panel).select("#D3viz").select("#graphComponent").selectAll("path.link");
// Create arrowhead marker
d3.select("#"+panel).select("#D3viz").select("#graphComponent").append("defs").append("marker")
.attr("id", "markerExit")
......@@ -1064,10 +1144,24 @@ metExploreD3.GraphLink = {
var exitingY = node.y - (enteringY - node.y);
var axe = "horizontal";
// For each node, compute the path of the arcs exiting that node, and the path of the arcs exiting that node
enteringLinks
.each(function (link) {
d3.select("#"+panel).select("#D3viz").select("#graphComponent").append("defs").append("marker")
.attr("id", "markerEntry"+link.getId().replace(/ /g, "_"))
.attr("class", "markerEntry")
.attr("stroke-linejoin", "miter")
.attr("viewBox", "-10 -5 20 20")
.attr("refX", 9).attr("refY", 6)
.attr("markerUnits", "userSpaceOnUse")
.attr("markerWidth", 15).attr("markerHeight", 10)
.attr("orient", "auto")
.attr("fill", "red").attr("stroke", "black")
.append("path")
.attr("d", "M0,6L-5,12L9,6L-5,0L0,6");
var path;
// Handle the case where the link is a cycle arc or a sibling of cycle arc
if (link.partOfCycle === true){
......@@ -1094,7 +1188,9 @@ metExploreD3.GraphLink = {
.filter(function (link) {
return link.getTarget().getReactionReversibility();
})
.attr("marker-end", "url(#markerEntry)")
.attr("marker-end", function (link) {
return "url(#markerEntry"+link.getId().replace(/ /g, "_")+")";
})
.filter(function (link) {
return exitingLinks.data().length === 0;
})
......@@ -1102,6 +1198,19 @@ metExploreD3.GraphLink = {
exitingLinks
.each(function (link) {
// Create arrowhead marker
d3.select("#"+panel).select("#D3viz").select("#graphComponent").append("defs").append("marker")
.attr("id", "markerExit"+link.getId().replace(/ /g, "_"))
.attr("class", "markerExit")
.attr("viewBox", "-10 -5 20 20")
.attr("refX", 9).attr("refY", 6)
.attr("markerUnits", "userSpaceOnUse")
.attr("markerWidth", 15).attr("markerHeight", 10)
.attr("orient", "auto")
.attr("stroke-linejoin", "miter")
.attr("fill", "green").attr("stroke", "black")
.append("path")
.attr("d", "M0,6L-5,12L9,6L-5,0L0,6");
var path;
if (link.partOfCycle === true){
path = d3.select(this).attr("d");
......@@ -1124,7 +1233,9 @@ metExploreD3.GraphLink = {
.classed(axe, true)
.style("opacity", 1);
})
.attr("marker-end", "url(#markerExit)")
.attr("marker-end", function (link) {
return "url(#markerExit"+link.getId().replace(/ /g, "_")+")";
})
.filter(function (link) {
return link.getSource().getReactionReversibility() && enteringLinks.data().length === 0;
})
......@@ -1164,6 +1275,104 @@ metExploreD3.GraphLink = {
},
mapFluxesOnLink : function(){
var panel = "viz";
var mappingName = _metExploreViz.getSessionById('viz').getActiveMapping();
var conditions = _metExploreViz.getSessionById(panel).isMapped();
var map1, map2;
var maxValue = undefined;
d3.select("#" + panel).select("#D3viz").select("#graphComponent").selectAll(".linklabel")
.attr("x", function (d) {
return (d.source.x + d.target.x) / 2;
})
.attr("y", function (d) {
return (d.source.y + d.target.y) / 2;
});
var colors = _metExploreViz.getSessionById('viz').getColorMappingsSet();
colors.forEach(function (color) {
if (maxValue === undefined | color.getName() > maxValue) maxValue = color.getName();
});
var scaleValue = d3.scaleLinear()
.domain([-maxValue, 0, 0, maxValue])
.range([-6, -1, 1, 6]);
d3.select("#graphComponent").selectAll("path.link").each(function(link, i){
var reaction=null;
if(link.getTarget().getBiologicalType()==="reaction")
reaction=link.getTarget();
if(link.getSource().getBiologicalType()==="reaction")
reaction=link.getSource();
if(reaction!==null){
console.log("mappingName", mappingName);
console.log("conditions", conditions);
map1 = reaction.getMappingDataByNameAndCond(mappingName, conditions[0]);
map2 = reaction.getMappingDataByNameAndCond(mappingName, conditions[1]);
// Check whether to use linear flux value or discretized value
var map1Value;
var map2Value;
if (map1 !== null){
map1Value = map1.getMapValue();
if (map1.hasOwnProperty('binnedMapValue')) {
map1Value = map1.binnedMapValue;
}
console.log("map1Value", map1Value);
if (isNaN(map1Value))
var value = 0;
else
var value = scaleValue(map1Value);
console.log(map1Value);
console.log(value);
}
else
{
var value = 0;
}
// if (map2 !== null){
// map2Value = map2.getMapValue();
// if (map2.hasOwnProperty('binnedMapValue')) {
// map2Value = map2.binnedMapValue;
// }
// }
if(value===0){
d3.select("#graphComponent").select("#markerExit" + link.getId().replace(/ /g, "_"))
.attr("markerWidth", 8)
.attr("markerHeight", 5)
.style("stroke-width", "1px");
d3.select("#graphComponent").select("#markerEntry" + link.getId().replace(/ /g, "_"))
.attr("markerWidth", 8)
.attr("markerHeight", 5)
.style("stroke-width", "1px");
d3.select(this).style("stroke-width", "1px").style("stroke-dasharray", "4").style("stroke-opacity", "0.8");
}
else {
d3.select("#graphComponent").select("#markerExit" + link.getId().replace(/ /g, "_"))
.attr("markerWidth", 8 * value)
.attr("markerHeight", 5 * value)
.style("stroke-width", value + "px");
d3.select("#graphComponent").select("#markerEntry" + link.getId().replace(/ /g, "_"))
.attr("markerWidth", 8 * value)
.attr("markerHeight", 5 * value)
.style("stroke-width", value + "px");
d3.select(this).style("stroke-width", value + "px").style("stroke-dasharray", "none");
}
}
})
metExploreD3.GraphLink.showValues("viz", conditions[0], "Unique");
},
/*******************************************
* Compute path of an edge belonging to a cycle.
* @param {Object} startNode : The node at the start of the path.
......
This diff is collapsed.
......@@ -165,10 +165,10 @@ metExploreD3.GraphNetwork = {
function(panelLinked, sessionLinked) {
var scale = metExploreD3.getScaleById(panelLinked);
var session = _metExploreViz.getSessionById(panelLinked);
// if(d3EventScale<0.3) d3.select("#"+panelLinked).select("#D3viz").select("#graphComponent").selectAll('text').classed("hide", true);
// else d3.select("#"+panelLinked).select("#D3viz").select("#graphComponent").selectAll('text').classed("hide", false);
if(d3EventSourceEvent !==null)
if(d3EventSourceEvent.type==='wheel')
session.setResizable(false);
......@@ -1726,6 +1726,7 @@ metExploreD3.GraphNetwork = {
var session = _metExploreViz.getSessionById(panel);
var networkData = session.getD3Data();
networkData.addLink(identifier,source,target,interaction,reversible);
},
/*******************************************
......@@ -2643,6 +2644,7 @@ metExploreD3.GraphNetwork = {
metExploreD3.GraphNetwork.initCentroids(panel);
},
/*******************************************
* Duplicate side compounds which is selected
* @param {} panel : The panel where the SC must be duplicated
......@@ -2760,6 +2762,7 @@ metExploreD3.GraphNetwork = {
var myMask = metExploreD3.createLoadMask("Duplicate in progress...", panel);
if(myMask!= undefined){
metExploreD3.showMask(myMask);
......@@ -3063,8 +3066,9 @@ metExploreD3.GraphNetwork = {
var linkStyle = metExploreD3.getLinkStyle();
metExploreD3.GraphLink.refreshDataLink(panelLinked, sessionLinked);
metExploreD3.GraphLink.refreshLink(panelLinked, linkStyle);
metExploreD3.GraphLink.fluxesOnLink(panel);
metExploreD3.GraphLink.refreshLink(panelLinked, linkStyle);
var s_GeneralStyle = _metExploreViz.getGeneralStyle();
......
......@@ -1031,6 +1031,7 @@ metExploreD3.GraphNode = {
* @param {} selectedVal : The value of search field text
*/
searchNode: function (selectedVal) {
var mask = metExploreD3.createLoadMask("Search nodes", "viz");
metExploreD3.showMask(mask);
//find the node
......@@ -1906,6 +1907,7 @@ metExploreD3.GraphNode = {
});
}
_metExploreViz.setDataFromWebSite(JSON.stringify(network));
}
},
......@@ -2192,6 +2194,7 @@ metExploreD3.GraphNode = {
return d3.select(this).style("stroke") !== "rgb(0, 0, 255)";
})
.style("stroke", "green")
.filter(function (t) { return !metExploreD3.GraphStyleEdition.editMode })
.style("stroke-width", "1.5");
links.filter(function (link) {