Skip to content

Commit 2a0c4a2

Browse files
authored
Merge pull request #714 from umut-er/unstable
Highlight query seed genes / paths #389
2 parents 7abcfd5 + fd17962 commit 2a0c4a2

File tree

3 files changed

+160
-0
lines changed

3 files changed

+160
-0
lines changed

app/js/backbone-views.js

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,6 +2183,23 @@ var NeighborhoodQueryView = Backbone.View.extend({
21832183
currentGeneralProperties.inferNestingOnLoad =
21842184
currentInferNestingOnLoad;
21852185
chiseInstance.endSpinner("neighborhood-spinner");
2186+
2187+
// Highlighting feature
2188+
eles = cy.collection();
2189+
geneSymbolsArray.forEach(function (gene) {
2190+
eles.merge(cy.nodes().filter(function (ele) {
2191+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2192+
return true;
2193+
}
2194+
return false;
2195+
}))
2196+
})
2197+
var x = cy.elements().kNeighborhood(eles, self.currentQueryParameters.lengthLimit, 'BOTHSTREAM');
2198+
cy.viewUtilities('get').highlight(x.neighborNodes, 2);
2199+
cy.viewUtilities('get').highlight(x.neighborEdges, 2);
2200+
cy.viewUtilities('get').highlight(eles, 0);
2201+
// Highlighting feature end
2202+
21862203
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
21872204
} else {
21882205
new PromptEmptyQueryResultView({
@@ -2251,6 +2268,23 @@ var NeighborhoodQueryView = Backbone.View.extend({
22512268
currentGeneralProperties.inferNestingOnLoad =
22522269
currentInferNestingOnLoad;
22532270
chiseInstance.endSpinner("neighborhood-spinner");
2271+
2272+
// Highlighting feature
2273+
eles = cy.collection();
2274+
geneSymbolsArray.forEach(function (gene) {
2275+
eles.merge(cy.nodes().filter(function (ele) {
2276+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2277+
return true;
2278+
}
2279+
return false;
2280+
}))
2281+
})
2282+
var x = cy.elements().kNeighborhood(eles, self.currentQueryParameters.lengthLimit, 'BOTHSTREAM');
2283+
cy.viewUtilities('get').highlight(x.neighborNodes, 2);
2284+
cy.viewUtilities('get').highlight(x.neighborEdges, 2);
2285+
cy.viewUtilities('get').highlight(eles, 0);
2286+
// Highlighting feature end
2287+
22542288
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
22552289
} else if (data.error) {
22562290
let { code } = data.error;
@@ -2421,6 +2455,23 @@ var PathsBetweenQueryView = Backbone.View.extend({
24212455
currentGeneralProperties.inferNestingOnLoad =
24222456
currentInferNestingOnLoad;
24232457
chiseInstance.endSpinner("paths-between-spinner");
2458+
2459+
// Highlighting feature
2460+
eles = cy.collection();
2461+
geneSymbolsArray.forEach(function (gene) {
2462+
eles.merge(cy.nodes().filter(function (ele) {
2463+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2464+
return true;
2465+
}
2466+
return false;
2467+
}))
2468+
})
2469+
var x = cy.elements().pathsBetween(eles, self.currentQueryParameters.lengthLimit, 'UNDIRECTED');
2470+
cy.viewUtilities('get').highlight(x.resultEdges, 2);
2471+
cy.viewUtilities('get').highlight(x.resultNodes, 2);
2472+
cy.viewUtilities('get').highlight(eles, 0);
2473+
// Highlighting feature end
2474+
24242475
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
24252476
} else {
24262477
new PromptEmptyQueryResultView({
@@ -2486,6 +2537,23 @@ var PathsBetweenQueryView = Backbone.View.extend({
24862537
currentGeneralProperties.inferNestingOnLoad =
24872538
currentInferNestingOnLoad;
24882539
chiseInstance.endSpinner("paths-between-spinner");
2540+
2541+
// Highlighting feature
2542+
eles = cy.collection();
2543+
geneSymbolsArray.forEach(function (gene) {
2544+
eles.merge(cy.nodes().filter(function (ele) {
2545+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2546+
return true;
2547+
}
2548+
return false;
2549+
}))
2550+
})
2551+
var x = cy.elements().pathsBetween(eles, self.currentQueryParameters.lengthLimit, 'UNDIRECTED');
2552+
cy.viewUtilities('get').highlight(x.resultEdges, 2);
2553+
cy.viewUtilities('get').highlight(x.resultNodes, 2);
2554+
cy.viewUtilities('get').highlight(eles, 0);
2555+
// Highlighting feature end
2556+
24892557
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
24902558
} else {
24912559
new PromptEmptyQueryResultView({
@@ -2702,6 +2770,33 @@ var PathsFromToQueryView = Backbone.View.extend({
27022770
currentGeneralProperties.inferNestingOnLoad =
27032771
currentInferNestingOnLoad;
27042772
chiseInstance.endSpinner("paths-fromto-spinner");
2773+
2774+
// Highlighting feature
2775+
source_eles = cy.collection();
2776+
sourceSymbolsArray.forEach(function (gene) {
2777+
source_eles.merge(cy.nodes().filter(function (ele) {
2778+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2779+
return true;
2780+
}
2781+
return false;
2782+
}))
2783+
})
2784+
target_eles = cy.collection();
2785+
targetSymbolsArray.forEach(function (gene) {
2786+
target_eles.merge(cy.nodes().filter(function (ele) {
2787+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2788+
return true;
2789+
}
2790+
return false;
2791+
}))
2792+
})
2793+
var x = cy.elements().pathsFromTo(source_eles, target_eles, self.currentQueryParameters.lengthLimit, self.currentQueryParameters.lengthLimit, 'UNDIRECTED');
2794+
cy.viewUtilities('get').highlight(x.edgesOnThePaths, 2);
2795+
// cy.viewUtilities('get').highlight(x.nodesOnThePaths, 2);
2796+
cy.viewUtilities('get').highlight(source_eles, 0);
2797+
cy.viewUtilities('get').highlight(target_eles, 1);
2798+
// Highlighting feature end
2799+
27052800
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
27062801
} else {
27072802
new PromptEmptyQueryResultView({
@@ -2767,6 +2862,32 @@ var PathsFromToQueryView = Backbone.View.extend({
27672862
currentGeneralProperties.inferNestingOnLoad =
27682863
currentInferNestingOnLoad;
27692864
chiseInstance.endSpinner("paths-fromto-spinner");
2865+
2866+
// Highlighting feature
2867+
source_eles = cy.collection();
2868+
sourceSymbolsArray.forEach(function (gene) {
2869+
source_eles.merge(cy.nodes().filter(function (ele) {
2870+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2871+
return true;
2872+
}
2873+
return false;
2874+
}))
2875+
})
2876+
target_eles = cy.collection();
2877+
targetSymbolsArray.forEach(function (gene) {
2878+
target_eles.merge(cy.nodes().filter(function (ele) {
2879+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
2880+
return true;
2881+
}
2882+
return false;
2883+
}))
2884+
})
2885+
cy.viewUtilities('get').highlight(source_eles, 0);
2886+
cy.viewUtilities('get').highlight(target_eles, 1);
2887+
var x = cy.elements().pathsFromTo(source_eles, target_eles, self.currentQueryParameters.lengthLimit, 1, 'UNDIRECTED');
2888+
cy.viewUtilities('get').highlight(x.edgesOnThePaths, 2);
2889+
// Highlighting feature end
2890+
27702891
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
27712892
} else {
27722893
new PromptEmptyQueryResultView({
@@ -2940,6 +3061,24 @@ var CommonStreamQueryView = Backbone.View.extend({
29403061
currentGeneralProperties.inferNestingOnLoad =
29413062
currentInferNestingOnLoad;
29423063
chiseInstance.endSpinner("common-stream-spinner");
3064+
3065+
// Highlighting feature
3066+
eles = cy.collection();
3067+
geneSymbolsArray.forEach(function (gene) {
3068+
eles.merge(cy.nodes().filter(function (ele) {
3069+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
3070+
return true;
3071+
}
3072+
return false;
3073+
}))
3074+
})
3075+
var x = cy.elements().commonStream(eles, self.currentQueryParameters.lengthLimit, 'BOTHSTREAM');
3076+
cy.viewUtilities('get').highlight(x.nodesOnPath, 2);
3077+
cy.viewUtilities('get').highlight(x.edgesOnPath, 2);
3078+
cy.viewUtilities('get').highlight(x.commonNodes, 1);
3079+
cy.viewUtilities('get').highlight(eles, 0);
3080+
// Highlighting feature end
3081+
29433082
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
29443083
} else {
29453084
new PromptEmptyQueryResultView({
@@ -3005,6 +3144,24 @@ var CommonStreamQueryView = Backbone.View.extend({
30053144
currentGeneralProperties.inferNestingOnLoad =
30063145
currentInferNestingOnLoad;
30073146
chiseInstance.endSpinner("common-stream-spinner");
3147+
3148+
// Highlighting feature
3149+
eles = cy.collection();
3150+
geneSymbolsArray.forEach(function (gene) {
3151+
eles.merge(cy.nodes().filter(function (ele) {
3152+
if(ele.data('label') && ele.data('label').toLowerCase().indexOf(gene.toLowerCase()) >= 0){
3153+
return true;
3154+
}
3155+
return false;
3156+
}))
3157+
})
3158+
var x = cy.elements().commonStream(eles, self.currentQueryParameters.lengthLimit, 'BOTHSTREAM');
3159+
cy.viewUtilities('get').highlight(x.nodesOnPath, 2);
3160+
cy.viewUtilities('get').highlight(x.edgesOnPath, 2);
3161+
cy.viewUtilities('get').highlight(x.commonNodes, 1);
3162+
cy.viewUtilities('get').highlight(eles, 0);
3163+
// Highlighting feature end
3164+
30083165
$(document).trigger("sbgnvizLoadFileEnd", [filename, cy]);
30093166
} else {
30103167
new PromptEmptyQueryResultView({

app/main.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var cyAutopanOnDrag = require('cytoscape-autopan-on-drag');
2828
var cyNodeEditing = require('cytoscape-node-editing');
2929
var cyPopper = require('cytoscape-popper');
3030
var cyLayoutUtilities = require('cytoscape-layout-utilities');
31+
var cyGraphAlgos = require('cytoscape-graph-algos');
3132

3233
// Register cy extensions
3334
cyPanzoom( cytoscape, $ );
@@ -45,6 +46,7 @@ cyAutopanOnDrag( cytoscape );
4546
cyNodeEditing( cytoscape, $, konva );
4647
cyPopper( cytoscape );
4748
cyLayoutUtilities( cytoscape );
49+
cyGraphAlgos( cytoscape );
4850

4951
// Libraries to pass sbgnviz
5052
var libs = {};

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"cytoscape-edgehandles": "~2.13.1",
3333
"cytoscape-expand-collapse": "github:iVis-at-Bilkent/cytoscape.js-expand-collapse#unstable",
3434
"cytoscape-fcose": "github:iVis-at-Bilkent/cytoscape.js-fcose#unstable",
35+
"cytoscape-graph-algos": "github:iVis-at-Bilkent/cytoscape.js-graph-algos#master",
3536
"cytoscape-grid-guide": "github:iVis-at-Bilkent/cytoscape.js-grid-guide#unstable",
3637
"cytoscape-layout-utilities": "github:iVis-at-Bilkent/cytoscape.js-layout-utilities#unstable",
3738
"cytoscape-node-editing": "github:iVis-at-Bilkent/cytoscape.js-node-editing#unstable",

0 commit comments

Comments
 (0)