Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
pathway/VQI_PathwayEditorGUI.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
2458 lines (2277 sloc)
126 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var VQI_PathwayEditorGUI = function (parent) { | |
// Web services | |
// var serverURL = "http://cardinal3.engr.uconn.edu/pathwayVisual/"; | |
var services = {}; | |
services["pathwayFinderUrl"] = "http://bibci.engr.uconn.edu/puj07001/pathway_services/find_path_and_score/find_path_and_score.php"; | |
services['pathwayFinder'] = 'http://cardinal3.engr.uconn.edu/pathwayVisual/PathwayParser/ajaxJSON.php'; | |
services['pathwaySaver'] = 'http://cardinal3.engr.uconn.edu/pathwayVisual/PathwayParser/updateDB_json.php'; | |
services['pathwayScorer'] = 'http://cardinal3.engr.uconn.edu/pathwayVisual/ScoreSystem/getScore.php'; | |
services['pathwayWeightedScorer'] = 'http://137.99.11.122/pathway2/pathwayweightedscorer.php'; | |
services['objectFinder'] = 'http://137.99.11.122/pathway2/qsys_json.php'; | |
// services['pathwayFinder'] = 'http://bibci.engr.uconn.edu/yuz12012/pathwayVisual//PathwayParser/ajaxJSON.php'; | |
// services['pathwaySaver'] = 'http://bibci.engr.uconn.edu/yuz12012/pathwayVisual//PathwayParser/updateDB_json.php'; | |
// services['pathwayScorer'] = 'http://bibci.engr.uconn.edu/yuz12012/pathwayVisual/ScoreSystem/getScore.php'; | |
// services['pathwayWeightedScorer'] = 'http://bibci.engr.uconn.edu/thh13003/pathway2/pathwayweightedscorer.php'; | |
// services['objectFinder'] = 'http://bibci.engr.uconn.edu/thh13003/pathway2/qsys_json.php'; | |
// Globals | |
var self = this; | |
var definitionHub = {} | |
definitionHub.nodeTypes = { | |
1: [1, "bundleone"], 2: [2, "bundletwo"], 3: [3, "gene"], 4: [4, "geneproduct"], 5: [5, "protein"] | |
, 6: [6, "rna"], 7: [7, "microrna"], 8: [8, "kinase"], 9: [9, "ligand"], 10: [10, "receptor"] | |
, 11: [11, "biologicalprocess"], 12: [12, "triangle"], 13: [13, "rectangle"], 14: [14, "circle"], 15: [15, "ellipse"] | |
, 16: [16, "pentagon"], 17: [17, "hexagon"], 18: [18, "heptagon"], 19: [19, "octagon"], 20: [20, "star"] | |
, 21: [21, "diamond"], 22: [22, "vee"], 23: [23, "rhomboid"], 24: [24, "label"]}; | |
definitionHub.edgeLineTypes = {1: [1, "solid"], 2: [2, "dashed"], 3: [3, "dotted"]}; | |
definitionHub.arrowLineTypes = {1: [1, "line"], 2: [2, "activate", "arrow"], 3: [3, "inhibit", "tbar"], 4: [4, "regulated"]}; | |
var personId = ""; | |
var pathName = ""; | |
var states = []; | |
var stateRecycle = []; | |
var selectedForQueryNodes = []; | |
var selectedForEditNodes = []; | |
var selectedForEditEdges = []; | |
var orderedSelectedNodes = []; | |
var grabbedCollapsedForEditNodes = []; | |
var coloredNodes = []; | |
var edgeCounter = 0; | |
var nodeCounter = 0; | |
var dupCounter = 0; | |
var loadCounts = 0; | |
var target = 0; | |
var header = ""; | |
var counts = {}; | |
var strInfo; | |
var highestZOrder = 999; | |
var strVar = ""; | |
strVar += " <nav class=\"navbar navbar-default\">"; | |
strVar += " <div class=\"container-fluid\">"; | |
strVar += " <div class=\"navbar-header\">"; | |
strVar += " <a id=\"" + parent + "-pathway-title\" class=\"navbar-brand\" href=\"#\">Pathway name</a>"; | |
strVar += " <\/div>"; | |
strVar += " <ul class=\"nav navbar-nav\">"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <label for=\"" + parent + "-file-pathway\">Local Pathway File:<\/label>"; | |
strVar += " <input id=\"" + parent + "-file-pathway\" value=\"Pick Pathway File\" type=\"file\"><\/input>"; | |
strVar += " <\/li>"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <label for=\"" + parent + "-file-coloring\">Local Pathway Coloring:<\/label>"; | |
strVar += " <input id=\"" + parent + "-file-coloring\" value=\"Pick Spray File\" type=\"file\"><\/input>"; | |
strVar += " <\/li>"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <label for=\"" + parent + "-pathway-selector\">Pathway:<\/label>"; | |
strVar += " <select style=\"width: 150px\" id=\"" + parent + "-pathway-selector\" name=\"" + parent + "-pathway-selector\">"; | |
strVar += " <option selected=\"\">Please Select<\/option>"; | |
strVar += " <\/select>"; | |
strVar += " <\/li>"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <div class=\"dropdown\">"; | |
strVar += " <button class=\"btn btn-primary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">Edit<span class=\"caret\"><\/span><\/button>"; | |
strVar += " <ul class=\"dropdown-menu\">"; | |
strVar += " <li><input id=\"" + parent + "-add-node\" value=\"Add Node\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-add-edge\" value=\"Add Edge\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-delete-elements\" value=\"Delete Selected Element(s)\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li role=\"separator\" class=\"divider\"></li>"; | |
strVar += " <li><input id=\"" + parent + "-bundle\" value=\"Bundle\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-unbundle\" value=\"Unbundle\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-expand\" value=\"Expand\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-collapse\" value=\"Collapse\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-expand-informative\" value=\"Expand Informative\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-collapse-informative\" value=\"Collapse Informative\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-duplicate-nodes\" value=\"Duplicate Nodes\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li role=\"separator\" class=\"divider\"></li>"; | |
strVar += " <li><input id=\"" + parent + "-config-pathway\" value=\"Configure\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <\/ul>"; | |
strVar += " </div>"; | |
strVar += " <\/li>"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <div class=\"dropdown\">"; | |
strVar += " <button class=\"btn btn-primary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">Process<span class=\"caret\"><\/span><\/button>"; | |
strVar += " <ul class=\"dropdown-menu\">"; | |
strVar += " <li><input id=\"" + parent + "-findpath\" value=\"Find Pathway\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-find-paths-all-drop\" value=\"Find All Pathways\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-find-object\" value=\"Find Object\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <\/ul>"; | |
strVar += " </div>"; | |
strVar += " <\/li>"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <div class=\"dropdown\">"; | |
strVar += " <button class=\"btn btn-primary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">Archive<span class=\"caret\"><\/span><\/button>"; | |
strVar += " <ul class=\"dropdown-menu\">"; | |
strVar += " <li><input id=\"" + parent + "-pathway-save\" value=\"Save\" type=\"button\" class=\"btn btn-link disabled\"><\/input><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-pathway-saveAs\" value=\"SaveAs\" type=\"button\" class=\"btn btn-link disabled\"><\/li>"; | |
strVar += " <li><input id=\"" + parent + "-produce-JSON\" value=\"Export JSON\" type=\"button\" class=\"btn btn-link disabled\"><\/li>"; | |
strVar += " <\/ul>"; | |
strVar += " <\/div>"; | |
strVar += " <li\">"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <input id=\"" + parent + "-undo\" value=\"Undo\" type=\"button\" class=\"btn btn-primary disabled\"><\/input>"; | |
strVar += " <\/li>"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <input id=\"" + parent + "-redo\" value=\"Redo\" type=\"button\" class=\"btn btn-primary disabled\"><\/input>"; | |
strVar += " <\/li>"; | |
strVar += " <li style=\"margin: 2px\">"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" id=\"" + parent + "-search-node-name\" placeholder=\"Search\" class=\"form-control\" name=\"" + parent + "-search-node-name\">"; | |
strVar += " <\/li>"; | |
strVar += " <\/ul>"; | |
strVar += " <\/div>"; | |
strVar += " <\/nav>"; | |
strVar += " <div id=\"" + parent + "-dialog-table\" title=\"Result\">"; | |
strVar += " <table id=\"" + parent + "-inner-table\" class=\"table table-hover table-condensed\">"; | |
strVar += " <tr>"; | |
strVar += " <td>name<\/td>"; | |
strVar += " <td>percentage<\/td>"; | |
strVar += " <td>Rna distance<\/td>"; | |
strVar += " <td>Cnv distance<\/td>"; | |
strVar += " <td>Mut distance<\/td>"; | |
strVar += " <\/tr>"; | |
strVar += " <\/table>"; | |
strVar += " <\/div>"; | |
strVar += " <div id=\"" + parent + "-dialog-form-save-as-pathway\" title=\"SaveAs\">"; | |
strVar += " <form role=\"form\">"; | |
strVar += " <fieldset>"; | |
strVar += " <label for=\"" + parent + "-pathway-name\">pathway-name:<\/label>"; | |
strVar += " <input type=\"text\" class=\"form-control\" name=\"" + parent + "-pathway-name\" id=\"" + parent + "-pathway-name\"><br>"; | |
strVar += " <input type=\"submit\" class=\"btn btn-default\" tabindex=\"-1\" style=\"position:absolute; top:-1000px\"><\/input>"; | |
strVar += " <\/fieldset>"; | |
strVar += " <\/form>"; | |
strVar += " <\/div>"; | |
strVar += " <div id=\"" + parent + "-dialog-form-new-pathway\" title=\"New Pathway\">"; | |
strVar += " <form role=\"form\">"; | |
strVar += " <fieldset>"; | |
strVar += " <label for=\"" + parent + "-new-pathway-name\">pathway-name:<\/label>"; | |
strVar += " <input type=\"text\" class=\"form-control\" name=\"" + parent + "-new-pathway-name\" id=\"" + parent + "-new-pathway-name\"><br>"; | |
strVar += " <input type=\"submit\" class=\"btn btn-default\" tabindex=\"-1\" style=\"position:absolute; top:-1000px\"><\/input>"; | |
strVar += " <\/fieldset>"; | |
strVar += " <\/form>"; | |
strVar += " <\/div>"; | |
strVar += " <div id=\"" + parent + "-dialog-form-configure-pathway\" title=\"Configure Pathway\">"; | |
strVar += " <form role=\"form\">"; | |
strVar += " <div class =\"form-group\">"; | |
strVar += " <label for=\"" + parent + "-configure-person-id\">person-id:<\/label>"; | |
strVar += " <input type=\"text\" class=\"form-control\" name=\"" + parent + "-configure-person-id\" id=\"" + parent + "-configure-person-id\"><br>"; | |
strVar += " <input id=\"" + parent + "-apply-configure-person-id\" value=\"Apply\" type=\"button\" class=\"btn btn-link\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <\/form>"; | |
strVar += " <\/div>"; | |
strVar += " <div id=\"" + parent + "-dialog-bundle\" title=\"Bundle\">"; | |
strVar += " <form role=\"form\">"; | |
strVar += " <fieldset>"; | |
strVar += " <label for=\"" + parent + "-type-bundle\">type:<\/label>"; | |
strVar += " <select style=\"width: 150px\" id=\"" + parent + "-type-bundle\" name=\"" + parent + "-type-bundle\">"; | |
strVar += " <option selected=\"\">bundleone<\/option>"; | |
strVar += " <option>bundletwo<\/option>"; | |
strVar += " <\/select>"; | |
strVar += " <\/fieldset>"; | |
strVar += " <\/form>"; | |
strVar += " <\/div>"; | |
strVar += " <div id=\"" + parent + "-dialog-form-find-path\" title=\"Find path\">"; | |
strVar += " <form role=\"form\">"; | |
strVar += " <div class =\"form-group\">"; | |
strVar += " <label for=\"" + parent + "-sid\">sid:<\/label>"; | |
strVar += " <input type=\"text\" class=\"form-control\" name=\"" + parent + "-sid\" id=\"" + parent + "-sid\"><br>"; | |
strVar += " <label for=\"" + parent + "-vid\">vid:<\/label>"; | |
strVar += " <input type=\"text\" class=\"form-control\" name=\"" + parent + "-vid\" id=\"" + parent + "-vid\"><br>"; | |
strVar += " <input id=\"" + parent + "-find-paths-all\" value=\"Find All\" type=\"button\" class=\"btn btn-link\"><\/input>"; | |
strVar += " <input id=\"" + parent + "-find-paths-one\" value=\"Find\" type=\"button\" class=\"btn btn-link\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <\/form>"; | |
strVar += " <\/div>"; | |
strVar += " <div id=\"" + parent + "-dialog-form-edge\" title=\"Edit edge(s)\">"; | |
strVar += " <form>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-arrow-type-edge\">arrow type:<\/label>"; | |
strVar += " <select style=\"width: 150px\" class=\"form-control col-md-4\" id=\"" + parent + "-arrow-type-edge\" name=\"" + parent + "-arrow-type-edge\">"; | |
strVar += " <option value=\"1\" selected=\"\">" + definitionHub.arrowLineTypes[1][0] + "<\/option>"; | |
strVar += " <option value=\"2\">" + definitionHub.arrowLineTypes[2][0] + "<\/option>"; | |
strVar += " <option value=\"3\">" + definitionHub.arrowLineTypes[3][0] + "<\/option>"; | |
strVar += " <option value=\"4\">" + definitionHub.arrowLineTypes[4][0] + "<\/option>"; | |
strVar += " <\/select>"; | |
strVar += " <input id=\"" + parent + "-arrow-type-edge-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-line-type-edge\">line type:<\/label>"; | |
strVar += " <select style=\"width: 150px\" class=\"form-control col-md-4\" id=\"" + parent + "-line-type-edge\" name=\"" + parent + "-line-type-edge\">"; | |
strVar += " <option value=\"1\" selected=\"\">" + definitionHub.edgeLineTypes[1][0] + "<\/option>"; | |
strVar += " <option value=\"2\">" + definitionHub.edgeLineTypes[2][0] + "<\/option>"; | |
strVar += " <option value=\"3\">" + definitionHub.edgeLineTypes[3][0] + "<\/option>"; | |
strVar += " <\/select>"; | |
strVar += " <input id=\"" + parent + "-line-type-edge-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-direction\">change direction:<\/label>"; | |
strVar += " <input style=\"width: 150px\" type=\"checkbox\" class=\"form-control col-md-4\" name=\"" + parent + "-direction\" id=\"" + parent + "-direction\" value=\"Yes\"><\/input>"; | |
strVar += " <input id=\"" + parent + "-direction-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label for=\"" + parent + "-segment-distances\">Segment Distances:(e.g. -20 20 -20)<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" id=\"" + parent + "-segment-distances\" class=\"form-control\" name=\"" + parent + "-segment-distances\">"; | |
strVar += " <label for=\"" + parent + "-segment-weights\">Segment Weights:(e.g. 0.25 0.5 0.75)<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" id=\"" + parent + "-segment-weights\" class=\"form-control\" name=\"" + parent + "-segment-weights\">"; | |
strVar += " <label for=\"" + parent + "-segment-enable-disable\">Enable Segmented<\/label>"; | |
strVar += " <select style=\"width: 150px\" class=\"form-control\" id=\"" + parent + "-segmented-enable-disable\" name=\"" + parent + "-segmented-enable-disable\">"; | |
strVar += " <option selected=\"\">enable<\/option>"; | |
strVar += " <option\>disable<\/option>"; | |
strVar += " <\/select>"; | |
strVar += " <input id=\"" + parent + "-apply-curve-changes\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4 col-md-offset-8\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-edge-move-to-background\">Move to Background:<\/label>"; | |
strVar += " <input id=\"" + parent + "-edge-move-to-background\" value=\"Move\" type=\"button\" class=\"btn btn-link col-md-4 col-md-offset-8\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-edge-move-to-foreground\">Move to Foreground:<\/label>"; | |
strVar += " <input id=\"" + parent + "-edge-move-to-foreground\" value=\"Move\" type=\"button\" class=\"btn btn-link col-md-4 col-md-offset-8\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <\/form>"; | |
strVar += " <\/div>"; | |
strVar += "<div id=\"" + parent + "-intro-hero-unit\" class=\"container\"style=\"margin-top: 100px\">"; | |
strVar += " <div class=\"jumbotron\">"; | |
strVar += " <h1>Pathway Editor</h1>"; | |
strVar += " <p><i>Pre-alpha version of the pathway editor. You can either start a new pathway or load an existing one...</i></p>"; | |
strVar += " <input id=\"" + parent + "-new-pathway\" value=\"New Pathway\" type=\"button\" class=\"btn btn-success\"><\/input>"; | |
strVar += " <a id=\"" + parent + "-link-github\" type=\"button\" class=\"btn btn-success\" href=\"https://github.uconn.edu/ivp08001/pathway\">Github Source<\/a>"; | |
strVar += " </div>"; | |
strVar += " </div>"; | |
strVar += " <div id=\"" + parent + "-dialog-form-node\" title=\"Edit node(s)\">"; | |
strVar += " <form>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-node-name\">node-name:<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" name=\"" + parent + "-node-name\" class=\"form-control col-md-4\" id=\"" + parent + "-node-name\" value=\"\"><\/input>"; | |
strVar += " <input id=\"" + parent + "-node-name-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-height\">height:<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" name=\"" + parent + "-height\" id=\"" + parent + "-height\" class=\"form-control col-md-4\" value=\"\"><\/input>"; | |
strVar += " <input id=\"" + parent + "-height-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-width\">width:<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" name=\"" + parent + "-width\" id=\"" + parent + "-width\" class=\"form-control col-md-4\" value=\"\"><\/input>"; | |
strVar += " <input id=\"" + parent + "-width-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-type-node\">type:<\/label>"; | |
strVar += " <select style=\"width: 150px\" id=\"" + parent + "-type-node\" class=\"form-control col-md-4\" name=\"" + parent + "-type-node\">"; | |
strVar += " <option id=\"" + parent + "-select-bundleOne\" value=\"1\" selected=\"\">" + definitionHub.nodeTypes[1][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-bundleTwo\" value=\"2\">" + definitionHub.nodeTypes[2][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-gene\" value=\"3\">" + definitionHub.nodeTypes[3][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-geneProduct\" value=\"4\">" + definitionHub.nodeTypes[4][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-protein\" value=\"5\">" + definitionHub.nodeTypes[5][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-rna\" value=\"6\">" + definitionHub.nodeTypes[6][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-mircoRna\" value=\"7\">" + definitionHub.nodeTypes[7][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-kinase\" value=\"8\">" + definitionHub.nodeTypes[8][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-ligand\" value=\"9\">" + definitionHub.nodeTypes[9][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-receptor\" value=\"10\">" + definitionHub.nodeTypes[10][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-biologicalProcess\" value=\"11\">" + definitionHub.nodeTypes[11][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-triangle\" value=\"12\">" + definitionHub.nodeTypes[12][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-rectangle\" value=\"13\">" + definitionHub.nodeTypes[13][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-circle\" value=\"14\">" + definitionHub.nodeTypes[14][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-ellipse\" value=\"15\">" + definitionHub.nodeTypes[15][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-pentagon\" value=\"16\">" + definitionHub.nodeTypes[16][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-hexagon\" value=\"17\" >" + definitionHub.nodeTypes[17][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-heptagon\" value=\"18\">" + definitionHub.nodeTypes[18][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-octagon\" value=\"19\">" + definitionHub.nodeTypes[19][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-star\" value=\"20\">" + definitionHub.nodeTypes[20][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-diamond\" value=\"21\">" + definitionHub.nodeTypes[21][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-vee\" value=\"22\">" + definitionHub.nodeTypes[22][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-rhomboid\" value=\"23\">" + definitionHub.nodeTypes[23][0] + "<\/option>"; | |
strVar += " <option id=\"" + parent + "-select-label\" value=\"24\">" + definitionHub.nodeTypes[24][0] + "<\/option>"; | |
strVar += " <\/select>"; | |
strVar += " <input id=\"" + parent + "-type-node-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-rna\">Rna:<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" id=\"" + parent + "-rna\" class=\"form-control col-md-4\" name=\"" + parent + "-rna\">"; | |
strVar += " <input id=\"" + parent + "-rna-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-cnv\">Cnv:<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" id=\"" + parent + "-cnv\" class=\"form-control col-md-4\" name=\"" + parent + "-cnv\">"; | |
strVar += " <input id=\"" + parent + "-cnv-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-mut\">Mut:<\/label>"; | |
strVar += " <input type=\"text\" style=\"width: 150px\" id=\"" + parent + "-mut\" class=\"form-control col-md-4\" name=\"" + parent + "-mut\">"; | |
strVar += " <input id=\"" + parent + "-mut-apply\" value=\"Apply\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-background-image\">Local Image File:<\/label>"; | |
strVar += " <input id=\"" + parent + "-background-image\" value=\"Pick an Image File\" type=\"file\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-background-image-remove\">Remove Background image:<\/label>"; | |
strVar += " <input id=\"" + parent + "-background-image-remove\" value=\"Remove\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-node-move-to-background\">Move to Background:<\/label>"; | |
strVar += " <input id=\"" + parent + "-node-move-to-background\" value=\"Move\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <div class =\"form-group row\">"; | |
strVar += " <label class=\"col-md-4\" for=\"" + parent + "-node-move-to-foreground\">Move to Foreground:<\/label>"; | |
strVar += " <input id=\"" + parent + "-node-move-to-foreground\" value=\"Move\" type=\"button\" class=\"btn btn-link col-md-4\"><\/input>"; | |
strVar += " </div>"; | |
strVar += " <\/form>"; | |
strVar += " <\/div>"; | |
strVar += " <div id=\"" + parent + "-cy\" style=\"height: 100%;width: 100%;position: absolute; left: 0;\"><\/div>"; | |
document.getElementById(parent).innerHTML = strVar; | |
$(function () {// on dom ready | |
function removeHeroUnit() { | |
var heroUnit = document.getElementById(parent + "-intro-hero-unit"); | |
if (heroUnit != null) | |
heroUnit.parentNode.removeChild(heroUnit); | |
} | |
function newPathway(event) { | |
var name = document.getElementById(parent + "-new-pathway-name").value; | |
var data = '{"format_version" : "1.0","generated_by" : "cytoscape-3.2.1","target_cytoscapejs_version" : "~2.1","data" :{"shared_name":"","ID":"","BOARDWIDTH":"","BOARDHEIGHT":"","LICENSE":"CC BY 2.0","ORGANISM":"","NAME":"","INSTRUCTION":"","AUTHOR":"","VERSION":"","PATHWAY_TYPE":"original","SUID":205,"__Annotations":[],"selected":true},"elements" : {"nodes" :[],"edges" :[]}}' | |
var obj = JSON.parse(data); | |
var title = document.getElementById(parent + "-pathway-title"); | |
pathName = name; | |
title.innerHTML = pathName + " <small>" + personId + "</small>"; | |
removeHeroUnit(); | |
setElements(obj); | |
save(obj, name); | |
dialogNewPathway.dialog("close"); | |
} | |
function focus(name) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
cy.elements("node[name *= \"" + name + "\"]").select(); | |
cy.$('node').addClass('unfocused'); | |
cy.$('edge').addClass('unfocused'); | |
cy.$('node:selected').addClass('focused'); | |
cy.$('edge:selected').addClass('focused'); | |
} | |
function unFocus() { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
cy.$('node').unselect(); | |
cy.$('edge').unselect(); | |
cy.$('node').removeClass('unfocused').removeClass('focused'); | |
cy.$('edge').removeClass('unfocused').removeClass('focused'); | |
} | |
function search(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var name = document.getElementById(parent + "-search-node-name").value; | |
unFocus(); | |
if (name != "") { | |
focus(name); | |
} else { | |
unFocus(); | |
} | |
} | |
function exitSearch(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
unFocus(); | |
} | |
function onChangePathwayFile(event) { | |
var reader = new FileReader(); | |
reader.onload = onPathwayReaderLoad; | |
reader.readAsText(event.target.files[0]); | |
removeHeroUnit(); | |
} | |
function collapseBundleInformative(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
for (var i = 0; i < selectedForEditNodes.size(); i++) { | |
if (selectedForEditNodes[i].isParent() && !selectedForEditNodes[i].descendants()[0].hasClass('collapsed_informative')) { | |
var staticOldPosX = selectedForEditNodes[i].position('x'); | |
var staticOldPosY = selectedForEditNodes[i].position('y'); | |
selectedForEditNodes[i].descendants().addClass('collapsed_informative'); | |
selectedForEditNodes[i].descendants().unselectify(); | |
var xGap = 0; | |
var yGap = 0; | |
for (var j = 0; selectedForEditNodes[i].descendants().length > j; j++) { | |
if (j % 5 == 0) { | |
xGap = 0 | |
yGap += 10 | |
} else { | |
xGap += 10 | |
} | |
var newPositionX = staticOldPosX + xGap; | |
var newPositionY = staticOldPosY + yGap; | |
selectedForEditNodes[i].descendants()[j].data('oldPositionX', selectedForEditNodes[i].descendants()[j].position('x')); | |
selectedForEditNodes[i].descendants()[j].data('oldPositionY', selectedForEditNodes[i].descendants()[j].position('y')); | |
selectedForEditNodes[i].descendants()[j].position({ | |
x: newPositionX, | |
y: newPositionY | |
}); | |
} | |
} | |
} | |
saveState(); | |
} | |
function expandBundleInformative(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
for (var i = 0; i < selectedForEditNodes.size(); i++) { | |
if (selectedForEditNodes[i].isParent() && selectedForEditNodes[i].descendants()[0].hasClass('collapsed_informative')) { | |
selectedForEditNodes[i].descendants().removeClass('collapsed_informative'); | |
selectedForEditNodes[i].descendants().selectify(); | |
for (var j = 0; selectedForEditNodes[i].descendants().length > j; j++) { | |
selectedForEditNodes[i].descendants()[j].position('x', selectedForEditNodes[i].descendants()[j].data('oldPositionX')); | |
selectedForEditNodes[i].descendants()[j].position('y', selectedForEditNodes[i].descendants()[j].data('oldPositionY')); | |
} | |
} | |
} | |
saveState(); | |
} | |
function collapseBundle(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
for (var i = 0; i < selectedForEditNodes.size(); i++) { | |
if (selectedForEditNodes[i].isParent() && !selectedForEditNodes[i].descendants()[0].hasClass('collapsed')) { | |
selectedForEditNodes[i].descendants().addClass('collapsed'); | |
selectedForEditNodes[i].descendants().unselectify(); | |
for (var j = 0; selectedForEditNodes[i].descendants().length > j; j++) { | |
selectedForEditNodes[i].descendants()[j].data('oldPositionX', selectedForEditNodes[i].descendants()[j].position('x')); | |
selectedForEditNodes[i].descendants()[j].data('oldPositionY', selectedForEditNodes[i].descendants()[j].position('y')); | |
} | |
selectedForEditNodes[i].descendants().positions({ | |
x: selectedForEditNodes[i].position('x') + selectedForEditNodes[i].width() / 2, | |
y: selectedForEditNodes[i].position('y') + selectedForEditNodes[i].height() / 2 | |
}); | |
} | |
} | |
saveState(); | |
} | |
function expandBundle(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
for (var i = 0; i < selectedForEditNodes.size(); i++) { | |
if (selectedForEditNodes[i].isParent() && selectedForEditNodes[i].descendants()[0].hasClass('collapsed')) { | |
selectedForEditNodes[i].descendants().removeClass('collapsed'); | |
selectedForEditNodes[i].descendants().selectify(); | |
for (var j = 0; selectedForEditNodes[i].descendants().length > j; j++) { | |
selectedForEditNodes[i].descendants()[j].position('x', selectedForEditNodes[i].descendants()[j].data('oldPositionX')); | |
selectedForEditNodes[i].descendants()[j].position('y', selectedForEditNodes[i].descendants()[j].data('oldPositionY')); | |
} | |
} | |
} | |
saveState(); | |
} | |
function onChangeColoringFile(event) { | |
var reader = new FileReader(); | |
reader.onload = onColoringReaderLoad; | |
// personId = event.target.files[0].name.substring(0,event.target.files[0].name.indexOf(".")) | |
personId = event.target.files[0].name; | |
var title = document.getElementById(parent + "-pathway-title"); | |
title.innerHTML = pathName + " <small>" + personId + "</small>"; | |
reader.readAsText(event.target.files[0]); | |
saveState(); | |
} | |
function postAddProcessing() { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
//Post-Add Process | |
for (var i = 0; i < cy.$("node").length; i++) { | |
if (typeof (cy.$("node")[i].data("BackgroundImage")) != "undefined" && cy.$("node")[i].data("BackgroundImage") != "") { | |
cy.$("node")[i].style("BackgroundImage", cy.$("node")[i].data("BackgroundImage")); | |
cy.$("node")[i].data("Type", "image"); | |
} | |
if (typeof (cy.$("node")[i].data("ZIndex")) != "undefined") { | |
cy.$("node")[i].style("z-index", cy.$("node")[i].data("ZIndex")); | |
} | |
if (cy.$("node")[i].isParent() && (cy.$("node")[i].data("Type") != "1" || cy.$("node")[i].data("Type") != "2")) { | |
cy.$("node")[i].data("Type", "1"); | |
} | |
} | |
for (var i = 0; i < cy.$("edge").length; i++) { | |
if (typeof (cy.$("edge")[i].data("CurveStyle")) != "undefined") { | |
cy.$("edge")[i].style("curve-style", cy.$("edge")[i].data("CurveStyle")); | |
} | |
if (typeof (cy.$("edge")[i].data("zOrder")) != "undefined") { | |
cy.$("edge")[i].style("z-index", cy.$("edge")[i].data("zOrder")); | |
} | |
if (typeof (cy.$("edge")[i].data("SegmentDistances")) != "undefined") { | |
cy.$("edge")[i].style("segment-distances", cy.$("edge")[i].data("SegmentDistances")); | |
} | |
if (typeof (cy.$("edge")[i].data("SegmentWeights")) != "undefined") { | |
cy.$("edge")[i].style("segment-weights", cy.$("edge")[i].data("SegmentWeights")); | |
} | |
} | |
} | |
function mapReverseDictionary() { | |
var reverseLookup = {}; | |
for (var i in definitionHub.nodeTypes) { | |
for (var j = 0, innerLen = definitionHub.nodeTypes[i].length; j < innerLen; j++) { | |
reverseLookup[definitionHub.nodeTypes[i][j]] = i; | |
} | |
} | |
for (var i in definitionHub.arrowLineTypes) { | |
for (var j = 0, innerLen = definitionHub.arrowLineTypes[i].length; j < innerLen; j++) { | |
reverseLookup[definitionHub.arrowLineTypes[i][j]] = i; | |
} | |
} | |
for (var i in definitionHub.edgeLineTypes) { | |
for (var j = 0, innerLen = definitionHub.edgeLineTypes[i].length; j < innerLen; j++) { | |
reverseLookup[definitionHub.edgeLineTypes[i][j]] = i; | |
} | |
} | |
return reverseLookup; | |
} | |
function preAddProcessing(obj) { | |
var reverseLookup = mapReverseDictionary(); | |
for (var i = 0; i < obj.elements.nodes.length; i++) { | |
if (obj.elements.nodes[i].data.id.substring(0, 1) == "n") { | |
var number = parseInt(obj.elements.nodes[i].data.id.substring(1, obj.elements.nodes.length - 1)); | |
if (number > nodeCounter) | |
nodeCounter = number + 1; | |
} | |
if (typeof (obj.elements.nodes[i].data.BackgroundImage) == "undefined") { | |
obj.elements.nodes[i].data.BackgroundImage = ""; | |
} | |
if (typeof (obj.elements.nodes[i].data.ZIndex) == "undefined") { | |
obj.elements.nodes[i].data.ZIndex = 0; | |
} | |
if (typeof (obj.elements.nodes[i].data.Type) == "undefined" || typeof (reverseLookup[obj.elements.nodes[i].data.Type.toLowerCase()]) == "undefined") { | |
obj.elements.nodes[i].data.Type = "15"; | |
} else { | |
obj.elements.nodes[i].data.Type = reverseLookup[obj.elements.nodes[i].data.Type.toLowerCase()]; | |
} | |
if (typeof (obj.elements.nodes[i].data.Rna) == "undefined" || isNaN(obj.elements.nodes[i].data.Rna)) { | |
obj.elements.nodes[i].data.Rna = 0; | |
} | |
if (typeof (obj.elements.nodes[i].data.Cnv) == "undefined" || isNaN(obj.elements.nodes[i].data.Cnv)) { | |
obj.elements.nodes[i].data.Cnv = 0; | |
} | |
if (typeof (obj.elements.nodes[i].data.Mut) == "undefined" || isNaN(obj.elements.nodes[i].data.Mut)) { | |
obj.elements.nodes[i].data.Mut = 0; | |
} | |
if (typeof (obj.elements.nodes[i].data.oldPositionX) == "undefined" || isNaN(obj.elements.nodes[i].data.oldPositionX)) { | |
obj.elements.nodes[i].data.oldPositionX = 0; | |
} | |
if (typeof (obj.elements.nodes[i].data.oldPositionY) == "undefined" || isNaN(obj.elements.nodes[i].data.oldPositionY)) { | |
obj.elements.nodes[i].data.oldPositionY = 0; | |
} | |
if (typeof (obj.elements.nodes[i].data.Width) == "undefined" || isNaN(obj.elements.nodes[i].data.Width)) { | |
obj.elements.nodes[i].data.Width = 50; | |
} | |
if (typeof (obj.elements.nodes[i].data.Height) == "undefined" || isNaN(obj.elements.nodes[i].data.Height)) { | |
obj.elements.nodes[i].data.Height = 30; | |
} | |
} | |
for (var i = 0; i < obj.elements.edges.length; i++) { | |
if (obj.elements.edges[i].data.id.substring(0, 1) == "e") { | |
var number = parseInt(obj.elements.edges[i].data.id.substring(1, obj.elements.edges.length - 1)); | |
if (number > edgeCounter) | |
edgeCounter = number + 1; | |
} | |
console.log(reverseLookup); | |
if (typeof (obj.elements.edges[i].data.Type) == "undefined" || typeof (reverseLookup[obj.elements.edges[i].data.Type.toLowerCase()]) == "undefined") { | |
obj.elements.edges[i].data.Type = "1"; | |
} else { | |
obj.elements.edges[i].data.Type = reverseLookup[obj.elements.edges[i].data.Type.toLowerCase()]; | |
} | |
if (typeof (obj.elements.edges[i].data.EndArrow) == "undefined" || typeof (reverseLookup[obj.elements.edges[i].data.EndArrow.toLowerCase()]) == "undefined") { | |
obj.elements.edges[i].data.EndArrow = "1"; | |
} else { | |
obj.elements.edges[i].data.EndArrow = reverseLookup[obj.elements.edges[i].data.EndArrow.toLowerCase()]; | |
} | |
} | |
} | |
function setElements(obj) { | |
if (loadCounts == 0) { | |
header = obj.data; | |
visualPathway(obj); | |
} else { | |
// Pre-Add process (but we do this specific step only here!!!) | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
for (var i = 0; i < obj.elements.nodes.length; i++) { | |
obj.elements.nodes[i].position.x = obj.elements.nodes[i].position.x + 1000 * loadCounts; | |
} | |
preAddProcessing(obj); | |
cy.add(obj.elements); | |
cy.center(); | |
cy.fit(); | |
postAddProcessing(); | |
} | |
loadCounts++; | |
saveState(); | |
} | |
function loadPathway(id) { | |
$.post(services['pathwayFinder'], { | |
pid: id | |
}, function (data) { | |
removeHeroUnit(); | |
var obj = JSON.parse(data); | |
var title = document.getElementById(parent + "-pathway-title"); | |
pathName = obj.data.NAME; | |
title.innerHTML = pathName + " <small>" + personId + "</small>"; | |
setElements(obj); | |
}); | |
} | |
function onSelect(event) { | |
var id = event.target.value; | |
loadPathway(id); | |
} | |
function save(obj, name) { | |
obj.data.NAME = name; | |
$.post(services['pathwaySaver'], { | |
insertPathway: JSON.stringify(obj) | |
}, function (data) { | |
if (data != "Success!") { | |
obj.data.ID = data; | |
$.post(services['pathwaySaver'], { | |
updatePathway: JSON.stringify(obj) | |
}, function (data) { | |
dialogPathwaySaveAs.dialog("close"); | |
}); | |
} else { | |
refreshPathwayList(); | |
dialogPathwaySaveAs.dialog("close"); | |
} | |
}); | |
} | |
function saveAsPathway(event) { | |
var obj = JSON.parse(states[states.length - 1]); | |
var name = document.getElementById(parent + "-pathway-name").value; | |
save(obj, name); | |
} | |
function savePathway(event) { | |
var obj = JSON.parse(states[states.length - 1]); | |
$.post(services['pathwaySaver'], { | |
updatePathway: JSON.stringify(obj) | |
}, function (data) { | |
dialogPathwaySaveAs.dialog("close"); | |
}); | |
} | |
function onPathwayReaderLoad(event) { | |
var obj = JSON.parse(event.target.result); | |
var title = document.getElementById(parent + "-pathway-title"); | |
pathName = obj.data.NAME; | |
title.innerHTML = pathName + " <small>" + personId + "</small>"; | |
setElements(obj); | |
} | |
function onColoringReaderLoad(event) { | |
var list = this.result.split('\n'); | |
var lines = []; | |
for (var line = 0; line < list.length; line++) { | |
lines[line] = list[line].split('\t'); | |
} | |
sprayColor(lines); | |
} | |
function sprayColor(lines) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var header = {}; | |
for (var i = 0; i < lines[0].length; i++) { | |
var value = lines[0][i].toLowerCase().trim(); | |
header[value] = i; | |
} | |
for (var line = 1; line < lines.length; line++) { | |
var target = cy.elements("node[name = \"" + lines[line][header["gene"]] + "\"]"); | |
if (typeof (header["mut"]) != "undefined") { | |
Mut = lines[line][header["mut"]]; | |
if (!isNaN(Mut)) | |
target.data('Mut', Mut); | |
else | |
target.data('Mut', '0'); | |
} | |
if (typeof (header["cnv"]) != "undefined") { | |
Cnv = lines[line][header["cnv"]]; | |
if (!isNaN(Cnv)) | |
target.data('Cnv', Cnv); | |
else | |
target.data('Cnv', '0'); | |
} | |
if (typeof (header["rna"]) != "undefined") { | |
Rna = lines[line][header["rna"]]; | |
if (!isNaN(Rna)) | |
target.data('Rna', Rna); | |
else | |
target.data('Rna', '0'); | |
} | |
} | |
saveState(); | |
} | |
function removeElements(event) { | |
if (selectedForEditNodes.length > 0) | |
selectedForEditNodes.remove(); | |
if (selectedForEditEdges.length > 0) | |
selectedForEditEdges.remove(); | |
saveState(); | |
} | |
function addDuplicateNodes(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var node = []; | |
var edge = []; | |
var lookupDuplicatedNodes = []; | |
var lookupDuplicatedEdges = []; | |
for (var i = 0; i < selectedForEditNodes.length; i++) { | |
node.push({ | |
group: "nodes", | |
data: { | |
LabelSize: selectedForEditNodes[i].data('LabelSize'), | |
Type: selectedForEditNodes[i].data('Type'), | |
Valign: selectedForEditNodes[i].data('Valign'), | |
Width: selectedForEditNodes[i].data('Width'), | |
Height: selectedForEditNodes[i].data('Height'), | |
id: "dup" + dupCounter.toString() + selectedForEditNodes[i].data('id'), | |
name: selectedForEditNodes[i].data('name'), | |
selected: false, | |
BackgroundImage: selectedForEditNodes[i].data('BackgroundImage'), | |
ZIndex: selectedForEditNodes[i].data('ZIndex'), | |
parent: "dup" + dupCounter.toString() + selectedForEditNodes[i].data('parent') | |
}, | |
position: { | |
x: selectedForEditNodes[i].position('x') + 100, | |
y: selectedForEditNodes[i].position('y') + 100 | |
} | |
}) | |
lookupDuplicatedNodes.push("dup" + dupCounter.toString() + selectedForEditNodes[i].data('id')); | |
} | |
for (var i = 0; i < selectedForEditNodes.length; i++) { | |
for (var j = 0; j < selectedForEditNodes[i].connectedEdges().length; j++) { | |
if (lookupDuplicatedNodes.indexOf("dup" + dupCounter.toString() + selectedForEditNodes[i].connectedEdges()[j].data('source')) != -1 && | |
lookupDuplicatedNodes.indexOf("dup" + dupCounter.toString() + selectedForEditNodes[i].connectedEdges()[j].data('target')) != -1 && | |
lookupDuplicatedEdges.indexOf("dup" + dupCounter.toString() + selectedForEditNodes[i].connectedEdges()[j].data('id')) == -1 | |
) { | |
edge.push({ | |
group: "edges", | |
data: { | |
id: "dup" + dupCounter.toString() + selectedForEditNodes[i].connectedEdges()[j].data('id'), | |
Type: selectedForEditNodes[i].connectedEdges()[j].data('Type'), | |
LineThickness: selectedForEditNodes[i].connectedEdges()[j].data('LineThickness'), | |
EndArrow: selectedForEditNodes[i].connectedEdges()[j].data('EndArrow'), | |
Coords: selectedForEditNodes[i].connectedEdges()[j].data('Coords'), | |
ZOrder: selectedForEditNodes[i].connectedEdges()[j].data('ZOrder'), | |
source: "dup" + dupCounter.toString() + selectedForEditNodes[i].connectedEdges()[j].data('source'), | |
target: "dup" + dupCounter.toString() + selectedForEditNodes[i].connectedEdges()[j].data('target'), | |
StartArrow: selectedForEditNodes[i].connectedEdges()[j].data('StartArrow'), | |
CurveStyle: selectedForEditNodes[i].connectedEdges()[j].data('CurveStyle'), | |
SegmentDistances: selectedForEditNodes[i].connectedEdges()[j].data('SegmentDistances'), | |
SegmentWeights: selectedForEditNodes[i].connectedEdges()[j].data('SegmentWeights'), | |
selected: selectedForEditNodes[i].connectedEdges()[j].data('selected') | |
} | |
}) | |
lookupDuplicatedEdges.push("dup" + dupCounter.toString() + selectedForEditNodes[i].connectedEdges()[j].data('id')); | |
} | |
} | |
} | |
dupCounter++; | |
cy.add(node.concat(edge)); | |
postAddProcessing(); | |
saveState(); | |
} | |
function addNode(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var name = "n" + nodeCounter; | |
var node = []; | |
// Screen Dimensions | |
var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; | |
var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; | |
var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; | |
var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; | |
var left = ((width / 2) - (100 / 2)) + dualScreenLeft; | |
var top = ((height / 2) - (25 / 2)) + dualScreenTop; | |
node.push({ | |
group: "nodes", | |
data: { | |
LabelSize: 10, | |
Type: "gene", | |
Valign: "Middle", | |
Width: 100, | |
Height: 25, | |
id: "n" + nodeCounter, | |
name: name, | |
selected: false, | |
BackgroundImage: "", | |
ZIndex: 0 | |
}, | |
renderedPosition: { | |
x: left, | |
y: top | |
} | |
}) | |
nodeCounter++; | |
cy.add(node); | |
postAddProcessing(); | |
saveState(); | |
} | |
function addEdge(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
for (var i = 0; i < selectedForEditNodes.length - 1; i++) { | |
var sourceE = selectedForEditNodes[i].data('id'); | |
var targetE = selectedForEditNodes[i + 1].data('id'); | |
var edge = []; | |
edge.push({ | |
group: "edges", | |
data: { | |
id: "e" + edgeCounter, | |
Type: "Solid", | |
LineThickness: 1.0, | |
EndArrow: "Line", | |
Coords: [{ | |
"x": 0, | |
"y": 0 | |
}, { | |
"x": 0, | |
"y": 0 | |
}], | |
ZOrder: "12288", | |
source: sourceE, | |
target: targetE, | |
StartArrow: "Line", | |
selected: false | |
} | |
}) | |
edgeCounter++; | |
cy.add(edge); | |
postAddProcessing(); | |
saveState(); | |
} | |
} | |
function unbundleRecursive(node, parents, edges, nodes, rCounter) { | |
rCounter++; | |
if (rCounter == 1 && node.isParent()) { | |
parents.push(node); | |
for (var x = 0; x < node.children().size(); x++) { | |
if (node.parent().length != 0) { | |
nodes.push({ | |
group: "nodes", | |
data: { | |
LabelSize: node.children()[x].data('LabelSize'), | |
Type: node.children()[x].data('Type'), | |
Valign: node.children()[x].data('Valign'), | |
Width: node.children()[x].data('Width'), | |
Height: node.children()[x].data('Height'), | |
id: node.children()[x].data('id'), | |
name: node.children()[x].data('name'), | |
selected: node.children()[x].data('selected'), | |
Cnv: node.children()[x].data('Cnv'), | |
Rna: node.children()[x].data('Rna'), | |
Mut: node.children()[x].data('Mut'), | |
parent: node.parent().data('id'), | |
BackgroundImage: node.children()[x].data('BackgroundImage'), | |
ZIndex: node.children()[x].data('ZIndex') | |
}, | |
position: { | |
x: node.children()[x].position('x'), | |
y: node.children()[x].position('y') | |
} | |
}); | |
} else { | |
nodes.push({ | |
group: "nodes", | |
data: { | |
LabelSize: node.children()[x].data('LabelSize'), | |
Type: node.children()[x].data('Type'), | |
Valign: node.children()[x].data('Valign'), | |
Width: node.children()[x].data('Width'), | |
Height: node.children()[x].data('Height'), | |
id: node.children()[x].data('id'), | |
name: node.children()[x].data('name'), | |
selected: node.children()[x].data('selected'), | |
Cnv: node.children()[x].data('Cnv'), | |
Rna: node.children()[x].data('Rna'), | |
Mut: node.children()[x].data('Mut'), | |
BackgroundImage: node.children()[x].data('BackgroundImage'), | |
ZIndex: node.children()[x].data('ZIndex') | |
}, | |
position: { | |
x: node.children()[x].position('x'), | |
y: node.children()[x].position('y') | |
} | |
}); | |
} | |
for (var j = 0; j < node.children()[x].connectedEdges().size(); j++) { | |
edges.push({ | |
group: "edges", | |
data: { | |
id: node.children()[x].connectedEdges()[j].data('id'), | |
Type: node.children()[x].connectedEdges()[j].data('Type'), | |
LineThickness: node.children()[x].connectedEdges()[j].data('LineThickness'), | |
EndArrow: node.children()[x].connectedEdges()[j].data('EndArrow'), | |
Coords: node.children()[x].connectedEdges()[j].data('Coords'), | |
ZOrder: node.children()[x].connectedEdges()[j].data('ZOrder'), | |
source: node.children()[x].connectedEdges()[j].data('source'), | |
target: node.children()[x].connectedEdges()[j].data('target'), | |
StartArrow: node.children()[x].connectedEdges()[j].data('StartArrow'), | |
CurveStyle: node.children()[x].connectedEdges()[j].data('CurveStyle'), | |
SegmentDistances: node.children()[x].connectedEdges()[j].data('SegmentDistances'), | |
SegmentWeights: node.children()[x].connectedEdges()[j].data('SegmentWeights'), | |
selected: node.children()[x].connectedEdges()[j].data('selected') | |
} | |
}) | |
} | |
unbundleRecursive(node.children()[x], parents, edges, nodes, rCounter); | |
} | |
} else if (rCounter > 1 && node.isParent()) { | |
for (var x = 0; x < node.children().size(); x++) { | |
if (node.length != 0) { | |
nodes.push({ | |
group: "nodes", | |
data: { | |
LabelSize: node.children()[x].data('LabelSize'), | |
Type: node.children()[x].data('Type'), | |
Valign: node.children()[x].data('Valign'), | |
Width: node.children()[x].data('Width'), | |
Height: node.children()[x].data('Height'), | |
id: node.children()[x].data('id'), | |
name: node.children()[x].data('name'), | |
selected: node.children()[x].data('selected'), | |
Cnv: node.children()[x].data('Cnv'), | |
Rna: node.children()[x].data('Rna'), | |
Mut: node.children()[x].data('Mut'), | |
parent: node.data('id'), | |
BackgroundImage: node.children()[x].data('BackgroundImage'), | |
ZIndex: node.children()[x].data('ZIndex') | |
}, | |
position: { | |
x: node.children()[x].position('x'), | |
y: node.children()[x].position('y') | |
} | |
}); | |
} else { | |
nodes.push({ | |
group: "nodes", | |
data: { | |
LabelSize: node.children()[x].data('LabelSize'), | |
Type: node.children()[x].data('Type'), | |
Valign: node.children()[x].data('Valign'), | |
Width: node.children()[x].data('Width'), | |
Height: node.children()[x].data('Height'), | |
id: node.children()[x].data('id'), | |
name: node.children()[x].data('name'), | |
selected: node.children()[x].data('selected'), | |
Cnv: node.children()[x].data('Cnv'), | |
Rna: node.children()[x].data('Rna'), | |
Mut: node.children()[x].data('Mut'), | |
BackgroundImage: node.children()[x].data('BackgroundImage'), | |
ZIndex: node.children()[x].data('ZIndex') | |
}, | |
position: { | |
x: node.children()[x].position('x'), | |
y: node.children()[x].position('y') | |
} | |
}); | |
} | |
for (var j = 0; j < node.children()[x].connectedEdges().size(); j++) { | |
edges.push({ | |
group: "edges", | |
data: { | |
id: node.children()[x].connectedEdges()[j].data('id'), | |
Type: node.children()[x].connectedEdges()[j].data('Type'), | |
LineThickness: node.children()[x].connectedEdges()[j].data('LineThickness'), | |
EndArrow: node.children()[x].connectedEdges()[j].data('EndArrow'), | |
Coords: node.children()[x].connectedEdges()[j].data('Coords'), | |
ZOrder: node.children()[x].connectedEdges()[j].data('ZOrder'), | |
source: node.children()[x].connectedEdges()[j].data('source'), | |
target: node.children()[x].connectedEdges()[j].data('target'), | |
StartArrow: node.children()[x].connectedEdges()[j].data('StartArrow'), | |
CurveStyle: node.children()[x].connectedEdges()[j].data('CurveStyle'), | |
SegmentDistances: node.children()[x].connectedEdges()[j].data('SegmentDistances'), | |
SegmentWeights: node.children()[x].connectedEdges()[j].data('SegmentWeights'), | |
selected: node.children()[x].connectedEdges()[j].data('selected') | |
} | |
}) | |
} | |
unbundleRecursive(node.children()[x], parents, edges, nodes, rCounter); | |
} | |
} | |
} | |
function recursiveBundle(node, edges, nodes) { | |
nodes.push({ | |
group: "nodes", | |
data: { | |
LabelSize: node.data('LabelSize'), | |
Type: node.data('Type'), | |
Valign: node.data('Valign'), | |
Width: node.data('Width'), | |
Height: node.data('Height'), | |
id: node.data('id'), | |
name: node.data('name'), | |
selected: node.data('selected'), | |
Cnv: node.data('Cnv'), | |
Rna: node.data('Rna'), | |
Mut: node.data('Mut'), | |
parent: node.data('parent'), | |
BackgroundImage: node.data('BackgroundImage'), | |
ZIndex: node.data('ZIndex') | |
}, | |
position: { | |
x: node.position('x'), | |
y: node.position('y') | |
} | |
}); | |
for (var j = 0; j < node.connectedEdges().size(); j++) { | |
edges.push({ | |
group: "edges", | |
data: { | |
id: node.connectedEdges()[j].data('id'), | |
Type: node.connectedEdges()[j].data('Type'), | |
LineThickness: node.connectedEdges()[j].data('LineThickness'), | |
EndArrow: node.connectedEdges()[j].data('EndArrow'), | |
Coords: node.connectedEdges()[j].data('Coords'), | |
ZOrder: node.connectedEdges()[j].data('ZOrder'), | |
source: node.connectedEdges()[j].data('source'), | |
target: node.connectedEdges()[j].data('target'), | |
StartArrow: node.connectedEdges()[j].data('StartArrow'), | |
CurveStyle: node.connectedEdges()[j].data('CurveStyle'), | |
SegmentDistances: node.connectedEdges()[j].data('SegmentDistances'), | |
SegmentWeights: node.connectedEdges()[j].data('SegmentWeights'), | |
selected: node.connectedEdges()[j].data('selected') | |
} | |
}) | |
} | |
for (var i = 0; i < node.children().size(); i++) { | |
recursiveBundle(node.children()[i], edges, nodes); | |
} | |
} | |
function unbundle(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var parents = []; | |
var nodes = []; | |
var edges = []; | |
var rCounter = 0; | |
for (var i = 0; i < selectedForEditNodes.size(); i++) { | |
unbundleRecursive(selectedForEditNodes[i], parents, edges, nodes, rCounter); | |
} | |
// Remove parents (in the instance that they haven't been removed!) | |
for (var i = 0; i < parents.length; i++) { | |
parents[i].remove(); | |
} | |
// Add new nodes | |
cy.add(nodes.concat(edges)); | |
postAddProcessing(); | |
saveState(); | |
} | |
function bundle(event) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var type = document.getElementById(parent + "-type-bundle").value; | |
var nodes = []; | |
var edges = []; | |
// Create new parent | |
nodes.push({ | |
group: "nodes", | |
data: { | |
LabelSize: 10, | |
Type: type, | |
Valign: "Middle", | |
Width: 80.75, | |
Height: 100, | |
id: "n" + nodeCounter, | |
name: "n" + nodeCounter, | |
selected: false, | |
BackgroundImage: "", | |
ZIndex: 0 | |
}, | |
position: { | |
x: 500, | |
y: 500 | |
} | |
}) | |
// Create copies of old nodes | |
for (var i = 0; i < selectedForEditNodes.size(); i++) { | |
if (!selectedForEditNodes[i].isChild()) { | |
nodes.push({ | |
group: "nodes", | |
data: { | |
LabelSize: selectedForEditNodes[i].data('LabelSize'), | |
Type: selectedForEditNodes[i].data('Type'), | |
Valign: selectedForEditNodes[i].data('Valign'), | |
Width: selectedForEditNodes[i].data('Width'), | |
Height: selectedForEditNodes[i].data('Height'), | |
id: selectedForEditNodes[i].data('id'), | |
name: selectedForEditNodes[i].data('name'), | |
selected: selectedForEditNodes[i].data('selected'), | |
Cnv: selectedForEditNodes[i].data('Cnv'), | |
Rna: selectedForEditNodes[i].data('Rna'), | |
Mut: selectedForEditNodes[i].data('Mut'), | |
parent: "n" + nodeCounter, | |
BackgroundImage: selectedForEditNodes[i].data('BackgroundImage'), | |
ZIndex: selectedForEditNodes[i].data('ZIndex') | |
}, | |
position: { | |
x: selectedForEditNodes[i].position('x'), | |
y: selectedForEditNodes[i].position('y') | |
} | |
}); | |
for (var j = 0; j < selectedForEditNodes[i].connectedEdges().size(); j++) { | |
edges.push({ | |
group: "edges", | |
data: { | |
id: selectedForEditNodes[i].connectedEdges()[j].data('id'), | |
Type: selectedForEditNodes[i].connectedEdges()[j].data('Type'), | |
LineThickness: selectedForEditNodes[i].connectedEdges()[j].data('LineThickness'), | |
EndArrow: selectedForEditNodes[i].connectedEdges()[j].data('EndArrow'), | |
Coords: selectedForEditNodes[i].connectedEdges()[j].data('Coords'), | |
ZOrder: selectedForEditNodes[i].connectedEdges()[j].data('ZOrder'), | |
source: selectedForEditNodes[i].connectedEdges()[j].data('source'), | |
target: selectedForEditNodes[i].connectedEdges()[j].data('target'), | |
StartArrow: selectedForEditNodes[i].connectedEdges()[j].data('StartArrow'), | |
CurveStyle: selectedForEditNodes[i].connectedEdges()[j].data('CurveStyle'), | |
SegmentDistances: selectedForEditNodes[i].connectedEdges()[j].data('SegmentDistances'), | |
SegmentWeights: selectedForEditNodes[i].connectedEdges()[j].data('SegmentWeights'), | |
selected: selectedForEditNodes[i].connectedEdges()[j].data('selected') | |
} | |
}) | |
} | |
} | |
if (selectedForEditNodes[i].isParent() || selectedForEditNodes[i].isChild()) { | |
recursiveBundle(selectedForEditNodes[i], edges, nodes); | |
} | |
} | |
selectedForEditNodes.remove(); | |
cy.add(nodes.concat(edges)); | |
postAddProcessing(); | |
if (!cy.elements("node[id = \"n" + nodeCounter + "\"]").isParent()) | |
cy.elements("node[id = \"n" + nodeCounter + "\"]").remove(); | |
nodeCounter++; | |
dialogBundle.dialog("close"); | |
saveState(); | |
} | |
function produceJSON(event) { | |
download(states[states.length - 1], "data.txt", "text/plain"); | |
} | |
function refreshPathwayList() { | |
var select = document.getElementById(parent + "-pathway-selector"); | |
while (select.firstChild) { | |
select.removeChild(select.firstChild); | |
} | |
$.get(services['pathwayFinder'], { | |
pathwayList: '1' | |
}, function (data) { | |
var obj = JSON.parse(data); | |
var el = document.createElement("option"); | |
el.textContent = "Select pathway"; | |
select.appendChild(el); | |
for (var i = 0; i < obj.length; i++) { | |
var opt = obj[i].NAME; | |
var val = obj[i].ID; | |
var el = document.createElement("option"); | |
el.textContent = opt; | |
el.value = val; | |
select.appendChild(el); | |
} | |
}); | |
} | |
function findPath(sid, vid) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
$.post(services['pathwayFinderUrl'], { | |
s: sid, | |
d: vid, | |
json: JSON.stringify(JSON.parse(states[states.length - 1])), | |
p: personId | |
}, function (yue_data) { | |
var result = JSON.parse(yue_data); | |
var table = document.getElementById(parent + "-inner-table"); | |
var length = document.getElementById(parent + "-inner-table").rows.length; | |
for (var n = 0; n < length; n++) { | |
table.deleteRow(0); | |
} | |
table.deleteTHead(); | |
for (var n = 0; n <= result.length; n++) { | |
var row = table.insertRow(); | |
var path = row.insertCell(0); | |
var rScore = row.insertCell(1); | |
var genes = row.insertCell(2) | |
var source = row.insertCell(3); | |
var destination = row.insertCell(4); | |
var person = row.insertCell(5); | |
var consistent = row.insertCell(6); | |
var mScore = row.insertCell(7); | |
var mFdr = row.insertCell(8) | |
var lowP = row.insertCell(9); | |
var consistentLowP = row.insertCell(10); | |
// Add some text to the new cells: | |
if (n == 0) { | |
path.innerHTML = "<i><h5><small>paths</small></h5></i>"; | |
rScore.innerHTML = "<i><h5><small>R-Score</small></h5></i>"; | |
genes.innerHTML = "<i><h5><small>Genes</small></h5></i>"; | |
source.innerHTML = "<i><h5><small>Source</small></h5></i>"; | |
destination.innerHTML = "<i><h5><small>Destination</small></h5></i>"; | |
person.innerHTML = "<i><h5><small>Person</small></h5></i>"; | |
consistent.innerHTML = "<i><h5><small>Consistent</small></h5></i>"; | |
mScore.innerHTML = "<i><h5><small>M-Score</small></h5></i>"; | |
mFdr.innerHTML = "<i><h5><small>M-FDR</small></h5></i>"; | |
lowP.innerHTML = "<i><h5><small>LowP</small></h5></i>" | |
consistentLowP.innerHTML = "<i><h5><small>Consistent Low P</small></h5></i>" | |
} else { | |
var btn = document.createElement("button"); | |
var t = document.createTextNode((n - 1).toString()); | |
btn.className = "btn btn-link"; | |
btn.appendChild(t); | |
btn.addEventListener('click', function (event) { | |
var k = parseInt(event.currentTarget.innerHTML); | |
cy.$('node').removeClass('focused'); | |
cy.$('edge').removeClass('focused'); | |
cy.$('node').addClass('unfocused'); | |
cy.$('edge').addClass('unfocused'); | |
for (var j = 0; j < result[k].edges.length; j++) { | |
cy.elements("edge[id = \"" + result[k].edges[j] + "\"]").addClass('focused'); | |
var sourceNode = cy.elements("edge[id = \"" + result[k].edges[j] + "\"]").data('source'); | |
var targetNode = cy.elements("edge[id = \"" + result[k].edges[j] + "\"]").data('target'); | |
cy.elements("node[id = \"" + sourceNode + "\"]").addClass('focused'); | |
cy.elements("node[id = \"" + targetNode + "\"]").addClass('focused'); | |
} | |
}); | |
path.appendChild(btn); | |
rScore.innerHTML = "<h5><small>" + result[n - 1].rscore + "</small></h5>"; | |
genes.innerHTML = "<h5><small>" + Object.keys(result[n - 1].genes) + "</small></h5>"; | |
source.innerHTML = "<h5><small>" + result[n - 1].source + "</small></h5>"; | |
destination.innerHTML = "<h5><small>" + result[n - 1].destination + "</small></h5>"; | |
person.innerHTML = "<h5><small>" + result[n - 1].person + "</small></h5>"; | |
consistent.innerHTML = "<h5><small>" + result[n - 1].consistent + "</small></h5>"; | |
mScore.innerHTML = "<h5><small>" + result[n - 1].mscore + "</small></h5>"; | |
mFdr.innerHTML = "<h5><small>" + result[n - 1].mFDR + "</small></h5>"; | |
lowP.innerHTML = "<h5><small>" + result[n - 1].lowp + "</small></h5>"; | |
consistentLowP.innerHTML = "<h5><small>" + result[n - 1].consistent_lowp + "</small></h5>"; | |
} | |
} | |
sorttable.makeSortable(table); | |
dialogTable.dialog("open"); | |
dialogPathfind.dialog("close"); | |
}); | |
} | |
function findPathsAll() { | |
findPath(null, null); | |
} | |
function findPathOne() { | |
var sid = orderedSelectedNodes[0]._private.data['id']; | |
var vid = orderedSelectedNodes[1]._private.data['id']; | |
findPath(sid, vid); | |
} | |
function saveState() { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var nodes = cy.$('node'); | |
var edges = cy.$('edge'); | |
var data = '{"format_version" : "1.0","generated_by" : "cytoscape-3.2.1","target_cytoscapejs_version" : "~2.1","data" :' + JSON.stringify(header) + ',"elements" : {"nodes" :' + JSON.stringify(nodes.jsons()) + ',"edges" :' + JSON.stringify(edges.jsons()) + '}}'; | |
states.push(data); | |
} | |
function undo() { | |
if (states.length > 1) { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
cy.$('node').remove(); | |
cy.$('edge').remove(); | |
stateRecycle.push(states.pop()); | |
var obj = JSON.parse(states[states.length - 1]); | |
cy.add(obj.elements); | |
postAddProcessing(); | |
} | |
} | |
function redo() { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
if (stateRecycle.length > 1) { | |
cy.$('node').remove(); | |
cy.$('edge').remove(); | |
states.push(stateRecycle.pop()); | |
var obj = JSON.parse(states[states.length - 1]); | |
cy.add(obj.elements) | |
postAddProcessing(); | |
} | |
} | |
function clone(obj) { | |
if (null == obj || "object" != typeof obj) | |
return obj; | |
var copy = obj.constructor(); | |
for (var attr in obj) { | |
if (obj.hasOwnProperty(attr)) | |
copy[attr] = obj[attr]; | |
} | |
return copy; | |
} | |
function editEdgeArrowType() { | |
var arrowType = document.getElementById(parent + "-arrow-type-edge").value; | |
selectedForEditEdges.data('StartArrow', arrowType); | |
selectedForEditEdges.data('EndArrow', arrowType); | |
saveState(); | |
} | |
function editEdgeLineType() { | |
var lineType = document.getElementById(parent + "-line-type-edge").value; | |
selectedForEditEdges.data('Type', lineType); | |
saveState(); | |
} | |
function editEdgeDirection() { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
if (document.getElementById(parent + '-direction').checked) { | |
var edges = []; | |
for (var i = 0; i < selectedForEditEdges.length; i++) { | |
edges.push({ | |
group: "edges", | |
data: { | |
id: selectedForEditEdges[i].data('id'), | |
Type: selectedForEditEdges[i].data('Type'), | |
LineThickness: selectedForEditEdges[i].data('LineThickness'), | |
EndArrow: selectedForEditEdges[i].data('EndArrow'), | |
Coords: selectedForEditEdges[i].data('Coords'), | |
ZOrder: selectedForEditEdges[i].data('ZOrder'), | |
source: selectedForEditEdges[i].data('target'), | |
target: selectedForEditEdges[i].data('source'), | |
StartArrow: selectedForEditEdges[i].data('StartArrow'), | |
selected: selectedForEditEdges[i].data('Selected') | |
} | |
}) | |
} | |
selectedForEditEdges.remove(); | |
cy.add(edges) | |
postAddProcessing(); | |
} | |
dialogEdge.dialog("close"); | |
saveState(); | |
} | |
function toggleEdgeStyle() { | |
if (document.getElementById(parent + '-segmented-enable-disable').value == "enable") | |
edgeEnableSegmentedStyle(); | |
else | |
edgeDisableSegmentedStyle(); | |
} | |
function edgeEnableSegmentedStyle() { | |
var SegmentDistances = document.getElementById(parent + "-segment-distances").value; | |
var SegmentWeights = document.getElementById(parent + "-segment-weights").value; | |
selectedForEditEdges.style('curve-style', 'segments'); | |
selectedForEditEdges.style('segment-distances', SegmentDistances); | |
selectedForEditEdges.style('segment-weights', SegmentWeights); | |
selectedForEditEdges.data('CurveStyle', 'segments'); | |
selectedForEditEdges.data('SegmentDistances', SegmentDistances); | |
selectedForEditEdges.data('SegmentWeights', SegmentWeights); | |
saveState(); | |
} | |
function edgeDisableSegmentedStyle() { | |
selectedForEditEdges.style('curve-style', 'bezier'); | |
selectedForEditEdges.data('CurveStyle', 'bezier'); | |
saveState(); | |
} | |
function moveElementtoBackground(event) { | |
selectedForEditNodes.style("z-index", 0); | |
selectedForEditNodes.data("ZIndex", 0); | |
selectedForEditEdges.style("z-index", 0); | |
selectedForEditEdges.data("zOrder", 0); | |
saveState(); | |
} | |
function moveElementtoForeground(event) { | |
highestZOrder++; | |
selectedForEditNodes.style("z-index", highestZOrder); | |
selectedForEditNodes.data("ZIndex", highestZOrder); | |
selectedForEditEdges.style("z-index", highestZOrder); | |
selectedForEditEdges.data("zOrder", highestZOrder); | |
saveState(); | |
} | |
function removeBackgroundImageOnNode(event) { | |
selectedForEditNodes.removeStyle("background-image"); | |
selectedForEditNodes.data("BackgroundImage", ""); | |
saveState(); | |
} | |
function onChangeBackgroundImageOnNode(event) { | |
var reader = new FileReader(); | |
reader.onload = onBackgroundImageReaderLoad; | |
reader.readAsDataURL(event.target.files[0]); | |
saveState(); | |
} | |
function onBackgroundImageReaderLoad() { | |
var img = event.target.result; | |
selectedForEditNodes.data('Type', "image"); | |
selectedForEditNodes.data("BackgroundImage", img); | |
selectedForEditNodes.style("background-image", img); | |
saveState(); | |
} | |
function editNodeWidth() { | |
var width = document.getElementById(parent + "-width").value; | |
selectedForEditNodes.data('Width', width); | |
saveState(); | |
} | |
function editNodeHeight() { | |
var height = document.getElementById(parent + "-height").value; | |
selectedForEditNodes.data('Height', height); | |
saveState(); | |
} | |
function editNodeType() { | |
var type = document.getElementById(parent + "-type-node").value; | |
selectedForEditNodes.data('Type', type); | |
saveState(); | |
} | |
function editNodeName() { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
var name = document.getElementById(parent + "-node-name").value; | |
if (name.indexOf(',') == -1) | |
selectedForEditNodes.data('name', name); | |
else { | |
var node = []; | |
var names = name.split(','); | |
for (var i = 0; selectedForEditNodes.length > i; i++) { | |
selectedForEditNodes[i].data("Type", "bundleOne"); | |
var xGap = 0; | |
var yGap = 0; | |
for (var j = 0; names.length > j; j++) { | |
if (j % 5 == 0) { | |
xGap = 0 | |
yGap += 10 | |
} else { | |
xGap += 10 | |
} | |
var newPositionX = selectedForEditNodes[i].position("x") + xGap; | |
var newPositionY = selectedForEditNodes[i].position("y") + yGap; | |
node.push({ | |
group: "nodes", | |
data: { | |
LabelSize: 10, | |
Type: "circle", | |
Valign: "Middle", | |
Width: 10, | |
Height: 10, | |
id: "n" + nodeCounter, | |
name: names[j], | |
selected: false, | |
BackgroundImage: "", | |
ZIndex: 0, | |
parent: selectedForEditNodes[i].data("id") | |
}, | |
position: { | |
x: newPositionX, | |
y: newPositionY | |
} | |
}) | |
nodeCounter++; | |
} | |
cy.add(node); | |
postAddProcessing(); | |
selectedForEditNodes[i].descendants().ungrabify(); | |
saveState(); | |
} | |
} | |
} | |
function editNodeMut() { | |
var Mut = document.getElementById(parent + "-mut").value; | |
selectedForEditNodes.data('Mut', Mut); | |
saveState(); | |
} | |
function editNodeCnv() { | |
var Cnv = document.getElementById(parent + "-cnv").value; | |
selectedForEditNodes.data('Cnv', Cnv); | |
saveState(); | |
} | |
function editNodeRna() { | |
var Rna = document.getElementById(parent + "-rna").value; | |
selectedForEditNodes.data('Cnv', Rna); | |
saveState(); | |
} | |
function editPersonId() { | |
id = document.getElementById(parent + "-configure-person-id").value; | |
setPersonId(id); | |
} | |
function setPersonId(id) { | |
personId = id; | |
var title = document.getElementById(parent + "-pathway-title") | |
title.innerHTML = pathName + " <small>" + personId + "</small>"; | |
} | |
function dialogNewPathwayOpen(event) { | |
dialogNewPathway.dialog("open"); | |
} | |
function dialogBundleOpen(event) { | |
dialogBundle.dialog("open"); | |
} | |
function dialogPathfindOpen(event) { | |
dialogPathfind.dialog("open"); | |
} | |
function dialogPathwaySaveAsOpen(event) { | |
dialogPathwaySaveAs.dialog("open"); | |
} | |
function dialogPathwayConfigureOpen(event) { | |
dialogPathwayConfigure.dialog("open"); | |
} | |
function findObject(event) { | |
var val = event.target.value; | |
$.post(services['objectFinder'], { | |
pattern: JSON.stringify(coloredNodes) | |
}, function (data) { | |
if (data == "[]") | |
data = '{"X1":{"percentage":0.66667,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X2":{"percentage":0.33333,"Rna_distance":30.44444,"Cnv_distance":0,"Mut_distance":0},"X9":{"percentage":0.66667,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X29":{"percentage":0.66667,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X24":{"percentage":0.33333,"Rna_distance":36,"Cnv_distance":0,"Mut_distance":0},"X34":{"percentage":0.66667,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X38":{"percentage":0.33333,"Rna_distance":30.44444,"Cnv_distance":0,"Mut_distance":0},"X40":{"percentage":0.66667,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X45":{"percentage":0.66667,"Rna_distance":36,"Cnv_distance":0,"Mut_distance":0},"X46":{"percentage":0.66667,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X48":{"percentage":1,"Rna_distance":36,"Cnv_distance":0,"Mut_distance":0},"X53":{"percentage":1,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X59":{"percentage":0.66667,"Rna_distance":36,"Cnv_distance":0,"Mut_distance":0},"X156":{"percentage":0.33333,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0},"X15":{"percentage":0.33333,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":2},"X22":{"percentage":0.33333,"Rna_distance":0,"Cnv_distance":0,"Mut_distance":0}}' | |
var array = data.split("},"); | |
for (var i = 0; i < array.length; i++) { | |
array[i] = array[i].split(":{"); | |
array[i][1] = array[i][1].split(","); | |
array[i][0] = array[i][0].replace(/\W/g, ''); | |
for (var j = 0; j < array[i][1].length; j++) { | |
array[i][1][j] = array[i][1][j].replace(/[^\d.-]/g, ''); | |
} | |
} | |
var table = document.getElementById(parent + "-inner-table"); | |
var length = document.getElementById(parent + "-inner-table").rows.length; | |
for (var n = 0; n < length; n++) { | |
table.deleteRow(0); | |
} | |
for (var n = 0; n <= array.length; n++) { | |
var row = table.insertRow(); | |
var name = row.insertCell(0) | |
var percentage = row.insertCell(1); | |
var RnaDistance = row.insertCell(2); | |
var CnvDistance = row.insertCell(3); | |
var MutDistance = row.insertCell(4); | |
// Add some text to the new cells: | |
if (n == 0) { | |
name.innerHTML = "<i><h3>name</h3></i>"; | |
percentage.innerHTML = "<i><h3>percentage</h3></i>"; | |
RnaDistance.innerHTML = "<i><h3>Rna</h3></i>"; | |
CnvDistance.innerHTML = "<i><h3>Cnv</h3></i>"; | |
MutDistance.innerHTML = "<i><h3>Mut</h3></i>"; | |
} else { | |
name.innerHTML = array[n - 1][0]; | |
percentage.innerHTML = array[n - 1][1][0]; | |
RnaDistance.innerHTML = array[n - 1][1][1]; | |
CnvDistance.innerHTML = array[n - 1][1][2]; | |
MutDistance.innerHTML = array[n - 1][1][3]; | |
} | |
} | |
//document.getElementById(parent + "-dialog-table").innerHTML = data; | |
dialogTable.dialog("open") | |
}); | |
} | |
function visualPathway(obj) { | |
$('#' + parent + '-cy').cytoscape({ | |
style: cytoscape.stylesheet() | |
// node elements default css (unselected state) | |
.selector('node').css({ | |
'content': 'data(name)', | |
'padding-left': 2, | |
'padding-right': 2, | |
'font-family': 'data(LabelSize)', | |
'background-image-opacity': .75, | |
'opacity': 0.75, | |
'text-opacity': 0.75 | |
}).selector('node[Type="1"]').css({ | |
'shape': 'roundrectangle', | |
'background-color': 'lightgray', | |
'color': 'black', | |
'text-valign': 'center', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="2"]').css({ | |
'shape': 'roundrectangle', | |
'background-color': 'gray', | |
'color': 'black', | |
'text-valign': 'center', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="3"]').css({ | |
'shape': 'ellipse', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="4"]').css({ | |
'shape': 'ellipse', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="5"]').css({ | |
'shape': 'rectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="6"]').css({ | |
'shape': 'circle', | |
'radius': 5, | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'dotted', | |
'border-width': 1 | |
}).selector('node[Type="7"]').css({ | |
'shape': 'circle', | |
'radius': 5, | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'dashed', | |
'border-width': 1 | |
}).selector('node[Type="8"]').css({ | |
'shape': 'rectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'dashed', | |
'border-width': 1 | |
}).selector('node[Type="9"]').css({ | |
'shape': 'rectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'dotted', | |
'border-width': 1 | |
}).selector('node[Type="10"]').css({ | |
'shape': 'rectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'double', | |
'border-width': 1 | |
}).selector('node[Type="11"]').css({ | |
'shape': 'roundrectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="12"]').css({ | |
'shape': 'triangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="13"]').css({ | |
'shape': 'rectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="14"]').css({ | |
'shape': 'circle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="15"]').css({ | |
'shape': 'ellipse', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="16"]').css({ | |
'shape': 'pentagon', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="17"]').css({ | |
'shape': 'hexagon', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="18"]').css({ | |
'shape': 'heptagon', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="19"]').css({ | |
'shape': 'octagon', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="20"]').css({ | |
'shape': 'star', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="21"]').css({ | |
'shape': 'diamond', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="22"]').css({ | |
'shape': 'vee', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="23"]').css({ | |
'shape': 'rhomboid', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="24"]').css({ | |
'shape': 'rectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-color': 'white', | |
'border-color': 'white', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Type="image"]').css({ | |
'shape': 'rectangle', | |
'width': 'data(Width)', | |
'height': 'data(Height)', | |
'color': 'black', | |
'text-valign': 'center', | |
'background-opacity': 0, | |
'border-color': 'white', | |
'border-style': 'solid', | |
'border-width': 1, | |
'background-fit': 'contain' | |
}).selector('node[Shape="Brace"]').css({ | |
'shape': 'rectangle', | |
'width': '1', | |
'height': 'data(Width)', | |
'background-color': 'black', | |
'color': 'black', | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('node[Rna < 0]').css({ | |
'background-color': 'lightgreen', | |
'color': 'black' | |
}).selector('node[Rna > 0]').css({ | |
'background-color': 'lightsalmon', | |
'color': 'black' | |
}).selector('node[Cnv < 0]').css({ | |
'border-color': 'mediumpurple', | |
'border-width': 3 | |
}).selector('node[Cnv > 0]').css({ | |
'border-color': 'red', | |
'border-width': 3 | |
}).selector('node[Mut > 0]').css({ | |
'shadow-opacity': 1, | |
'shadow-color': 'red', | |
'border-width': 1 | |
}) | |
// edge elements default css (unselected) | |
.selector('edge').css({ | |
'line-color': 'black', | |
'line-style': 'solid', | |
'opacity': 0.75, | |
'text-opacity': 0.75, | |
'width': 1 | |
}).selector('edge[EndArrow="1"]').css({ | |
'target-arrow-shape': 'line', | |
'target-arrow-color': 'black', | |
'target-arrow-fill': 'filled' | |
}).selector('edge[EndArrow="2"]').css({ | |
'target-arrow-shape': 'triangle', | |
'target-arrow-color': 'black', | |
'target-arrow-fill': 'filled' | |
}).selector('edge[EndArrow="3"]').css({ | |
'target-arrow-shape': 'tee', | |
'target-arrow-color': 'black', | |
'target-arrow-fill': 'filled' | |
}).selector('edge[EndArrow="4"]').css({ | |
'target-arrow-shape': 'diamond', | |
'target-arrow-color': 'black', | |
'target-arrow-fill': 'filled' | |
}).selector('edge[Type="1"]').css({ | |
'line-style': 'solid' | |
}).selector('edge[Type="2"]').css({ | |
'line-style': 'dashed' | |
}).selector('edge[Type="3"]').css({ | |
'line-style': 'dotted' | |
}) | |
// node & edge elements (selected state) | |
.selector('edge:selected').css({ | |
'background-color': 'green', | |
'line-color': 'green', | |
'target-arrow-color': 'green', | |
'source-arrow-color': 'green', | |
'opacity': 1.0, | |
'text-opacity': 1.0 | |
}).selector('node:selected').css({ | |
'background-color': 'green', | |
'opacity': 1.0, | |
'text-opacity': 1.0 | |
}) | |
// query purpose | |
.selector('.green_bg').css({ | |
'background-color': 'lightgreen', | |
'color': 'black' | |
}).selector('.red_bg').css({ | |
'background-color': 'lightsalmon', | |
'color': 'black' | |
}).selector('.white_bg').css({ | |
'background-color': 'white', | |
'color': 'black' | |
}).selector('.purple_border').css({ | |
'border-color': 'mediumpurple', | |
'border-width': 3 | |
}).selector('.red_border').css({ | |
'border-color': 'red', | |
'border-width': 3 | |
}).selector('.black_border').css({ | |
'border-color': 'black', | |
'border-width': 3 | |
}).selector('.red_shadow').css({ | |
'shadow-opacity': 1, | |
'shadow-color': 'red', | |
'border-width': 1 | |
}).selector('.no_shadow').css({ | |
'shadow-opacity': 0, | |
'shadow-color': 'red', | |
'border-width': 1 | |
}) | |
// collapse | |
.selector('.collapsed').css({ | |
'opacity': 0.01, | |
'width': .01, | |
'height': .01 | |
}).selector('.collapsed_informative').css({ | |
'shape': 'circle', | |
'width': 6, | |
'height': 6, | |
'text-opacity': 0, | |
'border-color': 'black', | |
'border-style': 'solid', | |
'border-width': 1 | |
}).selector('.unfocused').css({ | |
'opacity': 0.2 | |
}).selector('.focused').css({ | |
'opacity': 1.0 | |
}), | |
layout: { | |
name: 'preset', | |
padding: 10 | |
}, | |
ready: function () { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
preAddProcessing(obj); | |
$('#' + parent + '-select-bundleOne').removeClass('disabled'); | |
$('#' + parent + '-add-node').removeClass('disabled'); | |
$('#' + parent + '-add-edge').removeClass('disabled'); | |
$('#' + parent + '-delete-elements').removeClass('disabled'); | |
$('#' + parent + '-bundle').removeClass('disabled'); | |
$('#' + parent + '-unbundle').removeClass('disabled'); | |
$('#' + parent + '-collapse').removeClass('disabled'); | |
$('#' + parent + '-collapse-informative').removeClass('disabled'); | |
$('#' + parent + '-expand-informative').removeClass('disabled'); | |
$('#' + parent + '-expand').removeClass('disabled'); | |
$('#' + parent + '-findpath').removeClass('disabled'); | |
$('#' + parent + '-find-object').removeClass('disabled'); | |
$('#' + parent + '-pathway-save').removeClass('disabled'); | |
$('#' + parent + '-pathway-saveAs').removeClass('disabled'); | |
$('#' + parent + '-produce-JSON').removeClass('disabled'); | |
$('#' + parent + '-undo').removeClass('disabled'); | |
$('#' + parent + '-redo').removeClass('disabled'); | |
$('#' + parent + '-duplicate-nodes').removeClass('disabled'); | |
$('#' + parent + '-config-pathway').removeClass('disabled'); | |
$('#' + parent + '-find-paths-all-drop').removeClass('disabled'); | |
cy.add(obj.elements); | |
cy.center(); | |
cy.fit(); | |
postAddProcessing(); | |
// custom events | |
var tappedBefore = null; | |
cy.on('tap', function (event) { | |
var tappedNow = event.cyTarget; | |
setTimeout(function () { | |
tappedBefore = null; | |
}, 300); | |
if (tappedBefore === tappedNow) { | |
tappedNow.trigger('doubleTap'); | |
tappedBefore = null; | |
} else { | |
tappedBefore = tappedNow; | |
} | |
}); | |
// custom event handlers | |
cy.on('click', 'node', function (event) { | |
if (orderedSelectedNodes.length < 2) | |
orderedSelectedNodes.push(event.cyTarget); | |
else | |
orderedSelectedNodes.shift(); | |
orderedSelectedNodes.push(event.cyTarget); | |
}); | |
cy.on('cxttap', 'node', function (event) { | |
target = event.cyTarget; | |
target.select(); | |
selectedForEditNodes = cy.$('node:selected'); | |
dialogNode.dialog("open"); | |
console.log(target.data('id')); | |
}); | |
cy.on('cxttap', 'edge', function (event) { | |
target = event.cyTarget; | |
target.select(); | |
selectedForEditEdges = cy.$('edge:selected'); | |
dialogEdge.dialog("open"); | |
console.log(target.data('id')); | |
}); | |
cy.on('doubleTap', 'node', function (event) { | |
}); | |
cy.on('doubleTap', 'edge', function (event) { | |
}); | |
cy.on('select', 'node', function (event) { | |
selectedForEditNodes = cy.$('node:selected'); | |
// saveState(); | |
}); | |
cy.on('unselect', 'node', function (event) { | |
selectedForEditNodes = cy.$('node:selected'); | |
// saveState(); | |
}); | |
cy.on('select', 'edge', function (event) { | |
selectedForEditEdges = cy.$('edge:selected'); | |
// saveState(); | |
}); | |
cy.on('unselect', 'edge', function (event) { | |
selectedForEditEdges = cy.$('edge:selected'); | |
// saveState(); | |
}); | |
cy.on('data', 'node', function (event) { | |
// saveState(); | |
}); | |
cy.on('style', 'node', function (event) { | |
// saveState(); | |
}); | |
cy.on('grab', 'node', function () { | |
if (this.hasClass("collapsed") || this.hasClass("collapsed_informative")) { | |
this.ungrabify(); | |
} | |
if (this.isParent() && this.children().length > 0) { | |
this.grabify(); | |
} | |
}); | |
cy.on('free', 'node', function () { | |
if (this.hasClass("collapsed") || this.hasClass("collapsed_informative")) { | |
this.grabify(); | |
} | |
}); | |
saveState(); | |
if (typeof (self.sprayData) != "undefined") | |
sprayColor(self.sprayData); | |
}, | |
// initial viewport state: | |
zoom: 1, | |
pan: { | |
x: 0, | |
y: 0 | |
}, | |
// interaction options: | |
minZoom: 1e-50, | |
maxZoom: 1e50, | |
zoomingEnabled: true, | |
userZoomingEnabled: true, | |
panningEnabled: true, | |
userPanningEnabled: true, | |
boxSelectionEnabled: true, | |
selectionType: 'additive', | |
touchTapThreshold: 8, | |
desktopTapThreshold: 4, | |
autolock: false, | |
autoungrabify: false, | |
autounselectify: false, | |
// rendering options: | |
headless: false, | |
styleEnabled: true, | |
hideEdgesOnViewport: false, | |
hideLabelsOnViewport: false, | |
textureOnViewport: false, | |
motionBlur: false, | |
motionBlurOpacity: 0.2, | |
wheelSensitivity: 0.2, | |
pixelRatio: 1, | |
initrender: function (evt) {/* ... */ | |
}, | |
renderer: {/* ... */} | |
}); | |
} | |
dialogTable = $("#" + parent + "-dialog-table").dialog({ | |
autoOpen: false, | |
height: 300, | |
width: 350, | |
buttons: { | |
Cancel: function () { | |
dialogTable.dialog("close"); | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
cy.$('node').removeClass("unfocused"); | |
cy.$('edge').removeClass("focused"); | |
} | |
}, | |
close: function () { | |
var cy = $('#' + parent + '-cy').cytoscape('get'); | |
cy.$('node').removeClass("unfocused"); | |
cy.$('edge').removeClass("focused"); | |
} | |
}); | |
dialogNode = $("#" + parent + "-dialog-form-node").dialog({ | |
open: function (event) { | |
if (!target.isParent()) { | |
document.getElementById(parent + "-select-bundleOne").disabled = true; | |
document.getElementById(parent + "-select-bundleTwo").disabled = true; | |
document.getElementById(parent + "-select-gene").disabled = false; | |
document.getElementById(parent + "-select-geneProduct").disabled = false; | |
document.getElementById(parent + "-select-protein").disabled = false; | |
document.getElementById(parent + "-select-rna").disabled = false; | |
document.getElementById(parent + "-select-mircoRna").disabled = false; | |
document.getElementById(parent + "-select-kinase").disabled = false; | |
document.getElementById(parent + "-select-ligand").disabled = false; | |
document.getElementById(parent + "-select-receptor").disabled = false; | |
document.getElementById(parent + "-select-biologicalProcess").disabled = false; | |
document.getElementById(parent + "-select-triangle").disabled = false; | |
document.getElementById(parent + "-select-rectangle").disabled = false; | |
document.getElementById(parent + "-select-circle").disabled = false; | |
document.getElementById(parent + "-select-ellipse").disabled = false; | |
document.getElementById(parent + "-select-pentagon").disabled = false; | |
document.getElementById(parent + "-select-hexagon").disabled = false; | |
document.getElementById(parent + "-select-heptagon").disabled = false; | |
document.getElementById(parent + "-select-octagon").disabled = false; | |
document.getElementById(parent + "-select-star").disabled = false; | |
document.getElementById(parent + "-select-diamond").disabled = false; | |
document.getElementById(parent + "-select-vee").disabled = false; | |
document.getElementById(parent + "-select-rhomboid").disabled = false; | |
document.getElementById(parent + "-select-label").disabled = false; | |
} else { | |
document.getElementById(parent + '-select-bundleOne').disabled = false; | |
document.getElementById(parent + '-select-bundleTwo').disabled = false; | |
document.getElementById(parent + "-select-gene").disabled = true; | |
document.getElementById(parent + "-select-geneProduct").disabled = true; | |
document.getElementById(parent + "-select-protein").disabled = true; | |
document.getElementById(parent + "-select-rna").disabled = true; | |
document.getElementById(parent + "-select-mircoRna").disabled = true; | |
document.getElementById(parent + "-select-kinase").disabled = true; | |
document.getElementById(parent + "-select-ligand").disabled = true; | |
document.getElementById(parent + "-select-receptor").disabled = true; | |
document.getElementById(parent + "-select-biologicalProcess").disabled = true; | |
document.getElementById(parent + "-select-triangle").disabled = true; | |
document.getElementById(parent + "-select-rectangle").disabled = true; | |
document.getElementById(parent + "-select-circle").disabled = true; | |
document.getElementById(parent + "-select-ellipse").disabled = true; | |
document.getElementById(parent + "-select-pentagon").disabled = true; | |
document.getElementById(parent + "-select-hexagon").disabled = true; | |
document.getElementById(parent + "-select-heptagon").disabled = true; | |
document.getElementById(parent + "-select-octagon").disabled = true; | |
document.getElementById(parent + "-select-star").disabled = true; | |
document.getElementById(parent + "-select-diamond").disabled = true; | |
document.getElementById(parent + "-select-vee").disabled = true; | |
document.getElementById(parent + "-select-rhomboid").disabled = true; | |
document.getElementById(parent + "-select-label").disabled = true; | |
} | |
document.getElementById(parent + "-node-name").value = target.data('name'); | |
document.getElementById(parent + "-width").value = target.data('Width'); | |
document.getElementById(parent + "-height").value = target.data('Height'); | |
document.getElementById(parent + "-type-node").value = target.data('Type'); | |
if (typeof (target.data('Rna')) != "undefined") | |
document.getElementById(parent + "-rna").value = target.data('Rna'); | |
else | |
document.getElementById(parent + "-rna").value = '0'; | |
if (typeof (target.data('Cnv')) != "undefined") | |
document.getElementById(parent + "-cnv").value = target.data('Cnv'); | |
else | |
document.getElementById(parent + "-cnv").value = '0'; | |
if (typeof (target.data('Mut')) != "undefined") | |
document.getElementById(parent + "-mut").value = target.data('Mut'); | |
else | |
document.getElementById(parent + "-mut").value = '0'; | |
}, | |
autoOpen: false, | |
height: 500, | |
width: 600, | |
resizable: false, | |
buttons: { | |
Cancel: function () { | |
dialogNode.dialog("close"); | |
} | |
}, | |
close: function () { | |
} | |
}); | |
dialogEdge = $("#" + parent + "-dialog-form-edge").dialog({ | |
autoOpen: false, | |
height: 500, | |
width: 600, | |
resizable: false, | |
buttons: { | |
Cancel: function () { | |
dialogEdge.dialog("close"); | |
} | |
}, | |
close: function () { | |
} | |
}); | |
dialogPathfind = $("#" + parent + "-dialog-form-find-path").dialog({ | |
open: function (event) { | |
document.getElementById(parent + "-sid").value = orderedSelectedNodes[0]._private.data['name']; | |
document.getElementById(parent + "-vid").value = orderedSelectedNodes[1]._private.data['name']; | |
}, | |
autoOpen: false, | |
height: 300, | |
width: 350, | |
buttons: { | |
Cancel: function () { | |
dialogPathfind.dialog("close"); | |
} | |
}, | |
close: function () { | |
} | |
}); | |
dialogPathwayConfigure = $("#" + parent + "-dialog-form-configure-pathway").dialog({ | |
open: function (event) { | |
document.getElementById(parent + "-configure-person-id").value = personId; | |
}, | |
autoOpen: false, | |
height: 300, | |
width: 350, | |
buttons: { | |
Cancel: function () { | |
dialogPathwayConfigure.dialog("close"); | |
} | |
}, | |
close: function () { | |
} | |
}); | |
dialogPathwaySaveAs = $("#" + parent + "-dialog-form-save-as-pathway").dialog({ | |
autoOpen: false, | |
height: 300, | |
width: 350, | |
buttons: { | |
"submit": saveAsPathway, | |
Cancel: function () { | |
dialogPathwaySaveAs.dialog("close"); | |
} | |
}, | |
close: function () { | |
} | |
}); | |
dialogNewPathway = $("#" + parent + "-dialog-form-new-pathway").dialog({ | |
autoOpen: false, | |
height: 300, | |
width: 350, | |
buttons: { | |
"submit": newPathway, | |
Cancel: function () { | |
dialogNewPathway.dialog("close"); | |
} | |
}, | |
close: function () { | |
} | |
}); | |
dialogBundle = $("#" + parent + "-dialog-bundle").dialog({ | |
autoOpen: false, | |
height: 300, | |
width: 350, | |
buttons: { | |
"submit": bundle, | |
Cancel: function () { | |
dialogBundle.dialog("close"); | |
} | |
}, | |
close: function () { | |
} | |
}); | |
refreshPathwayList(); | |
//load data local | |
document.getElementById(parent + '-file-pathway').addEventListener('change', onChangePathwayFile); | |
document.getElementById(parent + '-file-coloring').addEventListener('change', onChangeColoringFile); | |
//edit node(s) | |
document.getElementById(parent + '-background-image').addEventListener('change', onChangeBackgroundImageOnNode); | |
document.getElementById(parent + '-background-image-remove').addEventListener('click', removeBackgroundImageOnNode); | |
document.getElementById(parent + '-node-move-to-background').addEventListener('click', moveElementtoBackground); | |
document.getElementById(parent + '-node-move-to-foreground').addEventListener('click', moveElementtoForeground); | |
document.getElementById(parent + '-node-name-apply').addEventListener('click', editNodeName); | |
document.getElementById(parent + '-height-apply').addEventListener('click', editNodeHeight); | |
document.getElementById(parent + '-width-apply').addEventListener('click', editNodeWidth); | |
document.getElementById(parent + '-type-node-apply').addEventListener('click', editNodeType); | |
document.getElementById(parent + '-rna-apply').addEventListener('click', editNodeRna); | |
document.getElementById(parent + '-cnv-apply').addEventListener('click', editNodeCnv); | |
document.getElementById(parent + '-mut-apply').addEventListener('click', editNodeMut); | |
//edit edge(s) | |
document.getElementById(parent + '-edge-move-to-background').addEventListener('click', moveElementtoBackground); | |
document.getElementById(parent + '-edge-move-to-foreground').addEventListener('click', moveElementtoForeground); | |
document.getElementById(parent + '-direction-apply').addEventListener('click', editEdgeDirection); | |
document.getElementById(parent + '-arrow-type-edge-apply').addEventListener('click', editEdgeArrowType); | |
document.getElementById(parent + '-line-type-edge-apply').addEventListener('click', editEdgeLineType); | |
document.getElementById(parent + '-apply-curve-changes').addEventListener('click', toggleEdgeStyle); | |
//edit pathway settings | |
document.getElementById(parent + '-apply-configure-person-id').addEventListener('click', editPersonId); | |
document.getElementById(parent + '-new-pathway').addEventListener('click', dialogNewPathwayOpen); | |
document.getElementById(parent + '-findpath').addEventListener('click', dialogPathfindOpen); | |
document.getElementById(parent + '-find-object').addEventListener('click', findObject); | |
document.getElementById(parent + '-pathway-selector').addEventListener('change', onSelect); | |
document.getElementById(parent + '-pathway-saveAs').addEventListener('click', dialogPathwaySaveAsOpen); | |
document.getElementById(parent + '-pathway-save').addEventListener('click', savePathway); | |
document.getElementById(parent + '-delete-elements').addEventListener('click', removeElements); | |
document.getElementById(parent + '-add-node').addEventListener('click', addNode); | |
document.getElementById(parent + '-add-edge').addEventListener('click', addEdge); | |
document.getElementById(parent + '-expand-informative').addEventListener('click', expandBundleInformative); | |
document.getElementById(parent + '-collapse-informative').addEventListener('click', collapseBundleInformative); | |
document.getElementById(parent + '-expand').addEventListener('click', expandBundle); | |
document.getElementById(parent + '-collapse').addEventListener('click', collapseBundle); | |
document.getElementById(parent + '-bundle').addEventListener('click', dialogBundleOpen); | |
document.getElementById(parent + '-unbundle').addEventListener('click', unbundle); | |
document.getElementById(parent + '-produce-JSON').addEventListener('click', produceJSON); | |
document.getElementById(parent + '-undo').addEventListener('click', undo); | |
document.getElementById(parent + '-redo').addEventListener('click', redo); | |
document.getElementById(parent + '-duplicate-nodes').addEventListener('click', addDuplicateNodes); | |
document.getElementById(parent + '-find-paths-all').addEventListener('click', findPathsAll); | |
document.getElementById(parent + '-find-paths-all-drop').addEventListener('click', findPathsAll); | |
document.getElementById(parent + '-find-paths-one').addEventListener('click', findPathOne); | |
document.getElementById(parent + '-config-pathway').addEventListener('click', dialogPathwayConfigureOpen); | |
//search | |
document.getElementById(parent + '-search-node-name').addEventListener('keyup', search); | |
document.getElementById(parent + '-search-node-name').addEventListener('focusout', exitSearch); | |
//external GUI functions | |
self.loadPathwayExternal = function (id) { | |
loadPathway(id); | |
} | |
self.sprayColorExternal = function (list) { | |
sprayColor(list); | |
} | |
self.setDataToSpray = function (data) { | |
this.sprayData = data; | |
}; | |
self.setPersonId = function (data) { | |
setPersonId(data); | |
}; | |
}); | |
}; |