project files added

This commit is contained in:
mhalfmann 2021-06-15 16:00:08 +02:00
parent e156e2f053
commit db46afa351
13928 changed files with 1569902 additions and 0 deletions

20
LICENSE Normal file
View File

@ -0,0 +1,20 @@
Copyright (c) 2013-2018 GitHub Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

35024
LICENSES.chromium.html Normal file

File diff suppressed because it is too large Load Diff

BIN
Tumortisch.exe Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
content_shell.pak Normal file

Binary file not shown.

BIN
d3dcompiler_47.dll Normal file

Binary file not shown.

BIN
ffmpeg.dll Normal file

Binary file not shown.

BIN
icudtl.dat Normal file

Binary file not shown.

BIN
libEGL.dll Normal file

Binary file not shown.

BIN
libGLESv2.dll Normal file

Binary file not shown.

BIN
locales/am.pak Normal file

Binary file not shown.

BIN
locales/ar.pak Normal file

Binary file not shown.

BIN
locales/bg.pak Normal file

Binary file not shown.

BIN
locales/bn.pak Normal file

Binary file not shown.

BIN
locales/ca.pak Normal file

Binary file not shown.

BIN
locales/cs.pak Normal file

Binary file not shown.

BIN
locales/da.pak Normal file

Binary file not shown.

BIN
locales/de.pak Normal file

Binary file not shown.

BIN
locales/el.pak Normal file

Binary file not shown.

BIN
locales/en-GB.pak Normal file

Binary file not shown.

BIN
locales/en-US.pak Normal file

Binary file not shown.

BIN
locales/es-419.pak Normal file

Binary file not shown.

BIN
locales/es.pak Normal file

Binary file not shown.

BIN
locales/et.pak Normal file

Binary file not shown.

BIN
locales/fa.pak Normal file

Binary file not shown.

BIN
locales/fake-bidi.pak Normal file

Binary file not shown.

BIN
locales/fi.pak Normal file

Binary file not shown.

BIN
locales/fil.pak Normal file

Binary file not shown.

BIN
locales/fr.pak Normal file

Binary file not shown.

BIN
locales/gu.pak Normal file

Binary file not shown.

BIN
locales/he.pak Normal file

Binary file not shown.

BIN
locales/hi.pak Normal file

Binary file not shown.

BIN
locales/hr.pak Normal file

Binary file not shown.

BIN
locales/hu.pak Normal file

Binary file not shown.

BIN
locales/id.pak Normal file

Binary file not shown.

BIN
locales/it.pak Normal file

Binary file not shown.

BIN
locales/ja.pak Normal file

Binary file not shown.

BIN
locales/kn.pak Normal file

Binary file not shown.

BIN
locales/ko.pak Normal file

Binary file not shown.

BIN
locales/lt.pak Normal file

Binary file not shown.

BIN
locales/lv.pak Normal file

Binary file not shown.

BIN
locales/ml.pak Normal file

Binary file not shown.

BIN
locales/mr.pak Normal file

Binary file not shown.

BIN
locales/ms.pak Normal file

Binary file not shown.

BIN
locales/nb.pak Normal file

Binary file not shown.

BIN
locales/nl.pak Normal file

Binary file not shown.

BIN
locales/pl.pak Normal file

Binary file not shown.

BIN
locales/pt-BR.pak Normal file

Binary file not shown.

BIN
locales/pt-PT.pak Normal file

Binary file not shown.

BIN
locales/ro.pak Normal file

Binary file not shown.

BIN
locales/ru.pak Normal file

Binary file not shown.

BIN
locales/sk.pak Normal file

Binary file not shown.

BIN
locales/sl.pak Normal file

Binary file not shown.

BIN
locales/sr.pak Normal file

Binary file not shown.

BIN
locales/sv.pak Normal file

Binary file not shown.

BIN
locales/sw.pak Normal file

Binary file not shown.

BIN
locales/ta.pak Normal file

Binary file not shown.

BIN
locales/te.pak Normal file

Binary file not shown.

BIN
locales/th.pak Normal file

Binary file not shown.

BIN
locales/tr.pak Normal file

Binary file not shown.

BIN
locales/uk.pak Normal file

Binary file not shown.

BIN
locales/vi.pak Normal file

Binary file not shown.

BIN
locales/zh-CN.pak Normal file

Binary file not shown.

BIN
locales/zh-TW.pak Normal file

Binary file not shown.

BIN
msvcp140.dll Normal file

Binary file not shown.

8897
natives_blob.bin Normal file

File diff suppressed because it is too large Load Diff

BIN
node.dll Normal file

Binary file not shown.

BIN
pdf_viewer_resources.pak Normal file

Binary file not shown.

View File

@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

View File

@ -0,0 +1,2 @@
# silly apple
.DS_Store

View File

@ -0,0 +1,196 @@
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<title>BioGraphVisart</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.4.1/jspdf.debug.js" integrity="sha384-THVO/sM0mFD9h7dfSndI6TS0PgAGavwKvB5hAxRRvc0o9cPLohB0wb/PTA7LdUHs" crossorigin="anonymous"></script>
<script src="https://d3js.org/d3.v6.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/external/html2canvas.min.js"></script>
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.15.1/cytoscape.min.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-qtip.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-cose-bilkent.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-canvas.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-no-overlap.js"></script>
<script src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-svg.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-undo-redo.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/c78b41cc690d9e7f0f3ef68ff95fc3c7f1433e73/static/scripts/cytoscapescripts/cytoscape-expand-collapse.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/external/cxtmenu.js"></script>
<script src="https://unpkg.com/file-saver@1.3.8/FileSaver.js"></script>
<script data-main="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize.js" type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/1ebdad7d2d5ee59906b8c89227d3f92e0288bbb5/static/scripts/node_modules/requirejs/require.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/commonfunctions.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/constants.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/download_single_graph.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/keggpathways.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/legends/interactiontypes.js"></script>
<script type="application/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/graph.js"></script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<link rel="stylesheet" href="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/css/menu.css">
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/scripts/external/menu.js"></script>
</head>
<body id="everything">
<script type="text/javascript">
if (window.File && window.FileReader && window.FileList && window.Blob) {
// Great success! All the File APIs are supported.
} else {
alert('The File APIs are not fully supported in this browser.');
}
</script>
<div class="content">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
<div class="topnav-right">
<div id="downloadPart" style="visibility: hidden" class="dropdown">
<button class="dropbtnright"><i class="fas fa-file-download fa-sm"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a onClick="downloadPDF()">PDF</a>
<a onclick="downloadPNG()">PNG</a>
<a onclick="downloadSVG()">SVG</a>
<!--<a onclick="downloadJSON()">JSON</a>-->
</div>
</div>
</div>
</div>
<div class="datapart" id="dataPart">
<input type="file" accept=".graphml,.jso,.sif" id="fileName" name="file" />
<button class= 'butn' onclick="isFile()" id="loadGraphml" >Load file</button>
<p></p>
</div>
<div id="configPart">
</div>
<p></p>
<!--<button onclick=" window.print()">print</button>-->
<p></p>
<div align="left" id="legend" style="visibility: hidden">
<table >
<tr>
<td>
<span style="font-size:15px" ><b>Interactions</b></span>
</td>
<td>
<small><a href="https://www.kegg.jp/kegg/xml/docs/" target="_blank">kegg.jp</a></small>
</td>
</tr>
</table>
<table id="arrows">
</table>
<div id="legendNodes"></div>
</div>
<div class="loader" id="loader1" style="visibility: hidden"></div>
<div align="left" id="cy"></div>
<div align="left" id="KEGGpathsButton" style="visibility: hidden">
<button class="butn" id="keggpathways">Show KEGG Pathways</button></p></p>
<div class="loader" id="loader" style="visibility: hidden"></div>
</div>
<div align="left" id= "KEGGpaths" style="visibility: hidden;"></div>
<script type="text/javascript">
jQuery.get("/vis", function(data){
if(data){
var parser = new DOMParser;
var dom = parser.parseFromString(
data,
'text/html');
graphString = []
var keytag = dom.body.getElementsByTagName("graphml")[0]
var keys = keytag.outerHTML.split("> <");
for(var i = 0; i < keys.length-1; i++){
if(i != keys.length-2){
graphString.push('<'+keys[i]+'>')
}
else if(i == keys.length-2){
var nodetag = keys[i].split("<node");
for(var j = 0; j < nodetag.length; j++){
if(nodetag[j].includes('id') && j < nodetag.length-1){
var splitNode = nodetag[j].split('<data')
for(var k = 0; k < splitNode.length; k++){
if(splitNode[k].includes('id')){
graphString.push('<node' + splitNode[k])
}
else{
graphString.push('<data' + splitNode[k].split('</node>')[0])
}
}
}
if(j == nodetag.length-1){
var splitEdge = nodetag[j].split('<edge')
var split = splitEdge[0].split('<data')
for(var l = 0; l < split.length; l++){
if(split[l].includes('id')){
graphString.push('<node' + split[l])
}
else{
graphString.push('<data' + split[l])
}
}
for(var m = 1; m < splitEdge.length; m++){
var splitedEdge = splitEdge[m].split("<data")
for(var n =0; n <splitedEdge.length; n++){
if(splitedEdge[n].includes('source')){
graphString.push('<edge' + splitedEdge[n])
}
else{
graphString.push('<data' + splitedEdge[n].split('</edge')[0])
}
}
}
}
}
}
}
loadFile();
}
})
</script>
</div>
<footer id="footer">
<div class="containerMerged">
<a href="/BioGraphVisart/imprint">Imprint</a><br>
<a href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Mirjam Figaschewski
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,58 @@
# BioGraphVisart
This is a web-based tool to interactively visualize networks, especially with biological background. It is written in javascript based on [cytoscape.js](http://js.cytoscape.org). It is available under [biographvisart.org](http://biographvisart.org).
## How to run it locally
You need to have [nodejs](nodejs.org) installed.
1. In terminal go to
cd BioGraphVisart-master/static/scripts
and run
node server.js
2. Open in browser
http://localhost:3000/BioGraphVisart
3. Select a .graphml-file or select a .json of a previous generated graph.
4. To show the KEGG Pathways disable Cross-Origin Restrictions in your Browser!
- **Google Chrome**:
* Start Google Chrome in the terminal using
OSX
open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security
Windows10
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --disable-gpu --user-data-dir=~/chromeTemp
Linux
google-chrome --disable-web-security
- **Safari**
* Go to *Safari -> Preferences -> Advanced*
* Tick *Show Develop Menu* in menu bar
* In the Develop Menu tick *Disable Cross-Origin Restrictions* and tick *Disable local file restrictions*
- **Firefox**
* install the Firefox Add-on [*cors-plugin*](https://addons.mozilla.org/en-US/firefox/addon/cors-plugin/) and activate it.
## Embedding in other web applications
Import the BioGraphVisart main html into your html:
<head>
<link rel="import" href="https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/templates/BioGraphVisart.html">
</head>
<script>
var link = document.querySelector('link[rel="import"]');
var content = link.import;
var el = content.getElementById('everything');
document.body.appendChild(el.cloneNode(true));
</script>

View File

@ -0,0 +1,393 @@
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<!-- Created by igraph -->
<key id="v_name" for="node" attr.name="name" attr.type="string"/>
<key id="v_entrez" for="node" attr.name="entrez" attr.type="string"/>
<key id="v_ensembl" for="node" attr.name="ensembl" attr.type="string"/>
<key id="v_symbol" for="node" attr.name="symbol" attr.type="string"/>
<key id="v_id" for="node" attr.name="id" attr.type="string"/>
<key id="v_deregnet_score" for="node" attr.name="deregnet_score" attr.type="double"/>
<key id="v_S02_tumor_T1__S02_liver_T1" for="node" attr.name="S02_tumor_T1__S02_liver_T1" attr.type="double"/>
<key id="v_S02_tumor_T2__S02_tumor_T1" for="node" attr.name="S02_tumor_T2__S02_tumor_T1" attr.type="double"/>
<key id="v_S05_tumor_T1__S05_liver_T1" for="node" attr.name="S05_tumor_T1__S05_liver_T1" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_liver_T2" for="node" attr.name="S05_tumor_T2__S05_liver_T2" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_tumor_T1" for="node" attr.name="S05_tumor_T2__S05_tumor_T1" attr.type="double"/>
<key id="v_S06_tumor_T1__S06_liver_T1" for="node" attr.name="S06_tumor_T1__S06_liver_T1" attr.type="double"/>
<key id="v_S06_tumor_T2__S06_tumor_T1" for="node" attr.name="S06_tumor_T2__S06_tumor_T1" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_liver_T2" for="node" attr.name="S07_tumor_T2__S07_liver_T2" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_tumor_T1" for="node" attr.name="S07_tumor_T2__S07_tumor_T1" attr.type="double"/>
<key id="v_S09_tumor_T1__S09_liver_T1" for="node" attr.name="S09_tumor_T1__S09_liver_T1" attr.type="double"/>
<key id="v_S11_tumor_T2__S11_tumor_T1" for="node" attr.name="S11_tumor_T2__S11_tumor_T1" attr.type="double"/>
<key id="e_interaction" for="edge" attr.name="interaction" attr.type="string"/>
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="v_name">1109</data>
<data key="v_entrez">1109</data>
<data key="v_ensembl">ENSG00000198610</data>
<data key="v_symbol">AKR1C4</data>
<data key="v_id">n344</data>
<data key="v_deregnet_score">4.89276689597744</data>
<data key="v_S02_tumor_T1__S02_liver_T1">4.89276689597744</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.15495189396612</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.866752496788239</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.77953150019477</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">2.80965718014307</data>
<data key="v_S06_tumor_T1__S06_liver_T1">1.39345388316494</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">0.25104315650406</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.0950421845832739</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.549906799076546</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.0725495302077123</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.540485371695126</data>
</node>
<node id="n1">
<data key="v_name">10720</data>
<data key="v_entrez">10720</data>
<data key="v_ensembl">ENSG00000213759</data>
<data key="v_symbol">UGT2B11</data>
<data key="v_id">n569</data>
<data key="v_deregnet_score">5.82038322510769</data>
<data key="v_S02_tumor_T1__S02_liver_T1">5.82038322510769</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.62801203676056</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.77214694693069</data>
<data key="v_S05_tumor_T2__S05_liver_T2">3.83581114699541</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.83299646068285</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.80112239966227</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.68538917075261</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.93346052317343</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.76938591051764</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-1.2095203234073</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.0823075521941503</data>
</node>
<node id="n2">
<data key="v_name">1544</data>
<data key="v_entrez">1544</data>
<data key="v_ensembl">ENSG00000140505</data>
<data key="v_symbol">CYP1A2</data>
<data key="v_id">n1191</data>
<data key="v_deregnet_score">-5.24630978509159</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-5.24630978509159</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.123341204319056</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-10.3807997185401</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-10.3834686919087</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.74054873338791</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-5.70864039450488</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">8.73208341643774</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.48826783586347</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">3.53978772457172</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.0750316432391748</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.652790373026588</data>
</node>
<node id="n3">
<data key="v_name">1586</data>
<data key="v_entrez">1586</data>
<data key="v_ensembl">ENSG00000148795</data>
<data key="v_symbol">CYP17A1</data>
<data key="v_id">n1598</data>
<data key="v_deregnet_score">6.42242556395707</data>
<data key="v_S02_tumor_T1__S02_liver_T1">6.42242556395707</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-2.02369003486191</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.87918760103872</data>
<data key="v_S05_tumor_T2__S05_liver_T2">5.05839777460464</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">3.50348974611651</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.9800736312255</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.83171972629695</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.43695354573534</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.96080057153428</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.863540878595533</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.422930230833811</data>
</node>
<node id="n4">
<data key="v_name">5105</data>
<data key="v_entrez">5105</data>
<data key="v_ensembl">ENSG00000124253</data>
<data key="v_symbol">PCK1</data>
<data key="v_id">n1833</data>
<data key="v_deregnet_score">-4.17067321959424</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-4.17067321959424</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.315961308608156</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-5.55465316513183</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-1.07029413042507</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">4.61922451217977</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.762874159018528</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">2.22755332083074</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.683344229406774</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.748012140457139</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.925030845291966</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.34872670770042</data>
</node>
<node id="n5">
<data key="v_name">90993</data>
<data key="v_entrez">90993</data>
<data key="v_ensembl">ENSG00000157613</data>
<data key="v_symbol">CREB3L1</data>
<data key="v_id">n1926</data>
<data key="v_deregnet_score">-2.9646296339978</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-2.9646296339978</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">1.30419094673599</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.63231266511345</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.6319721573097</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-1.22538630164837</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.516780633820235</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.403726383325318</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.799248090364271</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.800633283483196</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.213265198782758</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.989479140265932</data>
</node>
<node id="n6">
<data key="v_name">5997</data>
<data key="v_entrez">5997</data>
<data key="v_ensembl">ENSG00000116741</data>
<data key="v_symbol">RGS2</data>
<data key="v_id">n2755</data>
<data key="v_deregnet_score">6.00157810698491</data>
<data key="v_S02_tumor_T1__S02_liver_T1">6.00157810698491</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.55718876937457</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.77810059195969</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.4007982015182</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">0.0312518414650994</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.506033551445976</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.882677646876007</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.939049383271492</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.985047767832839</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-1.44526169194974</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.0557158354692691</data>
</node>
<node id="n7">
<data key="v_name">2916</data>
<data key="v_entrez">2916</data>
<data key="v_ensembl">ENSG00000113262</data>
<data key="v_symbol">GRM6</data>
<data key="v_id">n3392</data>
<data key="v_deregnet_score">-4.28159498879334</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-4.28159498879334</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">1.0018084993743</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.0448778924793122</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.04257117165366</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.681559945843812</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.400094810641986</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.03715847279852</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.486002122177679</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.644737512545253</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.178570156939732</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-2.49508704375534</data>
</node>
<node id="n8">
<data key="v_name">5592</data>
<data key="v_entrez">5592</data>
<data key="v_ensembl">ENSG00000185532</data>
<data key="v_symbol">PRKG1</data>
<data key="v_id">n3408</data>
<data key="v_deregnet_score">-2.26686926787255</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-2.26686926787255</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.756721842891169</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.92206535424882</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-2.38752692709002</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-4.16376459319587</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.522376100347733</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.0599034168717</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.69133768262919</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-1.16612296915722</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.236658193785087</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.07938233953787</data>
</node>
<node id="n9">
<data key="v_name">8644</data>
<data key="v_entrez">8644</data>
<data key="v_ensembl">ENSG00000196139</data>
<data key="v_symbol">AKR1C3</data>
<data key="v_id">n3552</data>
</node>
<node id="n10">
<data key="v_name">57016</data>
<data key="v_entrez">57016</data>
<data key="v_ensembl">ENSG00000198074</data>
<data key="v_symbol">AKR1B10</data>
<data key="v_id">n4038</data>
<data key="v_deregnet_score">6.9473616002508</data>
<data key="v_S02_tumor_T1__S02_liver_T1">6.9473616002508</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.29922257422236</data>
<data key="v_S05_tumor_T1__S05_liver_T1">4.87275225199716</data>
<data key="v_S05_tumor_T2__S05_liver_T2">7.0615766357804</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">2.33106834603374</data>
<data key="v_S06_tumor_T1__S06_liver_T1">5.56112231578185</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.53725889034605</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.720898577294492</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.918004010375306</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.183151949775835</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.0424120538114565</data>
</node>
<node id="n11">
<data key="v_name">7365</data>
<data key="v_entrez">7365</data>
<data key="v_ensembl">ENSG00000109181</data>
<data key="v_symbol">UGT2B10</data>
<data key="v_id">n4853</data>
<data key="v_deregnet_score">4.95636591904564</data>
<data key="v_S02_tumor_T1__S02_liver_T1">4.95636591904564</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.22544022193002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-3.40258474686455</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.551322993790425</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">3.31655930788988</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.574368880841379</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">0.60441891669662</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.5545931441863</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.84199473263497</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.521393253755894</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.0721241608289268</data>
</node>
<node id="n12">
<data key="v_name">6716</data>
<data key="v_entrez">6716</data>
<data key="v_ensembl">ENSG00000277893</data>
<data key="v_symbol">SRD5A2</data>
<data key="v_id">n5231</data>
<data key="v_deregnet_score">-3.31356753711692</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-3.31356753711692</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.27903482246851</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-4.28309090797391</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-1.14883138068867</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">3.18284069260735</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.805699976937394</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.54942187664872</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.340690843782098</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.243981706870284</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.472691525413995</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.118879800751597</data>
</node>
<node id="n13">
<data key="v_name">2052</data>
<data key="v_entrez">2052</data>
<data key="v_ensembl">ENSG00000143819</data>
<data key="v_symbol">EPHX1</data>
<data key="v_id">n5239</data>
<data key="v_deregnet_score">4.05308874792572</data>
<data key="v_S02_tumor_T1__S02_liver_T1">4.05308874792572</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.26128657660356</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-3.03895414708979</data>
<data key="v_S05_tumor_T2__S05_liver_T2">0.79359759610715</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">4.70878814618414</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.109320086095233</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.23237957141105</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.0521008716788</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.1477281896501</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.76183662020739</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.774711348623987</data>
</node>
<node id="n14">
<data key="v_name">3576</data>
<data key="v_entrez">3576</data>
<data key="v_ensembl">ENSG00000169429</data>
<data key="v_symbol">CXCL8</data>
<data key="v_id">n5368</data>
<data key="v_deregnet_score">-3.58302126289549</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-3.58302126289549</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.624141351558466</data>
<data key="v_S05_tumor_T1__S05_liver_T1">2.22206482379224</data>
<data key="v_S05_tumor_T2__S05_liver_T2">4.40552620265477</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.34461448831965</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.821411188868186</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.931128194940757</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.655546297345688</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.325213732517111</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-1.76445861017272</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.967584072590853</data>
</node>
<edge source="n0" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n0" target="n11">
<data key="e_interaction">compound</data>
</edge>
<edge source="n1" target="n9">
<data key="e_interaction">compound</data>
</edge>
<edge source="n2" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n2" target="n3">
<data key="e_interaction">compound</data>
</edge>
<edge source="n2" target="n11">
<data key="e_interaction">compound</data>
</edge>
<edge source="n2" target="n13">
<data key="e_interaction">compound</data>
</edge>
<edge source="n3" target="n3">
<data key="e_interaction">compound</data>
</edge>
<edge source="n3" target="n9">
<data key="e_interaction">compound</data>
</edge>
<edge source="n3" target="n12">
<data key="e_interaction">compound</data>
</edge>
<edge source="n5" target="n3">
<data key="e_interaction">expression</data>
</edge>
<edge source="n5" target="n4">
<data key="e_interaction">expression</data>
</edge>
<edge source="n5" target="n5">
<data key="e_interaction">state change</data>
</edge>
<edge source="n5" target="n14">
<data key="e_interaction">expression</data>
</edge>
<edge source="n8" target="n5">
<data key="e_interaction">activation</data>
</edge>
<edge source="n8" target="n5">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n8" target="n6">
<data key="e_interaction">activation</data>
</edge>
<edge source="n8" target="n6">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n9" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n9" target="n2">
<data key="e_interaction">compound</data>
</edge>
<edge source="n9" target="n3">
<data key="e_interaction">compound</data>
</edge>
<edge source="n9" target="n10">
<data key="e_interaction">compound</data>
</edge>
<edge source="n9" target="n11">
<data key="e_interaction">compound</data>
</edge>
<edge source="n11" target="n9">
<data key="e_interaction">compound</data>
</edge>
<edge source="n12" target="n0">
<data key="e_interaction">compound</data>
</edge>
<edge source="n12" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n12" target="n3">
<data key="e_interaction">compound</data>
</edge>
<edge source="n12" target="n9">
<data key="e_interaction">compound</data>
</edge>
<edge source="n12" target="n11">
<data key="e_interaction">compound</data>
</edge>
<edge source="n13" target="n2">
<data key="e_interaction">compound</data>
</edge>
<edge source="n14" target="n7">
<data key="e_interaction">activation</data>
</edge>
</graph>
</graphml>

View File

@ -0,0 +1,399 @@
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<!-- Created by igraph -->
<key id="v_name" for="node" attr.name="name" attr.type="string"/>
<key id="v_entrez" for="node" attr.name="entrez" attr.type="string"/>
<key id="v_ensembl" for="node" attr.name="ensembl" attr.type="string"/>
<key id="v_symbol" for="node" attr.name="symbol" attr.type="string"/>
<key id="v_id" for="node" attr.name="id" attr.type="string"/>
<key id="v_deregnet_score" for="node" attr.name="deregnet_score" attr.type="double"/>
<key id="v_S02_tumor_T1__S02_liver_T1" for="node" attr.name="S02_tumor_T1__S02_liver_T1" attr.type="double"/>
<key id="v_S02_tumor_T2__S02_tumor_T1" for="node" attr.name="S02_tumor_T2__S02_tumor_T1" attr.type="double"/>
<key id="v_S05_tumor_T1__S05_liver_T1" for="node" attr.name="S05_tumor_T1__S05_liver_T1" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_liver_T2" for="node" attr.name="S05_tumor_T2__S05_liver_T2" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_tumor_T1" for="node" attr.name="S05_tumor_T2__S05_tumor_T1" attr.type="double"/>
<key id="v_S06_tumor_T1__S06_liver_T1" for="node" attr.name="S06_tumor_T1__S06_liver_T1" attr.type="double"/>
<key id="v_S06_tumor_T2__S06_tumor_T1" for="node" attr.name="S06_tumor_T2__S06_tumor_T1" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_liver_T2" for="node" attr.name="S07_tumor_T2__S07_liver_T2" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_tumor_T1" for="node" attr.name="S07_tumor_T2__S07_tumor_T1" attr.type="double"/>
<key id="v_S09_tumor_T1__S09_liver_T1" for="node" attr.name="S09_tumor_T1__S09_liver_T1" attr.type="double"/>
<key id="v_S11_tumor_T2__S11_tumor_T1" for="node" attr.name="S11_tumor_T2__S11_tumor_T1" attr.type="double"/>
<key id="e_interaction" for="edge" attr.name="interaction" attr.type="string"/>
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="v_name">5566</data>
<data key="v_entrez">5566</data>
<data key="v_ensembl">ENSG00000072062</data>
<data key="v_symbol">PRKACA</data>
<data key="v_id">n554</data>
</node>
<node id="n1">
<data key="v_name">4625</data>
<data key="v_entrez">4625</data>
<data key="v_ensembl">ENSG00000092054</data>
<data key="v_symbol">MYH7</data>
<data key="v_id">n1276</data>
<data key="v_deregnet_score">14.8251510948696</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.658701759441077</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">14.8251510948696</data>
<data key="v_S05_tumor_T2__S05_liver_T2">8.39244795377712</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-7.69690690076228</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.641070762939956</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.02131168718461</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.23187431247315</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.800492309301069</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.35843447594136</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-9.28700776374332</data>
</node>
<node id="n2">
<data key="v_name">1080</data>
<data key="v_entrez">1080</data>
<data key="v_ensembl">ENSG00000001626</data>
<data key="v_symbol">CFTR</data>
<data key="v_id">n1768</data>
<data key="v_deregnet_score">-7.13593185875471</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-4.02886196351358</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">1.01367471722464</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-7.13593185875471</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-8.53533424464492</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-1.34109771944348</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.144730234055561</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-4.24716817776394</data>
<data key="v_S07_tumor_T2__S07_liver_T2">3.50981828117259</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.48102340529884</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-2.6345163990084</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.818142467206227</data>
</node>
<node id="n3">
<data key="v_name">4624</data>
<data key="v_entrez">4624</data>
<data key="v_ensembl">ENSG00000197616</data>
<data key="v_symbol">MYH6</data>
<data key="v_id">n1774</data>
<data key="v_deregnet_score">7.64761236168921</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.658701759441077</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">7.64761236168921</data>
<data key="v_S05_tumor_T2__S05_liver_T2">2.22438649598639</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-4.49053512602129</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.641070762939956</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.82710886183851</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.514004415585024</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.51317770193379</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.21096106236531</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-3.91729765879408</data>
</node>
<node id="n4">
<data key="v_name">5837</data>
<data key="v_entrez">5837</data>
<data key="v_ensembl">ENSG00000068976</data>
<data key="v_symbol">PYGM</data>
<data key="v_id">n1854</data>
<data key="v_deregnet_score">8.21206363994462</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-0.253764462582541</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">8.21206363994462</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.40740238967204</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-7.197874084435</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.808698817461463</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">2.44450644900416</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-1.04055052903188</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.446533463556791</data>
<data key="v_S09_tumor_T1__S09_liver_T1">1.1912296697094</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.39184024564216</data>
</node>
<node id="n5">
<data key="v_name">108</data>
<data key="v_entrez">108</data>
<data key="v_ensembl">ENSG00000078295</data>
<data key="v_symbol">ADCY2</data>
<data key="v_id">n1952</data>
<data key="v_deregnet_score">8.53438178864342</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-0.253764462582541</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">8.53438178864342</data>
<data key="v_S05_tumor_T2__S05_liver_T2">3.47090537239461</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-4.88347854140604</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.641070762939956</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.02131168718461</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.72949641808977</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.72866970443853</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.64843605572591</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.96924376828345</data>
</node>
<node id="n6">
<data key="v_name">477</data>
<data key="v_entrez">477</data>
<data key="v_ensembl">ENSG00000018625</data>
<data key="v_symbol">ATP1A2</data>
<data key="v_id">n2119</data>
<data key="v_deregnet_score">7.0312349933532</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.420554166035893</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.384572555494536</data>
<data key="v_S05_tumor_T1__S05_liver_T1">7.0312349933532</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.20465575740625</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-5.16055953267539</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.153814228244316</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.474278101250238</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.563439900510124</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-1.42158865174456</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.08170779631787</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.45495339216011</data>
</node>
<node id="n7">
<data key="v_name">85366</data>
<data key="v_entrez">85366</data>
<data key="v_ensembl">ENSG00000101306</data>
<data key="v_symbol">MYLK2</data>
<data key="v_id">n2597</data>
<data key="v_deregnet_score">9.72571977400327</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.381145326531767</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.169855860538845</data>
<data key="v_S05_tumor_T1__S05_liver_T1">9.72571977400327</data>
<data key="v_S05_tumor_T2__S05_liver_T2">3.60384376877996</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-6.16577663598288</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-1.2961525440756</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">0.447233611750868</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.23187431247315</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.199913351222087</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.04667823404754</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.64002700521039</data>
</node>
<node id="n8">
<data key="v_name">4633</data>
<data key="v_entrez">4633</data>
<data key="v_ensembl">ENSG00000111245</data>
<data key="v_symbol">MYL2</data>
<data key="v_id">n2638</data>
<data key="v_deregnet_score">12.5943874337061</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.658701759441077</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">12.5943874337061</data>
<data key="v_S05_tumor_T2__S05_liver_T2">5.74581683130591</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-7.13043814324068</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.0669926875062147</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">0.447233611750868</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.106168270654973</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.325213732517111</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.363869747096693</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-7.02294212845273</data>
</node>
<node id="n9">
<data key="v_name">70</data>
<data key="v_entrez">70</data>
<data key="v_ensembl">ENSG00000159251</data>
<data key="v_symbol">ACTC1</data>
<data key="v_id">n2891</data>
<data key="v_deregnet_score">9.49712079272949</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.20792187070329</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">9.49712079272949</data>
<data key="v_S05_tumor_T2__S05_liver_T2">6.77783017329704</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-3.00115816027297</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.922040144919742</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.541799220675089</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.324387018865876</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.325213732517111</data>
<data key="v_S09_tumor_T1__S09_liver_T1">1.1912296697094</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-5.08960579511984</data>
</node>
<node id="n10">
<data key="v_name">4634</data>
<data key="v_entrez">4634</data>
<data key="v_ensembl">ENSG00000160808</data>
<data key="v_symbol">MYL3</data>
<data key="v_id">n3003</data>
<data key="v_deregnet_score">7.8257909000448</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.77727398490453</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.758250993433364</data>
<data key="v_S05_tumor_T1__S05_liver_T1">7.8257909000448</data>
<data key="v_S05_tumor_T2__S05_liver_T2">0.344939762644592</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-7.55742336063834</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.513373839240761</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.80605994386946</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.0178394782165211</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.439401952093741</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.939962009717682</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-5.64324996347192</data>
</node>
<node id="n11">
<data key="v_name">801</data>
<data key="v_entrez">801</data>
<data key="v_ensembl">ENSG00000198668</data>
<data key="v_symbol">CALM1</data>
<data key="v_id">n4126</data>
<data key="v_deregnet_score">1.38380189374643</data>
<data key="v_S02_tumor_T1__S02_liver_T1">1.45678199685873</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.574357722139686</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.38380189374643</data>
<data key="v_S05_tumor_T2__S05_liver_T2">0.267778179058853</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-1.10894298964905</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.604883121660149</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.561929013293465</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.662703763044404</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.256763916744508</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.347746806941182</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.116977618994839</data>
</node>
<node id="n12">
<data key="v_name">7137</data>
<data key="v_entrez">7137</data>
<data key="v_ensembl">ENSG00000129991</data>
<data key="v_symbol">TNNI3</data>
<data key="v_id">n4373</data>
</node>
<node id="n13">
<data key="v_name">779</data>
<data key="v_entrez">779</data>
<data key="v_ensembl">ENSG00000081248</data>
<data key="v_symbol">CACNA1S</data>
<data key="v_id">n4969</data>
<data key="v_deregnet_score">9.54949821399305</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.08661921450376</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.0966654334910409</data>
<data key="v_S05_tumor_T1__S05_liver_T1">9.54949821399305</data>
<data key="v_S05_tumor_T2__S05_liver_T2">5.7742871768461</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-4.89591861851605</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.379748403463864</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.12308739343561</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.67669847379632</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.644737512545253</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.64843605572591</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-3.54406562623889</data>
</node>
<node id="n14">
<data key="v_name">5506</data>
<data key="v_entrez">5506</data>
<data key="v_ensembl">ENSG00000154415</data>
<data key="v_symbol">PPP1R3A</data>
<data key="v_id">n5193</data>
<data key="v_deregnet_score">10.2688948854879</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.658701759441077</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">10.2688948854879</data>
<data key="v_S05_tumor_T2__S05_liver_T2">3.84685212454644</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-5.83866422466276</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.661205852413321</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.41695759209879</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.154872208173425</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.154045494522191</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.21096106236531</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-3.69555981166179</data>
</node>
<edge source="n0" target="n2">
<data key="e_interaction">activation</data>
</edge>
<edge source="n0" target="n2">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n0" target="n5">
<data key="e_interaction">activation</data>
</edge>
<edge source="n0" target="n6">
<data key="e_interaction">activation</data>
</edge>
<edge source="n0" target="n6">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n0" target="n7">
<data key="e_interaction">inhibition</data>
</edge>
<edge source="n0" target="n11">
<data key="e_interaction">activation</data>
</edge>
<edge source="n0" target="n11">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n0" target="n12">
<data key="e_interaction">activation</data>
</edge>
<edge source="n0" target="n12">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n0" target="n13">
<data key="e_interaction">activation</data>
</edge>
<edge source="n0" target="n13">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n1" target="n8">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n1" target="n10">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n3" target="n8">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n3" target="n10">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n5" target="n0">
<data key="e_interaction">activation</data>
</edge>
<edge source="n5" target="n0">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n5" target="n0">
<data key="e_interaction">compound</data>
</edge>
<edge source="n7" target="n8">
<data key="e_interaction">activation</data>
</edge>
<edge source="n7" target="n8">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n7" target="n10">
<data key="e_interaction">activation</data>
</edge>
<edge source="n7" target="n10">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n9" target="n1">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n9" target="n3">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n9" target="n8">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n9" target="n10">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n11" target="n4">
<data key="e_interaction">activation</data>
</edge>
<edge source="n11" target="n4">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n11" target="n5">
<data key="e_interaction">activation</data>
</edge>
<edge source="n11" target="n7">
<data key="e_interaction">activation</data>
</edge>
<edge source="n12" target="n9">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n14" target="n4">
<data key="e_interaction">dephosphorylation</data>
</edge>
<edge source="n14" target="n4">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n14" target="n4">
<data key="e_interaction">inhibition</data>
</edge>
<edge source="n14" target="n11">
<data key="e_interaction">dephosphorylation</data>
</edge>
<edge source="n14" target="n11">
<data key="e_interaction">inhibition</data>
</edge>
</graph>
</graphml>

View File

@ -0,0 +1,403 @@
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<!-- Created by igraph -->
<key id="v_name" for="node" attr.name="name" attr.type="string"/>
<key id="v_entrez" for="node" attr.name="entrez" attr.type="string"/>
<key id="v_ensembl" for="node" attr.name="ensembl" attr.type="string"/>
<key id="v_symbol" for="node" attr.name="symbol" attr.type="string"/>
<key id="v_id" for="node" attr.name="id" attr.type="string"/>
<key id="v_deregnet_score" for="node" attr.name="deregnet_score" attr.type="double"/>
<key id="v_S02_tumor_T1__S02_liver_T1" for="node" attr.name="S02_tumor_T1__S02_liver_T1" attr.type="double"/>
<key id="v_S02_tumor_T2__S02_tumor_T1" for="node" attr.name="S02_tumor_T2__S02_tumor_T1" attr.type="double"/>
<key id="v_S05_tumor_T1__S05_liver_T1" for="node" attr.name="S05_tumor_T1__S05_liver_T1" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_liver_T2" for="node" attr.name="S05_tumor_T2__S05_liver_T2" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_tumor_T1" for="node" attr.name="S05_tumor_T2__S05_tumor_T1" attr.type="double"/>
<key id="v_S06_tumor_T1__S06_liver_T1" for="node" attr.name="S06_tumor_T1__S06_liver_T1" attr.type="double"/>
<key id="v_S06_tumor_T2__S06_tumor_T1" for="node" attr.name="S06_tumor_T2__S06_tumor_T1" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_liver_T2" for="node" attr.name="S07_tumor_T2__S07_liver_T2" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_tumor_T1" for="node" attr.name="S07_tumor_T2__S07_tumor_T1" attr.type="double"/>
<key id="v_S09_tumor_T1__S09_liver_T1" for="node" attr.name="S09_tumor_T1__S09_liver_T1" attr.type="double"/>
<key id="v_S11_tumor_T2__S11_tumor_T1" for="node" attr.name="S11_tumor_T2__S11_tumor_T1" attr.type="double"/>
<key id="e_interaction" for="edge" attr.name="interaction" attr.type="string"/>
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="v_name">2810</data>
<data key="v_entrez">2810</data>
<data key="v_ensembl">ENSG00000175793</data>
<data key="v_symbol">SFN</data>
<data key="v_id">n377</data>
<data key="v_deregnet_score">3.12025808565352</data>
<data key="v_S02_tumor_T1__S02_liver_T1">2.64641888132376</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-2.26077926338295</data>
<data key="v_S05_tumor_T1__S05_liver_T1">4.49734116519668</data>
<data key="v_S05_tumor_T2__S05_liver_T2">4.9135728803332</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.6637392642973</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.12025808565352</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.114582239346833</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.34812877496322</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.536815214740729</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.0889445714203473</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.0336382356794995</data>
</node>
<node id="n1">
<data key="v_name">10720</data>
<data key="v_entrez">10720</data>
<data key="v_ensembl">ENSG00000213759</data>
<data key="v_symbol">UGT2B11</data>
<data key="v_id">n569</data>
<data key="v_deregnet_score">3.80112239966227</data>
<data key="v_S02_tumor_T1__S02_liver_T1">5.82038322510769</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.62801203676056</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.77214694693069</data>
<data key="v_S05_tumor_T2__S05_liver_T2">3.83581114699541</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.83299646068285</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.80112239966227</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.68538917075261</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.93346052317343</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.76938591051764</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-1.2095203234073</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.0823075521941503</data>
</node>
<node id="n2">
<data key="v_name">7367</data>
<data key="v_entrez">7367</data>
<data key="v_ensembl">ENSG00000197888</data>
<data key="v_symbol">UGT2B17</data>
<data key="v_id">n832</data>
<data key="v_deregnet_score">3.36533471697888</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.135070541875581</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.358630994918083</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-4.25170420529655</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-1.15809338781921</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">3.17482914217108</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.36533471697888</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.17860098830935</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.403708194150801</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.175656421761971</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-2.66523908281484</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.39184024564216</data>
</node>
<node id="n3">
<data key="v_name">1544</data>
<data key="v_entrez">1544</data>
<data key="v_ensembl">ENSG00000140505</data>
<data key="v_symbol">CYP1A2</data>
<data key="v_id">n1191</data>
<data key="v_deregnet_score">-5.70864039450488</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-5.24630978509159</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.123341204319056</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-10.3807997185401</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-10.3834686919087</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.74054873338791</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-5.70864039450488</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">8.73208341643774</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.48826783586347</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">3.53978772457172</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.0750316432391748</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.652790373026588</data>
</node>
<node id="n4">
<data key="v_name">1586</data>
<data key="v_entrez">1586</data>
<data key="v_ensembl">ENSG00000148795</data>
<data key="v_symbol">CYP17A1</data>
<data key="v_id">n1598</data>
<data key="v_deregnet_score">3.9800736312255</data>
<data key="v_S02_tumor_T1__S02_liver_T1">6.42242556395707</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-2.02369003486191</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.87918760103872</data>
<data key="v_S05_tumor_T2__S05_liver_T2">5.05839777460464</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">3.50348974611651</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.9800736312255</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.83171972629695</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.43695354573534</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.96080057153428</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.863540878595533</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.422930230833811</data>
</node>
<node id="n5">
<data key="v_name">1645</data>
<data key="v_entrez">1645</data>
<data key="v_ensembl">ENSG00000187134</data>
<data key="v_symbol">AKR1C1</data>
<data key="v_id">n2217</data>
<data key="v_deregnet_score">3.93135252420372</data>
<data key="v_S02_tumor_T1__S02_liver_T1">3.90608989420543</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.47551737484035</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.797268226318685</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.56695520679137</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">2.48817397103033</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.93135252420372</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.08733518065673</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.0510915617685906</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-1.01143209498078</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-0.188925596476603</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.0379576993347989</data>
</node>
<node id="n6">
<data key="v_name">8202</data>
<data key="v_entrez">8202</data>
<data key="v_ensembl">ENSG00000124151</data>
<data key="v_symbol">NCOA3</data>
<data key="v_id">n2407</data>
</node>
<node id="n7">
<data key="v_name">54474</data>
<data key="v_entrez">54474</data>
<data key="v_ensembl">ENSG00000171431</data>
<data key="v_symbol">KRT20</data>
<data key="v_id">n3001</data>
<data key="v_deregnet_score">6.14703320276914</data>
<data key="v_S02_tumor_T1__S02_liver_T1">2.76874552054694</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-2.50933780500786</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.27212495766397</data>
<data key="v_S05_tumor_T2__S05_liver_T2">1.65459089818634</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">0.503979061117767</data>
<data key="v_S06_tumor_T1__S06_liver_T1">6.14703320276914</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.268591165480654</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.585427497694274</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.154045494522191</data>
<data key="v_S09_tumor_T1__S09_liver_T1">1.71372781228624</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">2.20868820883383</data>
</node>
<node id="n8">
<data key="v_name">8644</data>
<data key="v_entrez">8644</data>
<data key="v_ensembl">ENSG00000196139</data>
<data key="v_symbol">AKR1C3</data>
<data key="v_id">n3552</data>
</node>
<node id="n9">
<data key="v_name">5568</data>
<data key="v_entrez">5568</data>
<data key="v_ensembl">ENSG00000165059</data>
<data key="v_symbol">PRKACG</data>
<data key="v_id">n3974</data>
</node>
<node id="n10">
<data key="v_name">57016</data>
<data key="v_entrez">57016</data>
<data key="v_ensembl">ENSG00000198074</data>
<data key="v_symbol">AKR1B10</data>
<data key="v_id">n4038</data>
<data key="v_deregnet_score">5.56112231578185</data>
<data key="v_S02_tumor_T1__S02_liver_T1">6.9473616002508</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.29922257422236</data>
<data key="v_S05_tumor_T1__S05_liver_T1">4.87275225199716</data>
<data key="v_S05_tumor_T2__S05_liver_T2">7.0615766357804</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">2.33106834603374</data>
<data key="v_S06_tumor_T1__S06_liver_T1">5.56112231578185</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.53725889034605</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.720898577294492</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.918004010375306</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.183151949775835</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.0424120538114565</data>
</node>
<node id="n11">
<data key="v_name">1646</data>
<data key="v_entrez">1646</data>
<data key="v_ensembl">ENSG00000151632</data>
<data key="v_symbol">AKR1C2</data>
<data key="v_id">n4174</data>
<data key="v_deregnet_score">3.23513408042692</data>
<data key="v_S02_tumor_T1__S02_liver_T1">3.09771981948785</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.15706240825394</data>
<data key="v_S05_tumor_T1__S05_liver_T1">2.45465210248845</data>
<data key="v_S05_tumor_T2__S05_liver_T2">4.89685601785009</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">2.3073132769181</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.23513408042692</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.85489315618227</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.655546297345688</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.325213732517111</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.363869747096693</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.603120873246436</data>
</node>
<node id="n12">
<data key="v_name">23657</data>
<data key="v_entrez">23657</data>
<data key="v_ensembl">ENSG00000151012</data>
<data key="v_symbol">SLC7A11</data>
<data key="v_id">n4901</data>
<data key="v_deregnet_score">5.22228834489467</data>
<data key="v_S02_tumor_T1__S02_liver_T1">3.79128203496861</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.666832460997196</data>
<data key="v_S05_tumor_T1__S05_liver_T1">2.27740352000061</data>
<data key="v_S05_tumor_T2__S05_liver_T2">4.39504314027532</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.00153762838583</data>
<data key="v_S06_tumor_T1__S06_liver_T1">5.22228834489467</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.15945744236325</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.254403233948798</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.774301674114135</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.0711673648441337</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.402549251102868</data>
</node>
<node id="n13">
<data key="v_name">596</data>
<data key="v_entrez">596</data>
<data key="v_ensembl">ENSG00000171791</data>
<data key="v_symbol">BCL2</data>
<data key="v_id">n5253</data>
<data key="v_deregnet_score">-1.54050507182279</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-0.976357654733464</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.123341204319056</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-1.63922205847672</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-1.32698848432479</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">0.123477661206546</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-1.54050507182279</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">2.28272594783528</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.585427497694274</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.154045494522191</data>
<data key="v_S09_tumor_T1__S09_liver_T1">0.363869747096693</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.258894301365649</data>
</node>
<node id="n14">
<data key="v_name">54575</data>
<data key="v_entrez">54575</data>
<data key="v_ensembl">ENSG00000242515</data>
<data key="v_symbol">UGT1A10</data>
<data key="v_id">n5401</data>
<data key="v_deregnet_score">3.88894339181834</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.658701759441077</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.0966654334910409</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.78720439694543</data>
<data key="v_S05_tumor_T2__S05_liver_T2">5.06420452433208</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">2.01279636771679</data>
<data key="v_S06_tumor_T1__S06_liver_T1">3.88894339181834</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.79395232134585</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.154872208173425</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.154045494522191</data>
<data key="v_S09_tumor_T1__S09_liver_T1">1.71372781228624</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.148581679883231</data>
</node>
<node id="n15">
<data key="v_name">7157</data>
<data key="v_entrez">7157</data>
<data key="v_ensembl">ENSG00000141510</data>
<data key="v_symbol">TP53</data>
<data key="v_id">n5464</data>
</node>
<edge source="n1" target="n8">
<data key="e_interaction">compound</data>
</edge>
<edge source="n2" target="n8">
<data key="e_interaction">compound</data>
</edge>
<edge source="n3" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n3" target="n2">
<data key="e_interaction">compound</data>
</edge>
<edge source="n3" target="n4">
<data key="e_interaction">compound</data>
</edge>
<edge source="n3" target="n14">
<data key="e_interaction">compound</data>
</edge>
<edge source="n4" target="n4">
<data key="e_interaction">compound</data>
</edge>
<edge source="n4" target="n5">
<data key="e_interaction">compound</data>
</edge>
<edge source="n4" target="n8">
<data key="e_interaction">compound</data>
</edge>
<edge source="n5" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n5" target="n2">
<data key="e_interaction">compound</data>
</edge>
<edge source="n5" target="n4">
<data key="e_interaction">compound</data>
</edge>
<edge source="n5" target="n8">
<data key="e_interaction">compound</data>
</edge>
<edge source="n5" target="n11">
<data key="e_interaction">compound</data>
</edge>
<edge source="n5" target="n14">
<data key="e_interaction">compound</data>
</edge>
<edge source="n6" target="n7">
<data key="e_interaction">expression</data>
</edge>
<edge source="n6" target="n13">
<data key="e_interaction">expression</data>
</edge>
<edge source="n8" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n8" target="n2">
<data key="e_interaction">compound</data>
</edge>
<edge source="n8" target="n3">
<data key="e_interaction">compound</data>
</edge>
<edge source="n8" target="n4">
<data key="e_interaction">compound</data>
</edge>
<edge source="n8" target="n5">
<data key="e_interaction">compound</data>
</edge>
<edge source="n8" target="n10">
<data key="e_interaction">compound</data>
</edge>
<edge source="n8" target="n14">
<data key="e_interaction">compound</data>
</edge>
<edge source="n9" target="n4">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n9" target="n4">
<data key="e_interaction">expression</data>
</edge>
<edge source="n9" target="n6">
<data key="e_interaction">activation</data>
</edge>
<edge source="n9" target="n6">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n9" target="n8">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n9" target="n8">
<data key="e_interaction">expression</data>
</edge>
<edge source="n11" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n11" target="n2">
<data key="e_interaction">compound</data>
</edge>
<edge source="n11" target="n5">
<data key="e_interaction">compound</data>
</edge>
<edge source="n11" target="n14">
<data key="e_interaction">compound</data>
</edge>
<edge source="n13" target="n15">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n14" target="n8">
<data key="e_interaction">compound</data>
</edge>
<edge source="n15" target="n0">
<data key="e_interaction">expression</data>
</edge>
<edge source="n15" target="n12">
<data key="e_interaction">repression</data>
</edge>
<edge source="n15" target="n13">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n15" target="n13">
<data key="e_interaction">inhibition</data>
</edge>
</graph>
</graphml>

View File

@ -0,0 +1,381 @@
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<!-- Created by igraph -->
<key id="v_name" for="node" attr.name="name" attr.type="string"/>
<key id="v_entrez" for="node" attr.name="entrez" attr.type="string"/>
<key id="v_ensembl" for="node" attr.name="ensembl" attr.type="string"/>
<key id="v_symbol" for="node" attr.name="symbol" attr.type="string"/>
<key id="v_id" for="node" attr.name="id" attr.type="string"/>
<key id="v_deregnet_score" for="node" attr.name="deregnet_score" attr.type="double"/>
<key id="v_S02_tumor_T1__S02_liver_T1" for="node" attr.name="S02_tumor_T1__S02_liver_T1" attr.type="double"/>
<key id="v_S02_tumor_T2__S02_tumor_T1" for="node" attr.name="S02_tumor_T2__S02_tumor_T1" attr.type="double"/>
<key id="v_S05_tumor_T1__S05_liver_T1" for="node" attr.name="S05_tumor_T1__S05_liver_T1" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_liver_T2" for="node" attr.name="S05_tumor_T2__S05_liver_T2" attr.type="double"/>
<key id="v_S05_tumor_T2__S05_tumor_T1" for="node" attr.name="S05_tumor_T2__S05_tumor_T1" attr.type="double"/>
<key id="v_S06_tumor_T1__S06_liver_T1" for="node" attr.name="S06_tumor_T1__S06_liver_T1" attr.type="double"/>
<key id="v_S06_tumor_T2__S06_tumor_T1" for="node" attr.name="S06_tumor_T2__S06_tumor_T1" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_liver_T2" for="node" attr.name="S07_tumor_T2__S07_liver_T2" attr.type="double"/>
<key id="v_S07_tumor_T2__S07_tumor_T1" for="node" attr.name="S07_tumor_T2__S07_tumor_T1" attr.type="double"/>
<key id="v_S09_tumor_T1__S09_liver_T1" for="node" attr.name="S09_tumor_T1__S09_liver_T1" attr.type="double"/>
<key id="v_S11_tumor_T2__S11_tumor_T1" for="node" attr.name="S11_tumor_T2__S11_tumor_T1" attr.type="double"/>
<key id="e_interaction" for="edge" attr.name="interaction" attr.type="string"/>
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="v_name">149233</data>
<data key="v_entrez">149233</data>
<data key="v_ensembl">ENSG00000162594</data>
<data key="v_symbol">IL23R</data>
<data key="v_id">n20</data>
<data key="v_deregnet_score">2.09648876373894</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-0.808327655436456</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">1.21012608248011</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.0648747396487099</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.398778603268964</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">0.598633708237038</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-1.4972301871336</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.75788705287593</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.47136291334481</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.03998091017272</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.09648876373894</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.457787720406716</data>
</node>
<node id="n1">
<data key="v_name">1233</data>
<data key="v_entrez">1233</data>
<data key="v_ensembl">ENSG00000183813</data>
<data key="v_symbol">CCR4</data>
<data key="v_id">n21</data>
<data key="v_deregnet_score">3.21096106236531</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-0.541029383708159</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.702218444300005</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.623599873281531</data>
<data key="v_S05_tumor_T2__S05_liver_T2">0.925630007983067</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.470491165807465</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.322597160234361</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.576228596795394</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-1.10150173398324</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.51317770193379</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.21096106236531</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.682462705692934</data>
</node>
<node id="n2">
<data key="v_name">3977</data>
<data key="v_entrez">3977</data>
<data key="v_ensembl">ENSG00000113594</data>
<data key="v_symbol">LIFR</data>
<data key="v_id">n512</data>
<data key="v_deregnet_score">2.09648876373894</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.77727398490453</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.329698805535045</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-2.08143673113049</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.752930104718481</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-2.23392552488066</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.82710886183851</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.106168270654973</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.325213732517111</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.09648876373894</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.148581679883231</data>
</node>
<node id="n3">
<data key="v_name">468</data>
<data key="v_entrez">468</data>
<data key="v_ensembl">ENSG00000128272</data>
<data key="v_symbol">ATF4</data>
<data key="v_id">n1266</data>
<data key="v_deregnet_score">-2.99036351570306</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.106689501142342</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.340443198378158</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.317762561927282</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.460846906351847</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.466715489126758</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.365995399490692</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-3.26937672024955</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.27276032605497</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.145066042584698</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-2.99036351570306</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.266223768990521</data>
</node>
<node id="n4">
<data key="v_name">30009</data>
<data key="v_entrez">30009</data>
<data key="v_ensembl">ENSG00000073861</data>
<data key="v_symbol">TBX21</data>
<data key="v_id">n1691</data>
<data key="v_deregnet_score">3.05838202435757</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.60462277625249</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.652877790147561</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.612668511474249</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.882120297904894</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.253942610572907</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.683425418110838</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">0.0107460563522446</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.474767805129534</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.66538532047683</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.05838202435757</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.0374671569208339</data>
</node>
<node id="n5">
<data key="v_name">836</data>
<data key="v_entrez">836</data>
<data key="v_ensembl">ENSG00000164305</data>
<data key="v_symbol">CASP3</data>
<data key="v_id">n1806</data>
<data key="v_deregnet_score">2.09648876373894</data>
<data key="v_S02_tumor_T1__S02_liver_T1">2.62935315415718</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.938631838823593</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.106593909943653</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.313062228928768</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">0.301941757695764</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.997070864683907</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">0.365664925599101</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.210956924660535</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.477434174891409</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.09648876373894</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.514130250679554</data>
</node>
<node id="n6">
<data key="v_name">108</data>
<data key="v_entrez">108</data>
<data key="v_ensembl">ENSG00000078295</data>
<data key="v_symbol">ADCY2</data>
<data key="v_id">n1952</data>
<data key="v_deregnet_score">2.64843605572591</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-0.253764462582541</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">8.53438178864342</data>
<data key="v_S05_tumor_T2__S05_liver_T2">3.47090537239461</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-4.88347854140604</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.641070762939956</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.02131168718461</data>
<data key="v_S07_tumor_T2__S07_liver_T2">1.72949641808977</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">1.72866970443853</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.64843605572591</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.96924376828345</data>
</node>
<node id="n7">
<data key="v_name">5291</data>
<data key="v_entrez">5291</data>
<data key="v_ensembl">ENSG00000051382</data>
<data key="v_symbol">PIK3CB</data>
<data key="v_id">n2768</data>
<data key="v_deregnet_score">-1.28191506947926</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.85362342953048</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">1.95193383768154</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.350048389662947</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.304320462133023</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.530332029356001</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.274168461110877</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.12308739343561</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.6998264312365</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.112641520811398</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-1.28191506947926</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.894437526961347</data>
</node>
<node id="n8">
<data key="v_name">4352</data>
<data key="v_entrez">4352</data>
<data key="v_ensembl">ENSG00000117400</data>
<data key="v_symbol">MPL</data>
<data key="v_id">n2784</data>
<data key="v_deregnet_score">3.35843447594136</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.087283133906727</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-1.04689387909012</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.818378002352936</data>
<data key="v_S05_tumor_T2__S05_liver_T2">0.292493665993647</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">0.424199284044815</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.756401891099247</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.730487038875556</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.427065167164111</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.799618917865112</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.35843447594136</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.391597323380141</data>
</node>
<node id="n9">
<data key="v_name">6708</data>
<data key="v_entrez">6708</data>
<data key="v_ensembl">ENSG00000163554</data>
<data key="v_symbol">SPTA1</data>
<data key="v_id">n3012</data>
<data key="v_deregnet_score">3.7630374552969</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.92613462913338</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">1.0018084993743</data>
<data key="v_S05_tumor_T1__S05_liver_T1">1.72637303777985</data>
<data key="v_S05_tumor_T2__S05_liver_T2">4.6535834001283</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">3.50174074767193</data>
<data key="v_S06_tumor_T1__S06_liver_T1">1.3796879077371</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-1.27255496816928</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.23043922106962</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.190992939003444</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.7630374552969</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.47237543722207</data>
</node>
<node id="n10">
<data key="v_name">3458</data>
<data key="v_entrez">3458</data>
<data key="v_ensembl">ENSG00000111537</data>
<data key="v_symbol">IFNG</data>
<data key="v_id">n3842</data>
<data key="v_deregnet_score">2.86125510577117</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-0.976357654733464</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.169855860538845</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.0960465035697204</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.758891165986176</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.541752602132041</data>
<data key="v_S06_tumor_T1__S06_liver_T1">-0.0446818160946542</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">0.32873816811121</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.474115870122456</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.148312284111318</data>
<data key="v_S09_tumor_T1__S09_liver_T1">2.86125510577117</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.148581679883231</data>
</node>
<node id="n11">
<data key="v_name">207</data>
<data key="v_entrez">207</data>
<data key="v_ensembl">ENSG00000142208</data>
<data key="v_symbol">AKT1</data>
<data key="v_id">n4783</data>
<data key="v_deregnet_score">1.62493273137348</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-1.64968668297706</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.756112038707824</data>
<data key="v_S05_tumor_T1__S05_liver_T1">-0.173562576232984</data>
<data key="v_S05_tumor_T2__S05_liver_T2">0.386325964358277</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">0.186115073995341</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.592616645954176</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.148284677010872</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.562684334631994</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-1.03886542971626</data>
<data key="v_S09_tumor_T1__S09_liver_T1">1.62493273137348</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-1.80121222758495</data>
</node>
<node id="n12">
<data key="v_name">3674</data>
<data key="v_entrez">3674</data>
<data key="v_ensembl">ENSG00000005961</data>
<data key="v_symbol">ITGA2B</data>
<data key="v_id">n5029</data>
<data key="v_deregnet_score">3.21096106236531</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-3.01524715223497</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">1.55371353186203</data>
<data key="v_S05_tumor_T1__S05_liver_T1">0.0224228138865539</data>
<data key="v_S05_tumor_T2__S05_liver_T2">-0.60037058788754</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-0.943260751867577</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.521085869249172</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-2.47223858559785</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.242457674420383</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.595297723031685</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.21096106236531</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-0.414282415030633</data>
</node>
<node id="n13">
<data key="v_name">5506</data>
<data key="v_entrez">5506</data>
<data key="v_ensembl">ENSG00000154415</data>
<data key="v_symbol">PPP1R3A</data>
<data key="v_id">n5193</data>
<data key="v_deregnet_score">3.21096106236531</data>
<data key="v_S02_tumor_T1__S02_liver_T1">0.658701759441077</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">-0.399294043902002</data>
<data key="v_S05_tumor_T1__S05_liver_T1">10.2688948854879</data>
<data key="v_S05_tumor_T2__S05_liver_T2">3.84685212454644</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">-5.83866422466276</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.661205852413321</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">1.41695759209879</data>
<data key="v_S07_tumor_T2__S07_liver_T2">0.154872208173425</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">0.154045494522191</data>
<data key="v_S09_tumor_T1__S09_liver_T1">3.21096106236531</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">-3.69555981166179</data>
</node>
<node id="n14">
<data key="v_name">3576</data>
<data key="v_entrez">3576</data>
<data key="v_ensembl">ENSG00000169429</data>
<data key="v_symbol">CXCL8</data>
<data key="v_id">n5368</data>
<data key="v_deregnet_score">-1.76445861017272</data>
<data key="v_S02_tumor_T1__S02_liver_T1">-3.58302126289549</data>
<data key="v_S02_tumor_T2__S02_tumor_T1">0.624141351558466</data>
<data key="v_S05_tumor_T1__S05_liver_T1">2.22206482379224</data>
<data key="v_S05_tumor_T2__S05_liver_T2">4.40552620265477</data>
<data key="v_S05_tumor_T2__S05_tumor_T1">1.34461448831965</data>
<data key="v_S06_tumor_T1__S06_liver_T1">0.821411188868186</data>
<data key="v_S06_tumor_T2__S06_tumor_T1">-0.931128194940757</data>
<data key="v_S07_tumor_T2__S07_liver_T2">-0.655546297345688</data>
<data key="v_S07_tumor_T2__S07_tumor_T1">-0.325213732517111</data>
<data key="v_S09_tumor_T1__S09_liver_T1">-1.76445861017272</data>
<data key="v_S11_tumor_T2__S11_tumor_T1">0.967584072590853</data>
</node>
<edge source="n2" target="n7">
<data key="e_interaction">activation</data>
</edge>
<edge source="n3" target="n3">
<data key="e_interaction">state change</data>
</edge>
<edge source="n3" target="n14">
<data key="e_interaction">expression</data>
</edge>
<edge source="n4" target="n10">
<data key="e_interaction">expression</data>
</edge>
<edge source="n5" target="n9">
<data key="e_interaction">inhibition</data>
</edge>
<edge source="n7" target="n5">
<data key="e_interaction">activation</data>
</edge>
<edge source="n7" target="n5">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n7" target="n11">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n7" target="n11">
<data key="e_interaction">compound</data>
</edge>
<edge source="n7" target="n11">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n7" target="n11">
<data key="e_interaction">activation</data>
</edge>
<edge source="n7" target="n11">
<data key="e_interaction">expression</data>
</edge>
<edge source="n7" target="n12">
<data key="e_interaction">activation</data>
</edge>
<edge source="n7" target="n12">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n10" target="n0">
<data key="e_interaction">activation</data>
</edge>
<edge source="n10" target="n2">
<data key="e_interaction">activation</data>
</edge>
<edge source="n10" target="n8">
<data key="e_interaction">activation</data>
</edge>
<edge source="n11" target="n3">
<data key="e_interaction">activation</data>
</edge>
<edge source="n11" target="n3">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n11" target="n6">
<data key="e_interaction">activation</data>
</edge>
<edge source="n11" target="n13">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n14" target="n1">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n14" target="n1">
<data key="e_interaction">activation</data>
</edge>
</graph>
</graphml>

View File

@ -0,0 +1,82 @@
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<title>BioGraphVisart</title>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
</head>
<body id="everything">
<script type="text/javascript">
if (window.File && window.FileReader && window.FileList && window.Blob) {
// Great success! All the File APIs are supported.
} else {
alert('The File APIs are not fully supported in this browser.');
}
</script>
<div class="content">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about" class="page-link">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
</div>
<div class="entry-content">
<article class="post-content">
<!-- <p style="width: 25%;margin-top:40px; float: left">
<a href="#GeneralDoc" style="color:black; font-weight: 600; font-size: 18px;">General</a><br>
<a href="#NodesDoc" class="tab"style="color:black; font-weight: 500; font-size: 16px;">Comparison</a><br>
</p> -->
<!-- <p style="width: 50%; margin-left:25%; font-size:30px;margin-top:40px" id="GeneralDoc">General</p> -->
<p style="width: 50%; margin-left:25%; margin-top:40px">
<a href="/BioGraphVisart/BioGraphVisart"><strong>BioGraphVisart</strong></a> is a web-based tool to interactively visualize networks, especially with biological background. <br><br>
It is written in javascript based on <a href="http://js.cytoscape.org">Cytoscape.js</a>.
The input is a graphml-file (<a href="https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/example.graphml">graphml-example</a>) or sif-file (<a href="https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/example.sif">sif-example</a>). <br>
In addition to nodes and edges (genes and interaction types, respectively), GraphML can store information such as expression values as node attributes (more on <a href="http://graphml.graphdrawing.org">GraphML Format</a>).
SIF cannot store additional information (more on <a href="http://www.cbmc.it/fastcent/doc/SifFormat.htm">SIF Format</a>).<br><br>
Fig. 1 shows the network graph of the <a href="https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/example.graphml">graphml-example</a>. <a href="example"><strong>Here</strong></a> the example is displayed in BioGraphVisart. <br><br>
A more detailed description is given in the <a href="documentation">Documentation</a>.<br><br>
<img class="center" src="templates/overview_annotated.png"width="80%" height="100%" style="margin-top: 10px;" /><br>
<small>Figure 1. The red and blue numbers indicate static sections and interactive sections modifying the representation of network graph, respectively: (1) upload, (2) selection of node color attribute (number, Boolean), (3) node color legend, (4) edge style legend (According to KEGG), (5) collapse multiple edges between two nodes, (6) mouse over node displays name and value, mouse over edge displays interaction type(s), (7) layout selection, (8) highlight boolean attribute by node shape, (9) node shape legend, (10) search node by its label, (11) withdrawal of node deletion, (12) layout reset for user can zoom in and out, relocate individual nodes or entire graph, and (13) highlight KEGG pathways that appear most for displayed genes.</small>
</p>
<hr style="width: 50%; margin-left:25%;">
<p style="width: 50%; margin-left:25%; font-size:30px;" id="NodesDoc">Comparison</p>
<p style="width: 50%; margin-left:25%">
For direct <a href="heatmap"><strong>Comparison of network graphs</strong></a> the node overlap can be calculated and be displayed in a heatmap. Also a merged network graph of two selected network graphs can be generated.<br><br>
The input are multiple graphml-files.
<br><br>
<a href="exampleComparison"><strong>Here</strong></a> an example with four network graphs is displayed in BioGraphVisart.
</p>
</article>
</div>
<footer id="footer">
<div class="containerMerged">
<a href="imprint">Imprint</a><br>
<a href="datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,81 @@
<!doctype html>
<html><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>About</title>
<meta name="description" content="">
<!--<link rel="stylesheet" href="http://www.imtools.org/css/main.css" |="" prepend:="" site.baseurl="" }}"="">-->
<link rel="canonical" href="http://www.imtools.org/about/">
<link rel="alternate" type="application/html" title="BioGraphVisart" href="https://mirjamfi.github.io/BioGraphVisart/">
<script async="" src="//www.google-analytics.com/analytics.js"></script><script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-63281686-1', 'auto');
ga('send', 'pageview');
</script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
</head>
<body>
<header class="site-header">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
</div>
<div class="page-content">
<div class="wrapper">
<div class="post">
<header class="post-header">
<h1 class="post-title">About</h1>
</header>
<div class="entry-content">
<article class="post-content">
<p style="margin-top:40px"></p>
<p style="width: 50%; margin-left:25%"><strong>BioGraphVisart</strong> is a web-based tool to interactively visualize networks, especially with biological background. It is written in javascript based on <a href="http://js.cytoscape.org">Cytoscape.js</a>. <br> BioGraphVisart can currently read generic networks from various sources through a standardized file format (graphML), which can be generated by many other tools. <br> It offers different automated layout options for the graph and mapping of generic attributes (e.g., expression levels) onto nodes and edges. Node and edge styles for different interaction types according to KEGG, the generation of legends for edge styles and the node coloring by easy selection of an attribute by the user, and grouping with respect to predefined pathways (e.g., from KEGG) are additional features currently implemented. BioGraphVisart can be easily integrated into other web applications by importing its main .html-file into the other application.
<br> We simplified the process of analysis and visualization with an interactive user-friendly interface for faster data interpretation. <br>
</p>
</article>
</div>
</div>
</div>
</div>
<footer>
<div class="containerMerged">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body></html>

View File

@ -0,0 +1,78 @@
<!doctype html>
<html><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Contact</title>
<meta name="description" content="">
<!--<link rel="stylesheet" href="http://www.imtools.org/css/main.css" |="" prepend:="" site.baseurl="" }}"="">-->
<link rel="canonical" href="http://www.imtools.org/about/">
<link rel="alternate" type="application/html" title="BioGraphVisart" href="https://mirjamfi.github.io/BioGraphVisart/">
<script async="" src="//www.google-analytics.com/analytics.js"></script><script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-63281686-1', 'auto');
ga('send', 'pageview');
</script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
</head>
<body>
<header class="site-header">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
</div>
<div class="page-content">
<div class="wrapper">
<div class="post">
<header class="post-header">
<h1 class="post-title">Contact</h1>
</header>
<div class="entry-content">
<article class="post-content">
<p style="margin-top:40px"></p>
<p style="width: 50%; margin-left:25%"><strong>BioGraphVisart</strong> was developed at <a href="https://kohlbacherlab.org/">Applied Bioinformatics Group, Universität Tübingen</a>. It is published under the <a href="https://opensource.org/licenses/MIT">MIT license</a>. <br><br>
For questions, comments, problems regarding <strong>BioGraphVisart</strong>, please contact <a href="mailto:figasch@informatik.uni-tuebingen.de">Mirjam Figaschewski</a>.</p>
</article>
</div>
</div>
</div>
</div>
<footer>
<div class="containerMerged">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body></html>

View File

@ -0,0 +1,131 @@
<!doctype html>
<html><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Datenschutzerklärung</title>
<meta name="description" content="">
</script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
</head>
<body>
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
</div>
<header class="site-header">
<h1 class="site-title">Datenschutzerklärung</h1>
</header>
<div class="entry-content" itemprop="articleBody">
<p>Sehr geehrte Webseitenbesucher,</p>
<p>Vielen Dank für Ihren Besuch unserer Webseiten! Wir schätzen Ihr Interesse am BALL Projekt. Mittels dieser Datenschutzerklärung möchten wir Sie im Folgenden über die Datenverarbeitung Ihrer personenbezogenen Daten (im Folgenden „Daten“) informieren, die aus dem Besuch oder der Nutzung von Funktionen unserer Webseiten resultieren. Wir bitten Sie, diese Datenschutzerklärung sorgfältig durchzulesen, bevor Sie unsere Webseiten weiter besuchen oder die auf den Webseiten enthaltenen Funktionen nutzen. Mit dem Besuch unserer Webseiten stimmen Sie den im Folgenden beschriebenen Verarbeitungen und Nutzungen Ihrer Daten zu. Unsere Datenschutzerklärung ist nur für unsere Webseiten gültig und nicht für die Webseiten Dritter.</p>
<h4>Datenschutz und Datensicherheit</h4>
<p>Der Schutz Ihrer Privatsphäre ist uns ein wichtiges Anliegen. Zum Schutz Ihrer Daten trifft das BALL Projekt eine Vielzahl an technischen und organisatorischen Maßnahmen, um eine unbefugte Kenntnisnahme und Weitergabe, Manipulation, Verlust und unbefugte Löschung wirksam verhindern zu können.  Die von uns ergriffenen Maßnahmen unterliegen dabei der stetigen Aktualisierung. Wir orientieren uns dabei an den gesetzlichen Vorgaben, Best-Practice-Ansätzen sowie technischen Entwicklungen. Im Folgenden unterrichten wir Sie über Art, Umfang und Zweck der Erhebung, Verarbeitung und Nutzung Ihrer Daten in unserem BALL Projekt, sofern dies aus dem Besuch oder der Nutzung der Funktionen unserer Webseiten resultiert.</p>
<h4>Verantwortlicher für diese Datenschutzerklärung und diesen Onlineauftritt</h4>
<p>Prof. Dr. Oliver Kohlbacher<br />
Sand 14<br />
72076 Tübingen</p>
<h4>Ansprechpartner für den Datenschutz beim Verantwortlichen</h4>
<p>Prof. Dr. Oliver Kohlbacher<br />
Sand 14<br />
72076 Tübingen</p>
<h4>Umfang der Datenerhebung, -verarbeitung und -nutzung</h4>
<p>Grundsätzlich verfolgen wir das Ziel, die Erhebung, Verarbeitung und Nutzung von personenbezogenen Daten während Ihres Besuchs unserer Webseiten, auf das erforderliche Mindestmaß zu beschränken. Auch erheben wir i.d.R. nur diejenigen Daten von Ihnen, die wir zwingend zur Zweckerfüllung benötigen. Ebenfalls erheben wir wissentlich keine personenbezogenen Daten von Minderjährigen (= Personen unter 18 Jahren). In Fällen, in denen wir feststellen, dass uns personenbezogene Daten durch Minderjährige zur Verfügung gestellt wurden, löschen wir diese Daten umgehend. Erziehungsberechtigten empfehlen wir, auf die Internet-Aktivitäten der in ihrer Obhut befindlichen Minderjährigen zu achten.</p>
<h4>Personenbezogene Daten</h4>
<p>Personenbezogene Daten sind gemäß Art. 4 DSGVO alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen. Dies sind z.B. Angaben wie der Vor- und Nachname, die Anschrift, die E-Mail-Adresse, die Telefon- oder Mobilfunknummer, aber i.d.R. auch die IP-Adresse.</p>
<h4>Zweck der Datenverarbeitungen</h4>
<p>Sofern Sie uns Ihre Daten freiwillig zu den im Folgenden aufgeführten Zwecken mitteilen, verarbeiten und nutzen wir diese Daten ausschließlich für die Zwecke, für die Sie uns Ihre Daten zukommen lassen haben. Hierzu zählen derzeit folgende Zwecke:</p>
<h4>Portale und Plattformen zum Datenaustausch</h4>
<p>Sofern Sie uns Ihre Daten über unsere Webseiten erreichbare Portale oder Plattformen zukommen lassen bzw. zum Abruf bereitstellen, verarbeiten und nutzen wir die von Ihnen zur Verfügung gestellten Daten ausschließlich zu den Zwecken, zu denen Sie uns die Daten zukommen lassen haben. Wir möchten Sie darauf hinweisen, dass, sofern die Portale oder Plattformen durch externe Webseitenanbieter betrieben werden, möglicher Weise andere Datenschutzregeln gelten, als auf unseren Webseiten. Bitte informieren Sie sich vorab hierzu und lesen Sie auch den Punkt „Verlinkte Webseiten“ in dieser Datenschutzerklärung.</p>
<h4>Verbesserung unseres Onlineauftritts</h4>
<p>Zur Verbesserung der Gestaltung und Inhalte unserer Webseiten, der Funktionen unseres Onlineauftritts und der Benutzerfreundlichkeit unserer Webseiten erheben, verarbeiten und nutzen wir folgende Daten:</p>
<ul>
<li>Datum und Uhrzeit des Webseitenbesuchs</li>
<li>die Internetseite, von der aus Sie unsere Webseiten aus aufgerufen haben</li>
<li>das durch Sie eingesetzte Betriebssystem</li>
<li>den durch Sie eingesetzten Browser</li>
<li>die IP-Adresse, mit der Sie unsere Webseiten besuchen</li>
<li>die auf Ihrem Gerät verwendeten Spracheinstellungen</li>
<li>die von Ihnen aufgerufenen Seiten unseres Onlineauftritts oder die von unseren Webseiten heruntergeladenen Dateien</li>
<li>die während Ihres Besuchs unserer Webseiten übertragene Datenmenge</li>
<li>eine Mitteilung, ob der Aufruf unserer Webseiten erfolgreich war</li>
</ul>
<p>Wir erheben, verarbeiten und nutzen diese Daten ausschließlich zu den zuvor benannten statistischen und nicht kommerziellen Zwecken in anonymisierter oder pseudonymisierter Form, sodass ein Rückschluss auf Ihre Person möglichst verhindert wird.</p>
<h4>Cookies</h4>
<p>Auf unseren Webseiten setzen wir „Cookies“ ein. Cookies sind Textdateien, die auf dem Speicher des Gerätes, von dem aus Sie unsere Webseiten aufgerufen haben, platziert werden. Wir setzen sowohl dauerhafte Cookies als auch temporäre Cookies (sog. Session-Cookies) ein. Dauerhafte Cookies können einige Sekunden bis mehrere Jahre lang auf Ihrem Gerät gespeichert werden. Temporäre Cookies werden automatisch gelöscht, sobald Sie Ihren Browser schließen bzw. die Session beenden.</p>
<p>Cookies helfen uns</p>
<ul>
<li>bei der Identifizierung der Häufigkeit der Besuche der Webseitenbereiche</li>
<li>Präferenzen unserer Webseitenbesucher zu erkennen und die Webseiten entsprechend optimal gestalten zu können</li>
<li>die Navigation auf unseren Webseiten zu erleichtern und damit die Benutzerfreundlichkeit unserer Webseiten zu steigern</li>
<li>Informationen über einen bestimmten Zeitraum vorzuhalten und den Rechner der Webseitenbesucher zu identifizieren, sobald sie wieder auf unsere Webseiten zurückkehren. Dadurch ist es z.B. möglich, die zuvor von Ihnen gewählten Einstellungen zu verwenden, so dass Sie die Einstellungen nicht erneut vornehmen müssen (z.B. Spracheinstellungen, Log-In-Informationen).</li>
</ul>
<p>Sofern Sie nicht möchten, dass Cookies auf Ihrem Gerät gespeichert werden, können Sie Ihren Browser so einstellen, dass er Sie über die Platzierung von Cookies benachrichtigt oder diese nicht akzeptiert. Sie können auch entscheiden, ob sie nur einige wenige oder alle Kategorien von Cookies annehmen bzw. blockieren möchten. Weitere Informationen zum Umgang mit Cookies finden Sie in der Onlinehilfe Ihres verwendeten Browsers. Sofern Sie durch uns eingesetzte Cookies blockieren, möchten wir Sie darüber informieren, dass Sie möglicherweise einzelne Funktionen unserer Webseite nicht oder nur eingeschränkt verwenden können.</p>
<h4>Verlinkte Webseiten</h4>
<p>Unsere Webseiten verfügen über Verlinkungen zu externen Webseiten. Auf die Inhalte dieser Webseiten haben wir keinen Einfluss und übernehmen daher keine Verantwortung oder Haftung für die Zulässigkeit, Richtigkeit, Darstellung und Vollständigkeit der dort veröffentlichten bzw. angezeigten oder abrufbaren Inhalte. Wir informieren Sie hiermit darüber, dass beim Aufruf dieser externen Webseiten möglicherweise Ihre IP-Adresse durch den jeweils zuständigen Webseitenbetreiber protokolliert wird. Wenn Sie unsere Webseiten verlassen, empfehlen wir, die Datenschutzerklärung der externen Webseitenbetreiber zu prüfen, bevor Sie die Webseiten aufrufen oder die dortigen Funktionen nutzen.</p>
<h4>Übermittlung oder Weitergabe Ihrer Daten</h4>
<p>Eine Übermittlung an Dritte bzw. eine Weitergabe an unsere Geschäftspartner Ihrer durch uns erhobenen, verarbeiteten oder genutzten Daten erfolgt grundsätzlich nicht ohne Ihr ausdrückliches Einverständnis, es sei denn, dass dies:</p>
<ul>
<li>zur Abwicklung unserer vertraglich zugesicherten Leistungen erforderlich ist.</li>
<li>zur Durchsetzung unserer Forderungen notwendig wird.</li>
<li>durch einen gesetzlichen Erlaubnistatbestand legimitiert wird oder wir gesetzlich zur Weitergabe der Daten verpflichtet sind.</li>
<li>für Zwecke der Strafverfolgung, zur Gefahrenabwehr oder zum Schutz unserer Webseiten.</li>
<li>zur Durchsetzung der Rechte Dritter oder im Rahmen der gesetzlichen Auskunftspflichten bzw. einer gerichtlichen Anordnung zur Erteilung der Auskunft erforderlich ist.</li>
</ul>
<h4>Datenübermittlung ins Ausland</h4>
<p>Eine Übermittlung Ihrer Daten an Stellen in Länder außerhalb der Europäischen Union ist aufgrund unserer Tätigkeiten nicht erforderlich und findet daher derzeit nicht statt.</p>
<h4>Auskunftsrecht</h4>
<p>Webseitenbesucher unseres Onlineauftritts haben gemäß Art. 15 DSGVO das Recht, auf Anfrage, jederzeit und kostenfrei Auskunft über Ihre im BALL Projekt zu Ihrer Person verarbeiteten Daten zu erhalten. Der Umfang der Auskunft ergibt sich aus Art. 15 DSGVO. Ihr Auskunftsbegehren richten Sie bitte via Mail oder per Post an den oben genannten Ansprechpartner für Datenschutz.</p>
<h4>Recht auf Berichtigung Ihrer Daten</h4>
<p>Sie haben gemäß Art. 16 DSGVO das Recht, bei Vorliegen unrichtiger oder unvollständiger Daten über Sie, die Berichtigung oder Vervollständigung dieser zu verlangen. Wir werden entsprechende Anfragen prüfen und in berechtigten Fällen die erforderlichen Maßnahmen ergreifen.</p>
<h4>Recht auf Löschung und Sperrung Ihrer Daten</h4>
<p>Sie haben gemäß Art. 17 DSGVO das Recht auf Löschung Ihrer Daten.</p>
<p>Die von uns über Sie gespeicherten Daten werden datenschutzkonform vernichtet bzw. gelöscht, wenn</p>
<ul>
<li>die gesetzlichen Aufbewahrungsfristen abgelaufen sind, oder</li>
<li>die Erhebung oder Verarbeitung unrechtmäßig ist bzw. war, oder</li>
<li>die Daten zur Erfüllung der Zwecke, zu denen sie erhoben wurden, nicht mehr erforderlich sind oder</li>
<li>sofern Sie Ihre Einwilligung zur Verarbeitung und Nutzung widerrufen haben</li>
<li>sofern Sie gemäß Art. 21 DSGVO Widerspruch gegen die Verarbeitung Ihrer Daten einlegen und keine vorrangigen berechtigten Gründe für die Verarbeitung vorliegen</li>
</ul>
<p>Wir informieren Sie darüber, dass eine vollständige Löschung erst nach Ablauf der entsprechenden Fristen der steuer- und handelsrechtlichen Vorschriften erfolgt. Bis zum Ablauf dieser Fristen und bis zur endgültigen Löschung werden Ihre Daten entsprechend gesperrt und von uns nicht weiterverarbeitet.</p>
<h4>Recht auf Einschränkung der Datenverarbeitung</h4>
<p>Sie haben gemäß Art. 18 DSGVO das Recht, von uns die Einschränkung der Verarbeitung Ihrer Daten in den in Art. 18 DSGVO festgelegten Fällen und Umfängen zu verlangen. Wir werden entsprechende Anfragen prüfen und in berechtigten Fällen die erforderlichen Maßnahmen ergreifen.</p>
<h4>Recht auf Datenübertragbarkeit</h4>
<p>Sie haben gemäß Art. 20 DSGVO das Recht, Ihre von uns verarbeiteten Daten in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten. Auf Ihren ausdrücklichen Wunsch hin, werden wir Ihre Daten, an die von Ihnen eindeutig benannten Stellen übermitteln, soweit wir dies technisch leisten können und dies datenschutzrechtlich zulässig ist.</p>
<h4>Widerrufs- und Widerspruchsrecht</h4>
<p>Sie haben das Recht, jederzeit und ohne Angabe von Gründen kostenfrei die uns von Ihnen erteilte Einwilligung zur Erhebung, Verarbeitung und Nutzung Ihrer Daten für die Zukunft zu widerrufen bzw. gemäß Art. 21 DSGVO Widerspruch gegen die Verarbeitung Ihrer Daten einzulegen. Ihren Widerruf Ihrer Einwilligung bzw. Widerspruch richten Sie bitte via Mail oder per Post an den oben genannten Ansprechpartner für Datenschutz.</p>
<h4>Recht auf Beschwerde bei einer Aufsichtsbehörde</h4>
<p>Sie haben gemäß Art. 14 i.V.m. Art. 77 DSGVO das Recht auf Beschwerde bei einer Aufsichtsbehörde für den Datenschutz, sofern Sie der Ansicht sind, dass die Verarbeitung Ihrer Daten gegen die DSGVO verstößt. Die zuständige Aufsichtsbehörde ist diejenige, in dem unser Unternehmen seinen Hauptsitz hat.</p>
<h4>Recht auf wirksamen gerichtlichen Rechtsbehelf gegen den Verantwortlichen</h4>
<p>Sie haben gemäß Art. 79 DSGVO das Recht auf einen wirksamen gerichtlichen Rechtsbehelf, wenn Sie der Ansicht sind, dass Ihre zuvor aufgeführten Rechte infolge einer nicht im Einklang mit den Anforderungen der DSGVO stehenden Verarbeitung Ihrer Daten durch uns oder einen von uns beauftragten Auftragsverarbeiter verletzt wurden.</p>
<h4>Haftung und Recht auf Schadenersatz</h4>
<p>Sie haben gemäß Art. 82 DSGVO das Anspruch auf Schadenersatz gegen uns oder die durch uns beauftragte Auftragsverarbeiter, sofern Ihnen wegen eines Verstoßes gegen die DSGVO ein materieller oder immaterieller Schaden entstanden ist.</p>
<h4>Änderung der Datenschutzerklärung</h4>
<p>Diese Datenschutzerklärung wird bei neuen gesetzlichen Vorgaben oder wesentlichen Änderungen des Funktionsumfangs unserer Webseiten mit Wirkung für die Zukunft aktualisiert. Wir empfehlen Ihnen daher, unsere Datenschutzerklärung in regelmäßigen zeitlichen Abständen durchzulesen.</p>
<p>Letzte Änderung: 22.05.2018</p>
</div>
<footer>
<div class="container">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body></html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,245 @@
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<!-- Created by igraph -->
<key id="v_name" for="node" attr.name="name" attr.type="string"/>
<key id="v_entrez" for="node" attr.name="entrez" attr.type="string"/>
<key id="v_ensembl" for="node" attr.name="ensembl" attr.type="string"/>
<key id="v_symbol" for="node" attr.name="symbol" attr.type="string"/>
<key id="v_id" for="node" attr.name="id" attr.type="string"/>
<key id="v_log2foldchange" for="node" attr.name="log2foldchange" attr.type="double"/>
<key id="v_receptor" for="node" attr.name="receptor" attr.type="boolean"/>
<key id="e_interaction" for="edge" attr.name="interaction" attr.type="string"/>
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="v_name">7366</data>
<data key="v_entrez">7366</data>
<data key="v_ensembl">ENSG00000196620</data>
<data key="v_symbol">UGT2B15</data>
<data key="v_id">n40</data>
<data key="v_log2foldchange">3.31737</data>
<data key="v_receptor">false</data>
</node>
<node id="n1">
<data key="v_name">1571</data>
<data key="v_entrez">1571</data>
<data key="v_ensembl">ENSG00000130649</data>
<data key="v_symbol">CYP2E1</data>
<data key="v_id">n660</data>
<data key="v_log2foldchange">2.56347</data>
<data key="v_receptor">false</data>
</node>
<node id="n2">
<data key="v_name">5594</data>
<data key="v_entrez">5594</data>
<data key="v_ensembl">ENSG00000100030</data>
<data key="v_symbol">MAPK1</data>
<data key="v_id">n938</data>
<data key="v_log2foldchange">-0.762938</data>
<data key="v_receptor">false</data>
</node>
<node id="n3">
<data key="v_name">3265</data>
<data key="v_entrez">3265</data>
<data key="v_ensembl">ENSG00000174775</data>
<data key="v_symbol">HRAS</data>
<data key="v_id">n948</data>
<data key="v_log2foldchange">0.789062</data>
<data key="v_receptor">false</data>
</node>
<node id="n4">
<data key="v_name">4886</data>
<data key="v_entrez">4886</data>
<data key="v_ensembl">ENSG00000164128</data>
<data key="v_symbol">NPY1R</data>
<data key="v_id">n1045</data>
<data key="v_log2foldchange">-3.49792</data>
<data key="v_receptor">false</data>
</node>
<node id="n5">
<data key="v_name">2263</data>
<data key="v_entrez">2263</data>
<data key="v_ensembl">ENSG00000066468</data>
<data key="v_symbol">FGFR2</data>
<data key="v_id">n1057</data>
<data key="v_log2foldchange">0.42746</data>
<data key="v_receptor">true</data>
</node>
<node id="n6">
<data key="v_name">2099</data>
<data key="v_entrez">2099</data>
<data key="v_ensembl">ENSG00000091831</data>
<data key="v_symbol">ESR1</data>
<data key="v_id">n1150</data>
<data key="v_log2foldchange">1.57349</data>
<data key="v_receptor">false</data>
</node>
<node id="n7">
<data key="v_name">7031</data>
<data key="v_entrez">7031</data>
<data key="v_ensembl">ENSG00000160182</data>
<data key="v_symbol">TFF1</data>
<data key="v_id">n1586</data>
<data key="v_log2foldchange">5.00941</data>
<data key="v_receptor">false</data>
</node>
<node id="n8">
<data key="v_name">5320</data>
<data key="v_entrez">5320</data>
<data key="v_ensembl">ENSG00000188257</data>
<data key="v_symbol">PLA2G2A</data>
<data key="v_id">n3113</data>
<data key="v_log2foldchange">5.53554</data>
<data key="v_receptor">false</data>
</node>
<node id="n9">
<data key="v_name">2353</data>
<data key="v_entrez">2353</data>
<data key="v_ensembl">ENSG00000170345</data>
<data key="v_symbol">FOS</data>
<data key="v_id">n3339</data>
<data key="v_log2foldchange">-1.9937</data>
<data key="v_receptor">false</data>
</node>
<node id="n10">
<data key="v_name">3290</data>
<data key="v_entrez">3290</data>
<data key="v_ensembl">ENSG00000117594</data>
<data key="v_symbol">HSD11B1</data>
<data key="v_id">n4009</data>
<data key="v_log2foldchange">3.34188</data>
<data key="v_receptor">false</data>
</node>
<node id="n11">
<data key="v_name">4312</data>
<data key="v_entrez">4312</data>
<data key="v_ensembl">ENSG00000196611</data>
<data key="v_symbol">MMP1</data>
<data key="v_id">n4111</data>
<data key="v_log2foldchange">4.16173</data>
<data key="v_receptor">false</data>
</node>
<node id="n12">
<data key="v_name">56670</data>
<data key="v_entrez">56670</data>
<data key="v_ensembl">ENSG00000198829</data>
<data key="v_symbol">SUCNR1</data>
<data key="v_id">n4138</data>
<data key="v_log2foldchange">-6.98174</data>
<data key="v_receptor">false</data>
</node>
<node id="n13">
<data key="v_name">4852</data>
<data key="v_entrez">4852</data>
<data key="v_ensembl">ENSG00000122585</data>
<data key="v_symbol">NPY</data>
<data key="v_id">n4644</data>
<data key="v_log2foldchange">0</data>
<data key="v_receptor">false</data>
</node>
<node id="n14">
<data key="v_name">84699</data>
<data key="v_entrez">84699</data>
<data key="v_ensembl">ENSG00000060566</data>
<data key="v_symbol">CREB3L3</data>
<data key="v_id">n5301</data>
<data key="v_log2foldchange">4.33339</data>
<data key="v_receptor">false</data>
</node>
<edge source="n1" target="n0">
<data key="e_interaction">compound</data>
</edge>
<edge source="n1" target="n8">
<data key="e_interaction">compound</data>
</edge>
<edge source="n1" target="n10">
<data key="e_interaction">compound</data>
</edge>
<edge source="n2" target="n3">
<data key="e_interaction">inhibition</data>
</edge>
<edge source="n2" target="n3">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n2" target="n6">
<data key="e_interaction">activation</data>
</edge>
<edge source="n2" target="n6">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n2" target="n8">
<data key="e_interaction">activation</data>
</edge>
<edge source="n2" target="n9">
<data key="e_interaction">activation</data>
</edge>
<edge source="n2" target="n9">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n2" target="n9">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n2" target="n9">
<data key="e_interaction">expression</data>
</edge>
<edge source="n2" target="n14">
<data key="e_interaction">activation</data>
</edge>
<edge source="n2" target="n14">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n2" target="n14">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n3" target="n2">
<data key="e_interaction">activation</data>
</edge>
<edge source="n3" target="n2">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n3" target="n2">
<data key="e_interaction">phosphorylation</data>
</edge>
<edge source="n3" target="n9">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n5" target="n3">
<data key="e_interaction">activation</data>
</edge>
<edge source="n5" target="n3">
<data key="e_interaction">indirect effect</data>
</edge>
<edge source="n6" target="n7">
<data key="e_interaction">expression</data>
</edge>
<edge source="n6" target="n9">
<data key="e_interaction">binding/association</data>
</edge>
<edge source="n8" target="n1">
<data key="e_interaction">compound</data>
</edge>
<edge source="n9" target="n11">
<data key="e_interaction">expression</data>
</edge>
<edge source="n10" target="n0">
<data key="e_interaction">compound</data>
</edge>
<edge source="n13" target="n4">
<data key="e_interaction">activation</data>
</edge>
<edge source="n13" target="n12">
<data key="e_interaction">activation</data>
</edge>
<edge source="n14" target="n9">
<data key="e_interaction">expression</data>
</edge>
<edge source="n14" target="n13">
<data key="e_interaction">expression</data>
</edge>
<edge source="n14" target="n14">
<data key="e_interaction">state change</data>
</edge>
</graph>
</graphml>

View File

@ -0,0 +1,135 @@
<!doctype html>
<html>
<head>
<title>BioGraphVisart</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.js"></script>
<script src="https://d3js.org/d3.v6.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.css">
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.4.1/jspdf.debug.js" integrity="sha384-THVO/sM0mFD9h7dfSndI6TS0PgAGavwKvB5hAxRRvc0o9cPLohB0wb/PTA7LdUHs" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/external/html2canvas.min.js"></script>
<script src="https://unpkg.com/file-saver@1.3.8/FileSaver.js"></script>
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.15.1/cytoscape.min.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-qtip.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-cose-bilkent.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-canvas.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-no-overlap.js"></script>
<script src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-svg.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-undo-redo.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/c78b41cc690d9e7f0f3ef68ff95fc3c7f1433e73/static/scripts/cytoscapescripts/cytoscape-expand-collapse.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/external/cxtmenu.js"></script>
<script data-main="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize.js" type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/1ebdad7d2d5ee59906b8c89227d3f92e0288bbb5/static/scripts/node_modules/requirejs/require.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/commonfunctions.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/constants.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/download_single_graph.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/keggpathways.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/legends/interactiontypes.js"></script>
<script type="application/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/graph.js"></script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/external/html2canvas.min.js"></script>
<link rel="stylesheet" href="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/css/menu.css">
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/scripts/external/menu.js"></script>
</head>
<body id="everything">
<script type="text/javascript">
if (window.File && window.FileReader && window.FileList && window.Blob) {
// Great success! All the File APIs are supported.
} else {
alert('The File APIs are not fully supported in this browser.');
}
</script>
<div class="content">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
<div class="topnav-right">
<div id="downloadPart" style="visibility: hidden" class="dropdown">
<button class="dropbtnright"><i class="fas fa-file-download fa-sm"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a onClick="downloadPDF()">PDF</a>
<a onclick="downloadPNG()">PNG</a>
<a onclick="downloadSVG()">SVG</a>
<!--<a onclick="downloadJSON()">JSON</a>-->
</div>
</div>
</div>
</div>
<div id="configPart">
</div>
<p></p>
<div id="downloadPart" style="visibility: hidden">
<input name="outputFile" type="text" maxlength="512" id="outputName" value="Download File name"/>
<button class= 'butn' id="downloadPDF" onClick=downloadPDF() disabled="disabled" id="downloadPDF">.pdf</button>
<button class= 'butn' id="downloadPNG" onclick="downloadPNG()" disabled="disabled">.png</button>
<button class= 'butn' id="downloadSVG" onclick="downloadSVG()" disabled="disabled">.svg</button>
<button class= 'butn' id="downloadJSON" onclick="downloadJSON()" disabled="disabled">.json</button>
</div>
<p></p>
<div align="left" id="legend" style="visibility: hidden">
<table >
<tr>
<td>
<span style="font-size:15px" ><b>Interactions</b></span>
</td>
<td>
<small><a href="https://www.kegg.jp/kegg/xml/docs/" target="_blank">kegg.jp</a></small>
</td>
</tr>
</table>
<table id="arrows">
</table>
<div id="legendNodes"></div>
</div>
<div class="loader" id="loader1" style="visibility: hidden"></div>
<div align="left" id="cy"></div>
<div align="left" id="KEGGpathsButton" style="visibility: hidden">
<button class="butn" id="keggpathways">Show KEGG Pathways</button></p>
<div class="loader" id="loader" style="visibility: hidden"></div>
</div>
<div align="left" id= "KEGGpaths" style="visibility: hidden;"></div>
</div>
<footer id="footer">
<div class="containerMerged">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
<script type="text/javascript">readExample()</script>
</body>
</html>

View File

@ -0,0 +1,31 @@
CYP2E1 compound UGT2B15
CYP2E1 compound PLA2G2A
CYP2E1 compound HSD11B1
MAPK1 inhibition HRAS
MAPK1 phosphorylation HRAS
MAPK1 activation ESR1
MAPK1 phosphorylation ESR1
MAPK1 activation PLA2G2A
MAPK1 activation FOS
MAPK1 indirect effect FOS
MAPK1 phosphorylation FOS
MAPK1 expression FOS
MAPK1 activation CREB3L3
MAPK1 indirect effect CREB3L3
MAPK1 phosphorylation CREB3L3
HRAS activation MAPK1
HRAS indirect effect MAPK1
HRAS phosphorylation MAPK1
HRAS indirect effect FOS
FGFR2 activation HRAS
FGFR2 indirect effect HRAS
ESR1 expression TFF1
ESR1 binding/association FOS
PLA2G2A compound CYP2E1
FOS expression MMP1
HSD11B1 compound UGT2B15
NPY activation NPY1R
NPY activation SUCNR1
CREB3L3 expression FOS
CREB3L3 expression NPY
CREB3L3 state change CREB3L3

View File

@ -0,0 +1,170 @@
<!doctype html>
<html>
<head>
<title>BioGraphVisart Comparison</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/heatmap.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
<script src="https://d3js.org/d3.v6.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.4.1/jspdf.debug.js" integrity="sha384-THVO/sM0mFD9h7dfSndI6TS0PgAGavwKvB5hAxRRvc0o9cPLohB0wb/PTA7LdUHs" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.css">
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.15.1/cytoscape.min.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-qtip.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-canvas.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-cose-bilkent.js"></script>
<script src="https://unpkg.com/file-saver@1.3.8/FileSaver.js"></script>
<script src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-svg.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-no-overlap.js"></script>
<script data-main="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize_heatmap" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/1ebdad7d2d5ee59906b8c89227d3f92e0288bbb5/static/scripts/node_modules/requirejs/require.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/constants.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/legends/interactiontypes.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize_heatmap.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/download_comparison.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/keggpathways.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/commonfunctions.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/graph_heatmap.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/mergeSubgraphs.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/heatmapSubgraphs.js"></script>
<link rel="stylesheet" href="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/css/menu.css">
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/scripts/external/menu.js"></script>
<style>
</style>
</head>
<body>
<div class="content">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
<div class="topnav-right">
<div id="downloadPart" style="visibility: hidden" class="dropdown">
<button class="dropbtnright"><i class="fas fa-file-download fa-sm"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a onClick="downloadPDF()">PDF</a>
<a onclick="downloadPNG()">PNG</a>
<a onclick="downloadSVG()">SVG</a>
<!--<a onclick="downloadJSON()">JSON</a>-->
</div>
</div>
</div>
</div>
<p id="description" style="font-size: 14px">Compare networks by calculating the node overlap displayed in a heatmap. Input are multiple .graphml-files.
</p>
<div class="loader" id="loader" style="display: none;"></div>
</div>
<div id="heatmapcontainer"></div>
<div id = "config">
<p id="selectAttribute" style="visibility: hidden"> Select two networks for direct comparison by clicking on a cell in the heatmap. The merged network will open in a new tab.</p>
<ul name="values" id="values" onchange="visualize()" style="visibility: hidden">
</ul>
</div>
<div align="left" id="legend_heatmap" style="visibility: hidden">
<table >
<tr>
<td>
<span style="font-size:15px" ><b>Interactions</b></span>
</td>
<td>
<small><a href="https://www.kegg.jp/kegg/xml/docs/" target="_blank">kegg.jp</a></small>
</td>
</tr>
</table>
<table id="arrows">
</table>
</div>
</div>
<div class="clear"></div>
<p></p>
<div id="subgraphs">
<div align="left" id="left">
<div align="left" id="leftID"></div>
<div align="left" id="cyLeft"></div>
<div align="right" class="KEGGpathsbutton" id="KEGGpathsButtonLeft" style="visibility: hidden">
<button class="butn" class="keggpathways" id="keggpathwaysLeft" style="visibility: hidden">Show KEGG Pathways</button></p>
<div class="loader" id="loaderLeft" style="visibility: hidden"></div>
<div align="left" class = "KEGGpaths" id= "KEGGpathsLeft" style="visibility: hidden;"></div>
</div>
</div>
<div id="resetLeft" style="visibility: hidden">
<div id="downloadPartLeft" style="visibility: hidden" class="dropdown" style="float: left">
<button class="butn"><i class="fas fa-file-download fa-lg"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a id="downloadLeftPNG">.png</a>
<a id="downloadLeftSVG">.svg</a>
</div>
</div>
<button class= 'butn' id="resetLeftLayout">Reset layout</button>
<ul id ="selectlayoutLeft"></ul>
</div>
<p></p>
<div align="left" id="right">
<div align="left" id="rightID"></div>
<div align="left" id="cyRight"></div>
<div align="right" class="KEGGpathsbutton" id="KEGGpathsButtonRight" style="visibility: hidden">
<button class="butn" id="keggpathwaysRight" style="visibility: hidden">Show KEGG Pathways</button></p>
<div class="loader" id="loaderRight" style="visibility: hidden"></div>
<div align="left" class = "KEGGpaths" id= "KEGGpathsRight" style="visibility: hidden;"></div>
</div>
</div>
<div id="resetRight" style="visibility: hidden">
<div id="downloadPartRight" style="visibility: hidden" class="dropdown" style="float: left">
<button class="butn"><i class="fas fa-file-download fa-lg"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a id="downloadRightPNG">.png</a>
<a id="downloadRightSVG">.svg</a>
</div>
</div>
<button class = "butn" id="resetRightLayout">Reset layout</button>
<ul id ="selectlayoutRight"></ul>
</div>
<div class="clear"></div>
</div>
<p></p>
</div>
<footer id="footer">
<div class="container">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
<script type="text/javascript">loadExample()</script>
</body>
</html>

View File

@ -0,0 +1,13 @@
CYP2E1 compound UGT2B15
CYP2E1 compound PLA2G2A
CYP2E1 compound HSD11B1
MAPK1 inhibition HRAS
MAPK1 phosphorylation HRAS
MAPK1 activation ESR1
MAPK1 phosphorylation ESR1
MAPK1 activation PLA2G2A
MAPK1 activation FOS
MAPK1 phosphorylation FOS
MAPK1 expression FOS
MAPK1 activation CREB3L3
MAPK1 phosphorylation CREB3L3

View File

@ -0,0 +1,165 @@
<!doctype html>
<html>
<head>
<title>BioGraphVisart Comparison</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/heatmap.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
<script src="https://d3js.org/d3.v6.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.4.1/jspdf.debug.js" integrity="sha384-THVO/sM0mFD9h7dfSndI6TS0PgAGavwKvB5hAxRRvc0o9cPLohB0wb/PTA7LdUHs" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.15.1/cytoscape.min.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/1ebdad7d2d5ee59906b8c89227d3f92e0288bbb5/static/scripts/html2canvas.min.js"></script>
<script src="https://unpkg.com/file-saver@1.3.8/FileSaver.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.15.1/cytoscape.min.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-qtip.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-cose-bilkent.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-canvas.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-no-overlap.js"></script>
<script src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-svg.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-undo-redo.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/commonfunctions.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/constants.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/download_comparison.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/keggpathways.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/jquery.csv.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/legends/interactiontypes.js"></script>
<script data-main="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize_heatmap" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/1ebdad7d2d5ee59906b8c89227d3f92e0288bbb5/static/scripts/node_modules/requirejs/require.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize_heatmap.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/graph_heatmap.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/mergeSubgraphs.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/heatmapSubgraphs.js"></script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<link rel="stylesheet" href="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/css/menu.css">
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/scripts/external/menu.js"></script>
<style>
</style>
</head>
<body>
<div class="content">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left" style="float: left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
</div>
<p id="description" style="font-size: 14px">Compare networks by calculating the node overlap displayed in a heatmap. Input are multiple .graphml-files.
</p>
<div id="dataPart">
<input type="file" accept=".graphml,.sif" id="fileName" name="file" multiple/>
<button class= 'butn' onclick="loadDir()" id="loadGraphml" >Load files</button>
<div class="loader" id="loader" style="display: none;"></div>
<div id="heatmapcontainer"></div>
<div id = "config">
<p id="selectAttribute" style="visibility: hidden"> Select two networks for direct comparison by clicking on a cell in the heatmap. The merged network will open in a new tab.</p>
<ul name="values" id="values" onchange="visualize()" style="visibility: hidden">
</ul>
</div>
<div align="left" id="legend_heatmap" style="visibility: hidden">
<table >
<tr>
<td>
<span style="font-size:15px" ><b>Interactions</b></span>
</td>
<td>
<small><a href="https://www.kegg.jp/kegg/xml/docs/" target="_blank">kegg.jp</a></small>
</td>
</tr>
</table>
<table id="arrows">
</table>
</div>
</div>
<div class="clear"></div>
<p></p>
<div align="left" id="left">
<div align="left" id="leftID"></div>
<div align="left" id="cyLeft"></div>
<div align="right" class="KEGGpathsbutton" id="KEGGpathsButtonLeft" style="visibility: hidden">
<button class="butn" class="keggpathways" id="keggpathwaysLeft" style="visibility: hidden">Show KEGG Pathways</button></p>
<div class="loader" id="loaderLeft" style="visibility: hidden"></div>
<div align="left" class = "KEGGpaths" id= "KEGGpathsLeft" style="visibility: hidden;"></div>
</div>
</div>
<div id="resetLeft" style="visibility: hidden">
<div id="downloadPartLeft" style="visibility: hidden" class="dropdown" style="float: left">
<button class="butn"><i class="fas fa-file-download fa-lg"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a id="downloadLeftPNG">.png</a>
<a id="downloadLeftSVG">.svg</a>
</div>
</div>
<button class= 'butn' id="resetLeftLayout">Reset layout</button>
<ul id ="selectlayoutLeft"></ul>
</div>
<p></p>
<div align="left" id="right">
<div align="left" id="rightID"></div>
<div align="left" id="cyRight"></div>
<div align="right" class="KEGGpathsbutton" id="KEGGpathsButtonRight" style="visibility: hidden">
<button class="butn" id="keggpathwaysRight" style="visibility: hidden">Show KEGG Pathways</button></p>
<div class="loader" id="loaderRight" style="visibility: hidden"></div>
<div align="left" class = "KEGGpaths" id= "KEGGpathsRight" style="visibility: hidden;"></div>
</div>
</div>
<div id="resetRight" style="visibility: hidden">
<div id="downloadPartRight" style="visibility: hidden" class="dropdown" style="float: left">
<button class="butn"><i class="fas fa-file-download fa-lg"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a id="downloadRightPNG">.png</a>
<a id="downloadRightSVG">.svg</a>
</div>
</div>
<button class = "butn" id="resetRightLayout">Reset layout</button>
<ul id ="selectlayoutRight"></ul>
</div>
<div class="clear"></div>
</div>
<p></p>
</div>
<footer id="footer">
<div class="container">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,114 @@
<!doctype html>
<html><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Imprint</title>
<meta name="description" content="">
</script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
</head>
<body>
<div class="topnav" id ="nav">
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
</div>
<header class="site-header">
<h1 class="site-title">Imprint</h1>
</header>
<div id="c216" class="csc-default">
<h4>Allgemeine Informationen gem. § 5 TMG, § 55 RStVG</h4>
<div>
<table class="plain">
<tbody>
<tr>
<td>Adresse</td>
<td>
<p class="bodytext">Eberhard Karls Universität Tübingen<br />
Geschwister-Scholl-Platz<br />
72074 Tübingen</p>
</td>
</tr>
<tr>
<td></td>
<td>Die Universität Tübingen ist eine Körperschaft des öffentlichen Rechts. Sie wird durch den Rektor Prof. Dr. Bernd Engler (eMail: bernd. engler [at] uni-tuebingen.de) gesetzlich vertreten</td>
</tr>
<tr>
<td>Telefonzentrale</td>
<td>+49 (0) 70 71/29-0</td>
</tr>
<tr>
<td>Fax Zentrale Verwaltung</td>
<td>+49 (0) 70 71/29-59 90</td>
</tr>
<tr>
<td>Internet-Adresse</td>
<td><a class="external-link" href="https://www.uni-tuebingen.de/">https://www.uni-tuebingen.de</a></td>
</tr>
<tr>
<td>Umsatzsteuer-Identifikationsnummer</td>
<td>
<p class="bodytext">gemäß § 27a Umsatzsteuergesetz: <b>DE812383453</b></p>
</td>
</tr>
<tr>
<td>Aufsichtsbehörde</td>
<td>Ministerium für Wissenschaft, Forschung und Kunst Baden-Württemberg</td>
</tr>
</tbody>
</table>
</div>
<h4>1. Externe Links</h4>
<div id="c225" class="csc-frame csc-frame-default">
<div class="csc-textpic-text">
<p class="bodytext">Diese Webseite der Universität Tübingen enthält auch entsprechend gekennzeichnete Links oder Verweise auf Websites Dritter. Durch den Link vermittelt die Universität Tübingen lediglich den Zugang zur Nutzung dieser Inhalte. Eine Zustimmung zu den Inhalten den verlinkten Seiten Dritter ist damit nicht verbunden. Die Universität Tübingen übernimmt daher keine Verantwortung für die Verfügbarkeit oder den Inhalt solcher Websites und keine Haftung für Schäden oder Verletzungen, die aus der Nutzung gleich welcher Art solcher Inhalte entstehen. Hierfür haftet allein der Anbieter der jeweiligen Seite.</p>
<p class="bodytext">Bei der erstmaligen Verknüpfung mit einem anderen Internetangebot hat die Redaktion dessen Inhalt daraufhin überprüft, ob durch ihn eine mögliche zivilrechtliche oder strafrechtliche Verantwortlichkeit ausgelöst wird. Dort nachträglich eingebundene Inhalte können jedoch leider nicht überprüft werden. Der Verweis auf dieses Angebot wird unverzüglich aufgehoben werden, sobald die Redaktion feststellt oder von anderen darauf hingewiesen wird, dass ein bestimmtes Angebot, zu dem ein Link bereitgestellt wurde, eine zivil- oder strafrechtliche Verantwortlichkeit auslöst.</p>
<h4>2. Urheberrecht</h4>
<p class="bodytext">Copyright (c), Universität Tübingen. Alle Rechte vorbehalten.</p>
<p class="bodytext">Alle auf dieser Website veröffentlichten Inhalte (Layout, Texte, Bilder, Grafiken, Video- und Tondateien usw.) unterliegen dem Urheberrecht. Jede vom Urheberrechtsgesetz nicht zugelassene Verwertung bedarf vorheriger ausdrücklicher Zustimmung der Universität Tübingen. Dies gilt insbesondere für Vervielfältigung, Bearbeitung, Übersetzung, Einspeicherung, Verarbeitung bzw. Wiedergabe von Inhalten in Datenbanken oder anderen elektronischen Medien und Systemen. Fotokopien und Downloads von Web-Seiten für den privaten, wissenschaftlichen und nicht kommerziellen Gebrauch dürfen hergestellt werden.</p>
<p class="bodytext">Das Urheberrecht für die Wort-Bild-Marke liegt ausdrücklich bei der Universität Tübingen.</p>
<p class="bodytext">Wir erlauben ausdrücklich und begrüßen das Zitieren unserer Dokumente und Webseiten sowie das Setzen von Links auf unsere Website.</p>
<h4>3. Haftungsausschluss</h4>
<p class="bodytext">Die Informationen auf dieser Website wurden nach bestem Wissen und Gewissen sorgfältig zusammengestellt und geprüft. Es wird jedoch keine Gewähr weder ausdrücklich noch stillschweigend für die Vollständigkeit, Richtigkeit oder Aktualität sowie die jederzeitige Verfügbarkeit der bereit gestellten Informationen übernommen. Eine Haftung für Schäden, die aus der Nutzung oder Nichtnutzung der auf dieser Website angebotenen Informationen entstehen ist soweit gesetzlich zulässig ausgeschlossen.</p>
</div>
<h4>Ansprechpartner</h4>
<div class="csc-textpic-text">
<p>Prof. Dr. Oliver Kohlbacher<br />
Sand 14<br />
72076 Tübingen<br />
Telefon: +49-7071-29-70458<br />
Fax: +49-7071-29-5152<br />
eMail: oliver.kohlbacher [at] uni-tuebingen.de</p>
</div>
</div>
</div>
<footer>
<div class="container">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body></html>

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,146 @@
<!doctype html>
<html>
<head>
<title>BioGraphVisart Comparison</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/basic/jquery.qtip.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/heatmap.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://unpkg.com/file-saver@1.3.8/FileSaver.js"></script>
<script src="https://d3js.org/d3.v6.js"></script>
<script src="https://kit.fontawesome.com/342fe75ec3.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.4.1/jspdf.debug.js" integrity="sha384-THVO/sM0mFD9h7dfSndI6TS0PgAGavwKvB5hAxRRvc0o9cPLohB0wb/PTA7LdUHs" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.15.1/cytoscape.min.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-qtip.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-klay.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-cose-bilkent.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-dagre.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-canvas.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-no-overlap.js"></script>
<script src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-svg.js"></script>
<script type="application/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b7067838bcd355da495fc56a4930dc8a00c67e1/static/scripts/cytoscapescripts/cytoscape-undo-redo.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/legends/interactiontypes.js"></script>
<script data-main="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize_heatmap" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/1ebdad7d2d5ee59906b8c89227d3f92e0288bbb5/static/scripts/node_modules/requirejs/require.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/commonfunctions.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/constants.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/download_merge.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/keggpathways.js"></script>
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/initialize_heatmap.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/graph_heatmap.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/mergeSubgraphs.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/heatmapSubgraphs.js"></script>
<script type="text/javascript" src="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/scripts/showMerged.js"></script>
<link rel="stylesheet" type="text/css" href="https://raw.githack.com/MirjamFi/BioGraphVisart/master/static/css/subgraphCss.css">
<link rel="stylesheet" href="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/css/menu.css">
<script type="text/javascript" src="https://rawcdn.githack.com/MirjamFi/BioGraphVisart/2b47d3753d76023f1b0219d7cea883a2de9ebe95/static/scripts/external/menu.js"></script>
<style>
</style>
</head>
<body>
<div class="topnav" id ="nav" style="margin-bottom: 20px">
<div class="dropdown topnav-left">
<button class="dropbtn_topnav"><i class="fas fa-bars"></i>
</button>
<div class="dropdown-content">
<a class="page-link" href="/BioGraphVisart/heatmap">Comparison</a>
<a class="page-link"href="/BioGraphVisart/about">About</a>
<a class="page-link" href="/BioGraphVisart/documentation">Documentation</a>
<a class="page-link" href="/BioGraphVisart/contact">Contact</a>
</div>
</div>
<div class="topnav-centered">
<a class="page-link" href="/BioGraphVisart">BioGraphVisart</a>
</div>
<div class="topnav-right">
<div id="downloadPart" class="dropdown">
<button class="dropbtnright"><i class="fas fa-file-download fa-sm"></i></button>
<div id="downloadTypes" class="dropdown-content">
<a onClick="downloadMergePDF()">PDF</a>
<a onclick="downloadMergePNG()">PNG</a>
<a onclick="downloadMergeSVG()">SVG</a>
</div>
</div>
</div>
</div>
<!-- <h1>Merged Graph</h1> -->
<div id = "merged_graph_buttons"></div>
</div>
<div id = "legend_merge">
<table style="width: 50px" id = "legend_interactions">
<tr>
<td>
<span style="font-size:15px" ><b>Interactions</b></span>
</td>
<td>
<small><a href="https://www.kegg.jp/kegg/xml/docs/" target="_blank">kegg.jp</a></small>
</td>
</tr>
</table>
<table style="width: 250px"id="arrows">
</table>
</div>
</div>
<p></p>
<div class="content">
<div align="left" id = "merged_graph"></div>
<div id="merged_graph_legend" class="center-div" style="visibility: hidden;"></div>
<div align="right" class="KEGGpathsbutton" id="KEGGpathsButtonMerge" style="visibility: hidden">
<button class= 'butn' class="butn" id="keggpathwaysMerge" >Show KEGG Pathways</button></p>
<div class="loader" id="loaderMerge" style="visibility: hidden"></div>
<div align="left" class = "KEGGpathsMerge" id= "KEGGpathsMerge" style="visibility: hidden;"></div>
</div>
<script type="text/javascript">
var queryString = decodeURIComponent(window.location.search);
queryString = queryString.substring(1);
var queries = queryString.split("&");
var leftID = queries[0].split('=')[1];
var rightID = queries[1].split('=')[1];
// var file1 = queries[2].split('=')[1].split("blob:")[1];
// var file2 = queries[3].split('=')[1].split("blob:")[1];
var val = queries[4].split('=')[1]
var example = queries[5].split('=')[1]
if(example == 'true'){
var file1 = queries[2].split('=')[1];
var file2 = queries[3].split('=')[1];
createMergedExample(file1, file2, val, leftID, rightID)
}
else{
var file1 = queries[2].split('=')[1].split("blob:")[1];
var file2 = queries[3].split('=')[1].split("blob:")[1];
createMerged(file1, file2, val, leftID, rightID)
}
</script>
</div>
<footer id="footer">
<div class="containerMerged">
<a class="page-link" href="/BioGraphVisart/imprint">Imprint</a><br>
<a class="page-link" href="/BioGraphVisart/datenschutzerklarung" aria-current="page">Datenschutzerklärung</a>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,262 @@
/*
Naming convention:
Block
element
-modifier
*/
.Menu {
display: none;
position: relative;
}
/* Three basic menu layouts */
/* This also enforces that menu is a ul, and that
* layout modifier is specified
*/
ul.Menu.-horizontal,
ul.Menu.-vertical {
display: inline-block;
}
ul.Menu.-floating {
display: block;
position: absolute;
}
/* Menu and menu-item layout */
.Menu,
.Menu li,
.Menu li > ul {
list-style: none;
padding: 0px;
margin: 0px;
}
.Menu li {
display: block;
position: relative;
white-space: nowrap;
word-break: keep-all;
}
.Menu.-horizontal > li {
display: inline-block;
float: left;
}
.Menu li > * {
display: block;
position: relative;
}
.Menu li > ul {
position: absolute;
/*min-width: 100%;*/
top: 0px;
left: 100%;
}
.Menu.-horizontal.-alignRight li > ul {
left: auto;
right: 100%;
}
.Menu.-horizontal.-alignRight > li > ul {
right: 0px;
}
.Menu.-horizontal > li > ul {
top: auto;
left: auto;
}
/* Menu behaviour */
.Menu li > ul,
.Menu.-floating {
display: none;
}
.Menu li > ul.-visible,
ul.Menu.-floating.-visible {
display: block;
}
/* Menu animation */
.Menu li > ul,
.Menu.-horizontal.-alignRight li > ul,
.Menu.-floating {
opacity: 1;
transform: scale(1) translateY(0px);
transform-origin: left top;
}
.Menu.-alignRight li > ul,
.Menu.-floating.-alignRight {
transform-origin: right top;
}
.Menu li > ul.-animating,
.Menu.-floating.-animating {
opacity: 0 !important;
transform: scale(0.96) translateX(-16px);
}
.Menu li > ul.-animating {
z-index: -1 !important;
}
.Menu.-horizontal > li > ul.-animating {
transform: scale(0.96) translateY(-16px);
}
.Menu.-alignRight li > ul.-animating,
.Menu.-floating.-alignRight.-animating {
transform: scale(0.96) translateX(16px);
}
.Menu.-horizontal.-alignRight > li > ul.-animating {
transform: scale(0.96) translateY(-16px);
}
/* Menu item icons */
.Menu *[data-icon]:before {
position: absolute;
left: 0px;
top: 0px;
bottom: 0px;
margin: auto 0px;
}
.Menu .Icon,
.Menu *[data-icon]:before {
line-height: inherit;
}
.Menu .Icon {
padding: 0px;
}
.Menu *:empty[data-icon] {
padding-left: 0px !important;
padding-right: 0px !important;
}
/* Submenu chevrons */
.Menu li.-hasSubmenu > a:after {
display: block;
position: absolute;
width: 6px;
height: 6px;
right: 6px;
bottom: 0px;
top: 0px;
margin: auto 0px;
transform: rotate(45deg);
border-width: 1px;
border-color: black;
border-style: solid solid none none;
content: "";
}
.Menu.-horizontal > li.-hasSubmenu > a:after {
width: 4px;
height: 4px;
bottom: 4px;
top: auto;
left: 0px;
right: 0px;
margin: 0px auto;
border-style: none solid solid none;
}
.Menu li.-hasSubmenu.-noChevron > a:after {
display: none;
}
/*
** Configurable values
*/
/* Height of navbar, and menu items */
/* All of these must be of equal value */
.Menu {
line-height: 30px;
}
.Menu.-horizontal,
.Menu li,
.Menu li > :first-child {
height: 30px;
}
.Menu *[data-icon]:before,
.Menu .Icon {
width: 30px;
height: 30px;
}
.Menu *[data-icon] {
min-width: 30px;
min-height: 30px;
padding-left: 30px;
}
/* Default font settings for menu */
.Menu {
font-family: Arial, Helvetica, Sans;
font-size: 10px;
}
/* Icon font sizes */
.Menu *[data-icon]:before,
.Menu .Icon {
font-size: 10px;
}
/* For submenus */
.Menu > li ul .Icon,
.Menu.-floating .Icon,
.Menu > li ul *[data-icon]:before,
.Menu.-floating *[data-icon]:before,
{
font-size: 18px;
}
/* Colouring of menus */
/* Foreground */
.Menu,
.Menu li.-hasSubmenu > a:after {
color: black;
border-color: black; /* chevron colour */
}
/* Background */
.Menu ul,
.Menu.-floating {
background: white;
}
/* Padding for each menu item */
.Menu li > * {
padding: 0px 12px;
}
/* Indent of chevron */
.Menu li li.-hasSubmenu > a:after,
.Menu:not(.-horizontal) > li.-hasSubmenu > a:after {
right: 12px;
}
.Menu li li.-hasSubmenu > a,
.Menu:not(.-horizontal) > li.-hasSubmenu > a {
padding-right: 2px;
}
/* Minimum width of dropdown menus */
.Menu.-horizontal li > ul,
.Menu.-floating {
min-width: 100px;
}
/* Animation speed of dropdown menus */
.Menu li > ul,
.Menu.-floating {
transition: width 0.1s, height 0.1s, transform 0.1s, opacity 0.1s;
}
/* Styling of hyperlink text */
.Menu li > a {
text-decoration: none;
color: inherit;
}
/* Animation speed of :hover shading */
.Menu li > a:first-child {
transition: background-color 0.2s;
}
/* Colour of :hover shading */
.Menu li:hover > a:first-child,
.Menu li.-active > a:first-child {
background-color: rgba(0,0,0,0.1);
}
/*
** End configurable values
*/

View File

@ -0,0 +1,490 @@
body {
font-family: helvetica neue, helvetica, liberation sans, arial, sans-serif;
font-size: 12px;
height:100%;
display: flex;
flex-direction: column;
}
a{
text-decoration: none;
}
.dropdown {
/*float: right;*/
width: 5vw;
margin-right: 4vw;
border-radius:4px;
}
.dropdown .dropbtn {
font-size: 1vw;
border: none;
outline: none;
color: black;
/*padding: 14px 16px;*/
background-color: inherit;
font-family: inherit;
margin: 0;
}
.dropdown .dropbtnright {
font-size: 1vw;
border: none;
outline: none;
color: black;
/*padding: 14px 16px;*/
background-color: inherit;
font-family: inherit;
margin: 0;
}
.dropdown .dropbtn_topnav {
font-size: 1vw;
border: none;
outline: none;
color: black;
/*padding: 14px 16px;*/
background-color: inherit;
font-family: inherit;
margin: 0;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 10;
}
li{
z-index: 9;
}
ul{
z-index: 9;
}
.topnav{
position: relative;
width: 100%;
border-bottom: 1px solid #DCDCDC;
border-top: 1px solid #DCDCDC;
color: grey;
text-decoration: none;
height: 3vw;
}
/* Style the links inside the navigation bar */
.topnav a {
float: left;
text-align: center;
padding: 1vw 16px;
}
.topnav a:hover {
text-decoration: underline;
}
.dropdown-content a {
float: none;
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
text-align: left;
}
/*
.dropdown-content a:hover {
background-color: #ddd;
}*/
.dropdown:hover .dropdown-content {
display: block;
}
a:visited{color: blue}
.page-link{color: #000;}
.page-link:visited {color:#000;}
/* Right-aligned section inside the top navigation */
.topnav-right {
float: right;
font-size: 1vw;
/*margin-top: 1vw;*/
}
.topnav-left {
float: left;
font-size: 1vw;
}
.topnav-centered a{
float: none;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 1vw;
font-weight: 500;
}
.vl {
border-left: thin solid #BDBDBD;
height: 500px;
}
#description{
font-size: 18px;
text-align: left;
}
img.center {
display: block;
margin: 0 auto;
}
.butn {
cursor: pointer;
background: #e3e3e3;
/*background-image: -webkit-linear-gradient(top, #f9f9f9, #BDBDBD);
background-image: -moz-linear-gradient(top, #f9f9f9, #BDBDBD);
background-image: -ms-linear-gradient(top, #f9f9f9, #BDBDBD);
background-image: -o-linear-gradient(top, #f9f9f9, #BDBDBD);
background-image: linear-gradient(to bottom, #f9f9f9, #BDBDBD);*/
-webkit-border-radius: 28;
-moz-border-radius: 28;
border-radius: 28px;
font-family: Arial;
color: black;
font-size: 10px;
padding: 5px 10px 5px 10px;
border: solid #e3e3e3 3px;
text-decoration: none;
}
.butn:hover {
background: #e3e3e3;
/*background-image: -webkit-linear-gradient(top, #e3e3e3, #e3e3e3);
background-image: -moz-linear-gradient(top, #e3e3e3, #e3e3e3);
background-image: -ms-linear-gradient(top, #e3e3e3, #e3e3e3);
background-image: -o-linear-gradient(top, #e3e3e3, #e3e3e3);
background-image: linear-gradient(to bottom, #e3e3e3, #e3e3e3);*/
text-decoration: none;
border: solid #cacaca 3px;
}
#resetMerge{
width:120px;
}
select {
cursor: pointer;
border: 0.5px solid #BDBDBD;
border-radius:4px;
}
input {
cursor: pointer;
/*background-color: #BDBDBD;*/
color: black;
padding: 5px 8px;
border: 0.5px solid #BDBDBD;
border-radius:4px;
}
input:hover{
border-color: black;
border: 1px solid #999;
border-radius: 3px;
}
#cy {
width: 65%;
position: absolute;
top: 160px;
left: 190px;
bottom: 70px;
background-color:none;
z-index: 2;
}
#searchgene{
margin-left: 30px;
}
#legend {
position: absolute;
top: 160px;
left: 10px;
font-size: 10px;
width: 180px;
height: 490px;
}
#legendNodes {
position: absolute;
margin-top: 10px;
left: 10px;
font-size: 10px;
width: 180px;
height: 200px;
}
#selectColorAttribute{
margin-left: 30px;
}
.KEGGpathsButton{
position: absolute;
top: 160px;
margin-left:84%;
}
#KEGGpaths{
position: absolute;
top: 210px;
margin-left:85%;
}
#keggpathways{
position: absolute;
top: 180px;
margin-left:85%;
}
#keggpathwaysMerge{
position: absolute;
top: 148px;
left:86%;
}
#KEGGpathsMerge{
position: absolute;
top: 185px;
left:86%;
}
#subgraphs{
margin-top: 5px;
margin-left: 220px;
}
#keggpathwaysRight{
position: absolute;
top: 10px;
left:84%;
}
#KEGGpathsRight{
position: absolute;
top: 30px;
left:84%;
}
#keggpathwaysLeft{
position: absolute;
top: 10px;
left:84%;
}
#KEGGpathsLeft{
position: absolute;
top: 30px;
left:84%;
}
#heatmap_shapes{
width: 200px;
height: 200px;
top: 10px;
}
.loader {
border: 16px solid #f3f3f3;
border-top: 16px solid #3498db;
border-radius: 50%;
animation: spin 5s linear infinite;
margin: 0 auto;
width: 1vw;
height: 1vw;
}
#loader{
position: absolute;
top: 200px;
left: 85%;
right: 0;
}
.loader1 {
border: 16px solid #f3f3f3;
border-top: 16px solid #3498db;
border-radius: 50%;
width: 1vw;
height: 1vw;
animation: spin 5s linear infinite;
margin: 0 auto;
}
.loader1{
position: absolute;
top: 370px;
left: 50%;
right: 0;
}
#loaderLeft {
position: absolute;
top: 50px;
left: 85%;
right: 0;
bottom: 0;
}
#loaderRight {
position: absolute;
top: 50px;
left: 85%;
right: 0;
bottom: 0;
}
#loaderMerge {
position: absolute;
top: 250px;
left: 81%;
right: 0;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
#heatmapcontainer {
min-width: 300px;
max-width: 1000px;
height: 400px;
margin: 1em auto;
}
/*#downloadPartLeft{
margin-top: 20px;
}*/
#outputNameHeatmap{
margin-left: 20px;
}
#left {
width: 100%;
height: 500px;
position: relative;
margin: 10px 10px 10px 10px;
overflow: hidden;
}
#right {
width: 100%;
height: 500px;
position: relative;
margin: 10px 10px 10px 10px;
}
#rightID{
font-weight: bold;
}
#leftID{
font-weight: bold;
}
#downloadPartRight{
margin-top: 20px;
}
#cyLeft {
width: 85%;
height: 100%;
position: absolute;
margin: 0% 5% 5% 0px;
}
#cyRight {
width: 85%;
height: 100%;
position: absolute;
margin: 0% 10% 5% 0%;
}
#merged_graph {
width: 65%;
position: absolute;
top: 150px;
left: 280px;
bottom: 70px;
background-color:none;
z-index: 2;
}
#legend_heatmap {
position: absolute;
/*top: 700px;*/
/*left: 10px;*/
margin-top: 40px;
font-size: 10px;
margin-left: 10px;
}
#merged_graph_legend {
font-size: 10px;
margin-top: 10px;
}
#legendArrows {
width: 300px;
float:left;
}
#merged_graph_buttons{
position: relative;
margin: 0px 10px 10px 10px;
}
#selectlayoutMerge{
position: relative;
margin-left: 10px;
}
.center-div
{
margin: 0 auto;
width: 100px;
}
/* Style the active class, and buttons on mouse-over */
.active{
color: black;
font-weight: bold;
}
.csc-default{
flex: 1;
}
.entry-content{
flex: 1;
}
.content{
flex: 1;
}
footer
{
color: white;
width: 98%;
}
.container {
border-top: 1px solid #DCDCDC;
width: 98%;
margin: 1em auto;
max-width: 100%;
padding: 0 1em;
}
.containerMerged {
position: fixed;
bottom: 0;
width: 98%;
padding: 1em 1em;
margin: 0.5em auto;
border-top: 1px solid #DCDCDC;
color: white;
}
.dropdown-submenu {
position: relative;
}
.dropdown-submenu .dropdown-menu {
top: 0;
left: 100%;
margin-top: -1px;
}

View File

@ -0,0 +1,188 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90.87188mm"
height="31.532946mm"
viewBox="0 0 90.87188 31.532946"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="activation_expression.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="powerstroke"
id="path-effect843"
is_visible="true"
offset_points="2,3.6329516"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect839"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect837"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect835"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect831"
is_visible="true"
offset_points="2,0.30211571"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect827"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect825"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect821"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect817"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.620771"
inkscape:cx="95.815713"
inkscape:cy="44.327137"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-77.364146,-26.558506)">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 78.105519,39.159907 h 54.635161 v 3.197185 h -55.0475 v -3.197185 z"
id="path847"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.26579934px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 133.32139,26.75261 c -0.41402,8.401876 -0.32277,18.021469 0,31.128088 l 34.59056,-16.978957 z"
id="path851"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="102.50623"
y="34.445686"
id="text902"><tspan
sodipodi:role="line"
id="tspan900"
x="102.50623"
y="43.809456"
style="stroke-width:0.26458332" /></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -0,0 +1,200 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90.87188mm"
height="31.714531mm"
viewBox="0 0 90.87188 31.714531"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="binding_association_dissociation.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.57192761"
inkscape:cx="168.00795"
inkscape:cy="-317.44891"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="535"
inkscape:window-y="315"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-60.547895,-32.793777)">
<g
transform="translate(-16.816251,6.2694094)"
id="layer1-0"
inkscape:label="Ebene 1">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 78.105519,39.159907 h 54.635161 v 3.197185 h -55.0475 v -3.197185 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path851"
d="m 133.32139,26.75261 c -0.41402,8.401876 -0.32277,18.021469 0,31.128088 l 34.59056,-16.978957 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.26579934px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
id="text902"
y="34.445686"
x="102.50623"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="43.809456"
x="102.50623"
id="tspan900"
sodipodi:role="line" /></text>
</g>
<rect
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.74958092;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect79"
width="4.5357146"
height="31.714531"
x="100.46535"
y="32.793777" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,339 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="92.98214mm"
height="31.967878mm"
viewBox="0 0 92.982141 31.967879"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="compound.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843-8"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839-3"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837-9"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835-0"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831-5"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827-2"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825-2"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821-7"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817-3"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="320.72996"
inkscape:cy="-368.78719"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="362"
inkscape:window-y="418"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-52.571148,-19.290521)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="74.839287"
y="27.880953"
id="text956"><tspan
sodipodi:role="line"
id="tspan954"
x="74.839287"
y="37.24472"
style="font-size:14.11111069px;stroke-width:0.26458332" /></text>
<flowRoot
xml:space="preserve"
id="flowRoot1040"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion1042"><rect
id="rect1044"
width="800"
height="394.28571"
x="-134.28572"
y="-63.194599" /></flowRegion><flowPara
id="flowPara1046"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1165"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,65.360595,12.398694)"><flowRegion
id="flowRegion1167"><rect
id="rect1169"
width="571.42859"
height="428.57144"
x="-188.57143"
y="-117.30562" /></flowRegion><flowPara
id="flowPara1171"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1173"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,12.398694)"><flowRegion
id="flowRegion1175"><rect
id="rect1177"
width="731.42859"
height="405.71429"
x="-262.85715"
y="-93.12867" /></flowRegion><flowPara
id="flowPara1179"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1341"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,14.050617)"><flowRegion
id="flowRegion1343"><rect
id="rect1345"
width="700"
height="451.42856"
x="-311.42856"
y="-119.37215" /></flowRegion><flowPara
id="flowPara1347"></flowPara></flowRoot> <rect
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.84250903;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2283"
width="80.130951"
height="4.5357146"
x="52.571148"
y="33.11554" />
<ellipse
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path2285"
cx="127.66242"
cy="35.27446"
rx="17.890867"
ry="15.983939" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,357 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="94.429123mm"
height="40.987545mm"
viewBox="0 0 94.429124 40.987546"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="dephosphorylation.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843-8"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839-3"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837-9"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835-0"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831-5"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827-2"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825-2"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821-7"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817-3"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-501.55126"
inkscape:cy="-354.50146"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="362"
inkscape:window-y="418"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-51.815197,-14.050617)">
<g
transform="translate(-9.737339,-3.0989429)"
id="layer1-0"
inkscape:label="Ebene 1">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 62.293909,41.380946 h 54.635201 v 3.197185 H 61.88157 v -3.197185 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path851"
d="m 133.11604,57.919226 c 0.31713,-8.419133 0.31696,-18.063845 0.1892,-31.206569 L 110.97313,43.40644 Z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21335374px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
id="text902"
y="34.445686"
x="102.50623"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="43.809456"
x="102.50623"
id="tspan900"
sodipodi:role="line" /></text>
<path
inkscape:connector-curvature="0"
id="path850"
d="m 133.30903,26.710989 22.48514,14.18695 -22.48514,17.024339 V 26.710989 l 22.48514,14.18695 -22.48514,17.024339 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21360484px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="74.839287"
y="27.880953"
id="text956"><tspan
sodipodi:role="line"
id="tspan954"
x="74.839287"
y="37.24472"
style="font-size:14.11111069px;stroke-width:0.26458332" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="62.744045"
y="27.880953"
id="text960"><tspan
sodipodi:role="line"
id="tspan958"
x="62.744045"
y="27.880953"
style="font-size:24.69444466px;stroke-width:0.26458332">-p</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot1040"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion1042"><rect
id="rect1044"
width="800"
height="394.28571"
x="-134.28572"
y="-63.194599" /></flowRegion><flowPara
id="flowPara1046"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1165"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,65.360595,12.398694)"><flowRegion
id="flowRegion1167"><rect
id="rect1169"
width="571.42859"
height="428.57144"
x="-188.57143"
y="-117.30562" /></flowRegion><flowPara
id="flowPara1171"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1173"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,12.398694)"><flowRegion
id="flowRegion1175"><rect
id="rect1177"
width="731.42859"
height="405.71429"
x="-262.85715"
y="-93.12867" /></flowRegion><flowPara
id="flowPara1179"></flowPara></flowRoot> </g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,357 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="94.429123mm"
height="40.987545mm"
viewBox="0 0 94.429124 40.987546"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="glycosylation.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843-8"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839-3"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837-9"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835-0"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831-5"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827-2"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825-2"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821-7"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817-3"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-382.12718"
inkscape:cy="-354.50146"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="362"
inkscape:window-y="418"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-51.815197,-14.050617)">
<g
transform="translate(-9.737339,-3.0989429)"
id="layer1-0"
inkscape:label="Ebene 1">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 62.293909,41.380946 h 54.635201 v 3.197185 H 61.88157 v -3.197185 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path851"
d="m 133.11604,57.919226 c 0.31713,-8.419133 0.31696,-18.063845 0.1892,-31.206569 L 110.97313,43.40644 Z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21335374px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
id="text902"
y="34.445686"
x="102.50623"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="43.809456"
x="102.50623"
id="tspan900"
sodipodi:role="line" /></text>
<path
inkscape:connector-curvature="0"
id="path850"
d="m 133.30903,26.710989 22.48514,14.18695 -22.48514,17.024339 V 26.710989 l 22.48514,14.18695 -22.48514,17.024339 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21360484px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="74.839287"
y="27.880953"
id="text956"><tspan
sodipodi:role="line"
id="tspan954"
x="74.839287"
y="37.24472"
style="font-size:14.11111069px;stroke-width:0.26458332" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="62.744045"
y="27.880953"
id="text960"><tspan
sodipodi:role="line"
id="tspan958"
x="62.744045"
y="27.880953"
style="font-size:24.69444466px;stroke-width:0.26458332">+g</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot1040"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion1042"><rect
id="rect1044"
width="800"
height="394.28571"
x="-134.28572"
y="-63.194599" /></flowRegion><flowPara
id="flowPara1046"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1165"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,65.360595,12.398694)"><flowRegion
id="flowRegion1167"><rect
id="rect1169"
width="571.42859"
height="428.57144"
x="-188.57143"
y="-117.30562" /></flowRegion><flowPara
id="flowPara1171"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1173"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,12.398694)"><flowRegion
id="flowRegion1175"><rect
id="rect1177"
width="731.42859"
height="405.71429"
x="-262.85715"
y="-93.12867" /></flowRegion><flowPara
id="flowPara1179"></flowPara></flowRoot> </g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,351 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="61.300194mm"
height="25.311052mm"
viewBox="0 0 61.300194 25.311053"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="indirect_effect.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="powerstroke"
id="path-effect843"
is_visible="true"
offset_points="2,3.6329516"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect839"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect837"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect835"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect831"
is_visible="true"
offset_points="2,0.30211571"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect827"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect825"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect821"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect817"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.620771"
inkscape:cx="90.846657"
inkscape:cy="42.114894"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-125.27945,-28.156825)">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.19011892px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 164.3403,28.310526 c -0.15905,5.664068 -0.0296,12.651483 0,24.98708 L 186.38669,39.66829 Z"
id="path851"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="102.50623"
y="34.445686"
id="text902"><tspan
sodipodi:role="line"
id="tspan900"
x="102.50623"
y="43.809456"
style="stroke-width:0.26458332" /></text>
<image
y="39.366489"
x="146.44615"
id="image1154"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAICAYAAADqSp8ZAAAABHNCSVQICAgIfAhkiAAAAE1JREFU KJHtzTENACEMQNFfQoKJimGpNCzioAqadGA51jPQm+4ZeGJmT2ZSbc7JWkv63ht3Lw/POQA0ESnP 3tqn2x9W6BGBqpZHYwwALgNAEnhX/xm3AAAAAElFTkSuQmCC "
preserveAspectRatio="none"
height="3.4290984"
width="1.0480868" />
<image
y="39.356003"
x="144.32948"
id="image1255"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="142.21281"
id="image1277"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="140.09613"
id="image1299"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="137.97946"
id="image1321"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="135.86279"
id="image1343"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.366489"
x="150.66925"
id="image1376"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.366489"
x="148.55257"
id="image1398"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.255047"
x="154.88794"
id="image1420"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.255047"
x="152.77127"
id="image1453"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.255047"
x="157.00461"
id="image1475"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.255047"
x="159.12128"
id="image1497"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.255047"
x="161.23795"
id="image1519"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.255047"
x="163.35461"
id="image1541"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3 XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg== "
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="133.74612"
id="image925"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI
mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3
XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg==
"
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="131.62946"
id="image965"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI
mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3
XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg==
"
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="129.51279"
id="image1005"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI
mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3
XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg==
"
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="127.39612"
id="image1045"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI
mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3
XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg==
"
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
<image
y="39.356003"
x="125.27945"
id="image1085"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAANCAIAAAABnFjhAAAAA3NCSVQICAjb4U/gAAAAW0lEQVQI
mX3OsQ3AIBADQP+HDWAMGIF9mBwJfUOFqHCKECVp4u5kybKUUnrva60Y4zHGqLW21uaczszMDID3
XnGHpKpui8jTfADgBySftXfjSIYQNnLO17eU0glzcivdmlVTEwAAAABJRU5ErkJggg==
"
preserveAspectRatio="none"
height="3.4395833"
width="1.0583333" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="59.590939mm"
height="19.638334mm"
viewBox="0 0 59.590939 19.638334"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="inhibition_repression.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="powerstroke"
id="path-effect843"
is_visible="true"
offset_points="2,3.6329516"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect839"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect837"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect835"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect831"
is_visible="true"
offset_points="2,0.30211571"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect827"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect825"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect821"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect817"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.7063299"
inkscape:cx="120.25464"
inkscape:cy="38.019582"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-77.364146,-30.888885)">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 78.105519,42.357092 h 54.635161 v -3.197185 h -55.0475 v 3.197185 z"
id="path847"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="102.50623"
y="34.445686"
id="text902"><tspan
sodipodi:role="line"
id="tspan900"
x="102.50623"
y="43.809456"
style="stroke-width:0.26458332" /></text>
<image
y="-136.98935"
x="30.741003"
id="image5891"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANMAAAAPCAYAAAB++/qNAAAABHNCSVQICAgIfAhkiAAAAF5JREFU aIHt00ENgDAUBcEPQURF9VC/dcANRSCClzSQGQV72a2q7gJeGWOc++oI+AszQYiZIMRMEGImCDET hJgJQswEIWaCEDNBiJkgxEwQYiYIOXrv1+oI+LrW2nwA4CAFkdZMm7MAAAAASUVORK5CYII= "
preserveAspectRatio="none"
height="3.96875"
width="19.633934"
transform="rotate(90.063705)"
inkscape:transform-center-x="-2.2159022"
inkscape:transform-center-y="0.48666674"
style="fill:#000000;fill-opacity:1;stroke:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,179 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg911"
width="52.916668mm"
height="13.229167mm"
viewBox="0 0 200.00001 50.000003"
sodipodi:docname="legend2.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata917">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs915">
<linearGradient
inkscape:collect="always"
id="linearGradient4811">
<stop
id="stop4809"
offset="0"
style="stop-color:#d50000;stop-opacity:0;" />
<stop
id="stop4807"
offset="1"
style="stop-color:#d50000;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4731">
<stop
style="stop-color:#006cf0;stop-opacity:1;"
offset="0"
id="stop4727" />
<stop
style="stop-color:#006cf0;stop-opacity:0;"
offset="1"
id="stop4729" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4731"
id="linearGradient4733"
x1="-0.17253789"
y1="25.042307"
x2="100.00731"
y2="25.222162"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0.17252813,-50.042305)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4811"
id="linearGradient4813"
x1="100.71942"
y1="78.592888"
x2="199.82014"
y2="78.053322"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0.17984813,-53.053322)" />
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1656"
inkscape:window-height="1148"
id="namedview913"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showborder="false"
units="mm"
inkscape:snap-global="true"
inkscape:lockguides="false"
inkscape:snap-nodes="true"
inkscape:snap-others="true"
inkscape:snap-object-midpoints="false"
inkscape:snap-center="false"
inkscape:snap-text-baseline="false"
inkscape:snap-page="false"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
inkscape:zoom="5.56"
inkscape:cx="99.820137"
inkscape:cy="24.100706"
inkscape:window-x="498"
inkscape:window-y="137"
inkscape:window-maximized="0"
inkscape:current-layer="svg911" />
<rect
style="opacity:0;fill:#ff0000;fill-opacity:1"
id="rect3244"
width="566"
height="60"
x="-1.2012482"
y="725.41571" />
<rect
style="opacity:0;fill:#ff0000;fill-opacity:1"
id="rect3246"
width="9.6165047"
height="153.86407"
x="362.85217"
y="586.21667" />
<rect
style="opacity:0;fill:#ff0000;fill-opacity:1"
id="rect3248"
width="453.34952"
height="157.98544"
x="2.920105"
y="457.08075" />
<rect
style="opacity:0;fill:#ff0000;fill-opacity:1"
id="rect3250"
width="695.13593"
height="208.81554"
x="-108.3566"
y="430.97882" />
<rect
style="opacity:0;fill:#ff0000;fill-opacity:1"
id="rect3252"
width="571.49512"
height="277.50485"
x="-8.0701904"
y="1006.5953" />
<ellipse
style="opacity:0;fill:#ff0000;fill-opacity:1"
id="path3254"
cx="160.90553"
cy="388.39148"
rx="97.538834"
ry="125.01456" />
<ellipse
style="opacity:0;fill:#ff0000;fill-opacity:1"
id="path3256"
cx="102.51961"
cy="430.29193"
rx="236.97815"
ry="176.53156" />
<rect
style="opacity:1;fill:url(#linearGradient4733);fill-opacity:1;fill-rule:nonzero"
id="rect4717"
width="200"
height="50"
x="0"
y="-50"
transform="scale(1,-1)" />
<rect
style="opacity:1;fill:url(#linearGradient4813);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect4805"
width="200"
height="50"
x="0"
y="0" />
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="199.99998mm"
height="50mm"
viewBox="0 0 199.99998 50"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="legend_bool.svg">
<defs
id="defs2">
<linearGradient
id="linearGradient2275"
osb:paint="solid">
<stop
style="stop-color:#006cf0;stop-opacity:1;"
offset="0"
id="stop2273" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.1845499"
inkscape:cx="378.20274"
inkscape:cy="94.488189"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showborder="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-5.2916665,-8.2261925)">
<rect
style="opacity:1;fill:#006cf0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.18708865;stroke-opacity:1"
id="rect815"
width="100"
height="50"
x="5.2916665"
y="8.2261925" />
<rect
style="opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332;stroke-opacity:1"
id="rect2307"
width="100"
height="50"
x="105.29166"
y="8.2261925" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,368 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="94.429123mm"
height="42.639469mm"
viewBox="0 0 94.429124 42.63947"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="methylation.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843-8"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839-3"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837-9"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835-0"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831-5"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827-2"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825-2"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821-7"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817-3"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-382.12718"
inkscape:cy="-354.50146"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="362"
inkscape:window-y="418"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-51.815197,-12.398694)">
<g
transform="translate(-9.737339,-3.0989429)"
id="layer1-0"
inkscape:label="Ebene 1">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 62.293909,41.380946 h 54.635201 v 3.197185 H 61.88157 v -3.197185 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path851"
d="m 133.11604,57.919226 c 0.31713,-8.419133 0.31696,-18.063845 0.1892,-31.206569 L 110.97313,43.40644 Z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21335374px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
id="text902"
y="34.445686"
x="102.50623"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="43.809456"
x="102.50623"
id="tspan900"
sodipodi:role="line" /></text>
<path
inkscape:connector-curvature="0"
id="path850"
d="m 133.30903,26.710989 22.48514,14.18695 -22.48514,17.024339 V 26.710989 l 22.48514,14.18695 -22.48514,17.024339 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21360484px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="74.839287"
y="27.880953"
id="text956"><tspan
sodipodi:role="line"
id="tspan954"
x="74.839287"
y="37.24472"
style="font-size:14.11111069px;stroke-width:0.26458332" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="62.744045"
y="27.880953"
id="text960"><tspan
sodipodi:role="line"
id="tspan958"
x="62.744045"
y="27.880953"
style="font-size:24.69444466px;stroke-width:0.26458332">+m</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot1040"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion1042"><rect
id="rect1044"
width="800"
height="394.28571"
x="-134.28572"
y="-63.194599" /></flowRegion><flowPara
id="flowPara1046"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1165"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,65.360595,12.398694)"><flowRegion
id="flowRegion1167"><rect
id="rect1169"
width="571.42859"
height="428.57144"
x="-188.57143"
y="-117.30562" /></flowRegion><flowPara
id="flowPara1171"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1173"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,12.398694)"><flowRegion
id="flowRegion1175"><rect
id="rect1177"
width="731.42859"
height="405.71429"
x="-262.85715"
y="-93.12867" /></flowRegion><flowPara
id="flowPara1179"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1341"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,14.050617)"><flowRegion
id="flowRegion1343"><rect
id="rect1345"
width="700"
height="451.42856"
x="-311.42856"
y="-119.37215" /></flowRegion><flowPara
id="flowPara1347"></flowPara></flowRoot> </g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90.658752mm"
height="31.532946mm"
viewBox="0 0 90.658752 31.532946"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="missing_interaction.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="powerstroke"
id="path-effect843"
is_visible="true"
offset_points="2,3.6329516"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect839"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect837"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect835"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect831"
is_visible="true"
offset_points="2,0.30211571"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect827"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect825"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect821"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect817"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.620771"
inkscape:cx="29.953009"
inkscape:cy="59.589817"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1418"
inkscape:window-x="-3"
inkscape:window-y="1"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-77.577272,-26.558506)">
<rect
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect340"
width="9.261137"
height="3.3664281"
x="79.188202"
y="39.620533" />
<image
y="39.651867"
x="92.671944"
id="image359"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAANCAYAAADBo8xmAAAABHNCSVQICAgIfAhkiAAAADxJREFU
OI1jZGBg+M8wSEBDQwMz00A7Ah2MOogQGHUQITDqIEJg1EGEwKiDCAFGc3PzNwPtCBg4efKkCADp
bQab0EnF1QAAAABJRU5ErkJggg==
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.5249996" />
<image
y="39.449955"
x="106.70486"
id="image379"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAANCAIAAABOwVsxAAAAA3NCSVQICAjb4U/gAAAAKklEQVQ4
jWNgoBf49+8fE90sY2BgGLVs1LJRy0YtIx+wuLm50ccmRkZGANzIA+qvEQv4AAAAAElFTkSuQmCC
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.5249996" />
<image
y="39.550915"
x="120.7378"
id="image399"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAANCAIAAABOwVsxAAAAA3NCSVQICAjb4U/gAAAAKklEQVQ4
jWNgoBf49+8fE90sY2BgGLVs1LJRy0YtIx+wuLm50ccmRkZGANzIA+qvEQv4AAAAAElFTkSuQmCC
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.5249996" />
<image
y="39.620533"
x="134.22148"
id="image419"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAANCAIAAABOwVsxAAAAA3NCSVQICAjb4U/gAAAAKklEQVQ4
jWNgoBf49+8fE90sY2BgGLVs1LJRy0YtIx+wuLm50ccmRkZGANzIA+qvEQv4AAAAAElFTkSuQmCC
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.5249996" />
<path
style="fill:#000000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 133.32139,26.75261 34.59056,14.149131 -34.59056,16.978957 z"
id="path338"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="102.50623"
y="34.445686"
id="text902"><tspan
sodipodi:role="line"
id="tspan900"
x="102.50623"
y="43.809456"
style="stroke-width:0.26458332" /></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="molecular_events.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="powerstroke"
id="path-effect843"
is_visible="true"
offset_points="2,3.6329516"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect839"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect837"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect835"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect831"
is_visible="true"
offset_points="2,0.30211571"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect827"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect825"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect821"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect817"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.84145287"
inkscape:cx="232.75292"
inkscape:cy="823.74893"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.19623141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 78.294639,38.721467 h 83.325621 v 4.842871 H 77.665766 v -4.842871 z"
id="path847"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.26579934px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 133.32139,26.75261 c 10.58194,8.628597 14.66437,18.330482 0,31.128088 l 34.59056,-16.978957 z"
id="path851"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90.078751mm"
height="31.369284mm"
viewBox="0 0 90.078751 31.369284"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="multiple_interactions.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.57192761"
inkscape:cx="243.69718"
inkscape:cy="-314.85697"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="535"
inkscape:window-y="315"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-62.727394,-33.824809)">
<rect
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.90072626;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect119"
width="61.661617"
height="3.8126364"
x="62.727394"
y="46.817169" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 117.89299,33.947253 34.59056,14.149131 -34.59056,16.978953 16.21098,-15.370768 z"
id="path139"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -0,0 +1,236 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90.658752mm"
height="31.532946mm"
viewBox="0 0 90.658752 31.532946"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="other.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="powerstroke"
id="path-effect843"
is_visible="true"
offset_points="2,3.6329516"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect839"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect837"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect835"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect831"
is_visible="true"
offset_points="2,0.30211571"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect827"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect825"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect821"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect817"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.620771"
inkscape:cx="160.83053"
inkscape:cy="59.589817"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="470"
inkscape:window-y="178"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-77.577272,-26.558506)">
<path
style="fill:#000000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 133.32139,26.75261 34.59056,14.148842 -34.59056,16.979246 c 0,0 8.57851,-10.5101 8.37938,-16.749904 -0.17695,-5.54441 -8.37938,-14.378184 -8.37938,-14.378184 z"
id="path31"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccac" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="102.50623"
y="34.445686"
id="text902"><tspan
sodipodi:role="line"
id="tspan900"
x="102.50623"
y="43.809456"
style="stroke-width:0.26458332" /></text>
<rect
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect115"
width="9.260417"
height="3.4395833"
x="136.97339"
y="39.04937" />
<image
y="-42.489452"
x="123.30527"
id="image134"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAANCAIAAACsHUBIAAAAA3NCSVQICAjb4U/gAAAAFElEQVQ4
jWNgGAWjYBSMglFAGwAABWIAAT+OtcUAAAAASUVORK5CYII=
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.260417"
transform="scale(1,-1)" />
<image
y="39.04987"
x="109.29133"
id="image154"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAANCAIAAACsHUBIAAAAA3NCSVQICAjb4U/gAAAAFElEQVQ4
jWNgGAWjYBSMglFAGwAABWIAAT+OtcUAAAAASUVORK5CYII=
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.260417" />
<image
y="39.04987"
x="95.391792"
id="image174"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAANCAIAAACsHUBIAAAAA3NCSVQICAjb4U/gAAAAFElEQVQ4
jWNgGAWjYBSMglFAGwAABWIAAT+OtcUAAAAASUVORK5CYII=
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.260417" />
<image
y="39.04987"
x="81.805122"
id="image194"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAANCAIAAACsHUBIAAAAA3NCSVQICAjb4U/gAAAAFElEQVQ4
jWNgGAWjYBSMglFAGwAABWIAAT+OtcUAAAAASUVORK5CYII=
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="3.4395833"
width="9.260417" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,357 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="94.429123mm"
height="42.639469mm"
viewBox="0 0 94.429124 42.63947"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="phosphorylation.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843-8"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839-3"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837-9"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835-0"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831-5"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827-2"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825-2"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821-7"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817-3"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-501.55126"
inkscape:cy="-354.50145"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="362"
inkscape:window-y="418"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-51.815197,-12.398694)">
<g
transform="translate(-9.737339,-3.0989429)"
id="layer1-0"
inkscape:label="Ebene 1">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 62.293909,41.380946 h 54.635201 v 3.197185 H 61.88157 v -3.197185 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path851"
d="m 133.11604,57.919226 c 0.31713,-8.419133 0.31696,-18.063845 0.1892,-31.206569 L 110.97313,43.40644 Z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21335374px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
id="text902"
y="34.445686"
x="102.50623"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="43.809456"
x="102.50623"
id="tspan900"
sodipodi:role="line" /></text>
<path
inkscape:connector-curvature="0"
id="path850"
d="m 133.30903,26.710989 22.48514,14.18695 -22.48514,17.024339 V 26.710989 l 22.48514,14.18695 -22.48514,17.024339 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21360484px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="74.839287"
y="27.880953"
id="text956"><tspan
sodipodi:role="line"
id="tspan954"
x="74.839287"
y="37.24472"
style="font-size:14.11111069px;stroke-width:0.26458332" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="62.744045"
y="27.880953"
id="text960"><tspan
sodipodi:role="line"
id="tspan958"
x="62.744045"
y="27.880953"
style="font-size:24.69444466px;stroke-width:0.26458332">+p</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot1040"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion1042"><rect
id="rect1044"
width="800"
height="394.28571"
x="-134.28572"
y="-63.194599" /></flowRegion><flowPara
id="flowPara1046"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1165"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,65.360595,12.398694)"><flowRegion
id="flowRegion1167"><rect
id="rect1169"
width="571.42859"
height="428.57144"
x="-188.57143"
y="-117.30562" /></flowRegion><flowPara
id="flowPara1171"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1173"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,12.398694)"><flowRegion
id="flowRegion1175"><rect
id="rect1177"
width="731.42859"
height="405.71429"
x="-262.85715"
y="-93.12867" /></flowRegion><flowPara
id="flowPara1179"></flowPara></flowRoot> </g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,187 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="69.28315mm"
height="14mm"
viewBox="0 0 69.28315 14"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="state_change.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="powerstroke"
id="path-effect843"
is_visible="true"
offset_points="2,3.6329516"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect839"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect837"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect835"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect831"
is_visible="true"
offset_points="2,0.30211571"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="bspline"
id="path-effect827"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect825"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect821"
is_visible="true"
steps="1"
threshold="0.5"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect817"
is_visible="true"
offset_points="1,0.13229166"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
end_linecap_type="zerowidth" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.4140695"
inkscape:cx="72.640587"
inkscape:cy="26.456689"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="0"
inkscape:window-y="1"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-82.860936,-35.776746)">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 83.602309,41.087353 h 54.635161 v 3.197185 h -55.0475 v -3.197185 z"
id="path847"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="102.50623"
y="34.445686"
id="text902"><tspan
sodipodi:role="line"
id="tspan900"
x="102.50623"
y="43.809456"
style="stroke-width:0.26458332" /></text>
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.27495834px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 138.28157,35.914225 v 13.725042 h 13.72504 V 35.914225 Z"
id="path5941"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,368 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="94.429123mm"
height="42.639469mm"
viewBox="0 0 94.429124 42.63947"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="ubiquination.svg">
<defs
id="defs2">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,3.6329516"
is_visible="true"
id="path-effect843-8"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect839-3"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect837-9"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect835-0"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="2,0.30211571"
is_visible="true"
id="path-effect831-5"
effect="powerstroke" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect827-2"
effect="bspline" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect825-2"
effect="simplify" />
<inkscape:path-effect
simplifyJustCoalesce="false"
simplifyindividualpaths="false"
simplify_just_coalesce="false"
simplify_individual_paths="false"
helper_size="0"
smooth_angles="360"
threshold="0.5"
steps="1"
is_visible="true"
id="path-effect821-7"
effect="simplify" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="1,0.13229166"
is_visible="true"
id="path-effect817-3"
effect="powerstroke" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-382.12719"
inkscape:cy="-354.50147"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1440"
inkscape:window-height="855"
inkscape:window-x="362"
inkscape:window-y="418"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-51.815197,-12.398694)">
<g
transform="translate(-9.737339,-3.0989429)"
id="layer1-0"
inkscape:label="Ebene 1">
<path
inkscape:connector-curvature="0"
id="path847"
d="m 62.293909,41.380946 h 54.635201 v 3.197185 H 61.88157 v -3.197185 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.65806717;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path851"
d="m 133.11604,57.919226 c 0.31713,-8.419133 0.31696,-18.063845 0.1892,-31.206569 L 110.97313,43.40644 Z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21335374px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
id="text902"
y="34.445686"
x="102.50623"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="stroke-width:0.26458332"
y="43.809456"
x="102.50623"
id="tspan900"
sodipodi:role="line" /></text>
<path
inkscape:connector-curvature="0"
id="path850"
d="m 133.30903,26.710989 22.48514,14.18695 -22.48514,17.024339 V 26.710989 l 22.48514,14.18695 -22.48514,17.024339 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.21360484px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="74.839287"
y="27.880953"
id="text956"><tspan
sodipodi:role="line"
id="tspan954"
x="74.839287"
y="37.24472"
style="font-size:14.11111069px;stroke-width:0.26458332" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="62.744045"
y="27.880953"
id="text960"><tspan
sodipodi:role="line"
id="tspan958"
x="62.744045"
y="27.880953"
style="font-size:24.69444466px;stroke-width:0.26458332">+u</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot1040"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion1042"><rect
id="rect1044"
width="800"
height="394.28571"
x="-134.28572"
y="-63.194599" /></flowRegion><flowPara
id="flowPara1046"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1165"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,65.360595,12.398694)"><flowRegion
id="flowRegion1167"><rect
id="rect1169"
width="571.42859"
height="428.57144"
x="-188.57143"
y="-117.30562" /></flowRegion><flowPara
id="flowPara1171"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1173"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,12.398694)"><flowRegion
id="flowRegion1175"><rect
id="rect1177"
width="731.42859"
height="405.71429"
x="-262.85715"
y="-93.12867" /></flowRegion><flowPara
id="flowPara1179"></flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1341"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,51.815197,14.050617)"><flowRegion
id="flowRegion1343"><rect
id="rect1345"
width="700"
height="451.42856"
x="-311.42856"
y="-119.37215" /></flowRegion><flowPara
id="flowPara1347"></flowPara></flowRoot> </g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,320 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
},
"dependencies": {
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"decompress-response": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
"integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
"requires": {
"mimic-response": "^1.0.0"
}
},
"duplexer3": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
},
"extract-zip": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
"integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
"requires": {
"concat-stream": "1.6.2",
"debug": "2.6.9",
"mkdirp": "0.5.1",
"yauzl": "2.4.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"fd-slicer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
"requires": {
"pend": "~1.2.0"
}
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
},
"got": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
"integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
"requires": {
"decompress-response": "^3.2.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"is-plain-obj": "^1.1.0",
"is-retry-allowed": "^1.0.0",
"is-stream": "^1.0.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"p-cancelable": "^0.3.0",
"p-timeout": "^1.1.1",
"safe-buffer": "^5.0.1",
"timed-out": "^4.0.0",
"url-parse-lax": "^1.0.0",
"url-to-options": "^1.0.1"
}
},
"has-symbol-support-x": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
"integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw=="
},
"has-to-string-tag-x": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
"integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
"requires": {
"has-symbol-support-x": "^1.4.1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"is-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
"integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
},
"is-plain-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
},
"is-retry-allowed": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
"integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg=="
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isurl": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
"integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
"requires": {
"has-to-string-tag-x": "^1.2.0",
"is-object": "^1.0.1"
}
},
"lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
},
"mime-db": {
"version": "1.40.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
},
"mime-types": {
"version": "2.1.24",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"requires": {
"mime-db": "1.40.0"
}
},
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
},
"minimist": {
"version": ">=1.2.2"
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"p-cancelable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
"integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw=="
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
},
"p-timeout": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
"integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
"requires": {
"p-finally": "^1.0.0"
}
},
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
},
"prepend-http": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
"integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
"integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"requires": {
"os-tmpdir": "~1.0.2"
}
},
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"url-parse-lax": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
"integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
"requires": {
"prepend-http": "^1.0.1"
}
},
"url-to-options": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
"integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"yauzl": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
"requires": {
"fd-slicer": "~1.0.1"
}
}
}
}

View File

@ -0,0 +1,899 @@
// create dropdown for node attributes
function createSele(){
var sele = document.createElement("OPTION");
sele.text = "Color attribute";
sele.value = "";
sele.disabled = true
return sele;
}
//create dropdown for layout
function createLayoutSele(){
var seleLayout =document.createElement("OPTION");
seleLayout.text = "Layout";
return seleLayout;
}
// add layout options
function addLayoutOptions(graphLayout, layoutOpt){
var optnLayout = document.createElement("li");
optnLayout.innerHTML="<a href='#'>"+graphLayout+"</a>";
if(graphLayout == "cose-bilkent"){
optnLayout.innerHTML="<a href='#'><i class='fas fa-check "+ layoutOpt+"' style='margin-right:5px'></i>"+graphLayout+"</a>";
}
optnLayout.id=graphLayout;
return optnLayout;
}
// add legend for node color
function addcolorlegend(cy){
cy.$('node[id = "l1"]')
.style('color', 'black')
.style('background-height',50)
.style('background-width',200)
.style('background-position-y','100%')
.style('shape','rectangle')
.style('width',200)
.style('height',50)
.style('border-width',1)
.style('text-valign' , 'bottom')
.style('text-max-width', 200)
}
// create label for color legend
function calculateLabelColorLegend(labelVal, fontSize, cy, nodesMin, nodesMax){
var whitespace = getTextWidth(' ', fontSize +" arial");
var minspace = getTextWidth(nodesMin, fontSize +" arial");
var valspace = getTextWidth(labelVal, fontSize +" arial");
var maxspace = getTextWidth(nodesMax, fontSize +" arial");
var neededWhitespace =
((200-(minspace+whitespace+valspace+whitespace+maxspace))/whitespace)/2;
if(neededWhitespace <= 0){
while(neededWhitespace <= 0){
labelVal = labelVal.slice(0, -1);
valspace = getTextWidth(labelVal+'...', fontSize +" arial");
neededWhitespace =
((200-(minspace+whitespace+valspace+whitespace+maxspace))/
whitespace)/2;
}
labelVal = labelVal+'...';
}
if(!isNaN(nodesMin)){
cy.$('node[id = "l1"]')
.style('background-image',backgroundimg_num)
}
else{
cy.$('node[id = "l1"]')
.style('background-image',backgroundimg_bool)
}
cy.$('node[id = "l1"]')
.style('label', nodesMin+' '+' '.repeat(neededWhitespace)+ labelVal +' '
+' '.repeat(neededWhitespace) + nodesMax)
}
function appendText(text, interact){
if(text != ""){
text = text + ", "
}
text = text + capitalize(interact);
return text;
}
function createImg(){
var img = document.createElement('img');
img.width =40;
img.height =30;
return img;
}
const capitalize = (s) => {
if (typeof s !== 'string') return ''
return s.charAt(0).toUpperCase() + s.slice(1)
}
function appendToInteractionLegend(table, text, img){
// Insert a row in the table at the last row
var newRow = table.insertRow();
// Insert a cells
var newInteraction = newRow.insertCell(0);
var newArrow = newRow.insertCell(1);
var newText = document.createTextNode(text);
newInteraction.appendChild(newText);
newArrow.appendChild(img);
}
// create legend for edges
function createInteractionLegend(interactionTypes, graphLeft, edgesToMerge, graphRight=undefined, edgesToMergeRight = null) {
// show legend and update if necessary
var table = document.getElementById('arrows');
if(table.rows.length == 0){
var i = 0;
var otherisset = false;
var firstText = "";
var secondText = "";
var thirdText = "";
var fourthText = "";
var fifthText = "";
var sixthText = "";
var seventhText = "";
var eightthText = "";
var ninethText = "";
var tenthText = "";
var eleventhText = "";
var twelvethText = "";
var firstimg = createImg();
var secondimg = createImg();
var thirdimg = createImg();
var fourthimg = createImg();
var fifthimg = createImg();
var sixthimg = createImg();
var seventhimg = createImg();
var seventhimg = createImg();
var eightthimg = createImg();
var ninethimg = createImg();
var tenthimg = createImg();
var eleventhimg = createImg();
var twelvethimg = createImg();
for(var interact of interactionTypes){
if(["activation", "expression", "stimulation", "targets"].includes(interact)){
firstText = appendText(firstText, interact)
firstimg.src = activation_expression;
}
else if(["inhibition", "repression"].includes(interact)){
secondText = appendText(secondText, interact)
secondimg.src = inhibition_repression;
}
else if(["compound", "non-covalent binding", "molecular interaction"].includes(interact)){
thirdText = appendText(thirdText, interact)
thirdimg.src = compound;
}
else if(["binding/association", "dissociation"].includes(interact)){
fourthText = appendText(fourthText, interact)
fourthimg.src = bindingassociation_dissociation;
}
else if(["state change, control"].includes(interact)){
fifthText = appendText(fifthText, interact)
fifthimg.src = statechange;
}
else if(["indirect effect"].includes(interact)){
sixthText = appendText(sixthText, interact)
sixthimg.src = indirecteffect;
}
else if(["missing interaction"].includes(interact)){
seventhText = appendText(seventhText, interact)
seventhimg.src = missinginteraction;
}
else if(["phosphorylation"].includes(interact)){
eightthText = appendText(eightthText, interact)
eightthimg.src = phosphorylation;
}
else if(["dephosphorylation"].includes(interact)){
ninethText = appendText(ninethText, interact)
ninethimg.src = dephosphorylation;
}
else if(["glycosylation"].includes(interact)){
tenthText = appendText(tenthText, interact)
tenthimg.src = glycosylation;
}
else if(["methylation"].includes(interact)){
eleventhText = appendText(eleventhText, interact)
eleventhimg.src = methylation;
}
else if(["ubiquitination"].includes(interact)){
twelvethText = appendText(twelvethText, interact)
twelvethimg.src = ubiquitination;
}
else{
otherisset = true;
}
i++;
}
if(i == interactionTypes.size){
if(firstText != ""){
appendToInteractionLegend(table, firstText, firstimg)
}
if(secondText != ""){
appendToInteractionLegend(table, secondText, secondimg)
}
if(thirdText != ""){
appendToInteractionLegend(table, thirdText, thirdimg)
}
if(fourthText != ""){
appendToInteractionLegend(table, fourthText, fourthimg)
}
if(fifthText != ""){
appendToInteractionLegend(table, fifthText, fifthimg)
}
if(sixthText != ""){
appendToInteractionLegend(table, sixthText, sixthimg)
}
if(seventhText != ""){
appendToInteractionLegend(table, seventhText, seventhimg)
}
if(eightthText != ""){
appendToInteractionLegend(table, eightthText, eightthimg)
}
if(ninethText != ""){
appendToInteractionLegend(table, ninethText, ninethimg)
}
if(tenthText != ""){
appendToInteractionLegend(table, tenthText, tenthimg)
}
if(eleventhText != ""){
appendToInteractionLegend(table, eleventhText, eleventhimg)
}
if(twelvethText != ""){
appendToInteractionLegend(table, twelvethText, twelvethimg)
}
if(otherisset){
var img = createImg();
img.src = other;
appendToInteractionLegend(table, 'Other', img)
}
if(i == interactionTypes.size && (edgesToMerge || edgesToMergeRight)){
var newRow = table.insertRow();
var multipleInteractions = table.insertRow();
var checkMultiple = newRow.insertCell(0);
var newArrow = newRow.insertCell(1);
var newCheckMultiple = document.createElement('input');
newCheckMultiple.type = "checkbox";
newCheckMultiple.id = "mergeEdges";
newCheckMultiple.checked = true;
newCheckMultiple.addEventListener('click', function(){
mergeEdges(graphLeft);
if(graphRight){
mergeEdges(graphRight)
}
});
var label = document.createElement('label')
label.htmlFor = "mergeEdges";
label.appendChild(document.createTextNode('Multiple interactions'));
checkMultiple.appendChild(newCheckMultiple);
checkMultiple.appendChild(label)
var img = createImg();
img.src = multipleinteractions;
newArrow.appendChild(img);
}
}
}
}
// merging of multiple edges between two nodes
function mergeEdges(cy, cy2=undefined){
// do not merge edges
if(!document.getElementById("mergeEdges").checked) {
loopEdges:
for(var i = 0; i<cy.edges().length;i++){
var e = cy.edges()[i].data();
// find multiple edges
if(typeof e.interaction != "string"){
// hide merged edge
cy.edges('edge[id = "'+e.id+'"]').style('display', 'none');
loopInteraction:
for(var interact of e.interaction){
loopId:
for(var j = i; j < cy.edges().length; j++){
// single edge is already contained
if(cy.edges()[j].data().id == e.id+'_'+interact.trim()){
//show single edge
cy.edges('edge[id = "'+e.id+'_'+interact.trim()+'"]')
.style('display', 'element').update;
continue loopInteraction;
}
}
// add single edge to graph
cy.add({
group: 'edges',
data: { id:e.id+'_'+interact.trim(), source:e.source,
target:e.target, interaction:interact.trim()},
});
}
}
else if(e.interaction.includes(",")){
cy.edges()[i].data().interaction = e.interaction.split(",");
cy.edges()[i].style('target-arrow-shape', 'vee')
.style('line-style','solid').update;
i--;
}
}
showMetaInfo(cy);
}
// merge edge
else if(document.getElementById("mergeEdges").checked){
for(var i = 0; i < cy.edges().length; i++){
var edge = cy.edges()[i]
// show merged edges
if(edge.hidden()){
edge.style('display', 'element').style('target-arrow-shape', 'vee')
.style('line-style','solid');
}
// hide single edges
else if(edge.data().id.includes(edge.data().interaction) ||
edge.data().id.includes(',')){
edge.style('display', 'none');
}
}
}
if(cy2 != undefined){
mergeEdges(cy2);
}
}
// get nodes and edges grom graphml string
function getNodesAndEdges(graphString, nodeVal,graphpos = undefined, noOptn = false){
var nodes = [];
var edges = [];
var nodeValuesNum = [];
var interactionTypes = new Set();
var edgesToMerge = false;
var drugnodes = [];
var drugedges = [];
var drugtargets = {};
if(graphpos == "left"){
var leftNodes = [];
}
else if(graphpos == "right"){
var rightNodes = [];
}
var prevId = "";
var pos = 0;
var regExp = /\>([^)]+)\</; // get symbol name between > <
for (var i = 0; i <= graphString.length - 1; i++) {
if(graphString[i].includes("node id")){ // get node id
var curNode = {};
curNode.id = graphString[i].split("\"")[1] ;
if(graphpos == "left"){
curNode.graph = "g1";
leftNodes.push({data: curNode});
}
else if(graphpos == "right"){
curNode.graph = "g2";
rightNodes.push({data: curNode});
}
nodes.push({data: curNode});
}
if(!isEmpty(curNode)){
if(graphString[i].includes("key=\"v_") &&
!graphString[i].includes("v_id")){
var attrname = graphString[i].split("v_")[1].split("\">")[0]
var val = graphString[i].split(/\>/)[1].split(/\</)[0]
if(attrname == "entrez_gene" && val.includes("http")){
val = val.split("/").pop()
}
if(!isNaN(parseFloat(val)) && attrname != "name"){
curNode[attrname] = parseFloat(val);
}
else{
curNode[attrname] = val;
}
}
if(graphString[i].includes("\"v_"+nodeVal+"\"\>")){
var val = regExp.exec(graphString[i])[1]; // if availabe get node value
if(!isNaN(parseFloat(val))){
var splitGraphString = graphString[i].split(" ")
attrID = splitGraphString.filter(s => s.includes('key'))[0].split("\"")[1];
currVal = {};
currVal.val = parseFloat(val);
nodeValuesNum.push(currVal.val);
}
else if(val === "false" || val === "true"){
currVal = {};
currVal[val] = val;
currVal.attr = "boolean";
nodeValuesNum.push(currVal);
curNode.val = val;
}
}
if(graphString[i].includes("\"v_midrug_id\"\>")){
drugnodes.push(curNode.id)
}
}
if(graphString[i].includes("edge source")){ // get edges
var curEdge = {};
s = graphString[i].split("\"")[1];
t = graphString[i].split("\"")[3];
curEdge.id = s.concat(t);
curEdge.source = s;
curEdge.target = t;
if(drugnodes.includes(curEdge.source)){
if(!drugedges[curEdge.target]){
drugedges[curEdge.target] = []
}
drugedges[curEdge.target].push(curEdge.source)
}
}
if(!isEmpty(curEdge)){
if(graphString[i].includes("e_interaction")){ // get edges interaction type
var interact = regExp.exec(graphString[i])[1];
if(interact.includes(",")){
var interactarray = interact.split(",")
for(let inter of interactarray){
interactionTypes.add(inter);
}
}
else{
interactionTypes.add(interact);
}
if(prevId == curEdge.id){ // multiple edges between two nodes
if(!Array.isArray(edges[pos-1].data.interaction)){
curEdge.interaction=
[edges[pos-1].data.interaction, interact]
if(graphpos == "left"){
leftEdges.splice(pos-1,1)
}
else if(graphpos == "right"){
rightEdges.splice(pos-1,1)
}
edges.splice(pos-1,1)
pos = pos -1
}
else{
edges[pos-1].data.interaction.push(interact)
if(graphpos == "left"){
if(!Array.isArray(leftEdges[pos-1].data.interaction)){
leftEdges[pos-1].data.interaction =
[leftEdges[pos-1].data.interaction]
}
leftEdges[pos-1].data.interaction.push(interact);
}
else if(graphpos == "right"){
if(!Array.isArray(rightEdges[pos-1].data.interaction)){
rightEdges[pos-1].data.interaction =
[rightEdges[pos-1].data.interaction]
}
rightEdges[pos-1].data.interaction.push(interact)
}
continue;
}
edgesToMerge = true;
}
else{
curEdge.interaction = interact;
}
if(graphpos == "left"){
curEdge.graph = "g1";
leftEdges.push({data: curEdge});
}
else if(graphpos == "right"){
curEdge.graph = "g2";
rightEdges.push({data: curEdge});
}
edges.push({data: curEdge} );
prevId = curEdge.id;
pos = pos +1;
}
}
}
if(!noOptn){
var legendNode = {};
legendNode.id = "l1";
legendNode.symbol = "legend";
nodes.push({data:legendNode});
}
return [nodes, edges, nodeValuesNum, interactionTypes, edgesToMerge, drugedges];
}
// get nodes and edges grom sif string
function getNodesAndEdgesSIF(graphString, graphpos = undefined, noOptn = false){
var nodes = [];
var edges = [];
var interactionTypes = new Set();
var edgesToMerge = false;
if(graphpos == "left"){
var leftNodes = [];
}
else if(graphpos == "right"){
var rightNodes = [];
}
var prevId = "";
var pos = 0;
var nodesSet = new Set();
var el = graphString.find(a =>a.includes("\t"));
for (var i = 0; i <= graphString.length - 1; i++) {
if(el){
var nodesAndInteraction = graphString[i].split("\t");
}
else{
var nodesAndInteraction = graphString[i].split(" ");
}
var n1 = nodesAndInteraction[0].trim();
nodesSet.add(n1);
var interact = nodesAndInteraction[1].trim();
var n2 = nodesAndInteraction[2].trim();
nodesSet.add(n2);
if(interact.includes(",")){
var interactarray = interact.split(",")
for(let inter of interactarray){
interactionTypes.add(inter);
}
}
else{
interactionTypes.add(interact);
}
}
var nodesWIDs = {};
var j = 0;
for(var node of nodesSet){
var curNode = {};
curNode.id = "n"+j;
curNode.name = node;
nodesWIDs[node] = curNode.id;
j++;
if(graphpos == "left"){
curNode.graph = "g1";
leftNodes.push({data: curNode});
}
else if(graphpos == "right"){
curNode.graph = "g2";
rightNodes.push({data: curNode});
}
nodes.push({data: curNode});
}
for (var i = 0; i <= graphString.length - 1; i++) {
var curEdge = {};
if(el){
var nodesAndInteraction = graphString[i].split("\t");
}
else{
var nodesAndInteraction = graphString[i].split(" ");
}
var n1 = nodesAndInteraction[0].trim();
var interact = nodesAndInteraction[1].trim();
var n2 = nodesAndInteraction[2].trim();
var s = nodesWIDs[n1];
var t = nodesWIDs[n2];
curEdge.id = s.concat(t)
curEdge.source = s;
curEdge.target = t;
if(prevId == curEdge.id){ // multiple edges between two nodes
if(!Array.isArray(edges[pos-1].data.interaction)){
curEdge.interaction=
[edges[pos-1].data.interaction, interact]
if(graphpos == "left"){
leftEdges.splice(pos-1,1)
}
else if(graphpos == "right"){
rightEdges.splice(pos-1,1)
}
edges.splice(pos-1,1)
pos = pos -1
}
else{
edges[pos-1].data.interaction.push(interact)
if(graphpos == "left"){
if(!Array.isArray(leftEdges[pos-1].data.interaction)){
leftEdges[pos-1].data.interaction =
[leftEdges[pos-1].data.interaction]
}
leftEdges[pos-1].data.interaction.push(interact);
}
else if(graphpos == "right"){
if(!Array.isArray(rightEdges[pos-1].data.interaction)){
rightEdges[pos-1].data.interaction =
[rightEdges[pos-1].data.interaction]
}
rightEdges[pos-1].data.interaction.push(interact)
}
continue;
}
edgesToMerge = true;
}
else{
curEdge.interaction = interact;
}
if(graphpos == "left"){
curEdge.graph = "g1";
leftEdges.push({data: curEdge});
}
else if(graphpos == "right"){
curEdge.graph = "g2";
rightEdges.push({data: curEdge});
}
edges.push({data: curEdge} );
prevId = curEdge.id;
pos = pos +1;
}
if(!noOptn){
var legendNode = {};
legendNode.id = "l1";
legendNode.symbol = "legend";
nodes.push({data:legendNode});
}
return [nodes, edges, [], interactionTypes, edgesToMerge];
}
//set legends range by min and max of nodes' attributes
function legendsRange(nodeValuesNum){
if(!isEmpty(nodeValuesNum)){
if(!nodeValuesNum.includes("empty")){
var nodesMin = nodeValuesNum.reduce(function(a, b) {
return parseFloat(Math.min(a, b).toFixed(2));
});
if(nodesMin > 0){
nodesMin = -1;
}
else if(nodesMin >= 0){
nodesMin = -1.0;
}
var nodesMax = nodeValuesNum.reduce(function(a, b) {
return parseFloat(Math.max(a, b).toFixed(2));
});
if(nodesMax < 0){
nodesMax = 1;
}
if(nodesMax <= 0){
nodesMax = 1.0;
}
else if(isNaN(nodesMin) && isNaN(nodesMax)){
nodesMin = "false";
nodesMax = "true";
}
}
}
else if(isEmpty(nodeValuesNum)){
var nodesMin = "false";
var nodesMax = "true";
}
return [nodesMin, nodesMax]
}
/* helper functions */
// test if object is empty
function isEmpty(obj) {
for(var key in obj) {
if(obj.hasOwnProperty(key))
return false;
}
return true;
}
// show drop downs for nodes' shapes attribute and shape itself
function activateNodeShapeChange(){
document.getElementById('nodeShapesAttr')
.setAttribute('style','visibility:visible');
}
function activateShapes(){
document.getElementById('nodeShapes')
.setAttribute('style','visibility:visible');
}
// change node shape of nodes with given attribute
function changeNodeShapes(cy, container, shapeAttribute, shape){
// select nodes with given attribute
if(cy.nodes().filter('node['+shapeAttribute+' ="true"]').length > 0){
cy.style()
.selector('node['+shapeAttribute+' ="true"]')
.style('shape', shape)
.update();
}
// list all shapes already used
usedShapes = []
for (var key in usedShapeAttributes) {
if (Object.prototype.hasOwnProperty.call(usedShapeAttributes, key)) {
var val = usedShapeAttributes[key];
usedShapes[val] = key;
}
}
// no shapes have been used so far
if(isEmpty(usedShapeAttributes)){
usedShapeAttributes[shapeAttribute] = shape;
shapeNode = cytoscape({
container: document.getElementById(container),
autolock: true,
layout: {
name: 'preset'
},
style: [
{selector: 'node',
style: {
width: 18,
height: 18,
shape: shape,
'background-color': '#666666',
label: 'data(id)',
'font-size': 10,
'overlay-opacity': 0,
}
}
],
});
shapeNode.userZoomingEnabled( false );
shapeNode.add({ // node n1
group: 'nodes',
data: {
id: shapeAttribute,
},
position: { // the model position of the node (optional on init, mandatory after)
x: 80,
y: 50
},
locked: true,
});
ycoord = 50;
shapeNode.nodes().ungrabify();
}
// test if shape has been used for another attribute
else if(Object.keys(usedShapes).includes(shape)){
if(usedShapes[shape] == shapeAttribute) return;
var replace =
confirm("Shape is already used. Do you want to replace "+
usedShapes[shape]+" by "+ shapeAttribute+"?")
// is shape has been used change previous attributes shape back to ellipse
if(replace){
delete(usedShapeAttributes[usedShapes[shape]]);
ycoord = shapeNode.$('node[id ="'+usedShapes[shape]+'"]')
.position()['y']-35;
shapeNode.remove('node[id ="'+usedShapes[shape]+'"]');
}
else return;
}
// update shape of a attribute already used
if (usedShapeAttributes.hasOwnProperty(shapeAttribute)){
if(shape == "ellipse"){
shapeNode.remove('node[id ="'+shapeAttribute+'"]')
if(shapeNode.nodes().length == 0){
usedShapeAttributes = [];
}
}
else{
usedShapeAttributes[shapeAttribute] = shape;
usedShapes[shape] = shapeAttribute
shapeNode.style()
.selector('node[id ="'+shapeAttribute+'"]')
.style('shape', shape)
.update();
}
}
// add new shape and attribute
else if(!isEmpty(usedShapeAttributes) &&
!usedShapeAttributes.hasOwnProperty(shapeAttribute)){
ycoord = ycoord + 35;
usedShapeAttributes[shapeAttribute] = shape;
shapeNode.add( { group: "nodes", data: { id: shapeAttribute},
position:{'x':80, 'y':ycoord}});
shapeNode.style()
.selector('node[id ="'+shapeAttribute+'"]')
.style('shape', shape)
.update();
shapeNode.nodes().ungrabify().update();
}
}
/*
Uses canvas.measureText to compute and return the width of the given text of given font in pixels.
*/
function getTextWidth(text, font) {
// re-use canvas object for better performance
var canvas = getTextWidth.canvas || (getTextWidth.canvas =
document.createElement("canvas"));
var context = canvas.getContext("2d");
context.font = font;
var metrics = context.measureText(text);
return metrics.width;
}
function changeLayout(cy, selectedLayout){
var animateLayout = true;
// var selectedLayout = document.getElementById('selectlayout'+pos).id;
if(selectedLayout == "klay"){
var options = {
animate: animateLayout, // Whether to transition the node positions
klay: {
aspectRatio: 1.49, // The aimed aspect ratio of the drawing, that is the quotient of width by height
compactComponents: true, // Tries to further compact components (disconnected sub-graphs).
nodeLayering:'LONGEST_PATH', // Strategy for node layering.
/* NETWORK_SIMPLEX This algorithm tries to minimize the length of edges. This is the most computationally intensive algorithm.
The number of iterations after which it aborts if it hasn't found a result yet can be set with the Maximal Iterations option.
LONGEST_PATH A very simple algorithm that distributes nodes along their longest path to a sink node.
INTERACTIVE Distributes the nodes into layers by comparing their positions before the layout algorithm was started. The idea is that the relative horizontal order of nodes as it was before layout was applied is not changed. This of course requires valid positions for all nodes to have been set on the input graph before calling the layout algorithm. The interactive node layering algorithm uses the Interactive Reference Point option to determine which reference point of nodes are used to compare positions. */
thoroughness: 10 // How much effort should be spent to produce a nice layout..
},
};
cy.layout({
name:'klay',
options
}).run();
}
else if(selectedLayout == "breadthfirst"){
cy.layout({
name: "breadthfirst",
spacingFactor: 0.5,
animate: animateLayout
}).run();
}
else if(selectedLayout == "dagre"){
cy.layout({
name: "dagre",
animate: animateLayout
}).run();
}
else if(selectedLayout == "cose-bilkent"){
cy.layout({
name: "cose-bilkent",
// Gravity range (constant)
gravityRange: 1.3,
animate: true,
randomize: false
}).run();
}
else if(selectedLayout == "grid"){
cy.layout({
name: "grid",
animate: animateLayout,
avoidOverlapPadding: 5
}).run();
}
else{
cy.layout({
name: "cose-bilkent",
// Gravity range (constant)
gravityRange: 1.3,
animate: true,
randomize: false
}).run();
}
}
// highlight gene searched by text input
function highlightSearchedGene(cy, secondcy=undefined){
var gene = document.getElementById('searchgene').value;
if(gene == ""){
cy.$('node').style("border-width", 2);
cy.$('node[id = "l1"]').style("border-width", 1);
if(secondcy){
secondcy.$('node').style("border-width", 2);
secondcy.$('node[id = "l1"]').style("border-width", 1);
}
document.getElementById('searchgene').value = "Search gene"
}
else if(cy.$('node[symbol=\'' + gene + '\']').length>0){
cy.$('node').style("border-width", 2);
cy.$('node[symbol =\'' + gene + '\']').style("border-width", 10);
cy.$('node[id = "l1"]').style("border-width", 1);
if(secondcy && secondcy.$('node[symbol=\'' + gene + '\']').length>0){
secondcy.$('node').style("border-width", 2);
secondcy.$('node[symbol =\'' + gene + '\']').style("border-width", 10);
secondcy.$('node[id = "l1"]').style("border-width", 1);
}
}
else if(cy.$('node[name =\'' + gene + '\']').length>0){
cy.$('node').style("border-width", 2);
cy.$('node[name =\'' + gene + '\']').style("border-width", 10);
cy.$('node[id = "l1"]').style("border-width", 1);
if(secondcy && secondcy.$('node[name =\'' + gene + '\']').length>0){
secondcy.$('node').style("border-width", 2);
secondcy.$('node[name =\'' + gene + '\']').style("border-width", 10);
secondcy.$('node[id = "l1"]').style("border-width", 1);
}
}
else{
document.getElementById('searchgene').value = gene+" not found"
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,117 @@
"use strict";
(function () {
// registers the extension on a cytoscape lib ref
var register = function register(cytoscape) {
if (!cytoscape) {
return;
}
var cyCanvas = function cyCanvas(args) {
var cy = this;
var container = cy.container();
var canvas = document.createElement("canvas");
container.appendChild(canvas);
var defaults = {
zIndex: 1,
pixelRatio: "auto"
};
var options = Object.assign({}, defaults, args);
if (options.pixelRatio === "auto") {
options.pixelRatio = window.devicePixelRatio || 1;
}
function resize() {
var width = container.offsetWidth;
var height = container.offsetHeight;
var canvasWidth = width * options.pixelRatio;
var canvasHeight = height * options.pixelRatio;
canvas.width = canvasWidth;
canvas.height = canvasHeight;
canvas.style.width = width + "px";
canvas.style.height = height + "px";
cy.trigger("cyCanvas.resize");
}
cy.on("resize", function () {
resize();
});
canvas.setAttribute("style", "position:absolute; top:0; left:0; z-index:" + options.zIndex + ";");
resize();
return {
/**
* @return {Canvas} The generated canvas
*/
getCanvas: function getCanvas() {
return canvas;
},
/**
* Helper: Clear the canvas
* @param {CanvasRenderingContext2D} ctx
*/
clear: function clear(ctx) {
var width = cy.width();
var height = cy.height();
ctx.save();
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.clearRect(0, 0, width * options.pixelRatio, height * options.pixelRatio);
ctx.restore();
},
/**
* Helper: Reset the context transform to an identity matrix
* @param {CanvasRenderingContext2D} ctx
*/
resetTransform: function resetTransform(ctx) {
ctx.setTransform(1, 0, 0, 1, 0, 0);
},
/**
* Helper: Set the context transform to match Cystoscape's zoom & pan
* @param {CanvasRenderingContext2D} ctx
*/
setTransform: function setTransform(ctx) {
var pan = cy.pan();
var zoom = cy.zoom();
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.translate(pan.x * options.pixelRatio, pan.y * options.pixelRatio);
ctx.scale(zoom * options.pixelRatio, zoom * options.pixelRatio);
}
};
};
cytoscape("core", "cyCanvas", cyCanvas);
};
if (typeof module !== "undefined" && module.exports) {
// expose as a commonjs module
module.exports = function (cytoscape) {
register(cytoscape);
};
}
if (typeof define !== "undefined" && define.amd) {
// expose as an amd/requirejs module
define("cytoscape-canvas", function () {
return register;
});
}
if (typeof cytoscape !== "undefined") {
// expose to global cytoscape (i.e. window.cytoscape)
register(cytoscape);
}
})();

View File

@ -0,0 +1,222 @@
/*!
Copyright (c) The Cytoscape Consortium
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the Software), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
;(function(){ 'use strict';
// registers the extension on a cytoscape lib ref
var register = function( cytoscape, dagre ){
if( !cytoscape || !dagre ){ return; } // can't register if cytoscape unspecified
var isFunction = function(o){ return typeof o === 'function'; };
// default layout options
var defaults = {
// dagre algo options, uses default value on undefined
nodeSep: undefined, // the separation between adjacent nodes in the same rank
edgeSep: undefined, // the separation between adjacent edges in the same rank
rankSep: undefined, // the separation between adjacent nodes in the same rank
rankDir: undefined, // 'TB' for top to bottom flow, 'LR' for left to right,
ranker: undefined, // Type of algorithm to assigns a rank to each node in the input graph.
// Possible values: network-simplex, tight-tree or longest-path
minLen: function( edge ){ return 1; }, // number of ranks to keep between the source and target of the edge
edgeWeight: function( edge ){ return 1; }, // higher weight edges are generally made shorter and straighter than lower weight edges
// general layout options
fit: true, // whether to fit to viewport
padding: 30, // fit padding
spacingFactor: undefined, // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up
nodeDimensionsIncludeLabels: undefined, // whether labels should be included in determining the space used by a node (default true)
animate: false, // whether to transition the node positions
animateFilter: function( node, i ){ return true; }, // whether to animate specific nodes when animation is on; non-animated nodes immediately go to their final positions
animationDuration: 500, // duration of animation in ms if enabled
animationEasing: undefined, // easing of animation if enabled
boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
transform: function( node, pos ){ return pos; }, // a function that applies a transform to the final node position
ready: function(){}, // on layoutready
stop: function(){} // on layoutstop
};
// constructor
// options : object containing layout options
function DagreLayout( options ){
var opts = this.options = {};
for( var i in defaults ){ opts[i] = defaults[i]; }
for( var i in options ){ opts[i] = options[i]; }
}
// runs the layout
DagreLayout.prototype.run = function(){
var options = this.options;
var layout = this;
var cy = options.cy; // cy is automatically populated for us in the constructor
var eles = options.eles;
var getVal = function( ele, val ){
return isFunction(val) ? val.apply( ele, [ ele ] ) : val;
};
var bb = options.boundingBox || { x1: 0, y1: 0, w: cy.width(), h: cy.height() };
if( bb.x2 === undefined ){ bb.x2 = bb.x1 + bb.w; }
if( bb.w === undefined ){ bb.w = bb.x2 - bb.x1; }
if( bb.y2 === undefined ){ bb.y2 = bb.y1 + bb.h; }
if( bb.h === undefined ){ bb.h = bb.y2 - bb.y1; }
var g = new dagre.graphlib.Graph({
multigraph: true,
compound: true
});
var gObj = {};
var setGObj = function( name, val ){
if( val != null ){
gObj[ name ] = val;
}
};
setGObj( 'nodesep', options.nodeSep );
setGObj( 'edgesep', options.edgeSep );
setGObj( 'ranksep', options.rankSep );
setGObj( 'rankdir', options.rankDir );
setGObj( 'ranker', options.ranker );
g.setGraph( gObj );
g.setDefaultEdgeLabel(function() { return {}; });
g.setDefaultNodeLabel(function() { return {}; });
// add nodes to dagre
var nodes = eles.nodes();
for( var i = 0; i < nodes.length; i++ ){
var node = nodes[i];
var nbb = node.layoutDimensions( options );
g.setNode( node.id(), {
width: nbb.w,
height: nbb.h,
name: node.id()
} );
// console.log( g.node(node.id()) );
}
// set compound parents
for( var i = 0; i < nodes.length; i++ ){
var node = nodes[i];
if( node.isChild() ){
g.setParent( node.id(), node.parent().id() );
}
}
// add edges to dagre
var edges = eles.edges().stdFilter(function( edge ){
return !edge.source().isParent() && !edge.target().isParent(); // dagre can't handle edges on compound nodes
});
for( var i = 0; i < edges.length; i++ ){
var edge = edges[i];
g.setEdge( edge.source().id(), edge.target().id(), {
minlen: getVal( edge, options.minLen ),
weight: getVal( edge, options.edgeWeight ),
name: edge.id()
}, edge.id() );
// console.log( g.edge(edge.source().id(), edge.target().id(), edge.id()) );
}
dagre.layout( g );
var gNodeIds = g.nodes();
for( var i = 0; i < gNodeIds.length; i++ ){
var id = gNodeIds[i];
var n = g.node( id );
cy.getElementById(id).scratch().dagre = n;
}
var dagreBB;
if( options.boundingBox ){
dagreBB = { x1: Infinity, x2: -Infinity, y1: Infinity, y2: -Infinity };
nodes.forEach(function( node ){
var dModel = node.scratch().dagre;
dagreBB.x1 = Math.min( dagreBB.x1, dModel.x );
dagreBB.x2 = Math.max( dagreBB.x2, dModel.x );
dagreBB.y1 = Math.min( dagreBB.y1, dModel.y );
dagreBB.y2 = Math.max( dagreBB.y2, dModel.y );
});
dagreBB.w = dagreBB.x2 - dagreBB.x1;
dagreBB.h = dagreBB.y2 - dagreBB.y1;
} else {
dagreBB = bb;
}
var constrainPos = function( p ){
if( options.boundingBox ){
var xPct = dagreBB.w === 0 ? 0 : (p.x - dagreBB.x1) / dagreBB.w;
var yPct = dagreBB.h === 0 ? 0 : (p.y - dagreBB.y1) / dagreBB.h;
return {
x: bb.x1 + xPct * bb.w,
y: bb.y1 + yPct * bb.h
};
} else {
return p;
}
};
nodes.layoutPositions(layout, options, function( ele ){
ele = typeof ele === "object" ? ele : this;
var dModel = ele.scratch().dagre;
return constrainPos({
x: dModel.x,
y: dModel.y
});
});
return this; // chaining
};
cytoscape('layout', 'dagre', DagreLayout);
};
if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module
module.exports = function( cytoscape, dagre ){
register( cytoscape, dagre || require('dagre') );
};
} else if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module
define('cytoscape-dagre', function(){
return register;
});
}
if( typeof cytoscape !== 'undefined' && typeof dagre !== 'undefined' ){ // expose to global cytoscape (i.e. window.cytoscape)
register( cytoscape, dagre );
}
})();

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,469 @@
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("klayjs"));
else if(typeof define === 'function' && define.amd)
define(["klayjs"], factory);
else if(typeof exports === 'object')
exports["cytoscapeKlay"] = factory(require("klayjs"));
else
root["cytoscapeKlay"] = factory(root["$klay"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_4__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 3);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var klay = __webpack_require__(4);
var assign = __webpack_require__(1);
var defaults = __webpack_require__(2);
var klayNSLookup = {
'addUnnecessaryBendpoints': 'de.cau.cs.kieler.klay.layered.unnecessaryBendpoints',
'alignment': 'de.cau.cs.kieler.alignment',
'aspectRatio': 'de.cau.cs.kieler.aspectRatio',
'borderSpacing': 'borderSpacing',
'compactComponents': 'de.cau.cs.kieler.klay.layered.components.compact',
'compactionStrategy': 'de.cau.cs.kieler.klay.layered.nodeplace.compactionStrategy',
'contentAlignment': 'de.cau.cs.kieler.klay.layered.contentAlignment',
'crossingMinimization': 'de.cau.cs.kieler.klay.layered.crossMin',
'cycleBreaking': 'de.cau.cs.kieler.klay.layered.cycleBreaking',
'debugMode': 'de.cau.cs.kieler.debugMode',
'direction': 'de.cau.cs.kieler.direction',
'edgeLabelSideSelection': 'de.cau.cs.kieler.klay.layered.edgeLabelSideSelection',
// <broken> 'de.cau.cs.kieler.klay.layered.edgeNodeSpacingFactor': options.edgeNodeSpacingFactor,
'edgeRouting': 'de.cau.cs.kieler.edgeRouting',
'edgeSpacingFactor': 'de.cau.cs.kieler.klay.layered.edgeSpacingFactor',
'feedbackEdges': 'de.cau.cs.kieler.klay.layered.feedBackEdges',
'fixedAlignment': 'de.cau.cs.kieler.klay.layered.fixedAlignment',
'greedySwitchCrossingMinimization': 'de.cau.cs.kieler.klay.layered.greedySwitch',
'hierarchyHandling': 'de.cau.cs.kieler.hierarchyHandling',
'inLayerSpacingFactor': 'de.cau.cs.kieler.klay.layered.inLayerSpacingFactor',
'interactiveReferencePoint': 'de.cau.cs.kieler.klay.layered.interactiveReferencePoint',
'layerConstraint': 'de.cau.cs.kieler.klay.layered.layerConstraint',
'layoutHierarchy': 'de.cau.cs.kieler.layoutHierarchy',
'linearSegmentsDeflectionDampening': 'de.cau.cs.kieler.klay.layered.linearSegmentsDeflectionDampening',
'mergeEdges': 'de.cau.cs.kieler.klay.layered.mergeEdges',
'mergeHierarchyCrossingEdges': 'de.cau.cs.kieler.klay.layered.mergeHierarchyEdges',
'noLayout': 'de.cau.cs.kieler.noLayout',
'nodeLabelPlacement': 'de.cau.cs.kieler.nodeLabelPlacement',
'nodeLayering': 'de.cau.cs.kieler.klay.layered.nodeLayering',
'nodePlacement': 'de.cau.cs.kieler.klay.layered.nodePlace',
'portAlignment': 'de.cau.cs.kieler.portAlignment',
'portAlignmentEastern': 'de.cau.cs.kieler.portAlignment.east',
'portAlignmentNorth': 'de.cau.cs.kieler.portAlignment.north',
'portAlignmentSouth': 'de.cau.cs.kieler.portAlignment.south',
'portAlignmentWest': 'de.cau.cs.kieler.portAlignment.west',
'portConstraints': 'de.cau.cs.kieler.portConstraints',
'portLabelPlacement': 'de.cau.cs.kieler.portLabelPlacement',
'portOffset': 'de.cau.cs.kieler.offset',
'portSide': 'de.cau.cs.kieler.portSide',
'portSpacing': 'de.cau.cs.kieler.portSpacing',
'postCompaction': 'de.cau.cs.kieler.klay.layered.postCompaction',
'priority': 'de.cau.cs.kieler.priority',
'randomizationSeed': 'de.cau.cs.kieler.randomSeed',
'routeSelfLoopInside': 'de.cau.cs.kieler.selfLoopInside',
'separateConnectedComponents': 'de.cau.cs.kieler.separateConnComp',
'sizeConstraint': 'de.cau.cs.kieler.sizeConstraint',
'sizeOptions': 'de.cau.cs.kieler.sizeOptions',
'spacing': 'de.cau.cs.kieler.spacing',
'splineSelfLoopPlacement': 'de.cau.cs.kieler.klay.layered.splines.selfLoopPlacement',
'thoroughness': 'de.cau.cs.kieler.klay.layered.thoroughness',
'wideNodesOnMultipleLayers': 'de.cau.cs.kieler.klay.layered.wideNodesOnMultipleLayers'
};
var mapToKlayNS = function mapToKlayNS(klayOpts) {
var keys = Object.keys(klayOpts);
var ret = {};
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var nsKey = klayNSLookup[key];
var val = klayOpts[key];
ret[nsKey] = val;
}
return ret;
};
var klayOverrides = {
interactiveReferencePoint: 'CENTER' // Determines which point of a node is considered by interactive layout phases.
};
var getPos = function getPos(ele) {
var parent = ele.parent();
var k = ele.scratch('klay');
var p = {
x: k.x,
y: k.y
};
if (parent.nonempty()) {
var kp = parent.scratch('klay');
p.x += kp.x;
p.y += kp.y;
}
return p;
};
var makeNode = function makeNode(node, options) {
var dims = node.layoutDimensions(options);
var padding = node.numericStyle('padding');
var k = {
_cyEle: node,
id: node.id(),
padding: {
top: padding,
left: padding,
bottom: padding,
right: padding
}
};
if (!node.isParent()) {
k.width = dims.w;
k.height = dims.h;
}
node.scratch('klay', k);
return k;
};
var makeEdge = function makeEdge(edge, options) {
var k = {
_cyEle: edge,
id: edge.id(),
source: edge.data('source'),
target: edge.data('target')
};
var priority = options.priority(edge);
if (priority != null) {
k.priority = priority;
}
edge.scratch('klay', k);
return k;
};
var makeGraph = function makeGraph(nodes, edges, options) {
var klayNodes = [];
var klayEdges = [];
var klayEleLookup = {};
var graph = {
id: 'root',
children: [],
edges: []
};
// map all nodes
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
var k = makeNode(n, options);
klayNodes.push(k);
klayEleLookup[n.id()] = k;
}
// map all edges
for (var _i = 0; _i < edges.length; _i++) {
var e = edges[_i];
var _k = makeEdge(e, options);
klayEdges.push(_k);
klayEleLookup[e.id()] = _k;
}
// make hierarchy
for (var _i2 = 0; _i2 < klayNodes.length; _i2++) {
var _k2 = klayNodes[_i2];
var _n = _k2._cyEle;
if (!_n.isChild()) {
graph.children.push(_k2);
} else {
var parent = _n.parent();
var parentK = klayEleLookup[parent.id()];
var children = parentK.children = parentK.children || [];
children.push(_k2);
}
}
for (var _i3 = 0; _i3 < klayEdges.length; _i3++) {
var _k3 = klayEdges[_i3];
var _e = _k3._cyEle;
var parentSrc = _e.source().parent();
var parentTgt = _e.target().parent();
// put all edges in the top level for now
// TODO does this cause issues in certain edgecases?
if (false) {
var kp = klayEleLookup[parentSrc.id()];
kp.edges = kp.edges || [];
kp.edges.push(_k3);
} else {
graph.edges.push(_k3);
}
}
return graph;
};
function Layout(options) {
var klayOptions = options.klay;
this.options = assign({}, defaults, options);
this.options.klay = assign({}, defaults.klay, klayOptions, klayOverrides);
}
Layout.prototype.run = function () {
var layout = this;
var options = this.options;
var eles = options.eles;
var nodes = eles.nodes();
var edges = eles.edges();
var graph = makeGraph(nodes, edges, options);
klay.layout({
graph: graph,
options: mapToKlayNS(options.klay),
success: function success() {},
error: function error(_error) {
throw _error;
}
});
nodes.filter(function (n) {
return !n.isParent();
}).layoutPositions(layout, options, getPos);
return this;
};
Layout.prototype.stop = function () {
return this; // chaining
};
Layout.prototype.destroy = function () {
return this; // chaining
};
module.exports = Layout;
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// Simple, internal Object.assign() polyfill for options objects etc.
module.exports = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {
for (var _len = arguments.length, srcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
srcs[_key - 1] = arguments[_key];
}
srcs.filter(function (src) {
return src != null;
}).forEach(function (src) {
Object.keys(src).forEach(function (k) {
return tgt[k] = src[k];
});
});
return tgt;
};
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var defaults = {
nodeDimensionsIncludeLabels: false, // Boolean which changes whether label dimensions are included when calculating node dimensions
fit: true, // Whether to fit
padding: 20, // Padding on fit
animate: false, // Whether to transition the node positions
animateFilter: function animateFilter(node, i) {
return true;
}, // Whether to animate specific nodes when animation is on; non-animated nodes immediately go to their final positions
animationDuration: 500, // Duration of animation in ms if enabled
animationEasing: undefined, // Easing of animation if enabled
transform: function transform(node, pos) {
return pos;
}, // A function that applies a transform to the final node position
ready: undefined, // Callback on layoutready
stop: undefined, // Callback on layoutstop
klay: {
// Following descriptions taken from http://layout.rtsys.informatik.uni-kiel.de:9444/Providedlayout.html?algorithm=de.cau.cs.kieler.klay.layered
addUnnecessaryBendpoints: false, // Adds bend points even if an edge does not change direction.
aspectRatio: 1.6, // The aimed aspect ratio of the drawing, that is the quotient of width by height
borderSpacing: 20, // Minimal amount of space to be left to the border
compactComponents: false, // Tries to further compact components (disconnected sub-graphs).
crossingMinimization: 'LAYER_SWEEP', // Strategy for crossing minimization.
/* LAYER_SWEEP The layer sweep algorithm iterates multiple times over the layers, trying to find node orderings that minimize the number of crossings. The algorithm uses randomization to increase the odds of finding a good result. To improve its results, consider increasing the Thoroughness option, which influences the number of iterations done. The Randomization seed also influences results.
INTERACTIVE Orders the nodes of each layer by comparing their positions before the layout algorithm was started. The idea is that the relative order of nodes as it was before layout was applied is not changed. This of course requires valid positions for all nodes to have been set on the input graph before calling the layout algorithm. The interactive layer sweep algorithm uses the Interactive Reference Point option to determine which reference point of nodes are used to compare positions. */
cycleBreaking: 'GREEDY', // Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).
/* GREEDY This algorithm reverses edges greedily. The algorithm tries to avoid edges that have the Priority property set.
INTERACTIVE The interactive algorithm tries to reverse edges that already pointed leftwards in the input graph. This requires node and port coordinates to have been set to sensible values.*/
direction: 'UNDEFINED', // Overall direction of edges: horizontal (right / left) or vertical (down / up)
/* UNDEFINED, RIGHT, LEFT, DOWN, UP */
edgeRouting: 'ORTHOGONAL', // Defines how edges are routed (POLYLINE, ORTHOGONAL, SPLINES)
edgeSpacingFactor: 0.5, // Factor by which the object spacing is multiplied to arrive at the minimal spacing between edges.
feedbackEdges: false, // Whether feedback edges should be highlighted by routing around the nodes.
fixedAlignment: 'NONE', // Tells the BK node placer to use a certain alignment instead of taking the optimal result. This option should usually be left alone.
/* NONE Chooses the smallest layout from the four possible candidates.
LEFTUP Chooses the left-up candidate from the four possible candidates.
RIGHTUP Chooses the right-up candidate from the four possible candidates.
LEFTDOWN Chooses the left-down candidate from the four possible candidates.
RIGHTDOWN Chooses the right-down candidate from the four possible candidates.
BALANCED Creates a balanced layout from the four possible candidates. */
inLayerSpacingFactor: 1.0, // Factor by which the usual spacing is multiplied to determine the in-layer spacing between objects.
layoutHierarchy: false, // Whether the selected layouter should consider the full hierarchy
linearSegmentsDeflectionDampening: 0.3, // Dampens the movement of nodes to keep the diagram from getting too large.
mergeEdges: false, // Edges that have no ports are merged so they touch the connected nodes at the same points.
mergeHierarchyCrossingEdges: true, // If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible.
nodeLayering: 'NETWORK_SIMPLEX', // Strategy for node layering.
/* NETWORK_SIMPLEX This algorithm tries to minimize the length of edges. This is the most computationally intensive algorithm. The number of iterations after which it aborts if it hasn't found a result yet can be set with the Maximal Iterations option.
LONGEST_PATH A very simple algorithm that distributes nodes along their longest path to a sink node.
INTERACTIVE Distributes the nodes into layers by comparing their positions before the layout algorithm was started. The idea is that the relative horizontal order of nodes as it was before layout was applied is not changed. This of course requires valid positions for all nodes to have been set on the input graph before calling the layout algorithm. The interactive node layering algorithm uses the Interactive Reference Point option to determine which reference point of nodes are used to compare positions. */
nodePlacement: 'BRANDES_KOEPF', // Strategy for Node Placement
/* BRANDES_KOEPF Minimizes the number of edge bends at the expense of diagram size: diagrams drawn with this algorithm are usually higher than diagrams drawn with other algorithms.
LINEAR_SEGMENTS Computes a balanced placement.
INTERACTIVE Tries to keep the preset y coordinates of nodes from the original layout. For dummy nodes, a guess is made to infer their coordinates. Requires the other interactive phase implementations to have run as well.
SIMPLE Minimizes the area at the expense of... well, pretty much everything else. */
randomizationSeed: 1, // Seed used for pseudo-random number generators to control the layout algorithm; 0 means a new seed is generated
routeSelfLoopInside: false, // Whether a self-loop is routed around or inside its node.
separateConnectedComponents: true, // Whether each connected component should be processed separately
spacing: 20, // Overall setting for the minimal amount of space to be left between objects
thoroughness: 7 // How much effort should be spent to produce a nice layout..
},
priority: function priority(edge) {
return null;
} // Edges with a non-nil value are skipped when geedy edge cycle breaking is enabled
};
module.exports = defaults;
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var impl = __webpack_require__(0);
// registers the extension on a cytoscape lib ref
var register = function register(cytoscape) {
if (!cytoscape) {
return;
} // can't register if cytoscape unspecified
cytoscape('layout', 'klay', impl); // register with cytoscape.js
};
if (typeof cytoscape !== 'undefined') {
// expose to global cytoscape (i.e. window.cytoscape)
register(cytoscape);
}
module.exports = register;
/***/ }),
/* 4 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
/***/ })
/******/ ]);
});

View File

@ -0,0 +1,202 @@
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["cytoscapeNoOverlap"] = factory();
else
root["cytoscapeNoOverlap"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 1);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Verifies each points of the bounding box (a) and looks if any of these points are inside the second bounding box (b)
* @param {CytoscapeElement} a Node to compare
* @param {CytoscapeElement} b Node to compare
* @returns {boolean} Return true if node a overlaps node b
*/
function compareNodes(a, b) {
var isOverlapping = false;
// bottom right
if (a.x1 < b.x2 && a.x1 > b.x1 && a.y1 < b.y2 && a.y1 > b.y1) {
isOverlapping = true;
}
// bottom left
if (a.x2 < b.x2 && a.x2 > b.x1 && a.y1 < b.y2 && a.y1 > b.y1) {
isOverlapping = true;
}
// top left
if (a.x2 < b.x2 && a.x2 > b.x1 && a.y2 > b.y1 && a.y2 < b.y2) {
isOverlapping = true;
}
// top right
if (a.x1 < b.x2 && a.x1 > b.x1 && a.y2 < b.y2 && a.y2 > b.y1) {
isOverlapping = true;
}
return isOverlapping;
}
/**
* Recursively checks if a node or it's parent overlaps any of the shown nodes
* @param {CytoscapeElement} node The node to verify
* @param {number} padding A bigger padding will make the overlap happen before
* @returns {boolean} True if the node overlaps any of the other nodes
*/
function checkIfOverlaps(node, padding) {
var siblings = void 0;
if (node.isChild()) {
siblings = node.parent().children().difference(node);
} else {
siblings = node.cy().nodes().orphans().difference(node);
}
var isOverlapping = false;
siblings.forEach(function (neighbor) {
var neighborBB = {
w: neighbor.renderedOuterWidth(),
h: neighbor.renderedOuterHeight(),
x1: neighbor.renderedPoint().x - neighbor.renderedOuterWidth() / 2 - padding,
x2: neighbor.renderedPoint().x + neighbor.renderedOuterWidth() / 2 + padding,
y1: neighbor.renderedPoint().y - neighbor.renderedOuterHeight() / 2 - padding,
y2: neighbor.renderedPoint().y + neighbor.renderedOuterHeight() / 2 + padding
};
var currentNodeBB = {
w: node.renderedOuterWidth(),
h: node.renderedOuterHeight(),
x1: node.renderedPoint().x - node.renderedOuterWidth() / 2 - padding,
x2: node.renderedPoint().x + node.renderedOuterWidth() / 2 + padding,
y1: node.renderedPoint().y - node.renderedOuterHeight() / 2 - padding,
y2: node.renderedPoint().y + node.renderedOuterHeight() / 2 + padding
};
if (compareNodes(currentNodeBB, neighborBB)) {
isOverlapping = true;
}
if (compareNodes(neighborBB, currentNodeBB)) {
isOverlapping = true;
}
});
if (node.parent().length > 0) {
if (checkIfOverlaps(node.parent(), padding)) {
isOverlapping = true;
}
}
return isOverlapping;
}
module.exports = function () {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$padding = _ref.padding,
padding = _ref$padding === undefined ? 0 : _ref$padding;
this.on('drag', function (evt) {
if (checkIfOverlaps(evt.target, padding)) {
evt.target.position(evt.target.scratch('previousPosition'));
} else {
evt.target.scratch('previousPosition', JSON.parse(JSON.stringify(evt.target.position())));
}
});
return this;
};
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var impl = __webpack_require__(0);
// registers the extension on a cytoscape lib ref
var register = function register(cytoscape) {
if (!cytoscape) {
return;
} // can't register if cytoscape unspecified
cytoscape('collection', 'noOverlap', impl); // register with cytoscape.js
};
if (typeof cytoscape !== 'undefined') {
// expose to global cytoscape (i.e. window.cytoscape)
register(window.cytoscape);
}
module.exports = register;
/***/ })
/******/ ]);
});

View File

@ -0,0 +1,406 @@
/*!
Copyright (c) The Cytoscape Consortium
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the Software), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
;(function( $, $$ ){ 'use strict';
var isObject = function(o){
return o != null && typeof o === 'object';
};
var isFunction = function(o){
return o != null && typeof o === 'function';
};
var isNumber = function(o){
return o != null && typeof o === 'number';
};
var isString = function(o){
return o != null && typeof o === 'string';
};
var isUndef = function(o){
return o === undefined;
};
var wrap = function(obj, target) {
if( isFunction(obj) ) {
return function(event, api){
return obj.apply( target, [event, api] );
};
} else {
return obj;
}
};
var throttle = function(func, wait, options) {
var leading = true,
trailing = true;
if (options === false) {
leading = false;
} else if (isObject(options)) {
leading = 'leading' in options ? options.leading : leading;
trailing = 'trailing' in options ? options.trailing : trailing;
}
options = options || {};
options.leading = leading;
options.maxWait = wait;
options.trailing = trailing;
return debounce(func, wait, options);
};
var debounce = function(func, wait, options) { // ported lodash debounce function
var args,
maxTimeoutId,
result,
stamp,
thisArg,
timeoutId,
trailingCall,
lastCalled = 0,
maxWait = false,
trailing = true;
if (!isFunction(func)) {
return;
}
wait = Math.max(0, wait) || 0;
if (options === true) {
var leading = true;
trailing = false;
} else if (isObject(options)) {
leading = options.leading;
maxWait = 'maxWait' in options && (Math.max(wait, options.maxWait) || 0);
trailing = 'trailing' in options ? options.trailing : trailing;
}
var delayed = function() {
var remaining = wait - (Date.now() - stamp);
if (remaining <= 0) {
if (maxTimeoutId) {
clearTimeout(maxTimeoutId);
}
var isCalled = trailingCall;
maxTimeoutId = timeoutId = trailingCall = undefined;
if (isCalled) {
lastCalled = Date.now();
result = func.apply(thisArg, args);
if (!timeoutId && !maxTimeoutId) {
args = thisArg = null;
}
}
} else {
timeoutId = setTimeout(delayed, remaining);
}
};
var maxDelayed = function() {
if (timeoutId) {
clearTimeout(timeoutId);
}
maxTimeoutId = timeoutId = trailingCall = undefined;
if (trailing || (maxWait !== wait)) {
lastCalled = Date.now();
result = func.apply(thisArg, args);
if (!timeoutId && !maxTimeoutId) {
args = thisArg = null;
}
}
};
return function() {
args = arguments;
stamp = Date.now();
thisArg = this;
trailingCall = trailing && (timeoutId || !leading);
if (maxWait === false) {
var leadingCall = leading && !timeoutId;
} else {
if (!maxTimeoutId && !leading) {
lastCalled = stamp;
}
var remaining = maxWait - (stamp - lastCalled),
isCalled = remaining <= 0;
if (isCalled) {
if (maxTimeoutId) {
maxTimeoutId = clearTimeout(maxTimeoutId);
}
lastCalled = stamp;
result = func.apply(thisArg, args);
}
else if (!maxTimeoutId) {
maxTimeoutId = setTimeout(maxDelayed, remaining);
}
}
if (isCalled && timeoutId) {
timeoutId = clearTimeout(timeoutId);
}
else if (!timeoutId && wait !== maxWait) {
timeoutId = setTimeout(delayed, wait);
}
if (leadingCall) {
isCalled = true;
result = func.apply(thisArg, args);
}
if (isCalled && !timeoutId && !maxTimeoutId) {
args = thisArg = null;
}
return result;
};
};
function register( $$, $ ){
// use a single dummy dom ele as target for every qtip
var $qtipContainer = $('<div></div>');
var viewportDebounceRate = 250;
$qtipContainer.css({
'z-index': -1,
'position': 'absolute'
});
function generateOpts( target, passedOpts ){
var qtip = target.scratch().qtip;
var opts = $.extend( {}, passedOpts );
if( !opts.id ){
opts.id = 'cy-qtip-target-' + ( Date.now() + Math.round( Math.random() * 10000) );
}
if( !qtip.$domEle ){
qtip.$domEle = $qtipContainer;
}
// qtip should be positioned relative to cy dom container
opts.position = opts.position || {};
opts.position.container = opts.position.container || $( document.body );
opts.position.viewport = opts.position.viewport || $( document.body );
opts.position.target = [0, 0];
opts.position.my = opts.position.my || 'top center';
opts.position.at = opts.position.at || 'bottom center';
// adjust
var adjust = opts.position.adjust = opts.position.adjust || {};
adjust.method = adjust.method || 'flip';
adjust.mouse = false;
// default show event
opts.show = opts.show || {};
if( isUndef(opts.show.event) ){
opts.show.event = 'tap';
}
// default hide event
opts.hide = opts.hide || {};
opts.hide.cyViewport = opts.hide.cyViewport === undefined ? true : opts.hide.cyViewport;
if( isUndef(opts.hide.event) ){
opts.hide.event = 'unfocus';
}
// so multiple qtips can exist at once (only works on recent qtip2 versions)
opts.overwrite = false;
if( opts.content ){
if ( isFunction(opts.content) || isString(opts.content) ){
opts.content = wrap( opts.content, target );
} else {
opts.content = {
text: wrap( opts.content.text, target ),
title: wrap( opts.content.title, target )
};
}
}
return opts;
}
function updatePosition(ele, qtip, evt){
var e = evt;
var isCy = isFunction( ele.pan );
var isEle = !isCy;
var isNode = isEle && ele.isNode();
var cy = isCy ? ele : ele.cy();
var cOff = cy.container().getBoundingClientRect();
var pos = isNode ? ele.renderedPosition() : ( e ? e.renderedPosition || e.cyRenderedPosition : undefined );
if( !pos || pos.x == null || isNaN(pos.x) ){ return; }
var bb = isNode ? ele.renderedBoundingBox({
includeNodes: true,
includeEdges: false,
includeLabels: false,
includeShadows: false
}) : {
x1: pos.x - 1,
x2: pos.x + 1,
w: 3,
y1: pos.y - 1,
y2: pos.y + 1,
h: 3
};
if( qtip.$domEle.parent().length === 0 ){
qtip.$domEle.appendTo(document.body);
}
qtip.$domEle.css({
'width': bb.w,
'height': bb.h,
'top': bb.y1 + cOff.top + window.pageYOffset,
'left': bb.x1 + cOff.left + window.pageXOffset,
'position': 'absolute',
'pointer-events': 'none',
'background': 'red',
'z-index': 99999999,
'opacity': 0.5,
'visibility': 'hidden'
});
qtip.api.set('position.target', qtip.$domEle);
}
$$('collection', 'qtip', function( passedOpts ){
var eles = this;
var cy = this.cy();
var container = cy.container();
if( passedOpts === 'api' ){
return this.scratch().qtip.api;
}
eles.each(function(ele, i){
// Perform 2.x and 1.x backwards compatibility check
if(isNumber(ele)){
ele = i;
}
var scratch = ele.scratch();
var qtip = scratch.qtip = scratch.qtip || {};
var opts = generateOpts( ele, passedOpts );
var adjNums = opts.position.adjust;
qtip.$domEle.qtip( opts );
var qtipApi = qtip.api = qtip.$domEle.qtip('api'); // save api ref
qtip.$domEle.removeData('qtip'); // remove qtip dom/api ref to be safe
updatePosition(ele, qtip);
ele.on( opts.show.event, function(e){
updatePosition(ele, qtip, e);
qtipApi.show();
} );
ele.on( opts.hide.event, function(e){
qtipApi.hide();
} );
if( opts.hide.cyViewport ){
cy.on('viewport', debounce(function(){
qtipApi.hide();
}, viewportDebounceRate, { leading: true }) );
}
if( opts.position.adjust.cyViewport ){
cy.on('pan zoom', debounce(function(e){
updatePosition(ele, qtip, e);
qtipApi.reposition();
}, viewportDebounceRate, { trailing: true }) );
}
});
return this; // chainability
});
$$('core', 'qtip', function( passedOpts ){
var cy = this;
var container = cy.container();
if( passedOpts === 'api' ){
return this.scratch().qtip.api;
}
var scratch = cy.scratch();
var qtip = scratch.qtip = scratch.qtip || {};
var opts = generateOpts( cy, passedOpts );
qtip.$domEle.qtip( opts );
var qtipApi = qtip.api = qtip.$domEle.qtip('api'); // save api ref
qtip.$domEle.removeData('qtip'); // remove qtip dom/api ref to be safe
cy.on( opts.show.event, function(e){
if( !opts.show.cyBgOnly || (opts.show.cyBgOnly && (e.target === cy || e.cyTarget === cy)) ){
updatePosition(cy, qtip, e);
qtipApi.show();
}
} );
cy.on( opts.hide.event, function(e){
if( !opts.hide.cyBgOnly || (opts.hide.cyBgOnly && (e.target === cy || e.cyTarget === cy)) ){
qtipApi.hide();
}
} );
if( opts.hide.cyViewport ){
cy.on('viewport', debounce(function(){
qtipApi.hide();
}, viewportDebounceRate, { leading: true }) );
}
return this; // chainability
});
}
if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module
module.exports = function( cytoscape ){
var oldJq = window.jQuery;
var old$ = window.$;
var jQuery = window.jQuery = window.$ = require('jquery'); // qtip requires global jquery
var qtip = require('qtip2');
register( cytoscape, jQuery );
window.jQuery = oldJq;
window.$ = old$;
};
} else if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module
define('cytoscape-qtip', function(){
return register;
});
}
if( $ && $$ ){
register( $$, $ );
}
})(
typeof jQuery !== 'undefined' ? jQuery : null,
typeof cytoscape !== 'undefined' ? cytoscape : null
);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,668 @@
;(function () {
'use strict';
// registers the extension on a cytoscape lib ref
var register = function (cytoscape) {
if (!cytoscape) {
return;
} // can't register if cytoscape unspecified
// Get scratch pad reserved for this extension on the given element or the core if 'name' parameter is not set,
// if the 'name' parameter is set then return the related property in the scratch instead of the whole scratchpad
function getScratch (eleOrCy, name) {
if (eleOrCy.scratch("_undoRedo") === undefined) {
eleOrCy.scratch("_undoRedo", {});
}
var scratchPad = eleOrCy.scratch("_undoRedo");
return ( name === undefined ) ? scratchPad : scratchPad[name];
}
// Set the a field (described by 'name' parameter) of scratchPad (that is reserved for this extension
// on an element or the core) to the given value (by 'val' parameter)
function setScratch (eleOrCy, name, val) {
var scratchPad = getScratch(eleOrCy);
scratchPad[name] = val;
eleOrCy.scratch("_undoRedo", scratchPad);
}
// Generate an instance of the extension for the given cy instance
function generateInstance (cy) {
var instance = {};
instance.options = {
isDebug: false, // Debug mode for console messages
actions: {},// actions to be added
undoableDrag: true, // Whether dragging nodes are undoable can be a function as well
stackSizeLimit: undefined, // Size limit of undo stack, note that the size of redo stack cannot exceed size of undo stack
beforeUndo: function () { // callback before undo is triggered.
},
afterUndo: function () { // callback after undo is triggered.
},
beforeRedo: function () { // callback before redo is triggered.
},
afterRedo: function () { // callback after redo is triggered.
},
ready: function () {
}
};
instance.actions = {};
instance.undoStack = [];
instance.redoStack = [];
//resets undo and redo stacks
instance.reset = function(undos, redos)
{
this.undoStack = undos || [];
this.redoStack = redos || [];
}
// Undo last action
instance.undo = function () {
if (!this.isUndoStackEmpty()) {
var action = this.undoStack.pop();
cy.trigger("beforeUndo", [action.name, action.args]);
var res = this.actions[action.name]._undo(action.args);
this.redoStack.push({
name: action.name,
args: res
});
cy.trigger("afterUndo", [action.name, action.args, res]);
return res;
} else if (this.options.isDebug) {
console.log("Undoing cannot be done because undo stack is empty!");
}
};
// Redo last action
instance.redo = function () {
if (!this.isRedoStackEmpty()) {
var action = this.redoStack.pop();
cy.trigger(action.firstTime ? "beforeDo" : "beforeRedo", [action.name, action.args]);
if (!action.args)
action.args = {};
action.args.firstTime = action.firstTime ? true : false;
var res = this.actions[action.name]._do(action.args);
this.undoStack.push({
name: action.name,
args: res
});
if (this.options.stackSizeLimit != undefined && this.undoStack.length > this.options.stackSizeLimit ) {
this.undoStack.shift();
}
cy.trigger(action.firstTime ? "afterDo" : "afterRedo", [action.name, action.args, res]);
return res;
} else if (this.options.isDebug) {
console.log("Redoing cannot be done because redo stack is empty!");
}
};
// Calls registered function with action name actionName via actionFunction(args)
instance.do = function (actionName, args) {
this.redoStack.length = 0;
this.redoStack.push({
name: actionName,
args: args,
firstTime: true
});
return this.redo();
};
// Undo all actions in undo stack
instance.undoAll = function() {
while( !this.isUndoStackEmpty() ) {
this.undo();
}
};
// Redo all actions in redo stack
instance.redoAll = function() {
while( !this.isRedoStackEmpty() ) {
this.redo();
}
};
// Register action with its undo function & action name.
instance.action = function (actionName, _do, _undo) {
this.actions[actionName] = {
_do: _do,
_undo: _undo
};
return this;
};
// Removes action stated with actionName param
instance.removeAction = function (actionName) {
delete this.actions[actionName];
};
// Gets whether undo stack is empty
instance.isUndoStackEmpty = function () {
return (this.undoStack.length === 0);
};
// Gets whether redo stack is empty
instance.isRedoStackEmpty = function () {
return (this.redoStack.length === 0);
};
// Gets actions (with their args) in undo stack
instance.getUndoStack = function () {
return this.undoStack;
};
// Gets actions (with their args) in redo stack
instance.getRedoStack = function () {
return this.redoStack;
};
return instance;
}
// design implementation
cytoscape("core", "undoRedo", function (options, dontInit) {
var cy = this;
var instance = getScratch(cy, 'instance') || generateInstance(cy);
setScratch(cy, 'instance', instance);
if (options) {
for (var key in options)
if (instance.options.hasOwnProperty(key))
instance.options[key] = options[key];
if (options.actions)
for (var key in options.actions)
instance.actions[key] = options.actions[key];
}
if (!getScratch(cy, 'isInitialized') && !dontInit) {
var defActions = defaultActions(cy);
for (var key in defActions)
instance.actions[key] = defActions[key];
setDragUndo(cy, instance.options.undoableDrag);
setScratch(cy, 'isInitialized', true);
}
instance.options.ready();
return instance;
});
function setDragUndo(cy, undoable) {
var lastMouseDownNodeInfo = null;
cy.on("grab", "node", function () {
if (typeof undoable === 'function' ? undoable.call(this) : undoable) {
lastMouseDownNodeInfo = {};
lastMouseDownNodeInfo.lastMouseDownPosition = {
x: this.position("x"),
y: this.position("y")
};
lastMouseDownNodeInfo.node = this;
}
});
cy.on("free", "node", function () {
var instance = getScratch(cy, 'instance');
if (typeof undoable === 'function' ? undoable.call(this) : undoable) {
if (lastMouseDownNodeInfo == null) {
return;
}
var node = lastMouseDownNodeInfo.node;
var lastMouseDownPosition = lastMouseDownNodeInfo.lastMouseDownPosition;
var mouseUpPosition = {
x: node.position("x"),
y: node.position("y")
};
if (mouseUpPosition.x != lastMouseDownPosition.x ||
mouseUpPosition.y != lastMouseDownPosition.y) {
var positionDiff = {
x: mouseUpPosition.x - lastMouseDownPosition.x,
y: mouseUpPosition.y - lastMouseDownPosition.y
};
var nodes;
if (node.selected()) {
nodes = cy.nodes(":visible").filter(":selected");
}
else {
nodes = cy.collection([node]);
}
var param = {
positionDiff: positionDiff,
nodes: nodes, move: false
};
instance.do("drag", param);
lastMouseDownNodeInfo = null;
}
}
});
}
// Default actions
function defaultActions(cy) {
function getTopMostNodes(nodes) {
var nodesMap = {};
for (var i = 0; i < nodes.length; i++) {
nodesMap[nodes[i].id()] = true;
}
var roots = nodes.filter(function (ele, i) {
if(typeof ele === "number") {
ele = i;
}
var parent = ele.parent()[0];
while(parent != null){
if(nodesMap[parent.id()]){
return false;
}
parent = parent.parent()[0];
}
return true;
});
return roots;
}
function moveNodes(positionDiff, nodes, notCalcTopMostNodes) {
var topMostNodes = notCalcTopMostNodes?nodes:getTopMostNodes(nodes);
for (var i = 0; i < topMostNodes.length; i++) {
var node = topMostNodes[i];
var oldX = node.position("x");
var oldY = node.position("y");
//Only simple nodes are moved since the movement of compounds caused the position to be moved twice
if (!node.isParent())
{
node.position({
x: oldX + positionDiff.x,
y: oldY + positionDiff.y
});
}
var children = node.children();
moveNodes(positionDiff, children, true);
}
}
function getEles(_eles) {
return (typeof _eles === "string") ? cy.$(_eles) : _eles;
}
function restoreEles(_eles) {
return getEles(_eles).restore();
}
function returnToPositions(positions) {
var currentPositions = {};
cy.nodes().not(":parent").positions(function (ele, i) {
if(typeof ele === "number") {
ele = i;
}
currentPositions[ele.id()] = {
x: ele.position("x"),
y: ele.position("y")
};
var pos = positions[ele.id()];
return {
x: pos.x,
y: pos.y
};
});
return currentPositions;
}
function getNodePositions() {
var positions = {};
var nodes = cy.nodes();
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
positions[node.id()] = {
x: node.position("x"),
y: node.position("y")
};
}
return positions;
}
function changeParentOld(param) {
var result = {
};
// If this is first time we should move the node to its new parent and relocate it by given posDiff params
// else we should remove the moved eles and restore the eles to restore
if (param.firstTime) {
var newParentId = param.parentData == undefined ? null : param.parentData;
// These eles includes the nodes and their connected edges and will be removed in nodes.move().
// They should be restored in undo
var withDescendant = param.nodes.union(param.nodes.descendants());
result.elesToRestore = withDescendant.union(withDescendant.connectedEdges());
// These are the eles created by nodes.move(), they should be removed in undo.
result.movedEles = param.nodes.move({"parent": newParentId});
var posDiff = {
x: param.posDiffX,
y: param.posDiffY
};
moveNodes(posDiff, result.movedEles);
}
else {
result.elesToRestore = param.movedEles.remove();
result.movedEles = param.elesToRestore.restore();
}
if (param.callback) {
result.callback = param.callback; // keep the provided callback so it can be reused after undo/redo
param.callback(result.movedEles); // apply the callback on newly created elements
}
return result;
}
function changeParentNew(param) {
var result = {
};
// If this is first time we should move the node to its new parent and relocate it by given posDiff params
// else we should remove the moved eles and restore the eles to restore
if (param.firstTime) {
var newParentId = param.parentData == undefined ? null : param.parentData;
// These eles includes the nodes and their connected edges and will be removed in nodes.move().
// They should be restored in undo
var withDescendant = param.nodes.union(param.nodes.descendants());
var parentData = {};
withDescendant.forEach(function(ele){
if(ele.parent().id())
parentData[ele.id()] = ele.parent();
else
parentData[ele.id()] = null;
});
var positionData = {};
withDescendant.forEach(function(ele){
positionData[ele.id()] = {};
positionData[ele.id()].x = ele.position('x');
positionData[ele.id()].y = ele.position('y');
});
result.oldParent = parentData;
result.oldPosition = positionData;
result.newParent = newParentId;
result.movedEles = withDescendant;
param.nodes.move({"parent": newParentId}).nodes();
var posDiff = {
x: param.posDiffX,
y: param.posDiffY
};
moveNodes(posDiff, result.movedEles);
}
else {
result.oldParent = {};
param.movedEles.forEach(function(ele){
if(ele.parent().id())
result.oldParent[ele.id()] = ele.parent();
else
result.oldParent[ele.id()] = null;
});
result.oldPosition = {};
param.movedEles.forEach(function(ele){
result.oldPosition[ele.id()] = {};
result.oldPosition[ele.id()].x = ele.position("x");
result.oldPosition[ele.id()].y = ele.position("y");
});
result.newParent = param.oldParent;
result.movedEles = param.movedEles;
result.movedEles.forEach(function(ele){
if(typeof result.newParent !== 'object')
ele.move({'parent': result.newParent});
else if(result.newParent[ele.id()] == null)
ele.move({'parent': null});
else
ele.move({'parent': result.newParent[ele.id()].id()});
ele.position(param.oldPosition[ele.id()]);
});
}
if (param.callback) {
result.callback = param.callback; // keep the provided callback so it can be reused after undo/redo
param.callback(result.movedEles); // apply the callback on newly created elements
}
return result;
}
// function registered in the defaultActions below
// to be used like .do('batch', actionList)
// allows to apply any quantity of registered action in one go
// the whole batch can be undone/redone with one key press
function batch (actionList, doOrUndo) {
var tempStack = []; // corresponds to the results of every action queued in actionList
var instance = getScratch(cy, 'instance'); // get extension instance through cy
var actions = instance.actions;
// here we need to check in advance if all the actions provided really correspond to available functions
// if one of the action cannot be executed, the whole batch is corrupted because we can't go back after
for (var i = 0; i < actionList.length; i++) {
var action = actionList[i];
if (!actions.hasOwnProperty(action.name)) {
throw "Action " + action.name + " does not exist as an undoable function";
}
}
for (var i = 0; i < actionList.length; i++) {
var action = actionList[i];
// firstTime property is automatically injected into actionList by the do() function
// we use that to pass it down to the actions in the batch
action.param.firstTime = actionList.firstTime;
var actionResult;
if (doOrUndo == "undo") {
actionResult = actions[action.name]._undo(action.param);
}
else {
actionResult = actions[action.name]._do(action.param);
}
tempStack.unshift({
name: action.name,
param: actionResult
});
}
return tempStack;
};
return {
"add": {
_do: function (eles) {
return eles.firstTime ? cy.add(eles) : restoreEles(eles);
},
_undo: cy.remove
},
"remove": {
_do: cy.remove,
_undo: restoreEles
},
"restore": {
_do: restoreEles,
_undo: cy.remove
},
"select": {
_do: function (_eles) {
return getEles(_eles).select();
},
_undo: function (_eles) {
return getEles(_eles).unselect();
}
},
"unselect": {
_do: function (_eles) {
return getEles(_eles).unselect();
},
_undo: function (_eles) {
return getEles(_eles).select();
}
},
"move": {
_do: function (args) {
var eles = getEles(args.eles);
var nodes = eles.nodes();
var edges = eles.edges();
return {
oldNodes: nodes,
newNodes: nodes.move(args.location),
oldEdges: edges,
newEdges: edges.move(args.location)
};
},
_undo: function (eles) {
var newEles = cy.collection();
var location = {};
if (eles.newNodes.length > 0) {
location.parent = eles.newNodes[0].parent();
for (var i = 0; i < eles.newNodes.length; i++) {
var newNode = eles.newNodes[i].move({
parent: eles.oldNodes[i].parent()
});
newEles.union(newNode);
}
} else {
location.source = location.newEdges[0].source();
location.target = location.newEdges[0].target();
for (var i = 0; i < eles.newEdges.length; i++) {
var newEdge = eles.newEdges[i].move({
source: eles.oldEdges[i].source(),
target: eles.oldEdges[i].target()
});
newEles.union(newEdge);
}
}
return {
eles: newEles,
location: location
};
}
},
"drag": {
_do: function (args) {
if (args.move)
moveNodes(args.positionDiff, args.nodes);
return args;
},
_undo: function (args) {
var diff = {
x: -1 * args.positionDiff.x,
y: -1 * args.positionDiff.y
};
var result = {
positionDiff: args.positionDiff,
nodes: args.nodes,
move: true
};
moveNodes(diff, args.nodes);
return result;
}
},
"layout": {
_do: function (args) {
if (args.firstTime){
var positions = getNodePositions();
var layout;
if(args.eles) {
layout = getEles(args.eles).layout(args.options);
}
else {
layout = cy.layout(args.options);
}
// Do this check for cytoscape.js backward compatibility
if (layout && layout.run) {
layout.run();
}
return positions;
} else
return returnToPositions(args);
},
_undo: function (nodesData) {
return returnToPositions(nodesData);
}
},
"changeParent": {
_do: function (args) {
return (cy.nodes()[0].component ? changeParentNew(args) : changeParentOld(args));
},
_undo: function (args) {
return (cy.nodes()[0].component ? changeParentNew(args) : changeParentOld(args));
}
},
"batch": {
_do: function (args) {
return batch(args, "do");
},
_undo: function (args) {
return batch(args, "undo");
}
}
};
}
};
if (typeof module !== 'undefined' && module.exports) { // expose as a commonjs module
module.exports = register;
}
if (typeof define !== 'undefined' && define.amd) { // expose as an amd/requirejs module
define('cytoscape.js-undo-redo', function () {
return register;
});
}
if (typeof cytoscape !== 'undefined') { // expose to global cytoscape (i.e. window.cytoscape)
register(cytoscape);
}
})();

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,45 @@
/*
download png of graph
*/
function downloadPNG(cy, pos, name){
var png64 = cy.png({'output': 'blob'});
saveAs(new Blob([png64], {type:"image/png"}));
}
function downloadSVG(cy, pos, name, nodeVal){
var svgContent = cy.svg({scale: 1, full: true});
saveAs(new Blob([svgContent], {type:"image/svg+xml;charset=utf-8"}));
}
function downloadPDF() {
jQuery(window).scrollTop(0);
const domElement = document.getElementById('body');
var divHeight = window.innerHeight
var divWidth = window.innerWidth
var ratio = divHeight / divWidth;
var doc = new jsPDF("l", "mm");
var width = doc.internal.pageSize.getWidth();
var height = (ratio * width);
html2canvas(jQuery("body").get(0), { onclone: (document) => {
document.getElementById('description').remove();
document.getElementById('heatmapcontainer').remove();
document.getElementById('selectAttribute').remove();
document.getElementById('downloadPDF').remove();
document.getElementById('resetLeft').remove();
document.getElementById('resetRight').remove();
document.getElementById('keggpathwaysLeft').style.visibility = 'hidden'
document.getElementById('keggpathwaysRight').style.visibility = 'hidden'
document.getElementById('nav').style.visibility = 'hidden'
document.getElementById('footer').style.visibility = 'hidden'
}}).then(function(canvas){
var imgData = canvas.toDataURL('image/png');
doc.addImage(imgData, 'PNG', 0, 0, width, height);
doc.save();
});
}

View File

@ -0,0 +1,42 @@
/*
download merged graph
*/
function downloadMergePNG(){
var png64 = merge_graph.png({'output': 'blob'});
saveAs(new Blob([png64], {type:"image/png"}));
}
function downloadMergeSVG(){
var svgContent = merge_graph.svg({scale: 1, full: true});
saveAs(new Blob([svgContent], {type:"image/svg+xml;charset=utf-8"}));
}
function downloadMergePDF(){
const domElement = document.getElementById('body');
var divHeight = window.innerHeight
var divWidth = window.innerWidth
var ratio = divHeight / divWidth;
var doc = new jsPDF("l", "mm");
var width = doc.internal.pageSize.getWidth();
var height = (ratio * width);
html2canvas(jQuery("#body").get(0), { onclone: (document) => {
document.getElementById('nav').style.visibility = 'hidden'
document.getElementById('resetMerge').style.visibility = 'hidden'
document.getElementById('nav').style.visibility = 'hidden';
document.getElementById('merged_graph_buttons').style.visibility = 'hidden'
document.getElementById('keggpathwaysMerge').style.visibility = 'hidden'
document.getElementById('footer').style.visibility = 'hidden'
document.getElementById('searchbutn').style.visibility = 'hidden'
if(document.getElementById('searchgene').value == "Search gene"){
document.getElementById('searchgene').style.visibility = 'hidden'
}
}}).then(function(canvas){
var imgData = canvas.toDataURL('image/png');
doc.addImage(imgData, 'PNG', 0, 0, width, height);
doc.save();
})
}

View File

@ -0,0 +1,73 @@
/*
download of graph
*/
// function downloadName(ext){
// outputName = document.getElementById('outputName').value;
// if(outputName != "Download File name"){
// return outputName + ext;
// }
// else if(path){
// return path.replace(".graphml", "_") + '_' + nodeVal + ext;
// }
// else{
// return "example" + ext;
// }
// }
function downloadPNG(){
var png64 = cy.png({'output': 'blob'});
saveAs(new Blob([png64], {type:"image/png"}));
}
function downloadSVG(){
var svgContent = cy.svg({scale: 1, full: true});
saveAs(new Blob([svgContent], {type:"image/svg+xml;charset=utf-8"}));
}
function downloadJSON(){
var json = JSON.stringify(cy.json());
jQuery('#downloadJSON').attr('href', json);
var download = document.createElement('a');
download.href = 'data:text/json;charset=utf-8,'+encodeURIComponent(json);
document.body.appendChild(download); // required for firefox
// download.download = downloadName('.json');
download.click();
}
function downloadPDF () {
const domElement = document.getElementById('everything');
var divHeight = window.innerHeight
var divWidth = window.innerWidth
var ratio = divHeight / divWidth;
var doc = new jsPDF("l", "mm");
var width = doc.internal.pageSize.getWidth();
var height = (ratio * width);
html2canvas(jQuery("#everything").get(0), { onclone: (document) => {
document.getElementById('nav').style.visibility = 'hidden'
// document.getElementById('description').style.visibility = 'hidden'
document.getElementById('downloadPart').style.visibility = 'hidden'
document.getElementById('resetLayout').style.visibility = 'hidden'
// document.getElementById('loadGraphml').style.visibility = 'hidden'
document.getElementById('keggpathways').style.visibility = 'hidden'
document.getElementById('footer').style.visibility = 'hidden'
document.getElementById('searchbutn').style.visibility = 'hidden'
document.getElementById('undobutn').style.visibility = 'hidden'
// document.getElementById('exampleFile').style.visibility = 'hidden'
if(!noDrpShapes){
document.getElementById('nodeShapesAttr').style.visibility = 'hidden'
document.getElementById('nodeShapes').style.visibility = 'hidden'
}
if(document.getElementById('searchgene').value == "Search gene"){
document.getElementById('searchgene').style.visibility = 'hidden'
}
}}).then(function(canvas){
var imgData = canvas.toDataURL('image/png');
doc.addImage(imgData, 'PNG', 0, 0, width, height);
doc.save();
});
}

View File

@ -0,0 +1,795 @@
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["cytoscapeCxtmenu"] = factory();
else
root["cytoscapeCxtmenu"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 4);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var defaults = __webpack_require__(2);
var assign = __webpack_require__(1);
var _require = __webpack_require__(3),
removeEles = _require.removeEles,
setStyles = _require.setStyles,
createElement = _require.createElement,
getPixelRatio = _require.getPixelRatio,
getOffset = _require.getOffset;
var cxtmenu = function cxtmenu(params) {
var options = assign({}, defaults, params);
var cy = this;
var container = cy.container();
var target = void 0;
var data = {
options: options,
handlers: [],
container: createElement({ class: 'cxtmenu' })
};
var wrapper = data.container;
var parent = createElement();
var canvas = createElement({ tag: 'canvas' });
var commands = [];
var c2d = canvas.getContext('2d');
var r = options.menuRadius;
var containerSize = (r + options.activePadding) * 2;
var activeCommandI = void 0;
var offset = void 0;
container.insertBefore(wrapper, container.firstChild);
wrapper.appendChild(parent);
parent.appendChild(canvas);
setStyles(wrapper, {
position: 'absolute',
zIndex: options.zIndex,
userSelect: 'none',
pointerEvents: 'none' // prevent events on menu in modern browsers
});
// prevent events on menu in legacy browsers
['mousedown', 'mousemove', 'mouseup', 'contextmenu'].forEach(function (evt) {
wrapper.addEventListener(evt, function (e) {
e.preventDefault();
return false;
});
});
setStyles(parent, {
display: 'none',
width: containerSize + 'px',
height: containerSize + 'px',
position: 'absolute',
zIndex: 1,
marginLeft: -options.activePadding + 'px',
marginTop: -options.activePadding + 'px',
userSelect: 'none'
});
canvas.width = containerSize;
canvas.height = containerSize;
function createMenuItems() {
removeEles('.cxtmenu-item', parent);
var dtheta = 2 * Math.PI / commands.length;
var theta1 = Math.PI / 2;
var theta2 = theta1 + dtheta;
for (var i = 0; i < commands.length; i++) {
var command = commands[i];
var midtheta = (theta1 + theta2) / 2;
var rx1 = 0.66 * r * Math.cos(midtheta);
var ry1 = 0.66 * r * Math.sin(midtheta);
var item = createElement({ class: 'cxtmenu-item' });
setStyles(item, {
color: options.itemColor,
cursor: 'default',
display: 'table',
'text-align': 'center',
//background: 'red',
position: 'absolute',
'text-shadow': '-1px -1px 2px ' + options.itemTextShadowColor + ', 1px -1px 2px ' + options.itemTextShadowColor + ', -1px 1px 2px ' + options.itemTextShadowColor + ', 1px 1px 1px ' + options.itemTextShadowColor,
left: '50%',
top: '50%',
'min-height': r * 0.66 + 'px',
width: r * 0.66 + 'px',
height: r * 0.66 + 'px',
marginLeft: rx1 - r * 0.33 + 'px',
marginTop: -ry1 - r * 0.33 + 'px'
});
var content = createElement({ class: 'cxtmenu-content' });
if (command.content instanceof HTMLElement) {
content.appendChild(command.content);
} else {
content.innerHTML = command.content;
}
setStyles(content, {
'width': r * 0.66 + 'px',
'height': r * 0.66 + 'px',
'vertical-align': 'middle',
'display': 'table-cell'
});
setStyles(content, command.contentStyle || {});
if (command.disabled === true || command.enabled === false) {
content.setAttribute('class', 'cxtmenu-content cxtmenu-disabled');
}
parent.appendChild(item);
item.appendChild(content);
theta1 += dtheta;
theta2 += dtheta;
}
}
function queueDrawBg(rspotlight) {
redrawQueue.drawBg = [rspotlight];
}
function drawBg(rspotlight) {
rspotlight = rspotlight !== undefined ? rspotlight : rs;
c2d.globalCompositeOperation = 'source-over';
c2d.clearRect(0, 0, containerSize, containerSize);
// draw background items
c2d.fillStyle = options.fillColor;
var dtheta = 2 * Math.PI / commands.length;
var theta1 = Math.PI / 2;
var theta2 = theta1 + dtheta;
for (var index = 0; index < commands.length; index++) {
var command = commands[index];
if (command.fillColor) {
c2d.fillStyle = command.fillColor;
}
c2d.beginPath();
c2d.moveTo(r + options.activePadding, r + options.activePadding);
c2d.arc(r + options.activePadding, r + options.activePadding, r, 2 * Math.PI - theta1, 2 * Math.PI - theta2, true);
c2d.closePath();
c2d.fill();
theta1 += dtheta;
theta2 += dtheta;
c2d.fillStyle = options.fillColor;
}
// draw separators between items
c2d.globalCompositeOperation = 'destination-out';
c2d.strokeStyle = 'white';
c2d.lineWidth = options.separatorWidth;
theta1 = Math.PI / 2;
theta2 = theta1 + dtheta;
for (var i = 0; i < commands.length; i++) {
var rx1 = r * Math.cos(theta1);
var ry1 = r * Math.sin(theta1);
c2d.beginPath();
c2d.moveTo(r + options.activePadding, r + options.activePadding);
c2d.lineTo(r + options.activePadding + rx1, r + options.activePadding - ry1);
c2d.closePath();
c2d.stroke();
theta1 += dtheta;
theta2 += dtheta;
}
c2d.fillStyle = 'white';
c2d.globalCompositeOperation = 'destination-out';
c2d.beginPath();
c2d.arc(r + options.activePadding, r + options.activePadding, rspotlight + options.spotlightPadding, 0, Math.PI * 2, true);
c2d.closePath();
c2d.fill();
c2d.globalCompositeOperation = 'source-over';
}
function queueDrawCommands(rx, ry, theta) {
redrawQueue.drawCommands = [rx, ry, theta];
}
function drawCommands(rx, ry, theta) {
var dtheta = 2 * Math.PI / commands.length;
var theta1 = Math.PI / 2;
var theta2 = theta1 + dtheta;
theta1 += dtheta * activeCommandI;
theta2 += dtheta * activeCommandI;
c2d.fillStyle = options.activeFillColor;
c2d.strokeStyle = 'black';
c2d.lineWidth = 1;
c2d.beginPath();
c2d.moveTo(r + options.activePadding, r + options.activePadding);
c2d.arc(r + options.activePadding, r + options.activePadding, r + options.activePadding, 2 * Math.PI - theta1, 2 * Math.PI - theta2, true);
c2d.closePath();
c2d.fill();
c2d.fillStyle = 'white';
c2d.globalCompositeOperation = 'destination-out';
var tx = r + options.activePadding + rx / r * (rs + options.spotlightPadding - options.indicatorSize / 4);
var ty = r + options.activePadding + ry / r * (rs + options.spotlightPadding - options.indicatorSize / 4);
var rot = Math.PI / 4 - theta;
c2d.translate(tx, ty);
c2d.rotate(rot);
// clear the indicator
c2d.beginPath();
c2d.fillRect(-options.indicatorSize / 2, -options.indicatorSize / 2, options.indicatorSize, options.indicatorSize);
c2d.closePath();
c2d.fill();
c2d.rotate(-rot);
c2d.translate(-tx, -ty);
// c2d.setTransform( 1, 0, 0, 1, 0, 0 );
// clear the spotlight
c2d.beginPath();
c2d.arc(r + options.activePadding, r + options.activePadding, rs + options.spotlightPadding, 0, Math.PI * 2, true);
c2d.closePath();
c2d.fill();
c2d.globalCompositeOperation = 'source-over';
}
function updatePixelRatio() {
var pxr = getPixelRatio();
var w = containerSize;
var h = containerSize;
canvas.width = w * pxr;
canvas.height = h * pxr;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
c2d.setTransform(1, 0, 0, 1, 0, 0);
c2d.scale(pxr, pxr);
}
var redrawing = true;
var redrawQueue = {};
var raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || function (fn) {
return setTimeout(fn, 16);
};
var redraw = function redraw() {
if (redrawQueue.drawBg) {
drawBg.apply(null, redrawQueue.drawBg);
}
if (redrawQueue.drawCommands) {
drawCommands.apply(null, redrawQueue.drawCommands);
}
redrawQueue = {};
if (redrawing) {
raf(redraw);
}
};
// kick off
updatePixelRatio();
redraw();
var ctrx = void 0,
ctry = void 0,
rs = void 0;
var bindings = {
on: function on(events, selector, fn) {
var _fn = fn;
if (selector === 'core') {
_fn = function _fn(e) {
if (e.cyTarget === cy || e.target === cy) {
// only if event target is directly core
return fn.apply(this, [e]);
}
};
}
data.handlers.push({
events: events,
selector: selector,
fn: _fn
});
if (selector === 'core') {
cy.on(events, _fn);
} else {
cy.on(events, selector, _fn);
}
return this;
}
};
function addEventListeners() {
var grabbable = void 0;
var inGesture = false;
var dragHandler = void 0;
var zoomEnabled = void 0;
var panEnabled = void 0;
var boxEnabled = void 0;
var gestureStartEvent = void 0;
var restoreZoom = function restoreZoom() {
if (zoomEnabled) {
cy.userZoomingEnabled(true);
}
};
var restoreGrab = function restoreGrab() {
if (grabbable) {
target.grabify();
}
};
var restorePan = function restorePan() {
if (panEnabled) {
cy.userPanningEnabled(true);
}
};
var restoreBoxSeln = function restoreBoxSeln() {
if (boxEnabled) {
cy.boxSelectionEnabled(true);
}
};
var restoreGestures = function restoreGestures() {
restoreGrab();
restoreZoom();
restorePan();
restoreBoxSeln();
};
window.addEventListener('resize', updatePixelRatio);
bindings.on('resize', function () {
updatePixelRatio();
}).on(options.openMenuEvents, options.selector, function (e) {
target = this; // Remember which node the context menu is for
var ele = this;
var isCy = this === cy;
if (inGesture) {
parent.style.display = 'none';
inGesture = false;
restoreGestures();
}
if (typeof options.commands === 'function') {
var res = options.commands(target);
if (res.then) {
res.then(function (_commands) {
commands = _commands;
openMenu();
});
} else {
commands = res;
openMenu();
}
} else {
commands = options.commands;
openMenu();
}
function openMenu() {
if (!commands || commands.length === 0) {
return;
}
zoomEnabled = cy.userZoomingEnabled();
cy.userZoomingEnabled(false);
panEnabled = cy.userPanningEnabled();
cy.userPanningEnabled(false);
boxEnabled = cy.boxSelectionEnabled();
cy.boxSelectionEnabled(false);
grabbable = target.grabbable && target.grabbable();
if (grabbable) {
target.ungrabify();
}
var rp = void 0,
rw = void 0,
rh = void 0;
if (!isCy && ele.isNode() && !ele.isParent() && !options.atMouse) {
rp = ele.renderedPosition();
rw = ele.renderedWidth();
rh = ele.renderedHeight();
} else {
rp = e.renderedPosition || e.cyRenderedPosition;
rw = 1;
rh = 1;
}
offset = getOffset(container);
ctrx = rp.x;
ctry = rp.y;
createMenuItems();
setStyles(parent, {
display: 'block',
left: rp.x - r + 'px',
top: rp.y - r + 'px'
});
rs = Math.max(rw, rh) / 2;
rs = Math.max(rs, options.minSpotlightRadius);
rs = Math.min(rs, options.maxSpotlightRadius);
queueDrawBg();
activeCommandI = undefined;
inGesture = true;
gestureStartEvent = e;
}
}).on('cxtdrag tapdrag', options.selector, dragHandler = function dragHandler(e) {
if (!inGesture) {
return;
}
var origE = e.originalEvent;
var isTouch = origE.touches && origE.touches.length > 0;
var pageX = (isTouch ? origE.touches[0].pageX : origE.pageX) - window.scrollX;
var pageY = (isTouch ? origE.touches[0].pageY : origE.pageY) - window.scrollY;
activeCommandI = undefined;
var dx = pageX - offset.left - ctrx;
var dy = pageY - offset.top - ctry;
if (dx === 0) {
dx = 0.01;
}
var d = Math.sqrt(dx * dx + dy * dy);
var cosTheta = (dy * dy - d * d - dx * dx) / (-2 * d * dx);
var theta = Math.acos(cosTheta);
if (d < rs + options.spotlightPadding) {
queueDrawBg();
return;
}
queueDrawBg();
var rx = dx * r / d;
var ry = dy * r / d;
if (dy > 0) {
theta = Math.PI + Math.abs(theta - Math.PI);
}
var dtheta = 2 * Math.PI / commands.length;
var theta1 = Math.PI / 2;
var theta2 = theta1 + dtheta;
for (var i = 0; i < commands.length; i++) {
var command = commands[i];
var inThisCommand = theta1 <= theta && theta <= theta2 || theta1 <= theta + 2 * Math.PI && theta + 2 * Math.PI <= theta2;
if (command.disabled === true || command.enabled === false) {
inThisCommand = false;
}
if (inThisCommand) {
activeCommandI = i;
break;
}
theta1 += dtheta;
theta2 += dtheta;
}
queueDrawCommands(rx, ry, theta);
}).on('tapdrag', dragHandler).on('cxttapend tapend', function () {
parent.style.display = 'none';
if (activeCommandI !== undefined) {
var select = commands[activeCommandI].select;
if (select) {
select.apply(target, [target, gestureStartEvent]);
activeCommandI = undefined;
}
}
inGesture = false;
restoreGestures();
});
}
function removeEventListeners() {
var handlers = data.handlers;
for (var i = 0; i < handlers.length; i++) {
var h = handlers[i];
if (h.selector === 'core') {
cy.off(h.events, h.fn);
} else {
cy.off(h.events, h.selector, h.fn);
}
}
window.removeEventListener('resize', updatePixelRatio);
}
function destroyInstance() {
redrawing = false;
removeEventListeners();
wrapper.remove();
}
addEventListeners();
return {
destroy: function destroy() {
destroyInstance();
}
};
};
module.exports = cxtmenu;
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// Simple, internal Object.assign() polyfill for options objects etc.
module.exports = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {
for (var _len = arguments.length, srcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
srcs[_key - 1] = arguments[_key];
}
srcs.filter(function (src) {
return src != null;
}).forEach(function (src) {
Object.keys(src).forEach(function (k) {
return tgt[k] = src[k];
});
});
return tgt;
};
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var defaults = {
menuRadius: 100, // the radius of the circular menu in pixels
selector: 'node', // elements matching this Cytoscape.js selector will trigger cxtmenus
commands: [// an array of commands to list in the menu or a function that returns the array
/*
{ // example command
fillColor: 'rgba(200, 200, 200, 0.75)', // optional: custom background color for item
content: 'a command name' // html/text content to be displayed in the menu
contentStyle: {}, // css key:value pairs to set the command's css in js if you want
select: function(ele){ // a function to execute when the command is selected
console.log( ele.id() ) // `ele` holds the reference to the active element
},
enabled: true // whether the command is selectable
}
*/
], // function( ele ){ return [ /*...*/ ] }, // example function for commands
fillColor: 'rgba(0, 0, 0, 0.75)', // the background colour of the menu
activeFillColor: 'rgba(1, 105, 217, 0.75)', // the colour used to indicate the selected command
activePadding: 20, // additional size in pixels for the active command
indicatorSize: 24, // the size in pixels of the pointer to the active command
separatorWidth: 3, // the empty spacing in pixels between successive commands
spotlightPadding: 4, // extra spacing in pixels between the element and the spotlight
minSpotlightRadius: 24, // the minimum radius in pixels of the spotlight
maxSpotlightRadius: 38, // the maximum radius in pixels of the spotlight
openMenuEvents: 'cxttapstart taphold', // space-separated cytoscape events that will open the menu; only `cxttapstart` and/or `taphold` work here
itemColor: 'white', // the colour of text in the command's content
itemTextShadowColor: 'transparent', // the text shadow colour of the command's content
zIndex: 9999, // the z-index of the ui div
atMouse: false // draw menu at mouse position
};
module.exports = defaults;
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var removeEles = function removeEles(query) {
var ancestor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
var els = ancestor.querySelectorAll(query);
for (var i = 0; i < els.length; i++) {
var el = els[i];
el.parentNode.removeChild(el);
}
};
var setStyles = function setStyles(el, style) {
var props = Object.keys(style);
for (var i = 0, l = props.length; i < l; i++) {
el.style[props[i]] = style[props[i]];
}
};
var createElement = function createElement(options) {
options = options || {};
var el = document.createElement(options.tag || 'div');
el.className = options.class || '';
if (options.style) {
setStyles(el, options.style);
}
return el;
};
var getPixelRatio = function getPixelRatio() {
return window.devicePixelRatio || 1;
};
var getOffset = function getOffset(el) {
var offset = el.getBoundingClientRect();
return {
left: offset.left + document.body.scrollLeft + parseFloat(getComputedStyle(document.body)['padding-left']) + parseFloat(getComputedStyle(document.body)['border-left-width']),
top: offset.top + document.body.scrollTop + parseFloat(getComputedStyle(document.body)['padding-top']) + parseFloat(getComputedStyle(document.body)['border-top-width'])
};
};
module.exports = { removeEles: removeEles, setStyles: setStyles, createElement: createElement, getPixelRatio: getPixelRatio, getOffset: getOffset };
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var cxtmenu = __webpack_require__(0);
// registers the extension on a cytoscape lib ref
var register = function register(cytoscape) {
if (!cytoscape) {
return;
} // can't register if cytoscape unspecified
cytoscape('core', 'cxtmenu', cxtmenu); // register with cytoscape.js
};
if (typeof cytoscape !== 'undefined') {
// expose to global cytoscape (i.e. window.cytoscape)
register(cytoscape);
}
module.exports = register;
/***/ })
/******/ ]);
});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,51 @@
function $(selector, context){
context = context || document;
return context["querySelectorAll"](selector);
}
function forEach(collection, iterator){
for(var key in Object.keys(collection)){
iterator(collection[key]);
}
}
function showMenu(menu){
var menu = this;
var ul = $("ul", menu)[0];
if(!ul || ul.classList.contains("-visible")) return;
menu.classList.add("-active");
ul.classList.add("-animating");
ul.classList.add("-visible");
setTimeout(function(){
ul.classList.remove("-animating")
}, 25);
}
function hideMenu(menu){
var menu = this;
var ul = $("ul", menu)[0];
if(!ul || !ul.classList.contains("-visible")) return;
menu.classList.remove("-active");
ul.classList.add("-animating");
setTimeout(function(){
ul.classList.remove("-visible");
ul.classList.remove("-animating");
}, 300);
}
function hideAllInactiveMenus(menu){
var menu = this;
forEach(
$("li.-hasSubmenu.-active:not(:hover)", menu.parent),
function(e){
e.hideMenu && e.hideMenu();
}
);
}

View File

@ -0,0 +1,693 @@
/*
create a graph with Cytoscape
*/
/*
visualize a graph from .graphml-file
*/
var removedNodes;
function visualize(graphString, noOptn) {
document.getElementById('loader1').style.visibility = "visibile";
// if(!noOptn && !clicked && !defaultVal){
// nodeVal = document.getElementById('values').value;
// }
if(isJson){
var nodes = graphString.elements.nodes;
var edges = graphString.elements.edges;
var nodeValuesNum = []
for(let n of nodes){
if(n.data[nodeVal]){
nodeValuesNum.push(n.data[nodeVal])
}
}
var interactionTypes=[]
for(let e of edges){
interactionTypes.push(e.data.interaction)
}
interactionTypes = interactionTypes.flat();
interactionTypes = new Set(interactionTypes)
var edgesToMerge = true;
}
else{
// get nodes and edges
if(isSIF){
var nodesAndEdges = getNodesAndEdgesSIF(graphString, nodeVal, "", noOptn);
}
else{
var nodesAndEdges = getNodesAndEdges(graphString, nodeVal,"", noOptn);
}
var nodes = nodesAndEdges[0];
var edges = nodesAndEdges[1];
var nodeValuesNum = nodesAndEdges[2];
interactionTypes = nodesAndEdges[3];
var edgesToMerge = nodesAndEdges[4]
var drugedges = nodesAndEdges[5];
}
if(!noOptn){
// set min and max for legend
var range = legendsRange(nodeValuesNum);
var nodesMin = range[0];
var nodesMax = range[1];
};
// add nodes and edges to graph
addNodesAndEdges(nodes, edges, drugedges, nodesMin, nodesMax, noOptn);
if(!clicked){
document.getElementById('arrows').innerHTML = "";
createInteractionLegend(interactionTypes, cy, edgesToMerge, noOptn);
document.getElementById('legend').setAttribute('style','visibility:visible');
document.getElementById('downloadPart').style.visibility = "visible";
}
showMetaInfo(noOptn);
document.getElementById('loader1').style.visibility = "hidden";
document.getElementById('selectlayout').setAttribute('style','visibility:visible');
document.getElementById('resetLayout').onclick= function(){changeLayout(cy, selectedLayout)};
// if(! noDrpShapes){
// activateNodeShapeChange();
// }
document.getElementById('KEGGpathsButton').style.visibility ="visible";
document.getElementById('KEGGpaths').style.visibility ="visible";
// set background layer to hoghlight pathways
var layer = createLayoutKeggPathways(cy, allPaths)
var canvas = layer.getCanvas();
var ctx = canvas.getContext('2d');
document.getElementById('keggpathways').onclick = function(){if(!collapsed){listKEGGPathways(ctx, cy, nodes, layer, canvas, "")}};
var defaultVal = false;
if(document.getElementById('nodeShapesAttr').value){
cy.style()
.selector('node['+document.getElementById('nodeShapesAttr').value+' ="true"]')
.style('shape', document.getElementById('nodeShapes').value)
.update();
}
addcolorlegend(cy);
var api = cy.expandCollapse('get');
var options = {
layoutBy: null, // to rearrange after expand/collapse. It's just layout options or whole layout function. Choose your side!
// recommended usage: use cose-bilkent layout with randomize: false to preserve mental map upon expand/collapse
fisheye: false, // whether to perform fisheye view after expand/collapse you can specify a function too
animate: true, // whether to animate on drawing changes you can specify a function too
animationDuration: 1000, // when animate is true, the duration in milliseconds of the animation
ready: function () {}, // callback when expand/collapse initialized
undoable: true, // and if undoRedoExtension exists,
cueEnabled: true, // Whether cues are enabled
expandCollapseCuePosition: 'top-left', // default cue position is top left you can specify a function per node too
expandCollapseCueSize: 12, // size of expand-collapse cue
expandCollapseCueLineSize: 8, // size of lines used for drawing plus-minus icons
expandCueImage: undefined, // image of expand icon if undefined draw regular expand cue
collapseCueImage: undefined, // image of collapse icon if undefined draw regular collapse cue
expandCollapseCueSensitivity: 1, // sensitivity of expand-collapse cues
edgeTypeInfo: "interaction", // the name of the field that has the edge type, retrieved from edge.data(), can be a function, if reading the field returns undefined the collapsed edge type will be "unknown"
groupEdgesOfSameTypeOnCollapse : true, // if true, the edges to be collapsed will be grouped according to their types, and the created collapsed edges will have same type as their group. if false the collapased edge will have "unknown" type.
allowNestedEdgeCollapse: true, // when you want to collapse a compound edge (edge which contains other edges) and normal edge, should it collapse without expanding the compound first
zIndex: 999 // z-index value of the canvas in which cue ımages are drawn
};
api.collapseAll(options)
changeLayout(cy);
}
//add nodes and edges to cy-object (update if attribute has changed)
function addNodesAndEdges(nodes, edges, drugedges, nodesMin, nodesMax, noOptn){
// add parent nodes for every drug group
for(const [target, drugs] of Object.entries(drugedges)){
for(const [target2, drugs2] of Object.entries(drugedges)){
if(target == target2){
continue;
}
if(drugs.length === drugs2.length &&
drugs.every((val, index) => val === drugs2[index])){
delete drugedges[target2]
}
}
}
for(const [target, drugs] of Object.entries(drugedges)){
if(drugs.length > 1){
var drugNode = {};
drugNode.id = "n"+(nodes.length-1).toString()
drugNode.symbol = drugs.length + " Drugs"
nodes.push({data: drugNode});
for(var drugnode of drugs){
for(var node of nodes){
if(node.data.id == drugnode){
node.data.parent = drugNode.id
}
}
}
}
}
cy = cytoscape({
container: document.getElementById('cy'),
ready: function(){
},
elements: nodes.concat(edges),
style: [
// style nodes
basicstyle,
{selector: 'node[!'+nodeVal+']',
style: {
'background-color': 'white',
'color':'black'
}},
// attributes with numbers
{selector: 'node['+nodeVal+']['+nodeVal+' < "0"]',
style: {
'background-color': 'mapData('+nodeVal+','+ nodesMin+', 0, #006cf0, white)',
'color': 'black'
}},
{selector: 'node['+nodeVal+']['+nodeVal+' <='+0.5*nodesMin+']',
style: {
'color': 'white'
}},
{selector: 'node['+nodeVal+']['+nodeVal+' > "0"]',
style: {
'background-color': 'mapData('+nodeVal+', 0,'+ nodesMax+', white, #d50000)',
'color': 'black'
}},
{selector: 'node['+nodeVal+']['+nodeVal+' >='+0.5*nodesMax+']',
style: {
'color': 'white'
}},
{selector: 'node['+nodeVal+']['+nodeVal+' = "0"]',
style: {
'background-color': 'white',
'color':'black'
}},
// attributes with boolean
{selector: 'node['+nodeVal+']['+nodeVal+' = "false"]',
style: {
'background-color': '#006cf0',
'color':'white'
}},
{selector: 'node['+nodeVal+']['+nodeVal+' = "true"]',
style: {
'background-color': '#d50000',
'color':'white'
}},
{selector: 'node[id = "l1"]',
style:{
'color': 'black',
'background-height':50,
'background-width':200,
'background-position-y':'100%',
'shape': 'rectangle',
'width':200,
'height':50,
'border-width':1,
'text-valign' : 'bottom',
'text-max-width': 200
}},
{selector: 'node[midrug_id]',
style:{
'background-image': 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjIsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iTGF5ZXJfMSIKICAgeD0iMHB4IgogICB5PSIwcHgiCiAgIHdpZHRoPSIyNDkuMjM1cHgiCiAgIGhlaWdodD0iMjQ5LjIzNnB4IgogICB2aWV3Qm94PSIwIDAgMjQ5LjIzNSAyNDkuMjM2IgogICBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNDkuMjM1IDI0OS4yMzYiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOmRvY25hbWU9InBpbGxfaWNvbl9yZWRfMjU2LnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4yIDVjM2U4MGQsIDIwMTctMDgtMDYiPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEzIj48cmRmOlJERj48Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcwogICAgIGlkPSJkZWZzMTEiIC8+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI3NzgiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgwIgogICAgIGlkPSJuYW1lZHZpZXc5IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjk0Njg5Mzc0IgogICAgIGlua3NjYXBlOmN4PSIxMjQuNjE3NSIKICAgICBpbmtzY2FwZTpjeT0iMTI0LjYxOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMjIzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSI3NCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkxheWVyXzEiIC8+PGcKICAgICBpZD0iZzYiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSI+PHBhdGgKICAgICAgIGZpbGw9IiNGQkZCRkIiCiAgICAgICBkPSJNMTk1LjUxMiw1NC4yOTRjLTguMTQyLTguMTQzLTE4LjgxNS0xMi4yMjYtMjkuNDk0LTEyLjIyNmMtMTAuNjc0LDAtMjEuMzUxLDQuMDgzLTI5LjQ3LDEyLjIyNiAgIEw5NC4zOTYsOTYuNDM4bDAsMGwtNDIuMTQyLDQyLjEzNWMtMTYuMjg3LDE2LjI2Ny0xNi4yODcsNDIuNjgsMC4wMSw1OC45NjVjMTYuMjY2LDE2LjI3OCw0Mi42ODIsMTYuMjc4LDU4Ljk1NiwwbDMzLjE2My0zMy4xNSAgIGw1MS4xMTktNTEuMTE5QzIxMS43NzYsOTYuOTc0LDIxMS43NzYsNzAuNTU5LDE5NS41MTIsNTQuMjk0eiBNMTg2LjUzMiwxMDQuMjgzbC00Mi4xNDgsNDIuMTRMMTAzLjM2NSwxMDUuNGw0Mi4xNDItNDIuMTQgICBjNS40NzMtNS40NzQsMTIuNzY1LTguNTA3LDIwLjQ5Mi04LjUwN2M3Ljc1MSwwLDE1LjA0MiwzLjAzMywyMC41MTgsOC41MDdDMTk3LjgzOCw3NC41NjQsMTk3LjgzOCw5Mi45ODMsMTg2LjUzMiwxMDQuMjgzeiIKICAgICAgIGlkPSJwYXRoNCIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjEiIC8+PC9nPjwvc3ZnPg==',
'background-width': '45%',
'background-height': '45%',
'background-position-y': '100%',
}},
{selector: ':parent',
style: {
'border-width':0.5,
"background-color": "lightgrey",
'background-opacity': 0.5,
}},
{selector: "node.cy-expand-collapse-collapsed-node",
style: {
'shape': "diamond",
"background-color": "lightgrey",
'background-image': 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjIsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iTGF5ZXJfMSIKICAgeD0iMHB4IgogICB5PSIwcHgiCiAgIHdpZHRoPSIyNDkuMjM1cHgiCiAgIGhlaWdodD0iMjQ5LjIzNnB4IgogICB2aWV3Qm94PSIwIDAgMjQ5LjIzNSAyNDkuMjM2IgogICBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNDkuMjM1IDI0OS4yMzYiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOmRvY25hbWU9InBpbGxfaWNvbl9yZWRfMjU2LnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4yIDVjM2U4MGQsIDIwMTctMDgtMDYiPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEzIj48cmRmOlJERj48Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcwogICAgIGlkPSJkZWZzMTEiIC8+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI3NzgiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgwIgogICAgIGlkPSJuYW1lZHZpZXc5IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjk0Njg5Mzc0IgogICAgIGlua3NjYXBlOmN4PSIxMjQuNjE3NSIKICAgICBpbmtzY2FwZTpjeT0iMTI0LjYxOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMjIzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSI3NCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkxheWVyXzEiIC8+PGcKICAgICBpZD0iZzYiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSI+PHBhdGgKICAgICAgIGZpbGw9IiNGQkZCRkIiCiAgICAgICBkPSJNMTk1LjUxMiw1NC4yOTRjLTguMTQyLTguMTQzLTE4LjgxNS0xMi4yMjYtMjkuNDk0LTEyLjIyNmMtMTAuNjc0LDAtMjEuMzUxLDQuMDgzLTI5LjQ3LDEyLjIyNiAgIEw5NC4zOTYsOTYuNDM4bDAsMGwtNDIuMTQyLDQyLjEzNWMtMTYuMjg3LDE2LjI2Ny0xNi4yODcsNDIuNjgsMC4wMSw1OC45NjVjMTYuMjY2LDE2LjI3OCw0Mi42ODIsMTYuMjc4LDU4Ljk1NiwwbDMzLjE2My0zMy4xNSAgIGw1MS4xMTktNTEuMTE5QzIxMS43NzYsOTYuOTc0LDIxMS43NzYsNzAuNTU5LDE5NS41MTIsNTQuMjk0eiBNMTg2LjUzMiwxMDQuMjgzbC00Mi4xNDgsNDIuMTRMMTAzLjM2NSwxMDUuNGw0Mi4xNDItNDIuMTQgICBjNS40NzMtNS40NzQsMTIuNzY1LTguNTA3LDIwLjQ5Mi04LjUwN2M3Ljc1MSwwLDE1LjA0MiwzLjAzMywyMC41MTgsOC41MDdDMTk3LjgzOCw3NC41NjQsMTk3LjgzOCw5Mi45ODMsMTg2LjUzMiwxMDQuMjgzeiIKICAgICAgIGlkPSJwYXRoNCIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjEiIC8+PC9nPjwvc3ZnPg==',
'background-width': '45%',
'background-height': '45%',
'background-position-y': '100%'
}},
// style edges
basicedgestyle,
actstyle,
expstyle,
inhistyle,
reprstyle,
bindstyle,
dissostyle,
compstyle,
indeffstyle,
missstyle,
statestyle,
phosphostyle,
dephosphostyle,
glycostyle,
ubiquistyle,
methystyle,
{'selector': 'edge.cy-expand-collapse-meta-edge',
style: {
'curve-style': 'unbundled-bezier',
'control-point-distances': '0 0 0',
'target-arrow-shape': 'triangle',
},
},
]
});
var selectedLayout = document.getElementById('selectlayout').value;
var layoutBy = {};
if(selectedLayout == "klay"){
var options = {
animate: animateLayout, // Whether to transition the node positions
klay: {
aspectRatio: 1.49, // The aimed aspect ratio of the drawing, that is the quotient of width by height
compactComponents: true, // Tries to further compact components (disconnected sub-graphs).
nodeLayering:'LONGEST_PATH', // Strategy for node layering.
/* NETWORK_SIMPLEX This algorithm tries to minimize the length of edges. This is the most computationally intensive algorithm.
The number of iterations after which it aborts if it hasn't found a result yet can be set with the Maximal Iterations option.
LONGEST_PATH A very simple algorithm that distributes nodes along their longest path to a sink node.
INTERACTIVE Distributes the nodes into layers by comparing their positions before the layout algorithm was started. The idea is that the relative horizontal order of nodes as it was before layout was applied is not changed. This of course requires valid positions for all nodes to have been set on the input graph before calling the layout algorithm. The interactive node layering algorithm uses the Interactive Reference Point option to determine which reference point of nodes are used to compare positions. */
thoroughness: 10 // How much effort should be spent to produce a nice layout..
},
};
layoutBy ={
name:'klay',
options
}
}
else if(selectedLayout == "breadthfirst"){
layoutBy ={
name: "breadthfirst",
spacingFactor: 0.5,
animate: animateLayout
}
}
else if(selectedLayout == "dagre"){
layoutBy ={
name: "dagre",
animate: animateLayout
}
}
else if(selectedLayout == "cose-bilkent"){
layoutBy ={
name: "cose-bilkent",
gravityRange: 1.3,
animate: true,
randomize: false
}
}
else if(selectedLayout == "grid"){
layoutBy ={
name: "grid",
animate: animateLayout,
avoidOverlapPadding: 5
}
}
else{
layoutBy ={
name: "cose-bilkent",
// Gravity range (constant)
gravityRange: 1.3,
animate: true,
randomize: false
}
}
// add drug group node as parent to according drug nodes
var options = {
layoutBy: layoutBy, // to rearrange after expand/collapse. It's just layout options or whole layout function. Choose your side!
// recommended usage: use cose-bilkent layout with randomize: false to preserve mental map upon expand/collapse
fisheye: false, // whether to perform fisheye view after expand/collapse you can specify a function too
animate: true, // whether to animate on drawing changes you can specify a function too
animationDuration: 1000, // when animate is true, the duration in milliseconds of the animation
ready: function () {
cy.style().selector('edge[interaction = \'targets\']').style('target-arrow-shape', 'triangle').update();}, // callback when expand/collapse initialized
undoable: true, // and if undoRedoExtension exists,
cueEnabled: true, // Whether cues are enabled
expandCollapseCuePosition: 'top-left', // default cue position is top left you can specify a function per node too
expandCollapseCueSize: 12, // size of expand-collapse cue
expandCollapseCueLineSize: 8, // size of lines used for drawing plus-minus icons
expandCueImage: undefined, // image of expand icon if undefined draw regular expand cue
collapseCueImage: undefined, // image of collapse icon if undefined draw regular collapse cue
expandCollapseCueSensitivity: 1, // sensitivity of expand-collapse cues
edgeTypeInfo: "interaction", // the name of the field that has the edge type, retrieved from edge.data(), can be a function, if reading the field returns undefined the collapsed edge type will be "unknown"
groupEdgesOfSameTypeOnCollapse : true, // if true, the edges to be collapsed will be grouped according to their types, and the created collapsed edges will have same type as their group. if false the collapased edge will have "unknown" type.
allowNestedEdgeCollapse: true, // when you want to collapse a compound edge (edge which contains other edges) and normal edge, should it collapse without expanding the compound first
zIndex: 999 // z-index value of the canvas in which cue ımages are drawn
};
cy.expandCollapse(options)
var api = cy.expandCollapse('get');
// shorten too long labels
for(n=0; n < nodes.length; n++){
cy.batch(function(){
var labelText, oldLabelText;
if(nodes[n].data.symbol){
labelText = nodes[n].data.symbol;
oldLabelText = nodes[n].data.symbol;
while(getTextWidth(labelText, fontSize +" arial") > 49){
oldLabelText = oldLabelText.slice(0,-1);
labelText = oldLabelText+'...';
}
}
else if(nodes[n].data.name){
labelText = nodes[n].data.name;
oldLabelText = nodes[n].data.name;
while(getTextWidth(labelText, fontSize +" arial") > 49){
oldLabelText = oldLabelText.slice(0,-1);
labelText = oldLabelText+'...';
}
}
cy.$('node[id =\'' + nodes[n].data.id + '\']').style("label", labelText);
} )
}
for(var e =0; e < edges.length; e++){
cy.batch(function(){
if(Array.isArray(edges[e].data.interaction) || edges[e].data.interaction.split(",").length > 1){
cy.$('edge[id =\'' + edges[e].data.id + '\']').style('target-arrow-shape', 'vee').style('line-style','solid');
}
});
}
// on tap
cy.nodes().noOverlap({ padding: 5 });
if(!noOptn){
// calculate label position for legend and style legend
var fontSize = 10;
calculateLabelColorLegend(nodeVal, fontSize, cy, nodesMin, nodesMax);
}
removedNodes = [];
let defaults = {
menuRadius: 100, // the radius of the circular menu in pixels
selector: 'node', // elements matching this Cytoscape.js selector will trigger cxtmenus
commands: [ // an array of commands to list in the menu or a function that returns the array
{ // example command
fillColor: 'rgba(200, 200, 200, 0.75)', // optional: custom background color for item
content: 'delete node', // html/text content to be displayed in the menu
contentStyle: {}, // css key:value pairs to set the command's css in js if you want
select: function(ele){ // a function to execute when the command is selected
let selectedNode = cy.elements('node[id="'+ele.id()+'"]')
removedNodes.push(selectedNode.union(selectedNode.connectedEdges()));
cy.remove(selectedNode) // `ele` holds the reference to the active element
},
enabled: true // whether the command is selectable
}
], // function( ele ){ return [ /*...*/ ] }, // a function that returns commands or a promise of commands
fillColor: 'rgba(0, 0, 0, 0.75)', // the background colour of the menu
activeFillColor: 'rgba(1, 105, 217, 0.75)', // the colour used to indicate the selected command
activePadding: 20, // additional size in pixels for the active command
indicatorSize: 24, // the size in pixels of the pointer to the active command
separatorWidth: 3, // the empty spacing in pixels between successive commands
spotlightPadding: 4, // extra spacing in pixels between the element and the spotlight
minSpotlightRadius: 24, // the minimum radius in pixels of the spotlight
maxSpotlightRadius: 38, // the maximum radius in pixels of the spotlight
openMenuEvents: 'cxttapstart taphold', // space-separated cytoscape events that will open the menu; only `cxttapstart` and/or `taphold` work here
itemColor: 'white', // the colour of text in the command's content
itemTextShadowColor: 'transparent', // the text shadow colour of the command's content
zIndex: 9999, // the z-index of the ui div
atMouse: false // draw menu at mouse position
};
let menu = cy.cxtmenu( defaults );
// on click collapse all other nodes and expand database nodes for clicked node
if(!collapsed){
cy.on('tap', 'node', function(evt){
var clickedNode = evt.target;
if(clickedNode.data().symbol != undefined){
var targetNode = clickedNode.data().symbol
}
else if(clickedNode.data().name != undefined && clickedNode.data().drugbank_id == undefined && !clickedNode.data().symbol.includes("Drugs")){
var targetNode = clickedNode.data().name
}
else if(clickedNode.data().drugbank_id != undefined){
var info = "<div align='left' id='information'><table><tr>"
Object.keys(clickedNode.data()).forEach(function(key) {
if(key == "id"){
return;
}
if(key == "drugbank_id"){
info+= "<td><b>"+key.charAt(0).toUpperCase() + key.slice(1).split("_").join(" ")+
"</b></td><td><a href='https://www.drugbank.ca/drugs/"+clickedNode.data()[key]+"'target='_blank'>"+clickedNode.data()[key]+"</a></td></tr>"
}
else{
info += "<td><b>"+key.charAt(0).toUpperCase() + key.slice(1).split("_").join(" ")+"</b></td><td>"+clickedNode.data()[key]+"</td></tr>"
}
});
info += "</table>"
var newWindow = window.open("BioGraphVisart/DrugInformation");
var doc = newWindow.document;
doc.open("text/html", "replace");
doc.write("<HTML><HEAD><TITLE>"+clickedNode.data().name+
"</TITLE><link rel='stylesheet' type='text/css' href='http://127.0.0.1:3000/static/css/subgraphCss.css'></HEAD>"+
"<BODY><H1>"+clickedNode.data().name+
"</H1>"+info+"</BODY></HTML>");
doc.close();
}
else if(clickedNode.data().symbol.includes("Drugs")){
clickedNode.style('shape','diamond')
// api.expand(clickedNode)
}
var clickedNodesPosition = cy.$(clickedNode).position();
if(clickedNode.data().drugbank_id === undefined && !clickedNode.data().symbol.includes("Drugs")){
var neighboringgraphml = getGraphforGene(targetNode).then(
response => {return response.text()});
neighboringgraphml.then(function(response){
document.getElementById("loader1").style.visibility = "hidden";
if(response){
if(response=="undefined"){
alert("No network found for " +targetNode+".")
}
else{
if(document.getElementById('values')){
document.getElementById('values').disabled = true;
}
if(document.getElementById('nodeShapesAttr')){
document.getElementById('nodeShapesAttr').disabled = true;
}
if(document.getElementById('nodeShapes')){
document.getElementById('nodeShapes').disabled = true;
}
collapsed = true;
var noOptn_collapsed = true;
visualize(response.split("\n"), noOptn_collapsed);
cy.remove(cy.elements('node[id = "l1"]'))
cy.elements('node[name = "'+ targetNode+'"] ').style('border-width', 5).style('font-weight', 'bold')
cy.elements('node[midrug_id]').style('background-image', 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjIsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0iTGF5ZXJfMSIKICAgeD0iMHB4IgogICB5PSIwcHgiCiAgIHdpZHRoPSIyNDkuMjM1cHgiCiAgIGhlaWdodD0iMjQ5LjIzNnB4IgogICB2aWV3Qm94PSIwIDAgMjQ5LjIzNSAyNDkuMjM2IgogICBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNDkuMjM1IDI0OS4yMzYiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOmRvY25hbWU9InBpbGxfaWNvbl9yZWRfMjU2LnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4yIDVjM2U4MGQsIDIwMTctMDgtMDYiPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEzIj48cmRmOlJERj48Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcwogICAgIGlkPSJkZWZzMTEiIC8+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI3NzgiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgwIgogICAgIGlkPSJuYW1lZHZpZXc5IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjk0Njg5Mzc0IgogICAgIGlua3NjYXBlOmN4PSIxMjQuNjE3NSIKICAgICBpbmtzY2FwZTpjeT0iMTI0LjYxOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMjIzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSI3NCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkxheWVyXzEiIC8+PGcKICAgICBpZD0iZzYiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSI+PHBhdGgKICAgICAgIGZpbGw9IiNGQkZCRkIiCiAgICAgICBkPSJNMTk1LjUxMiw1NC4yOTRjLTguMTQyLTguMTQzLTE4LjgxNS0xMi4yMjYtMjkuNDk0LTEyLjIyNmMtMTAuNjc0LDAtMjEuMzUxLDQuMDgzLTI5LjQ3LDEyLjIyNiAgIEw5NC4zOTYsOTYuNDM4bDAsMGwtNDIuMTQyLDQyLjEzNWMtMTYuMjg3LDE2LjI2Ny0xNi4yODcsNDIuNjgsMC4wMSw1OC45NjVjMTYuMjY2LDE2LjI3OCw0Mi42ODIsMTYuMjc4LDU4Ljk1NiwwbDMzLjE2My0zMy4xNSAgIGw1MS4xMTktNTEuMTE5QzIxMS43NzYsOTYuOTc0LDIxMS43NzYsNzAuNTU5LDE5NS41MTIsNTQuMjk0eiBNMTg2LjUzMiwxMDQuMjgzbC00Mi4xNDgsNDIuMTRMMTAzLjM2NSwxMDUuNGw0Mi4xNDItNDIuMTQgICBjNS40NzMtNS40NzQsMTIuNzY1LTguNTA3LDIwLjQ5Mi04LjUwN2M3Ljc1MSwwLDE1LjA0MiwzLjAzMywyMC41MTgsOC41MDdDMTk3LjgzOCw3NC41NjQsMTk3LjgzOCw5Mi45ODMsMTg2LjUzMiwxMDQuMjgzeiIKICAgICAgIGlkPSJwYXRoNCIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjEiIC8+PC9nPjwvc3ZnPg==')
.style('background-width', '45%')
.style('background-height', '45%')
.style('background-position-y', '100%')
};
}});
}
});
if(document.getElementById("maingraph")){
document.getElementById("maingraph").remove();
}
}
else if(collapsed){ // display additional drug info in extra tab/window from database graph
cy.on('tap', 'node', function(evt){
var clickedNode = evt.target.data();
if(clickedNode.midrug_id != undefined){
var info = "<div align='left' id='information'><table><tr>"
Object.keys(clickedNode).forEach(function(key) {
if(key == "id"){
return;
}
if(key == "drugbank_id"){
info+= "<td><b>"+key.charAt(0).toUpperCase() + key.slice(1).split("_").join(" ")+"</b></td><td><a href='https://www.drugbank.ca/drugs/"+clickedNode[key]+"'target='_blank'>"+clickedNode[key]+"</a></td></tr>"
}
else{
info += "<td><b>"+key.charAt(0).toUpperCase() + key.slice(1).split("_").join(" ")+"</b></td><td>"+clickedNode[key]+"</td></tr>"
}
});
info += "</table>"
var newWindow = window.open("");
var doc = newWindow.document;
doc.open("text/html", "replace");
doc.write("<HTML><HEAD><TITLE>"+clickedNode.name+
"</TITLE><link rel='stylesheet' type='text/css' href='http://127.0.0.1:3000/static/subgraphCss.css'></HEAD>"+
"<BODY><H1>"+clickedNode.name+
"</H1>"+info+"</BODY></HTML>");
doc.close();
}});
// if (process.browser) {
cy.elements('node').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
return this.data('name')
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
},
})
if(!document.getElementById("maingraph")){
var maingraph = document.createElement("button");
maingraph.id = "maingraph";
maingraph.id = "maingraph";
maingraph.innerHTML = "Initial Network";
// maingraph.style.cssFloat = "right"
document.getElementById("configPart").appendChild(maingraph);
document.getElementById("maingraph").className = 'butn';
maingraph.onclick = function(){
if(document.getElementById('values')){
document.getElementById('values').disabled = false;
}
if(document.getElementById('nodeShapesAttr')){
document.getElementById('nodeShapesAttr').disabled = false
}
if(document.getElementById('nodeShapes')){
document.getElementById('nodeShapes').disabled = false;
}
collapsed = false;
if(document.getElementById('values')){
noOptn = false;
}
visualize(graphString, noOptn)};
}
}
// update node values if tracer or values change
if(!firstTime){
for(n=0; n < nodes.length; n++){
cy.batch(function(){
cy.$('node[id =\'' + nodes[n].data.id + '\']')
.data(nodeVal, nodes[n].data[nodeVal])
});
}
}
}
async function getGraphforGene(name){
document.getElementById("loader1").style.visibility = "visible"
var data = {'name':name};
const response = await fetch("/BioGraphVisart/graph", {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
mode: 'cors', // no-cors, *cors, same-origin
//credentials: 'same-origin', // include, *same-origin, omit
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data) // body data type must match "Content-Type" header
});
return await response; // parses JSON response into native JavaScript objects
}
//show meta-information of nodes by mouseover
function showMetaInfo(noOptn){
if(! noOptn || isJson){
cy.elements('node').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
if(!isNaN(parseFloat(this.data()[nodeVal]))){
if(this.data('symbol') != undefined){
return '<b>'+ this.data('symbol') +'</b><br>' +
'<b>'+nodeVal +'</b>: ' + parseFloat(this.data()[nodeVal]).toFixed(2)}
else if(this.data('name') != undefined){
return '<b>'+ this.data('name')+'</b><br>' +
'<b>'+nodeVal +'</b>: ' + parseFloat(this.data()[nodeVal]).toFixed(2)}
} //numbers
else{
if(this.data('symbol') != undefined){
return '<b>'+ this.data('symbol') +'</b><br>' +
'<b>'+nodeVal +'</b>: '+ this.data()[nodeVal];
}
else if(this.data('name') != undefined){
return '<b>'+ this.data('name')+'</b><br>' +
'<b>'+nodeVal +'</b>: '+ this.data()[nodeVal];
}
}
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
},
});
}
else if(noOptn){
cy.elements('node').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
if(this.data('symbol')){
return '<b>'+ this.data('symbol') +'</b>'; } //numbers
else if(this.data('name')){
return '<b>'+ this.data('name')+'</b>';
}
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
},
});
}
cy.elements('edge').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
return '<b>'+this.data()['interaction'] +'</b> '
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
},
});
}
/* undo deletion of nodes */
function undoDeletion(){
entry = removedNodes.pop()
if(entry != undefined){
entry.restore();
}
}

View File

@ -0,0 +1,381 @@
/*
create a graph with Cytoscape
*/
var path;
var nodes;
var colorschemePathsLeft = [];
var colorschemePathsRight = [];
var colorschemePathsMerge = [];
var leftEdges = [];
var rightEdges = [];
var graphLeft;
var graphRight;
/*
visualize a graph from .graphml-file
*/
function visualize(firstTime=false, files, example) {
// move edge legend when scrolling
if(!!right){
var cys = ['cyLeft', 'cyRight'];
jQuery(window).scroll(function() {
if (jQuery(window).scrollTop() >= document.getElementById("right").offsetTop-700 && !!right) {
jQuery("#legend_heatmap").css({
"top": document.getElementById("right").offsetTop + "px",
"left": (jQuery(window).scrollLeft()) + "px",
"position":"absolute",
"margin-top":0+"px",
"margin-left":10+"px"
});
}
else if(jQuery(window).scrollTop() <= document.getElementById("left").offsetTop && !!right){
// if($(window).scrollTop() <= window.innerHeight/2){
jQuery("#legend_heatmap").css({
"top": document.getElementById("left").offsetTop +"px",
"left": (jQuery(window).scrollLeft()) + "px",
"position":"absolute",
"margin-top":0+"px",
"margin-left":10+"px"
});
}
});
}
else{
var cys = ['cyLeft'];
// document.getElementById("legendGraphsRight").innerHTML="";
document.getElementById('downloadPartRight').style.visibility = "hidden";
document.getElementById('resetRight').style.visibility = "hidden";
document.getElementById('right').style.visibility = "hidden";
document.getElementById('keggpathwaysRight').style.visibility = "hidden";
}
var interactionTypes;
var leftNodes;
var leftEdges;
var rightNodes;
var rightEdges;
var edgesToMergeLeft;
var edgesToMergeRight;
cys.forEach(function(cyO){
// get nodes and edges
if(cyO == 'cyLeft'){
leftGraph = true;
graphString = graphStringLeft;
if(isSIF){
var leftnodesAndEdges = getNodesAndEdgesSIF(graphString, 'left');
}
else{
var leftnodesAndEdges = getNodesAndEdges(graphString,nodeVal,'left');
}
leftNodes = leftnodesAndEdges[0];
leftEdges = leftnodesAndEdges[1];
var leftNodeValuesNum = leftnodesAndEdges[2];
interactionTypes = leftnodesAndEdges[3];
edgesToMergeLeft = leftnodesAndEdges[4]
// set min and max for legend and add nodes and edges to graph
var leftRange = legendsRange(leftNodeValuesNum);
var leftNodesMin = leftRange[0];
var leftNodesMax = leftRange[1];
graphLeft= createCyObject(cyO, leftNodesMin, leftNodesMax, nodeVal);
addNodesAndEdges(graphLeft, leftNodes, leftEdges, leftFirstTime, leftNodesMin, leftNodesMax);
// document.getElementById('downloadPDF').style.visibility = "visible";
// document.getElementById('downloadPDF').disabled = false;
showConfigurationParts('Left', graphLeft, left);
showMetaInfo(graphLeft, nodeVal);
// set background layer to hoghlight pathways
var layerLeft = createLayoutKeggPathways(graphLeft, allPathsLeft, "Left")
var canvasLeft = layerLeft.getCanvas();
var ctxLeft = canvasLeft.getContext('2d');
showKEGGParts('Left', ctxLeft, graphLeft, leftNodes, layerLeft, canvasLeft)
graphLeft.on('tap', 'node',function(evt){
highlightNodeTapped(evt.target.data().symbol, graphLeft);
evt.target.addClass('highlighted');
if(right){
highlightNodeTapped(evt.target.data().symbol, graphLeft, graphRight);
}
})
graphLeft.on('tap', function(event){
var evtTarget = event.target;
if( evtTarget === graphLeft ){
graphLeft.$('node').removeClass('highlighted')
if(right){
graphRight.$('node').removeClass('highlighted')
}
}
});
changeLayout(graphLeft, 'Left')
}
else if(cyO = 'cyRight'){
leftGraph = false;
graphString = graphStringRight;
if(isSIF){
var rightnodesAndEdges = getNodesAndEdgesSIF(graphString, 'right');
}
else{
var rightnodesAndEdges = getNodesAndEdges(graphString, nodeVal, 'right');
}
rightNodes = rightnodesAndEdges[0];
rightEdges = rightnodesAndEdges[1];
var rightNodeValuesNum = rightnodesAndEdges[2];
var interactionTypesRight = rightnodesAndEdges[3];
edgesToMergeRight = rightnodesAndEdges[4]
interactionTypes = interactionTypes.add(...interactionTypesRight);
// set min and max for legend and add nodes and edges to graph
var rightRange = legendsRange(rightNodeValuesNum);
var rightNodesMin = rightRange[0];
var rightNodesMax = rightRange[1];
graphRight= createCyObject(cyO, rightNodesMin, rightNodesMax, nodeVal);
addNodesAndEdges(graphRight,rightNodes, rightEdges, rightFirstTime, rightNodesMin, rightNodesMax);
document.getElementById('cyRight').style.visibility = "visible";
showConfigurationParts('Right', graphRight, right);
document.getElementById('right').style.visibility = "visibile";
document.getElementById('rightID').style.visibility = "visible";
showMetaInfo(graphRight, nodeVal);
// set background layer to hoghlight pathways
var layerRight = createLayoutKeggPathways(graphRight, allPathsRight,"Right")
var canvasRight = layerRight.getCanvas();
var ctxRight = canvasRight.getContext('2d');
showKEGGParts('Right',ctxRight, graphRight, rightNodes, layerRight, canvasRight);
graphRight.on('tap', 'node',function(evt){
highlightNodeTapped(evt.target.data().symbol, graphLeft, graphRight);
evt.target.addClass('highlighted');
})
graphRight.on('tap', function(event){
var evtTarget = event.target;
if( evtTarget === graphRight ){
graphLeft.$('node').removeClass('highlighted')
graphRight.$('node').removeClass('highlighted')
}
});
changeLayout(graphRight, "Right")
}
});
document.getElementById("arrows").innerHTML = "";
createInteractionLegend(interactionTypes, graphLeft, edgesToMergeLeft, graphRight, edgesToMergeRight);
// if(document.getElementById('nodeShapesAttr')){
if(!document.getElementById('heatmap_shapes')){
var shapelegend = document.createElement("div")
shapelegend.id = "heatmap_shapes";
shapelegend.visibility = "visible";
document.getElementById("legend_heatmap").appendChild(shapelegend);
}
// }
if(firstTime && graphRight){
firstTime = false;
clickMerge(files, nodeVal, example);
}
document.getElementById('legend_heatmap').setAttribute('style','visibility:visible');
document.getElementById('searchgene').setAttribute('style','visibility:visible');
document.getElementById('searchbutton').setAttribute('style','visibility:visible');
document.getElementById('searchbutton').onclick=function(){highlightSearchedGene(graphLeft, graphRight)}
}
function showConfigurationParts(pos, cy, name){
document.getElementById('reset'+pos).style.visibility = "visible";
document.getElementById('reset'+pos+'Layout').onclick=function(){resetLayout(cy, pos)}
document.getElementById('downloadPart'+pos).style.visibility = "visible";
document.getElementById('download'+pos+'SVG').disabled = false;
document.getElementById('download'+pos+'PNG').disabled = false;
document.getElementById('download'+pos+'SVG').onclick = function(){
downloadSVG(cy, pos, name)
}
document.getElementById('download'+pos+'PNG').onclick = function(){
downloadPNG(cy, pos, name)
}
document.getElementById('KEGGpathsButton'+pos).style.visibility ="visible";
document.getElementById('keggpathways'+pos).style.visibility = "visible";
// document.getElementById("selectlayout"+pos).visibility = "visible";
// document.getElementById("selectlayout"+pos).onchange= function(){changeLayout(cy, pos)}
}
function showKEGGParts(pos, ctx, cy, nodes, layer, canvas){
document.getElementById("keggpathways"+pos).addEventListener('click',
function(){listKEGGPathways(ctx, cy, nodes, layer, canvas, pos);});
document.getElementById('KEGGpaths'+pos).style.visibility = "visible";
}
//add nodes and edges to cy-object (update if attribute has changed)
function addNodesAndEdges(cyObject, nodes, edges, firstTime, nodesMin, nodesMax){
if(loadGraphCount > 1){
cyObject.elements().remove();
if(cyObject === 'cyLeft'){
leftFirstTime = false;
}
else if(cyObject === 'cyRight'){
rightFirstTime = false;
}
loadGraphCount = 0;
}
cyObject.add(nodes);
cyObject.add(edges);
cyObject.nodes().noOverlap({ padding: 5 });
// calculate label position for legend and style legend
var fontSize = 10;
if(nodes.every(function(x){return(x.data["symbol"])})){
for(n=0; n < nodes.length; n++){
cyObject.batch(function(){
var labelText = nodes[n].data.symbol;
var oldLabelText = nodes[n].data.symbol;
while(getTextWidth(labelText, fontSize +" arial") > 49){
oldLabelText = oldLabelText.slice(0,-1);
labelText = oldLabelText+'...';
}
// }
cyObject.$('node[id =\'' + nodes[n].data.id + '\']').style("label", labelText);
});
}
}
else{
for(n=0; n < nodes.length; n++){
cyObject.batch(function(){
var labelText = nodes[n].data.name;
var oldLabelText = nodes[n].data.name;
while(getTextWidth(labelText, fontSize +" arial") > 49){
oldLabelText = oldLabelText.slice(0,-1);
labelText = oldLabelText+'...';
}
// }
cyObject.$('node[id =\'' + nodes[n].data.id + '\']').style("label",labelText);
});
}
}
// update node values if tracer or values change
if(!firstTime){
for(n=0; n < nodes.length; n++){
cyObject.batch(function(){
cyObject.$('node[id =\'' + nodes[n].data.id + '\']')
.data(nodeVal, nodes[n].data.val)
});
}
}
calculateLabelColorLegend(nodeVal, fontSize, cyObject, nodesMin, nodesMax);
addcolorlegend(cyObject)
cyObject.layout({
name: 'dagre'
}).run();
}
//show meta-information of nodes by mouseover
function showMetaInfo(cyObject, nodeVal){
cyObject.elements('node').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
if(!isNaN(parseFloat(this.data(nodeVal)))){
return '<b>'+nodeVal +'</b>: ' + parseFloat(this.data(nodeVal)).toFixed(2); } //numbers
else{
return '<b>'+nodeVal +'</b>: '+ this.data(nodeVal); //bools
}
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
},
});
cyObject.elements('edge').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
return '<b>'+this.data()['interaction'] +'</b> '
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
},
});
}
/*
reset view (zoom, position)
*/
function resetLayout(cy, pos){
var animateLayout = true;
var selectedLayout = document.getElementById('selectlayout' + pos).value;
if(selectedLayout == "klay"){
var options = {
animate: animateLayout, // Whether to transition the node positions
klay: {
aspectRatio: 1.49, // The aimed aspect ratio of the drawing, that is the quotient of width by height
compactComponents: true, // Tries to further compact components (disconnected sub-graphs).
nodeLayering:'LONGEST_PATH', // Strategy for node layering.
/* NETWORK_SIMPLEX This algorithm tries to minimize the length of edges. This is the most computationally intensive algorithm.
The number of iterations after which it aborts if it hasn't found a result yet can be set with the Maximal Iterations option.
LONGEST_PATH A very simple algorithm that distributes nodes along their longest path to a sink node.
INTERACTIVE Distributes the nodes into layers by comparing their positions before the layout algorithm was started. The idea is that the relative horizontal order of nodes as it was before layout was applied is not changed. This of course requires valid positions for all nodes to have been set on the input graph before calling the layout algorithm. The interactive node layering algorithm uses the Interactive Reference Point option to determine which reference point of nodes are used to compare positions. */
thoroughness: 10 // How much effort should be spent to produce a nice layout..
},
};
cy.layout({
name:'klay',
options
}).run();
}
else if(selectedLayout == "breadthfirst"){
cy.layout({
name: "breadthfirst",
spacingFactor: 0.5,
animate: animateLayout
}).run();
}
else if(selectedLayout == "dagre (default)"){
cy.layout({
name: "dagre",
animate: animateLayout
}).run();
}
else if(selectedLayout == "cose-bilkent"){
cy.layout({
name: "cose-bilkent",
// Gravity range (constant)
gravityRange: 1.3,
animate: true
}).run();
}
else if(selectedLayout == "grid"){
cy.layout({
name: "grid",
animate: animateLayout,
avoidOverlapPadding: 5
}).run();
}
else{
cy.layout({
name: "dagre",
animate: animateLayout
}).run();
document.getElementById('selectlayout'+pos).value = "dagre (default)";
}
if(highlightedNode){
cy.$('node[symbol="'+highlightedNode+'"]').addClass("highlighted");
}
};

View File

@ -0,0 +1,193 @@
var left, right;
var leftNodesMin = -1;
var leftNodesMax = 1;
var rightNodesMin = -1;
var rightNodesMax = 1;
var leftOldMin;
var leftOldMax;
var rightOldMin;
var rightOldMax;
var leftGraph = false;
var leftNodes = [];
var rightNodes = [];
var leftEdges = [];
var rightEdges = [];
var graphStringLeft;
var graphStringRight;
var path_left;
var path_right;
var leftFirstTime = true;
var rightFirstTime = true;
var loadGraphCount = 0;
var svg_part;
var firstShape = true;
var usedShapeAttributes = [];
var getDrpDwnFiles = true;
var leftNodeValuesNum = [];
var rightNodeValuesNum = [];
var merge_graph;
function createHeatmap(heatmapData, foundFiles, graphsList, example=false){
/*
get axes labels (samples) and overlap values
*/
var axes = [];
var overlapArrays = [];
//var overlapValues = [];
var xLabels = [];
for (let i in heatmapData){ //get file names
axes.push(heatmapData[i]["sample"]);
var reverse = heatmapData[i]["sample"].split("").reverse().join("")
var reversesplit = reverse.split(".")
var reverseselect = reversesplit.slice(1,reversesplit.length).join(".").split("").reverse().join("");
let filenameSplit = reverseselect
xLabels.push(filenameSplit);
}
var normalizedValues = heatmapData;
var sampleSizes = [];
for (let i in heatmapData){
sample = heatmapData[i]['sample']
sampleSizes[sample] = heatmapData[i][sample];
}
for (let i in heatmapData){
sampleRow = heatmapData[i]['sample'];
for(j=0;j < axes.length; j++){
sampleCol = axes[j];
i = parseInt(i);
overlapArrays.push([j,i, Math.round(parseInt(heatmapData[i][axes[j]])*200/(parseInt(sampleSizes[sampleRow])+parseInt(sampleSizes[sampleCol])))]);
}
}
var heatmapColorStopsDist = 1/9;
var viridis = ['#440154', '#482777', '#3F4A8A', '#31678E', '#26838F', '#1F9D8A', '#6CCE5A', '#B6DE2B', '#FEE825']
var heatmapColors = [];
var j = 0;
for(i=0; i < 9; i++){
heatmapColors.push([j, viridis[i]]);
j = j + heatmapColorStopsDist;
}
/*
create heatmap
*/
jQuery(function () {
var leftSelect;
var rightSelect;
jQuery('#heatmapcontainer').highcharts({
chart: {
type: 'heatmap',
marginTop: 70,
marginBottom: 70
},
plotOptions: {
series: {
events: {
click: function (event) {
if(isSIF){
left = leftSelect+'.sif';
right=rightSelect+'.sif';
}
else{
left = leftSelect+'.graphml';
right=rightSelect+'.graphml';
}
document.getElementById("leftID").innerHTML = "";
document.getElementById("rightID").innerHTML = "";
// document.getElementById('values').setAttribute('style','visibility:visible');
document.getElementById("leftID").innerHTML = leftSelect;
if(left === right){
document.getElementById("rightID").innerHTML = "";
document.getElementById("cyRight").innerHTML = "";
right = null;
}
else{
document.getElementById("rightID").innerHTML = rightSelect;
}
var files = []
if(example){
for(file of foundFiles){
if(file.name.includes(left)){
files.push(file)
}
else if(file.name.includes(right)){
files.push(file)
}
}
}
else{
for(file of foundFiles){
if(file.name == left){
files.push(file)
}
else if(file.name == right){
files.push(file)
}
}
}
loadGraphml(left, right, graphsList);
visualize(true, files, example);
}
}
}
},
title: {
text: 'Node Overlap'
},
xAxis: {
categories: xLabels,
labels: {
rotation: -25,
}
},
yAxis: {
categories: xLabels,
title: null
},
colorAxis: {
stops: heatmapColors ,
min:0,
max: 100,
reversed: false
},
legend: {
align: 'right',
layout: 'vertical',
margin: 0,
verticalAlign: 'top',
y: 25,
symbolHeight: 320
},
tooltip: {
formatter: function () {
leftSelect = this.series.xAxis.categories[this.point.y];
rightSelect = this.series.yAxis.categories[this.point.x];
return '<b>' + this.series.xAxis.categories[this.point.x] + '</b> has a overlap of <br><b>' +
this.point.value + '% </b> with <br><b>' + this.series.yAxis.categories[this.point.y] + '</b>';
}
},
series: [{
name: 'Node overlap',
borderWidth: 1,
data: overlapArrays, // first:x, second:y, thirsd:value
dataLabels: {
enabled: true,
color: 'black',
style: {
textShadow: 'none'
},
format: this.percentage
}
}]
})
});
document.getElementById("loader").style.display="none";
};

View File

@ -0,0 +1,422 @@
var path, tracer, nodeVal, outputName, nodeAttributes,
graphString, nodeShapeAttr, shapeNode, ycoord;
// no attributes for node coloring/shape
var noDrpShapes = true;
var firstTime = true;
var loadGraphCount = 0;
var legendDrawn = false;
var svg;
var cy;
var firstShape = true;
var usedShapeAttributes = [];
var getDrpDwnFiles = true;
var isJson = false;
var collapsed = false;
var expandGraphs = [];
var clicked = false;
var clickedNode;
var clickedNodesPosition;
var defaultVal = false;
var isSIF = false;
var allPaths;
var collapsed = false;
var selectedLayout;
function isFile(){
document.getElementById('loader1').style.visibility = "visible";
var file = document.getElementById('fileName').files[0];
if(file == undefined){
alert("No file given.")
document.getElementById('loader1').style.visibility = "hidden";
return;
}
var file = document.getElementById('fileName').files[0];
if(file["name"].endsWith("json")){
isJson = true;
readFile(file);
document.getElementById('loader1').style.visibility = "hidden";
}
else if(file["name"].endsWith("graphml") || file["name"].endsWith("sif")){
isJson = false;
readFile(file);
}
else{
alert('Please select a .graphml or .sif-file.');
return;
}
}
/*
remove old buttons
*/
function cleanSelections(layer = undefined){
// if it is not the first graph read, delete all selectable options
usedShapeAttributes = [];
var myNode = document.getElementById("configPart");
document.getElementById("arrows").innerHTML = "";
document.getElementById('KEGGpaths').innerHTML = "";
if(!isJson){
document.getElementById('keggpathways').firstChild.data = "Show KEGG Pathways";
}
document.getElementById('KEGGpaths').style.visibility = "hidden";
allPaths = null;
if(layer){
layer.resetTransform(ctx);
ctx.clearRect(0,0,canvas.width, canvas.height);
layer.setTransform(ctx);
ctx.save();
}
var domValues = document.getElementById("values");
if(domValues){
domValues.parentNode.removeChild(domValues);}
var domNodeShapesAttr = document.getElementById("nodeShapesAttr");
var domLayout = document.getElementById("selectlayout");
if(domNodeShapesAttr){
domNodeShapesAttr.parentNode.removeChild(domNodeShapesAttr);}
var domNodeShapes = document.getElementById("nodeShapes");
if(domNodeShapes)
{domNodeShapes.parentNode.removeChild(domNodeShapes);}
if(domLayout)
{domLayout.parentNode.removeChild(domLayout);}
var searchgene = document.getElementById("searchgene")
if(searchgene){
searchgene.parentNode.removeChild(searchgene);}
var searchbutn = document.getElementById("searchbutn")
if(searchbutn){
searchbutn.parentNode.removeChild(searchbutn); }
var undobutn = document.getElementById("undobutn")
if(undobutn){
undobutn.parentNode.removeChild(undobutn); }
if(document.getElementById('mergeEdges'))
document.getElementById('mergeEdges').checked = true;
noOptn = true;
noDrpShapes = true;
nodeVal = undefined;
collapsed = false;
}
/* load example graphml file*/
function readExample(layer = undefined){
cleanSelections();
// read text from URL location
var request = new XMLHttpRequest();
request.open('GET', 'https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/example.graphml', false);
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
var type = request.getResponseHeader('Content-Type');
if (type.indexOf("text") !== 1) {
graphString = request.responseText.split("\n")
isJson = false;
loadFile();
return graphString;
}
}
}
request.send(null);
}
/*
read from grphml - file and initialize cy-object
*/
function readFile(file, layer = undefined) {
cleanSelections();
if(shapeNode){
shapeNode.elements().remove();
}
// // IS file a graphml?
if(file["name"].endsWith("sif")){
isSIF = true;
}
// read file
path = file.name;
var reader = new FileReader();
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
var arrayBuffer = evt.target.result;
if(isJson){
graphString = JSON.parse(arrayBuffer)
}
else{
graphString = arrayBuffer.split('\n');
}
loadFile();
}
};
reader.readAsText(file);
}
function loadFile() {
var noOptn = true;
// put node atttributes into dropdown select object
var drp = document.createElement("ul");
drp.classList.add("Menu")
drp.classList.add("-horizontal")
drp.id = "values";
drp.style.visibility = "visible";
document.getElementById("configPart").appendChild(drp);
var labelDrp = document.createElement("li")
labelDrp.classList.add("-hasSubmenu")
labelDrp.innerHTML = "<a href='#'>Color attribute</a>"
drp.appendChild(labelDrp)
var ulDrp = document.createElement("ul")
labelDrp.appendChild(ulDrp)
// layout dropdown
var drpLayout = document.createElement("ul");
drpLayout.classList.add("Menu")
drpLayout.classList.add("-horizontal")
drpLayout.id = "selectlayout";
document.getElementById("configPart").appendChild(drpLayout);
var labelLayout = document.createElement("li")
labelLayout.classList.add("-hasSubmenu")
labelLayout.innerHTML = "<a href='#'>Layout</a>"
drpLayout.appendChild(labelLayout)
var ulLayout = document.createElement("ul")
labelLayout.appendChild(ulLayout)
layoutArray.forEach(function(s){
var optnLayout = addLayoutOptions(s, "layoutOpt");
optnLayout.onclick = function(){
selectedLayout = s;
changeLayout(cy, s);
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('layoutOpt')){
e.remove()}});
optnLayout.innerHTML = "<a href='#'><i class='fas fa-check layoutOpt' style='margin-right:5px'></i>"+s+"</a>"
};
ulLayout.appendChild(optnLayout);
});
// dropdown for shape selection
var drpShapes = document.createElement("ul")
drpShapes.classList.add("Menu")
drpShapes.classList.add("-horizontal")
drpShapes.id="nodeShapesAttr"
document.getElementById("configPart").appendChild(drpShapes);
var labelShape = document.createElement("li")
labelShape.classList.add("-hasSubmenu")
labelShape.innerHTML = "<a href='#'>Node shape</a>"
drpShapes.appendChild(labelShape)
var ulShapes = document.createElement("ul")
labelShape.appendChild(ulShapes)
const shapesArray = ["rectangle", "octagon", "rhomboid", "pentagon", "tag"];
// search gene
var searchgene = document.createElement("input");
searchgene.id = "searchgene";
searchgene.value = "Node label"
document.getElementById("configPart").appendChild(searchgene);
searchgene.setAttribute("type", "text");
searchgene.setAttribute("width", 30);
var searchbutn = document.createElement("button");
searchbutn.id = "searchbutn";
searchbutn.innerHTML = "Search";
document.getElementById("configPart").appendChild(searchbutn);
document.getElementById("searchbutn").className = 'butn';
searchbutn.onclick = function(){highlightSearchedGene(cy)};
// undo deletion
var undobutn = document.createElement("button");
undobutn.id = "undobutn";
undobutn.innerHTML = "Undo delete";
document.getElementById("configPart").appendChild(undobutn);
document.getElementById("undobutn").className = 'butn';
undobutn.onclick = undoDeletion;
var resetbutn = document.createElement("button");
resetbutn.id = "resetLayout";
resetbutn.innerHTML = "Reset layout";
document.getElementById("configPart").appendChild(resetbutn);
document.getElementById("resetLayout").className = 'butn';
undobutn.onclick = changeLayout;
if(!isJson && ! isSIF){
// get attributes for coloring -> double/boolean and shape -> boolean
for (var i = 0; i <= graphString.length - 1; i++) {
if(graphString[i].includes("for=\"node\"") &&
((graphString[i].includes("attr.type=\"double\"") ||
(graphString[i].includes("attr.type=\"boolean\""))))){
noOptn = false;
var nodeattr = graphString[i].split("attr.name=")[1].split(" ")[0].replace(/"/g, "");
var optnDrp = document.createElement("li");
optnDrp.innerHTML="<a href='#'>"+nodeattr+"</a>";
optnDrp.id=nodeattr;
ulDrp.appendChild(optnDrp)
optnDrp.onclick = function(){
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('optnDrp')){
e.remove()}});
this.innerHTML = "<a href='#'><i class='fas fa-check optnDrp' style='margin-right:5px'></i>"+this.id+"</a>"
nodeVal = this.id;
var newValues = []
for(var i = 0; i < cy.filter('node').size(); i++){
if(cy.nodes()[i].data()[nodeVal]){
newValues.push(cy.nodes()[i].data()[nodeVal])
}
}
var range = legendsRange(newValues);
var nodesMin = range[0];
var nodesMa
x = range[1];
cy.style().selector('node[!'+nodeVal+']').style({
'background-color': 'white',
'color':'black'
}).update()
// attributes with numbers
cy.style().selector('node['+nodeVal+' < "0"]').style({
'background-color': 'mapData('+nodeVal+','+ nodesMin+', 0, #006cf0, white)',
'color': 'black'
}).update()
cy.style().selector('node['+nodeVal+' <='+0.5*nodesMin+']').style({
'color': 'white'
}).update()
cy.style().selector('node['+nodeVal+' > "0"]').style({
'background-color': 'mapData('+nodeVal+', 0,'+ nodesMax+', white, #d50000)',
'color': 'black'
}).update()
cy.style().selector('node['+nodeVal+' >='+0.5*nodesMax+']').style({
'color': 'white'
}).update()
cy.style().selector('node['+nodeVal+' = "0"]').style({
'background-color': 'white',
'color':'black'
}).update()
// attributes with boolean
cy.style().selector('node['+nodeVal+' = "false"]').style({
'background-color': '#006cf0',
'color':'white'
}).update()
cy.style().selector('node['+nodeVal+' = "true"]').style({
'background-color': '#d50000',
'color':'white'
}).update()
var fontSize = 10;
calculateLabelColorLegend(nodeVal, fontSize, cy, nodesMin, nodesMax);
};
if(graphString[i].includes("attr.type=\"boolean\"")){
var nodeattrShape = graphString[i].split("attr.name=")[1].split(" ")[0].replace(/"/g, "");
var liShape = document.createElement("li")
liShape.classList.add("-hasSubmenu")
liShape.innerHTML = "<a href='#'>"+nodeattrShape+"</a>"
liShape.id= nodeattrShape
liShape.id="nodeShapes"
ulShapes.appendChild(liShape)
var ulShape = document.createElement("ul")
ulShape.id = nodeattrShape
liShape.appendChild(ulShape)
shapesArray.forEach(function(s){
var optnShape = document.createElement("li")
optnShape.innerHTML = "<a hre='#'>"+s+"</a>"
optnShape.id= s
ulShape.appendChild(optnShape)
optnShape.onclick=function(){
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('optnShape')){
e.remove()}});
optnShape.innerHTML = "<a href='#'><i class='fas fa-check optnShape' style='margin-right:5px'></i>"+s+"</a>"
// optnShape.parentElement.innerHTML = "<a href='#'><i class='fas fa-check liShape' style='margin-right:5px'></i>"+optnShape.parentElement.id+"</a>"
changeNodeShapes(cy, 'legendNodes', optnShape.parentElement.id,s);
hideMenu(document.getElementById("nodeShapesAttr"))}
})
noDrpShapes = false;
}
forEach($(".Menu li.-hasSubmenu"), function(e){
e.showMenu = showMenu;
e.hideMenu = hideMenu;
});
forEach($(".Menu > li.-hasSubmenu"), function(e){
e.addEventListener("click", showMenu);
});
forEach($(".Menu > li.-hasSubmenu li"), function(e){
e.addEventListener("mouseenter", hideAllInactiveMenus);
});
forEach($(".Menu > li.-hasSubmenu li.-hasSubmenu"), function(e){
e.addEventListener("click", showMenu);
});
document.addEventListener("click", hideAllInactiveMenus);
};
// do not search whole file, only header
if(graphString[i].includes("<node id=\"n0\">")){
break;
};
};
if(ulDrp.children.length>0){
ulDrp.children[0].innerHTML = "<a href='#'><i class='fas fa-check optnDrp' style='margin-right:5px'></i>"+ulDrp.children[0].id+"</a>";
nodeVal = ulDrp.children[0].id;
defaultVal = true;
noOptn = false;
visualize(graphString, noOptn);
}
}
else if(isJson){
var nodeattr = graphString.elements.nodes[0].data
for(let d in nodeattr){
if(nodeattr[d] == "true" || nodeattr[d] == "false"){
var nodeattrShape = d
var optnShape = document.createElement("OPTION");
optnShape.text=nodeattrShape;
optnShape.value=nodeattrShape;
drpShapes.add(optnShape);
noDrpShapes = false;
noOptn = false
var optn = document.createElement("OPTION");
optn.text=d;
optn.value=d;
drp.add(optn);
}
else if(!isNaN(parseFloat(nodeattr[d])) && d != "name" && d!="entrezID" && d != "entrez"){
var optn = document.createElement("OPTION");
optn.text=d;
optn.value=d;
drp.add(optn);
noOptn = false;
}
}
if(drp.options[1]){
nodeVal = drp.options[1].value;
document.getElementById('values').value = nodeVal;
defaultVal = true;
noOptn = false;
visualize(graphString, noOptn);
}
}
// if no attributes found for coloring/shape, remove dropdown menus and visualize
if(noOptn && noDrpShapes){
drp.parentNode.removeChild(drp);
drpShapes.parentNode.removeChild(drpShapes);
defaultVal = false;
// if(!isJson){
visualize(graphString, noOptn);
// }
}
else if(noDrpShapes){
drpShapes.parentNode.removeChild(drpShapes);
}
loadGraphCount ++;
};
/* undo deletion of nodes */
function undoDeletion(){
entry = removedNodes.pop()
if(entry != undefined){
entry.restore();
}
}

View File

@ -0,0 +1,619 @@
var allPathsLeft;
var allPathsRight;
var allPathsMerge;
var layerLeft;
var canvasLeft;
var ctxLeft;
var layerRight;
var canvasRight;
var ctxRight;
var layerMerge;
var cavasMerge;
var ctxMerge;
var shapeNode;
var nodeVal;
var highlightedNode;
var graphsList = [];
var isSIF = false;
var example = false;
function getAllIndexes(arr, val) {
var indexes = [];
for(var i = 0; i < arr.length; i++)
if (arr[i].includes(val))
indexes.push(arr[i]);
return indexes;
}
/*
files from directory */
function loadDir(){
document.getElementById("loader").style.display="block";
document.getElementById("heatmapcontainer").innerHTML = "";
document.getElementById("cyLeft").innerHTML = "";
document.getElementById("cyRight").innerHTML = "";
document.getElementById('keggpathwaysLeft').style.visibility = "hidden";
document.getElementById('KEGGpathsButtonLeft').style.visibility = "hidden";
document.getElementById('KEGGpathsLeft').style.visibility = "hidden";
document.getElementById('keggpathwaysRight').style.visibility = "hidden";
document.getElementById('KEGGpathsButtonRight').style.visibility = "hidden";
document.getElementById('KEGGpathsRight').style.visibility = "hidden";
document.getElementById('downloadPartLeft').style.visibility = "hidden";
document.getElementById('downloadPartRight').style.visibility = "hidden";
document.getElementById('resetLeft').style.visibility = "hidden";
document.getElementById('resetRight').style.visibility = "hidden";
document.getElementById("leftID").innerHTML = "";
document.getElementById("rightID").innerHTML = "";
cleanSelectionsHeatmap();
isSIF = false;
let foundFiles = document.getElementById('fileName').files;
counterlimit = foundFiles.length;
var data = {};
let node_ids = [];
let node_attributes = {};
let j = 0;
var count = 0;
var regExp = /\>(.*)\</;
graphsList = [];
Array.from(foundFiles).forEach(function(file){
// read file
var path = file.name;
var reader = new FileReader();
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
var arrayBuffer = evt.target.result;
graphsList[path] = arrayBuffer.split("\n");
count = count+ 1;
if(count == foundFiles.length){
for(g in graphsList){
var graphml = graphsList[g];
j ++;
if(file.name.endsWith("graphml")){
let keyList = getAllIndexes(graphml,'symbol')
if(keyList.length == 0){
keyList = getAllIndexes(graphml, 'name')
}
keyList.forEach(function(key){ // get keys
if(key.includes('data')){
var symbol = regExp.exec(key)[1];
if(data[g] == undefined){
data[g] = []
}
data[g].push(symbol);
if(j == Object.keys(graphsList).length){
var overlapDict = calculateOverlap(data);
createHeatmap(overlapDict, foundFiles, graphsList);
document.getElementById('selectAttribute').style.visibility = "visible";
};
};
});
}
else if(file.name.endsWith("sif")){
isSIF = true;
if(data[g] == undefined){
data[g] = []
}
var nodesSet = new Set();
var el = graphml.find(a =>a.includes("\t"));
for (var i = 0; i <= graphml.length - 1; i++) {
if(el){
var nodesAndInteraction = graphml[i].split("\t");
}
else{
var nodesAndInteraction = graphml[i].split(" ");
}
var n1 = nodesAndInteraction[0].trim();
nodesSet.add(n1);
var n2 = nodesAndInteraction[2].trim();
nodesSet.add(n2);
}
data[g] = Array.from(nodesSet);
if(j == Object.keys(graphsList).length){
var overlapDict = calculateOverlap(data);
createHeatmap(overlapDict, foundFiles, graphsList);
document.getElementById('selectAttribute').style.visibility = "visible";
};
}
};
}
};
};
reader.readAsText(file);
})
};
/*
files from directory */
function loadExample(){
example = true;
// layout dropdown
var drpLayoutLeft = document.getElementById("selectlayoutLeft")
drpLayoutLeft.classList.add("Menu")
drpLayoutLeft.classList.add("-horizontal")
var drpLayoutRight = document.getElementById("selectlayoutRight")
drpLayoutRight.classList.add("Menu")
drpLayoutRight.classList.add("-horizontal")
drpLayoutRight.id = "selectlayoutRight";
var labelLayoutLeft = document.createElement("li")
labelLayoutLeft.classList.add("-hasSubmenu")
labelLayoutLeft.innerHTML = "<a href='#'>Layout</a>"
drpLayoutLeft.appendChild(labelLayoutLeft)
var ulLayoutLeft = document.createElement("ul")
labelLayoutLeft.appendChild(ulLayoutLeft)
var labelLayoutRight = document.createElement("li")
labelLayoutRight.classList.add("-hasSubmenu")
labelLayoutRight.innerHTML = "<a href='#'>Layout</a>"
drpLayoutRight.appendChild(labelLayoutRight)
var ulLayoutRight = document.createElement("ul")
labelLayoutRight.appendChild(ulLayoutRight)
layoutArray.forEach(function(s){
var optnLayoutLeft = addLayoutOptions(s, "layoutOptLeft");
optnLayoutLeft.onclick = function(){
selectedLayoutLeft = s;
changeLayout(graphLeft, s);
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('layoutOptLeft')){
e.remove()}});
optnLayoutLeft.innerHTML = "<a href='#'><i class='fas fa-check layoutOptLeft' style='margin-right:5px'></i>"+s+"</a>"
};
ulLayoutLeft.appendChild(optnLayoutLeft);
var optnLayoutRight= addLayoutOptions(s, "layoutOptRight");
optnLayoutRight.onclick = function(){
selectedLayoutRight = s;
changeLayout(graphRight, s);
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('layoutOptRight')){
e.remove()}});
optnLayoutRight.innerHTML = "<a href='#'><i class='fas fa-check layoutOptRight style='margin-right:5px'></i>"+s+"</a>"
};
ulLayoutRight.appendChild(optnLayoutRight);
});
forEach($(".Menu li.-hasSubmenu"), function(e){
e.showMenu = showMenu;
e.hideMenu = hideMenu;
});
forEach($(".Menu > li.-hasSubmenu"), function(e){
e.addEventListener("click", showMenu);
});
forEach($(".Menu > li.-hasSubmenu li"), function(e){
e.addEventListener("mouseenter", hideAllInactiveMenus);
});
forEach($(".Menu > li.-hasSubmenu li.-hasSubmenu"), function(e){
e.addEventListener("click", showMenu);
});
document.addEventListener("click", hideAllInactiveMenus);
isSIF = false;
var foundFiles =[{name:"https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/TvsL_rooted/S02.graphml"}, {name:"https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/TvsL_rooted/S05.graphml"}, {name:"https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/TvsL_rooted/S06.graphml"},{name:"https://raw.githubusercontent.com/MirjamFi/BioGraphVisart/master/TvsL_rooted/S09.graphml"}]
graphsList=[]
var regExp = /\>(.*)\</;
var data = {};
for(let file of foundFiles){
var request = new XMLHttpRequest();
request.open('GET', file["name"], false);
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
var type = request.getResponseHeader('Content-Type');
if (type.indexOf("text") !== 1) {
graphString = request.responseText.split("\n")
isJson = false;
var filesplit = file["name"].split("/")
graphsList[filesplit[filesplit.length-1]] = graphString
}
}
}
request.send(null);
}
for(g in graphsList){
var graphml = graphsList[g]
let keyList = getAllIndexes(graphml,'symbol')
if(keyList.length == 0){
keyList = getAllIndexes(graphml, 'name')
}
keyList.forEach(function(key){ // get keys
if(key.includes('data')){
var symbol = regExp.exec(key)[1];
if(data[g] == undefined){
data[g] = []
}
data[g].push(symbol);
if(g == Object.keys(graphsList)[Object.keys(graphsList).length-1]){
var overlapDict = calculateOverlap(data);
createHeatmap(overlapDict, foundFiles, graphsList, example);
document.getElementById('selectAttribute').style.visibility = "visible";
};
};
});
};
}
/*
calculate overlap between loaded graohs
*/
function calculateOverlap(data){
let overlap = {};
for(let counter = 0; counter < Object.keys(data).length; counter++){ // first graph
let key = Object.keys(data)[counter];
overlap[counter] = {};
overlap[counter]["sample"]=key;
let symbols1 = data[key];
for(let count2=0; count2 < Object.keys(data).length; count2++){ // second graph
let key2 = Object.keys(data)[count2];
let symbols2 = data[key2];
let sym2 = new Set(symbols2);
let overlapnodes = symbols1.filter(x => sym2.has(x)); // overlap number
overlap[counter][key2]=overlapnodes.length;
if(counter == Object.keys(data).length-1){
if(count2 == Object.keys(data).length-1){
return(overlap);
};
};
};
};
};
var drpValues = [];
var shapeAttributes = [];
var onceSearch=false;
function loadGraphml(sampleLeft, sampleRight, graphsList) {
cleanSelectionsHeatmap();
samples = [sampleLeft, sampleRight];
var onceAttr = false
var firstVal = true;
var onceShapes = false
samples.forEach(sample=>{
var graphString;
if(!!sample){
if(sample == sampleLeft){
path_left = sample;
graphString = graphsList[path_left];
graphStringLeft = graphsList[path_left];
}
else if(sample == sampleRight){
path_right=sample;
graphString = graphsList[path_right];
graphStringRight = graphsList[path_right];
}
// put node atttributes into dropdown select object
if(!isSIF){
for (var i = 0; i <= graphString.length - 1; i++) {
if(graphString[i].includes("for=\"node\"") &&
(graphString[i].includes("attr.type=\"double\"") ||
(graphString[i].includes("attr.type=\"boolean\"")))){
var nodeattr = graphString[i].split("attr.name=")[1].split(" ")[0].replace(/"/g, "");
if(!drpValues.includes(nodeattr)){
drpValues.push(nodeattr);
if(!onceAttr){
var drp = document.getElementById("values")
drp.classList.add("Menu")
drp.classList.add("-horizontal")
drp.id = "values";
drp.style.visibility = "visible";
var labelDrp = document.createElement("li")
labelDrp.classList.add("-hasSubmenu")
labelDrp.innerHTML = "<a href='#'>Color attribute</a>"
drp.appendChild(labelDrp)
var ulDrp = document.createElement("ul")
ulDrp.id="ulDrp"
labelDrp.appendChild(ulDrp)
onceAttr = true
}
var ulDrp = document.getElementById("ulDrp")
var optnDrp = document.createElement("li");
optnDrp.id=nodeattr;
if(firstVal){
optnDrp.innerHTML="<a href='#'><i class='fas fa-check optnDrp' style='margin-right:5px'></i>"+optnDrp.id+"</a>"
nodeVal = optnDrp.id
firstVal = false;
}
else{
optnDrp.innerHTML="<a href='#'>"+nodeattr+"</a>";}
ulDrp.appendChild(optnDrp)
optnDrp.onclick = function(){
document.querySelectorAll('.fa-check').forEach(e =>{
if(e.classList.contains('optnDrp')){
e.remove()}});
this.innerHTML = "<a href='#'><i class='fas fa-check optnDrp' style='margin-right:5px'></i>"+this.id+"</a>"
nodeVal = this.id
visualize()
}
if(graphString[i].includes("attr.type=\"boolean\"")){
shapeAttributes.push(nodeattr);
if(!onceShapes){
var drpShapes = document.createElement("ul")
drpShapes.id="nodeShapesAttr"
drpShapes.classList.add("Menu")
drpShapes.classList.add("-horizontal")
drpShapes.style.visibility = "visible"
document.getElementById("config").appendChild("drpShapes")
var labelShape = document.createElement("li")
labelShape.classList.add("-hasSubmenu")
labelShape.innerHTML = "<a href='#'>Node shape</a>"
drpShapes.appendChild(labelShape)
var ulShapes = document.createElement("ul")
labelShape.appendChild(ulShapes)
const shapesArray = ["rectangle", "octagon", "rhomboid", "pentagon", "tag"];
onceShapes = true
}
var liShape = document.createElement("li")
liShape.classList.add("-hasSubmenu")
liShape.innerHTML = "<a href='#'>"+nodeattr+"</a>"
liShape.id= nodeattr
liShape.id="nodeShapes"
ulShapes.appendChild(liShape)
var ulShape = document.createElement("ul")
ulShape.id = nodeattrShape
liShape.appendChild(ulShape)
shapesArray.forEach(function(s){
var optnShape = document.createElement("li")
optnShape.innerHTML = "<a hre='#'>"+s+"</a>"
optnShape.id= s
ulShape.appendChild(optnShape)
optnShape.onclick=function(){
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('optnShape')){
e.remove()}});
optnShape.innerHTML = "<a href='#'><i class='fas fa-check optnShape' style='margin-right:5px'></i>"+s+"</a>"
// optnShape.parentElement.innerHTML = "<a href='#'><i class='fas fa-check liShape' style='margin-right:5px'></i>"+optnShape.parentElement.id+"</a>"
changeNodeShapes(graphLeft, "heatmapcontainer", optnShape.parentElement.id, this.id)
changeNodeShapes(graphRight, "heatmapcontainer", optnShape.parentElement.id, this.id)
hideMenu(document.getElementById("nodeShapesAttr"))}
})
}
}
};
if(graphString[i].includes("<node id=\"n0\">")){
break;
};
};
if(!onceSearch){
var searchgeneInput = document.createElement("input")
searchgeneInput.type = "text"
searchgeneInput.id = "searchgene"
searchgeneInput.size = "10"
searchgeneInput.style.visibility = "hidden"
searchgeneInput.value = "Node label"
document.getElementById("config").appendChild(searchgeneInput)
var searchgenebtn = document.createElement("button")
searchgenebtn.classList.add("butn")
searchgenebtn.id = "searchbutton"
searchgenebtn.style.visibility = "hidden"
searchgenebtn.innerHTML = "Search"
document.getElementById("config").appendChild(searchgenebtn)
var downloadbtn = document.createElement("button")
downloadbtn.classList.add("butn")
downloadbtn.id = "downloadPDF"
downloadbtn.onclick=downloadPDF;
// downloadbtn.disabled="disabled"
// downloadbtn.style.visibility ="hidden"
downloadbtn.innerHTML="<i class='fas fa-file-download fa-lg'></i>"
document.getElementById("config").appendChild(downloadbtn)
onceSearch = true;
}
}
}
else{
return;
}
});
// layout dropdown
var drpLayoutLeft = document.getElementById("selectlayoutLeft")
drpLayoutLeft.classList.add("Menu")
drpLayoutLeft.classList.add("-horizontal")
var drpLayoutRight = document.getElementById("selectlayoutRight")
drpLayoutRight.classList.add("Menu")
drpLayoutRight.classList.add("-horizontal")
drpLayoutRight.id = "selectlayoutRight";
var labelLayoutLeft = document.createElement("li")
labelLayoutLeft.classList.add("-hasSubmenu")
labelLayoutLeft.innerHTML = "<a href='#'>Layout</a>"
drpLayoutLeft.appendChild(labelLayoutLeft)
var ulLayoutLeft = document.createElement("ul")
labelLayoutLeft.appendChild(ulLayoutLeft)
var labelLayoutRight = document.createElement("li")
labelLayoutRight.classList.add("-hasSubmenu")
labelLayoutRight.innerHTML = "<a href='#'>Layout</a>"
drpLayoutRight.appendChild(labelLayoutRight)
var ulLayoutRight = document.createElement("ul")
labelLayoutRight.appendChild(ulLayoutRight)
layoutArray.forEach(function(s){
var optnLayoutLeft = addLayoutOptions(s, "layoutOptLeft");
optnLayoutLeft.onclick = function(){
selectedLayoutLeft = s;
changeLayout(graphLeft, s);
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('layoutOptLeft')){
e.remove()}});
optnLayoutLeft.innerHTML = "<a ><i class='fas fa-check layoutOptLeft' style='margin-right:5px'></i>"+s+"</a>"
};
ulLayoutLeft.appendChild(optnLayoutLeft);
var optnLayoutRight= addLayoutOptions(s, "layoutOptRight");
optnLayoutRight.onclick = function(){
selectedLayoutRight = s;
changeLayout(graphRight, s);
document.querySelectorAll('.fa-check').forEach(function(e){
if(e.classList.contains('layoutOptRight')){
e.remove()}});
optnLayoutRight.innerHTML = "<a><i class='fas fa-check layoutOptRight style='margin-right:5px'></i>"+s+"</a>"
};
ulLayoutRight.appendChild(optnLayoutRight);
});
forEach($(".Menu li.-hasSubmenu"), function(e){
e.showMenu = showMenu;
e.hideMenu = hideMenu;
});
forEach($(".Menu > li.-hasSubmenu"), function(e){
e.addEventListener("click", showMenu);
});
forEach($(".Menu > li.-hasSubmenu li"), function(e){
e.addEventListener("mouseenter", hideAllInactiveMenus);
});
forEach($(".Menu > li.-hasSubmenu li.-hasSubmenu"), function(e){
e.addEventListener("click", showMenu);
});
document.addEventListener("click", hideAllInactiveMenus);
};
//remove all options of dropdown
function removeOptions(selectbox){
var i;
for(i = selectbox.options.length - 1 ; i >= 0 ; i--)
{
selectbox.remove(i);
}
}
function cleanSelectionsHeatmap(){
if(shapeNode){
shapeNode.elements().remove();
}
document.getElementById('keggpathwaysLeft').firstChild.data = "Show KEGG Pathways";
//document.getElementById('KEGGpathsLeft').style.visibility = "hidden";
document.getElementById('KEGGpathsLeft').innerHTML = "";
document.getElementById('keggpathwaysRight').firstChild.data = "Show KEGG Pathways";
//document.getElementById('KEGGpathsRight').style.visibility = "hidden";
document.getElementById('KEGGpathsRight').innerHTML = "";
if(document.getElementById('keggpathwaysMerge')){
document.getElementById('keggpathwaysMerge').style.visibility = "hidden";
}
document.getElementById('selectlayoutLeft').innerHTML = "";
document.getElementById('selectlayoutRight').innerHTML = "";
path= null;
leftGraph = false;
graphStringLeft =null;
graphStringRight =null;
path_left =null;
path_right =null;
leftFirstTime = true;
rightFirstTime = true;
loadGraphCount = 0;
svg_part =null;
firstShape = true;
usedShapeAttributes = [];
getDrpDwnFiles = true;
}
// initiate cytoscape graph
function createCyObject(cyDiv, nodesMin, nodesMax, val){
document.getElementById(cyDiv).innerHTML = "";
return cytoscape({
container: document.getElementById(cyDiv),
ready: function(){
},
style: [
// style nodes
basicstyle,
// {selector: 'node',
// style:{
// 'label':'data(symbol)'
// }},
// attributes with numbers
{selector: 'node['+val+' <0]',
style: {
'background-color': 'mapData('+val+','+ nodesMin+', 0, #006cf0, white)',
'color': 'black'
}},
{selector: 'node['+val+'<='+0.5*nodesMin+']',
style: {
'color': 'white'
}},
{selector: 'node['+val+'>0]',
style: {
'background-color': 'mapData('+val+', 0,'+ nodesMax+', white, #d50000)',
'color': 'black'
}},
{selector: 'node['+val+'>='+0.5*nodesMax+']',
style: {
'color': 'white'
}},
{selector: 'node['+val+'= 0]',
style: {
'background-color': 'white',
'color':'black'
}},
// attributes with boolean
{selector: 'node['+val+'= "false"]',
style: {
'background-color': '#006cf0',
'color':'white'
}},
{selector: 'node['+val+'= "true"]',
style: {
'background-color': '#d50000',
'color':'white'
}},
{selector: '.highlighted',
style:{
'border-width': 8,
'height':70,
width:70
}},
// style edges
basicedgestyle,
actstyle,
expstyle,
inhistyle,
reprstyle,
bindstyle,
dissostyle,
compstyle,
indeffstyle,
missstyle,
statestyle,
phosphostyle,
dephosphostyle,
glycostyle,
ubiquistyle,
methystyle
],
})
}
function highlightNodeTapped(symbol, graphL=undefined, graphR=undefined){
if(graphL){
graphL.$('node').removeClass('highlighted')
graphL.$('node[symbol="'+symbol+'"]').addClass('highlighted')
}
if(graphR){
graphR.$('node').removeClass('highlighted')
graphR.$('node[symbol="'+symbol+'"]').addClass('highlighted')
}
}

View File

@ -0,0 +1,442 @@
// create canvas for kegg pathway rectangles
function createLayoutKeggPathways(cy, nodes, allPaths, pos=""){
var layer = cy.cyCanvas({
zIndex: -1,
});
var canvas = layer.getCanvas();
var ctx = canvas.getContext('2d');
if(document.getElementById("keggpathways"+pos)){
var b = jQuery.extend( [], document.getElementById("keggpathways"+pos)
.firstChild.data).join("");
if(b == "Hide KEGG Pathways" && allPaths){
// highlightKEGGpaths(ctx, cy, layer, canvas);
highlightKEGGpaths(ctx, canvas, cy, nodes, layer, pos, allPaths, colorschemePaths)
}
else if(b == "Show KEGG Pathways" && allPaths){
document.getElementById("KEGGpaths"+pos).style.visibility ="hidden";
}
}
return layer;
}
// create list of top 5 KEGG pathways of the displayed nodes
async function listKEGGPathways(ctx, cy, nodes, layer, canvas, pos = ""){
//swap button "Hide"/"show"
if(document.getElementById('keggpathways'+pos)
.firstChild.data == "Show KEGG Pathways"){
document.getElementById('keggpathways'+pos)
.firstChild.data = "Hide KEGG Pathways";
if(document.getElementById('KEGGpaths'+pos).style.visibility == "hidden"){
document.getElementById('KEGGpaths'+pos).style.visibility="visible";
}
//get pathways from KEGG, show loader while doing so
else{
document.getElementById('loader'+pos).style.visibility = "visible";
document.getElementById('keggpathways'+pos).disabled = true;
var pathsCount = [];
allPaths = [];
colorschemePaths = [];
for(var n of nodes){
if(n["data"]["symbol"]!="legend"){
if(n["data"]["entrezID"] != undefined){
var entrezID = n["data"]["entrezID"].toString();
}
else if(n["data"]["entrez"] != undefined){
var entrezID = n["data"]["entrez"].toString();
}
let keggpaths = await getPathwaysFromKEGG(entrezID);
keggpaths = keggpaths.split("\n")
var line = 0;
while(line < keggpaths.length){
if(keggpaths[line].includes("<nobr>Pathway</nobr>")){
line++;
var splitarray =keggpaths[line].split("</td>")
for(var i = 1; i < splitarray.length-2; i=i+2){
let hsa = "hsa"+splitarray[i-1].split(">hsa")[1].split("</a>")[0]
let p = splitarray[i].split("<td>")[1]
p = hsa+" "+p;
if(p != undefined){
if(typeof allPaths[p] == 'undefined'){
allPaths[p]=[];
}
allPaths[p].push(entrezID);
if(isNaN(pathsCount[p])){
pathsCount[p]=1;
}
else{
pathsCount[p]=pathsCount[p]+1;
}
}
}
break;
}
else{
line++;
}
}
}
}
// only get top 5 of pathways (most genes in)
var props = Object.keys(pathsCount).map(function(key) {
return { key: key, value: this[key] };}, pathsCount);
props = props.sort(function(p1, p2) { return p2.value - p1.value; });
var topFive = props.slice(0, 5);
//show table of pathways
var tbody = document.getElementById("KEGGpaths"+pos);
var keggForm = document.createElement('form');
keggForm.id = "form"+pos
var headerKegg = document.createElement ("h3");
headerKegg.innerHTML = "KEGG Pathways:"
keggForm.appendChild(headerKegg)
// var htmlString ="<form> <h3>KEGG Pathways:</h3><br>";
var colors = ["#66c2a5","#dfc27d","#8da0cb","#e78ac3","#a6d854"]
for (var i = 0; i < topFive.length; i++) {
colorschemePaths[topFive[i].key] = colors[i];
var checkboxKegg = document.createElement('input');
checkboxKegg.type = 'checkbox';
checkboxKegg.value = topFive[i].key
checkboxKegg.onclick=
function(){highlightKEGGpaths(ctx, canvas, cy, nodes, layer, pos, allPaths,
colorschemePaths)};
var label = document.createElement('label')
label.innerHTML = topFive[i].key;
label.style.color = colors[i];
label.id = topFive[i].key;
label.style.fontWeight = "bold";
// label.appendChild(checkboxKegg);
keggForm.appendChild(checkboxKegg);
keggForm.appendChild(label)
keggForm.appendChild(document.createElement("br"))
keggForm.appendChild(document.createElement("br"))
}
tbody.appendChild(keggForm)
document.getElementById('loader'+pos).style.visibility = "hidden";
document.getElementById('keggpathways'+pos).disabled = false;
document.getElementById('KEGGpaths'+pos).style.visibility = "visible";
}
}
//Hide table, switch button to show
else {
document.getElementById('keggpathways'+pos)
.firstChild.data = "Show KEGG Pathways";
document.getElementById('KEGGpaths'+pos).style.visibility = "hidden";
document.getElementById('loader'+pos).style.visibility = "hidden";
var mergeEdgeschecked = document.getElementById('mergeEdges').checked;
jQuery('#form'+pos+' input:checkbox').prop('checked', false);
if(mergeEdgeschecked){
document.getElementById('mergeEdges').checked = true;
}
layer.resetTransform(ctx);
ctx.clearRect(0,0,canvas.width, canvas.height);
layer.setTransform(ctx);
ctx.save();
}
}
// show rectangles for selected pathways
function highlightKEGGpaths(ctx, canvas, cy, nodes, layer, pos="", allPaths, colorschemePaths){
ctx.clearRect(0,0,canvas.width, canvas.height);
cy.on("render cyCanvas.resize", evt => {
layer.resetTransform(ctx);
ctx.clearRect(0,0,canvas.width, canvas.height);
layer.setTransform(ctx);
ctx.save();
drawPathwayRectangles(ctx, cy, nodes, allPaths, colorschemePaths, pos);
ctx.restore();
});
cy.zoom(cy.zoom()*1.000000000000001);
}
// draw rectangles highlighting the selected pathways
function drawPathwayRectangles(ctx, cy, nodes, allPaths, colorschemePaths, pos=""){
var allCheckedPaths = getCheckedBoxes(jQuery('#form'+pos+' input:checkbox'));
if(allCheckedPaths){
for(var path of allCheckedPaths){
var cp = [... allPaths[path]];
//get neighbored nodes in same pathway for each node
var nearest_groups = getNeighbors(cp, cy);
// merge group of neighboring nodes if they intersect
var merged_nodes = mergeNodeGroups(nearest_groups, cp);
//mark connected nodes in pathway
ctx.globalAlpha = 0.6;
var merged_nodes_grouped = Object.values(merged_nodes)
for(var grouped_nodes of merged_nodes_grouped){
var max_dist_x = 0;
var max_dist_y = 0;
var most_x=100000;
var most_y=100000;
// multiple nodes in one rectangle
if(grouped_nodes.size > 1){
for(let n of grouped_nodes){
if(cy.$("node[entrezID ="+n+"]").position()){
var position = cy.$("node[entrezID ="+n+"]").position();
}
else if(cy.$("node[entrez ="+n+"]").position()){
var position = cy.$("node[entrez ="+n+"]").position();
}
for(let m of grouped_nodes){
var pos_m;
if(cy.$("node[entrezID ="+m+"]").position()){
pos_m = cy.$("node[entrezID ="+m+"]").position()
}
else if(cy.$("node[entrez ="+m+"]").position()){
pos_m = cy.$("node[entrez ="+m+"]").position()
}
let dist_x = Math.abs(position['x'] - pos_m['x']);
if(dist_x >= max_dist_x){
max_dist_x = dist_x
if(position['x'] <= pos_m['x'] && position['x'] < most_x){
most_x = position['x'];
}
else if(position['x'] > pos_m['x'] && pos_m['x'] < most_x){
most_x = pos_m['x'];
}
}
let dist_y = Math.abs(position['y'] - pos_m['y']);
if(dist_y >= max_dist_y){
max_dist_y = dist_y
if(position['y'] <= pos_m['y'] && position['y'] < most_y){
most_y = position['y'];
}
else if(position['y'] > pos_m['y'] && pos_m['y'] < most_y){
most_y = pos_m['y'];
}
}
}
}
if(cy.$("node[entrezID ="+[...grouped_nodes][0]+"]").length > 0){
var renderedWidth =
cy.$("node[entrezID ="+[...grouped_nodes][0]+"]").width();
}
else if(cy.$("node[entrez ="+[...grouped_nodes][0]+"]").length > 0){
var renderedWidth =
cy.$("node[entrez ="+[...grouped_nodes][0]+"]").width();
}
max_dist_x = (max_dist_x + renderedWidth);
max_dist_y = (max_dist_y + renderedWidth);
// if nodes lay on one line, set sides to node width
if(max_dist_x==0){
max_dist_x = renderedWidth;
}
if(max_dist_y==0){
max_dist_y = renderedWidth;
}
centroid = {"x": most_x, "y":most_y}
var breaked = false;
for(var node of nodes){
if(cy.$("node[entrez ="+node.data['entrez']+"]")){
var testposition = cy.$("node[entrez ="+node.data['entrez']+"]").renderedPosition();}
else if(cy.$("node[entrezID ="+node.data['entrezID']+"]")){
var testposition = cy.$("node[entrezID ="+node.data['entrezID']+"]").renderedPosition();}
if(!grouped_nodes.has(node.data["symbol"]) && testposition &&
testposition['x'] > centroid['x']-(0.5*renderedWidth) && testposition['x'] < centroid['x']-(0.5*renderedWidth) + max_dist_x &&
testposition['y'] > centroid['y']-(0.5*renderedWidth) && testposition['y'] < centroid['y']-(0.5*renderedWidth) + max_dist_y){
for(var n of grouped_nodes){
if(cy.$("node[entrez ="+n+"]")){
var npos = cy.$("node[entrez ="+n+"]").position();}
else if(cy.$("node[entrezID ="+n+"]")){
var npos = cy.$("node[entrezID ="+n+"]").position();}
merged_nodes_grouped.push(new Set([n]));
}
breaked = true;
break;
}
}
if(!breaked){
drawRect(pos, centroid, renderedWidth, max_dist_x, max_dist_y, path,
ctx, colorschemePaths)
}
}
// single node in square
else if(grouped_nodes.size == 1){
var k = [...grouped_nodes][0];
let renderedPos_id = cy.$("node[entrezID ="+k+"]").position();
let renderedPos = cy.$("node[entrez ="+k+"]").position();
if(renderedPos_id){
var position = renderedPos_id;
var side = (cy.$("node[entrezID ="+k+"]").width()/Math.sqrt(2))*1.7;
drawRect(pos, position, side, side, side, path, ctx, colorschemePaths);
}
else if(renderedPos){
var position = renderedPos;
var side = (cy.$("node[entrez ="+k+"]").width()/Math.sqrt(2))*1.7;
drawRect(pos, position, side, side, side, path, ctx, colorschemePaths);
}
}
}
}
}
}
// Pass the checkbox name to the function
function getCheckedBoxes(chkboxName) {
var checkboxes = chkboxName;
var checkboxesChecked = [];
// loop over them all
for (var i=0; i<checkboxes.length; i++) {
// And stick the checked ones onto an array...
if (checkboxes[i].checked) {
checkboxesChecked.push(checkboxes[i].value);
}
}
// Return the array if it is non-empty, or null
return checkboxesChecked.length > 0 ? checkboxesChecked : null;
}
// make httprequest to kegg
async function getPathwaysFromKEGG(name) {
return new Promise(function (resolve, reject) {
let xhr = new XMLHttpRequest();
xhr.open('GET', "https://www.kegg.jp/entry/hsa:" + name);
xhr.onload = function () {
if (this.status >= 200 && this.status < 300) {
resolve(xhr.response);
} else {
reject({
status: this.status,
statusText: xhr.statusText
});
}
};
xhr.onerror = function () {
reject({
status: this.status,
statusText: xhr.statusText
});
};
xhr.send();
});
}
// get neighbored nodes in same pathway for each node
function getNeighbors(cp, cy){
var g = 0;
var nearest_groups = {};
for(var i = 0; i < cp.length-1; i++){
let renderedPos_i_id = cy.$("node[entrezID ="+cp[i]+"]").renderedPosition();
let renderedPos_i = cy.$("node[entrez ="+cp[i]+"]").renderedPosition();
var position = 0;
if(renderedPos_i_id){
position = renderedPos_i_id;
}
else if(renderedPos_i){
position = renderedPos_i;
}
else{
continue;
}
for(var j = 1; j < cp.length; j++){
let renderedPos_j_id = cy.$("node[entrezID ="+cp[j]+"]").renderedPosition();
let renderedPos_j = cy.$("node[entrez ="+cp[j]+"]").renderedPosition();
var pos_m = 0;
if(renderedPos_j_id){
pos_m = renderedPos_j_id;
}
else if(renderedPos_j){
pos_m = renderedPos_j;
}
else{
continue;
}
let dist =
Math.getDistance(position['x'], position['y'], pos_m['x'], pos_m['y']);
if(dist < (0.1*cy.width()) && dist > 0){
nearest_groups[g] = new Set()
nearest_groups[g].add(cp[i]);
nearest_groups[g].add(cp[j]);
}
}
g += 1;
}
return nearest_groups;
}
//calculate distance between two nodes
Math.getDistance = function( x1, y1, x2, y2 ) {
var xs = x2 - x1,
ys = y2 - y1;
xs *= xs;
ys *= ys;
return Math.sqrt( xs + ys );
};
// merge groups if they intersect
function mergeNodeGroups(nearest_groups, cp_copy){
var merged_nodes={};
var m = 0;
var nearest_groups_values = Object.values(nearest_groups);
for(let group1 of nearest_groups_values){
var new_group = new Set();
for(let group2 of nearest_groups_values){
let intersection = new Set([...group1].filter(x => group2.has(x)));
if(intersection.size > 0){
let union = new Set([...group1, ...group2]);
new_group = new Set([...new_group, ...union]);
cp_copy = new Set([...cp_copy].filter(x => !union.has(x)));
}
}
var cur_group = Array.from(new_group);
var added = false;
if(Object.keys(merged_nodes).length == 0){
merged_nodes[m] = new Set();
merged_nodes[m]= new_group;
}
else{
for(let k of Object.keys(merged_nodes)){
if(cur_group.some(x=> merged_nodes[k].has(x))){
merged_nodes[k] = new Set([...merged_nodes[k], ...cur_group]);
added = true;
break;
}
}
if(!added){
m += 1;
merged_nodes[m] = new Set([...cur_group]);
}
}
}
for(let single of cp_copy){
m+=1;
merged_nodes[m]=new Set([single]);
}
// check again if groups can be further uninionized
var merged_nodes_new = {};
var new_ind = 0;
merged_nodes_new[new_ind] = new Set();
for(let k of Object.keys(merged_nodes)){
let intersection = new Set([...merged_nodes[k]]
.filter(x => merged_nodes_new[new_ind].has(x)));
if(intersection.size > 0){
var union = new Set([...merged_nodes[k], ...merged_nodes_new[new_ind]]);
merged_nodes_new[new_ind] = new Set([...union]);
}
else{
if(!merged_nodes_new[new_ind].size == 0){
new_ind += 1;
merged_nodes_new[new_ind] = merged_nodes[k];
}
else{
merged_nodes_new[new_ind] = merged_nodes[k];
}
}
}
return merged_nodes_new;
}
// draw a rectangle at given position with given sidelengths and colored by pathway
function drawRect(pos, position, nodeWidth, side_x, side_y, path, ctx, colorschemePaths){
ctx.beginPath();
ctx.rect(position['x']-(0.5*nodeWidth), position['y']-
(0.5*nodeWidth), side_x, side_y);
ctx.fillStyle =colorschemePaths[path];
ctx.fill();
ctx.closePath();
}

View File

@ -0,0 +1,296 @@
// map values to node color for GA
function mapValuestoNodeColor(merge_graph, group, pieno, mergeMin, mergeMax, val){
if(!shapeAttributes.includes(val)){
// if(value < 0){
merge_graph.style() // update the elements in the graph with the new style
.selector('node')
.style('color', 'black').update();
merge_graph.style() // update the elements in the graph with the new style
.selector('node['+val+' <0]')
.style('color', 'black').update();
merge_graph.style()
.selector('node['+val+' <='+0.5*mergeMin+']')
.style('color', 'white').update();
merge_graph.style().selector('node[graph="'+group+'"]['+val+' <0]')
.style('background-color', 'mapData('+val+','+ mergeMin+', 0, #006cf0, white)').update();
merge_graph.style().selector('node[graph="both"]['+val+'_'+group+' <0]')
.style('pie-'+pieno+'-background-color', 'mapData('+val+'_'+group+','+ mergeMin+', 0, #006cf0, white)')
.style('pie-'+pieno+'-background-size','50').update();
// else if(value > 0){
merge_graph.style()
.selector('node['+val+' >0]')
.style('color', 'black').update();
merge_graph.style()
.selector('node['+val+' >='+0.5*mergeMax+']')
.style('color', 'white').update();
merge_graph.style().selector('node[graph="'+group+'"]['+val+' >0]')
.style('background-color', 'mapData('+val+', 0,'+ mergeMax+', white, #d50000)').update();
merge_graph.style().selector('node[graph="both"]['+val+'_'+group+' >0]')
.style('pie-'+pieno+'-background-color', 'mapData('+val+'_'+group+', 0,'+ mergeMax+', white, #d50000)')
.style('pie-'+pieno+'-background-size','50').update();
// else if(value == 0){
merge_graph.style().selector('node[graph="'+group+'"]['+val+' =0]')
.style('background-color','white').update();
merge_graph.style() // update the elements in the graph with the new style
.selector('node['+val+' = 0]')
.style('color', 'black').update();
}
else{
// if(value false){
merge_graph.style() // update the elements in the graph with the new style
.selector('node')
.style('color', 'black').update();
merge_graph.style() // update the elements in the graph with the new style
.selector('node['+val+']')
.style('color', 'white').update();
merge_graph.style().selector('node[graph="'+group+'"]['+val+' = "false"]')
.style('background-color', '#006cf0').update();
merge_graph.style().selector('node[graph="both"]['+val+'_'+group+' = "false"]')
.style('pie-'+pieno+'-background-color', '#006cf0')
.style('pie-'+pieno+'-background-size','50').update();
// else if(value true){
merge_graph.style().selector('node[graph="'+group+'"]['+val+' = "true"]')
.style('background-color', '#d50000').update();
merge_graph.style().selector('node[graph="both"]['+val+'_'+group+' = "true"]')
.style('pie-'+pieno+'-background-color', '#d50000')
.style('pie-'+pieno+'-background-size','50').update();
}
merge_graph.style().selector('node[graph="both"]')
.style('border-style','double').update();
merge_graph.$('node[id = "l1"]').style("border-width", 1);
}
// mousover shows value of node
function mergeMousover(merge_graph, GA, nodeVal, filenameSplit){
merge_graph.elements('node[graph="'+GA+'"]').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
if(!isNaN(parseFloat(this.data(nodeVal)))){
return '<b>'+nodeVal +' ' +filenameSplit +'</b>: ' + parseFloat(this.data(nodeVal)).toFixed(2) ; } //numbers
else{
return '<b>'+nodeVal +'</b>: '+ this.data(nodeVal) ; //bools
}
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
}
});
merge_graph.elements('edge').qtip({ // show node attibute value by mouseover
show: {
event: 'mouseover',
solo: true,
},
content: {text : function(){
return '<b>'+this.data()['interaction'] +'</b> '
}},
position: {
my: 'top center',
at: 'bottom center'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 8,
height: 8
}
},
});
}
/*
Uses canvas.measureText to compute and return the width of the given text of given font in pixels.
*/
function getNodeValueRange(nodes, val){
const nodesFilteredNaN = nodes.filter(node => node.data[val]);
const nodesFilteredNaNg1 = nodes.filter(node => node.data[val+'_g1']);
const nodesFilteredNaNg2 = nodes.filter(node => node.data[val+'_g2']);
var valArray = [];
for(var n of nodesFilteredNaN){
valArray.push(parseFloat(n.data[val]))
}
for(var n of nodesFilteredNaNg1){
valArray.push(parseFloat(n.data[val+'_g1']))
}
for(var n of nodesFilteredNaNg2){
valArray.push(parseFloat(n.data[val+'_g2']))
}
const nodesMin = parseFloat(Math.min(...valArray)).toFixed(2);
const nodesMax = parseFloat(Math.max(...valArray)).toFixed(2);
return [nodesMin, nodesMax];
}
var unionNodes;
function getmergedGraph(nodesL, nodesR, edgesL, edgesR, interactionTypes, edgesToMerge, nodeVal){
var nodes1 = nodesL;
var nodes2 = nodesR;
var edges1 = edgesL;
var edges2 = edgesR;
// add length of nodes1 to node ids of nodes2 and according edges to make them unique
for(var i = 0; i < nodes2.length; i++){
var n = nodes2[i].data;
if(n.graph == "g2"){
if(n.id != undefined){
var old_id = n.id
nodes2[i].data.id = "n"+ (Number(n.id.replace( /^\D+/g, ''))+nodes1.length);
for(var j=0; j < edges2.length; j++){
if(edges2[j].data.source == old_id){
edges2[j].data.source = nodes2[i].data.id;
edges2[j].data.id = edges2[j].data.source+edges2[j].data.target;
}
if(edges2[j].data.target == old_id){
edges2[j].data.target = nodes2[i].data.id;
edges2[j].data.id = edges2[j].data.source+edges2[j].data.target;
}
}
}
}
}
var mergedNodes = [];
for(var i = 0; i < nodes1.length; i++){
var n1 = nodes1[i];
for(var j = 0; j < nodes2.length; j++){
var n2 = nodes2[j];
if(n1.data.symbol == n2.data.symbol || n1.data.name == n2.data.name){
mergedNodes[i] = n1;
mergedNodes[i].data.graph = "both";
for(let d in n1.data){
if(!isNaN(n1.data[d]) || !isNaN(n2.data[d]) || n1.data[d] === "true" || n2.data[d] === "true" || n1.data[d] === "false" || n2.data[d] === "false"){
if(d != "val"){
mergedNodes[i].data[d+"_g1"] = n1.data[d];
mergedNodes[i].data[d+"_g2"] = n2.data[d];
}
}
}
for(var k=0; k < edges2.length; k++){
if(edges2[k].data.source == n2.data.id){
edges2[k].data.source = n1.data.id;
edges2[k].data.id = edges2[k].data.source+edges2[k].data.target;
}
if(edges2[k].data.target == n2.data.id){
edges2[k].data.target = n1.data.id;
edges2[k].data.id = edges2[k].data.source+edges2[k].data.target;
}
}
nodes2.splice(j,1);
break;
}
}
if(mergedNodes[i] == undefined|| mergedNodes[i].data.id != n1.data.id){
mergedNodes.push(n1);
}
}
for(var l = 0; l < nodes2.length; l++){
mergedNodes.push(nodes2[l])
}
var legendNode = {};
legendNode.data = {};
legendNode.data.id = "l1";
legendNode.data.symbol = "legend";
mergedNodes.push(legendNode);
var g1Legend = {};
g1Legend.data={};
g1Legend.data.id = "g1";
g1Legend.data.graph = "g1";
g1Legend.data.symbol = leftID;
mergedNodes.push(g1Legend);
var g2Legend = {};
g2Legend.data={};
g2Legend.data.id = "g2";
g2Legend.data.graph = "g2";
g2Legend.data.symbol = rightID;
mergedNodes.push(g2Legend);
// mergedArray have duplicates, lets remove the duplicates using Set
let set = new Set();
unionNodes = Array.from(mergedNodes.filter(item => {
if(item.data.symbol){
if (!set.has(item.data.symbol)) {
set.add(item.data.symbol);
return true;
}
return false;
}
else{
if (!set.has(item.data.name)) {
set.add(item.data.name);
return true;
}
return false;
}
}, set));
const mergedEdges = [...edges1, ...edges2];
for(var i = 0; i<mergedEdges.length; i++){
var n1 = mergedEdges[i];
for(var j =1; j < mergedEdges.length; j++){
var n2 = mergedEdges[j];
if(n1.data.id == n2.data.id && n1.data.graph != n2.data.graph){
mergedEdges[i].data.graph = "both"
mergedEdges.splice(j, 1);
j--;
}
}
}
// mergedArray have duplicates, lets remove the duplicates using Set
set = new Set();
let unionEdges = Array.from(mergedEdges.filter(item => {
if (!set.has(item.data.id)) {
set.add(item.data.id);
return true;
}
return false;
}, set));
var minMax = getNodeValueRange(unionNodes, nodeVal);
mergeMin = minMax[0];
mergeMax = minMax[1];
createInteractionLegend(interactionTypes, merge_graph, edgesToMerge);
if(!document.getElementById('heatmap_shapes')){
var shapelegend = document.createElement("div")
shapelegend.id = "heatmap_shapes";
shapelegend.visibility = "visible";
document.getElementById("legend_merge").appendChild(shapelegend);
document.getElementById("heatmap_shapes")
}
return [unionNodes, unionEdges];
};
var merge_graph;
function merge(){
document.getElementById('arrows').innerHTML = "";
document.getElementById('searchgene').style.visibility = "visible";
document.getElementById('searchbutton').style.visibility = "visible";
}
async function clickMerge(files,val, example){
var leftID = document.getElementById('leftID').innerHTML;
var rightID = document.getElementById('rightID').innerHTML;
if(example){
var objectURL1 =files[0]["name"];
var objectURL2 = files[1]["name"];
}
else{
var objectURL1 = URL.createObjectURL(files[0]);
var objectURL2 = URL.createObjectURL(files[1]);
}
window.open('/BioGraphVisart/merge?leftID='+leftID+'&rightID='+rightID +'&file1='+objectURL1+'&file2='+objectURL2+'&nodeVal='+val+'&example='+example);
}

View File

@ -0,0 +1 @@
../mime/cli.js

View File

@ -0,0 +1 @@
../requirejs/bin/r.js

View File

@ -0,0 +1 @@
../requirejs/bin/r.js

View File

@ -0,0 +1,236 @@
1.3.7 / 2019-04-29
==================
* deps: negotiator@0.6.2
- Fix sorting charset, encoding, and language with extra parameters
1.3.6 / 2019-04-28
==================
* deps: mime-types@~2.1.24
- deps: mime-db@~1.40.0
1.3.5 / 2018-02-28
==================
* deps: mime-types@~2.1.18
- deps: mime-db@~1.33.0
1.3.4 / 2017-08-22
==================
* deps: mime-types@~2.1.16
- deps: mime-db@~1.29.0
1.3.3 / 2016-05-02
==================
* deps: mime-types@~2.1.11
- deps: mime-db@~1.23.0
* deps: negotiator@0.6.1
- perf: improve `Accept` parsing speed
- perf: improve `Accept-Charset` parsing speed
- perf: improve `Accept-Encoding` parsing speed
- perf: improve `Accept-Language` parsing speed
1.3.2 / 2016-03-08
==================
* deps: mime-types@~2.1.10
- Fix extension of `application/dash+xml`
- Update primary extension for `audio/mp4`
- deps: mime-db@~1.22.0
1.3.1 / 2016-01-19
==================
* deps: mime-types@~2.1.9
- deps: mime-db@~1.21.0
1.3.0 / 2015-09-29
==================
* deps: mime-types@~2.1.7
- deps: mime-db@~1.19.0
* deps: negotiator@0.6.0
- Fix including type extensions in parameters in `Accept` parsing
- Fix parsing `Accept` parameters with quoted equals
- Fix parsing `Accept` parameters with quoted semicolons
- Lazy-load modules from main entry point
- perf: delay type concatenation until needed
- perf: enable strict mode
- perf: hoist regular expressions
- perf: remove closures getting spec properties
- perf: remove a closure from media type parsing
- perf: remove property delete from media type parsing
1.2.13 / 2015-09-06
===================
* deps: mime-types@~2.1.6
- deps: mime-db@~1.18.0
1.2.12 / 2015-07-30
===================
* deps: mime-types@~2.1.4
- deps: mime-db@~1.16.0
1.2.11 / 2015-07-16
===================
* deps: mime-types@~2.1.3
- deps: mime-db@~1.15.0
1.2.10 / 2015-07-01
===================
* deps: mime-types@~2.1.2
- deps: mime-db@~1.14.0
1.2.9 / 2015-06-08
==================
* deps: mime-types@~2.1.1
- perf: fix deopt during mapping
1.2.8 / 2015-06-07
==================
* deps: mime-types@~2.1.0
- deps: mime-db@~1.13.0
* perf: avoid argument reassignment & argument slice
* perf: avoid negotiator recursive construction
* perf: enable strict mode
* perf: remove unnecessary bitwise operator
1.2.7 / 2015-05-10
==================
* deps: negotiator@0.5.3
- Fix media type parameter matching to be case-insensitive
1.2.6 / 2015-05-07
==================
* deps: mime-types@~2.0.11
- deps: mime-db@~1.9.1
* deps: negotiator@0.5.2
- Fix comparing media types with quoted values
- Fix splitting media types with quoted commas
1.2.5 / 2015-03-13
==================
* deps: mime-types@~2.0.10
- deps: mime-db@~1.8.0
1.2.4 / 2015-02-14
==================
* Support Node.js 0.6
* deps: mime-types@~2.0.9
- deps: mime-db@~1.7.0
* deps: negotiator@0.5.1
- Fix preference sorting to be stable for long acceptable lists
1.2.3 / 2015-01-31
==================
* deps: mime-types@~2.0.8
- deps: mime-db@~1.6.0
1.2.2 / 2014-12-30
==================
* deps: mime-types@~2.0.7
- deps: mime-db@~1.5.0
1.2.1 / 2014-12-30
==================
* deps: mime-types@~2.0.5
- deps: mime-db@~1.3.1
1.2.0 / 2014-12-19
==================
* deps: negotiator@0.5.0
- Fix list return order when large accepted list
- Fix missing identity encoding when q=0 exists
- Remove dynamic building of Negotiator class
1.1.4 / 2014-12-10
==================
* deps: mime-types@~2.0.4
- deps: mime-db@~1.3.0
1.1.3 / 2014-11-09
==================
* deps: mime-types@~2.0.3
- deps: mime-db@~1.2.0
1.1.2 / 2014-10-14
==================
* deps: negotiator@0.4.9
- Fix error when media type has invalid parameter
1.1.1 / 2014-09-28
==================
* deps: mime-types@~2.0.2
- deps: mime-db@~1.1.0
* deps: negotiator@0.4.8
- Fix all negotiations to be case-insensitive
- Stable sort preferences of same quality according to client order
1.1.0 / 2014-09-02
==================
* update `mime-types`
1.0.7 / 2014-07-04
==================
* Fix wrong type returned from `type` when match after unknown extension
1.0.6 / 2014-06-24
==================
* deps: negotiator@0.4.7
1.0.5 / 2014-06-20
==================
* fix crash when unknown extension given
1.0.4 / 2014-06-19
==================
* use `mime-types`
1.0.3 / 2014-06-11
==================
* deps: negotiator@0.4.6
- Order by specificity when quality is the same
1.0.2 / 2014-05-29
==================
* Fix interpretation when header not in request
* deps: pin negotiator@0.4.5
1.0.1 / 2014-01-18
==================
* Identity encoding isn't always acceptable
* deps: negotiator@~0.4.0
1.0.0 / 2013-12-27
==================
* Genesis

View File

@ -0,0 +1,23 @@
(The MIT License)
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,142 @@
# accepts
[![NPM Version][npm-version-image]][npm-url]
[![NPM Downloads][npm-downloads-image]][npm-url]
[![Node.js Version][node-version-image]][node-version-url]
[![Build Status][travis-image]][travis-url]
[![Test Coverage][coveralls-image]][coveralls-url]
Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
In addition to negotiator, it allows:
- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
as well as `('text/html', 'application/json')`.
- Allows type shorthands such as `json`.
- Returns `false` when no types match
- Treats non-existent headers as `*`
## Installation
This is a [Node.js](https://nodejs.org/en/) module available through the
[npm registry](https://www.npmjs.com/). Installation is done using the
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
```sh
$ npm install accepts
```
## API
<!-- eslint-disable no-unused-vars -->
```js
var accepts = require('accepts')
```
### accepts(req)
Create a new `Accepts` object for the given `req`.
#### .charset(charsets)
Return the first accepted charset. If nothing in `charsets` is accepted,
then `false` is returned.
#### .charsets()
Return the charsets that the request accepts, in the order of the client's
preference (most preferred first).
#### .encoding(encodings)
Return the first accepted encoding. If nothing in `encodings` is accepted,
then `false` is returned.
#### .encodings()
Return the encodings that the request accepts, in the order of the client's
preference (most preferred first).
#### .language(languages)
Return the first accepted language. If nothing in `languages` is accepted,
then `false` is returned.
#### .languages()
Return the languages that the request accepts, in the order of the client's
preference (most preferred first).
#### .type(types)
Return the first accepted type (and it is returned as the same text as what
appears in the `types` array). If nothing in `types` is accepted, then `false`
is returned.
The `types` array can contain full MIME types or file extensions. Any value
that is not a full MIME types is passed to `require('mime-types').lookup`.
#### .types()
Return the types that the request accepts, in the order of the client's
preference (most preferred first).
## Examples
### Simple type negotiation
This simple example shows how to use `accepts` to return a different typed
respond body based on what the client wants to accept. The server lists it's
preferences in order and will get back the best match between the client and
server.
```js
var accepts = require('accepts')
var http = require('http')
function app (req, res) {
var accept = accepts(req)
// the order of this list is significant; should be server preferred order
switch (accept.type(['json', 'html'])) {
case 'json':
res.setHeader('Content-Type', 'application/json')
res.write('{"hello":"world!"}')
break
case 'html':
res.setHeader('Content-Type', 'text/html')
res.write('<b>hello, world!</b>')
break
default:
// the fallback is text/plain, so no need to specify it above
res.setHeader('Content-Type', 'text/plain')
res.write('hello, world!')
break
}
res.end()
}
http.createServer(app).listen(3000)
```
You can test this out with the cURL program:
```sh
curl -I -H'Accept: text/html' http://localhost:3000/
```
## License
[MIT](LICENSE)
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
[node-version-image]: https://badgen.net/npm/node/accepts
[node-version-url]: https://nodejs.org/en/download
[npm-downloads-image]: https://badgen.net/npm/dm/accepts
[npm-url]: https://npmjs.org/package/accepts
[npm-version-image]: https://badgen.net/npm/v/accepts
[travis-image]: https://badgen.net/travis/jshttp/accepts/master
[travis-url]: https://travis-ci.org/jshttp/accepts

View File

@ -0,0 +1,238 @@
/*!
* accepts
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*/
'use strict'
/**
* Module dependencies.
* @private
*/
var Negotiator = require('negotiator')
var mime = require('mime-types')
/**
* Module exports.
* @public
*/
module.exports = Accepts
/**
* Create a new Accepts object for the given req.
*
* @param {object} req
* @public
*/
function Accepts (req) {
if (!(this instanceof Accepts)) {
return new Accepts(req)
}
this.headers = req.headers
this.negotiator = new Negotiator(req)
}
/**
* Check if the given `type(s)` is acceptable, returning
* the best match when true, otherwise `undefined`, in which
* case you should respond with 406 "Not Acceptable".
*
* The `type` value may be a single mime type string
* such as "application/json", the extension name
* such as "json" or an array `["json", "html", "text/plain"]`. When a list
* or array is given the _best_ match, if any is returned.
*
* Examples:
*
* // Accept: text/html
* this.types('html');
* // => "html"
*
* // Accept: text/*, application/json
* this.types('html');
* // => "html"
* this.types('text/html');
* // => "text/html"
* this.types('json', 'text');
* // => "json"
* this.types('application/json');
* // => "application/json"
*
* // Accept: text/*, application/json
* this.types('image/png');
* this.types('png');
* // => undefined
*
* // Accept: text/*;q=.5, application/json
* this.types(['html', 'json']);
* this.types('html', 'json');
* // => "json"
*
* @param {String|Array} types...
* @return {String|Array|Boolean}
* @public
*/
Accepts.prototype.type =
Accepts.prototype.types = function (types_) {
var types = types_
// support flattened arguments
if (types && !Array.isArray(types)) {
types = new Array(arguments.length)
for (var i = 0; i < types.length; i++) {
types[i] = arguments[i]
}
}
// no types, return all requested types
if (!types || types.length === 0) {
return this.negotiator.mediaTypes()
}
// no accept header, return first given type
if (!this.headers.accept) {
return types[0]
}
var mimes = types.map(extToMime)
var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
var first = accepts[0]
return first
? types[mimes.indexOf(first)]
: false
}
/**
* Return accepted encodings or best fit based on `encodings`.
*
* Given `Accept-Encoding: gzip, deflate`
* an array sorted by quality is returned:
*
* ['gzip', 'deflate']
*
* @param {String|Array} encodings...
* @return {String|Array}
* @public
*/
Accepts.prototype.encoding =
Accepts.prototype.encodings = function (encodings_) {
var encodings = encodings_
// support flattened arguments
if (encodings && !Array.isArray(encodings)) {
encodings = new Array(arguments.length)
for (var i = 0; i < encodings.length; i++) {
encodings[i] = arguments[i]
}
}
// no encodings, return all requested encodings
if (!encodings || encodings.length === 0) {
return this.negotiator.encodings()
}
return this.negotiator.encodings(encodings)[0] || false
}
/**
* Return accepted charsets or best fit based on `charsets`.
*
* Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
* an array sorted by quality is returned:
*
* ['utf-8', 'utf-7', 'iso-8859-1']
*
* @param {String|Array} charsets...
* @return {String|Array}
* @public
*/
Accepts.prototype.charset =
Accepts.prototype.charsets = function (charsets_) {
var charsets = charsets_
// support flattened arguments
if (charsets && !Array.isArray(charsets)) {
charsets = new Array(arguments.length)
for (var i = 0; i < charsets.length; i++) {
charsets[i] = arguments[i]
}
}
// no charsets, return all requested charsets
if (!charsets || charsets.length === 0) {
return this.negotiator.charsets()
}
return this.negotiator.charsets(charsets)[0] || false
}
/**
* Return accepted languages or best fit based on `langs`.
*
* Given `Accept-Language: en;q=0.8, es, pt`
* an array sorted by quality is returned:
*
* ['es', 'pt', 'en']
*
* @param {String|Array} langs...
* @return {Array|String}
* @public
*/
Accepts.prototype.lang =
Accepts.prototype.langs =
Accepts.prototype.language =
Accepts.prototype.languages = function (languages_) {
var languages = languages_
// support flattened arguments
if (languages && !Array.isArray(languages)) {
languages = new Array(arguments.length)
for (var i = 0; i < languages.length; i++) {
languages[i] = arguments[i]
}
}
// no languages, return all requested languages
if (!languages || languages.length === 0) {
return this.negotiator.languages()
}
return this.negotiator.languages(languages)[0] || false
}
/**
* Convert extnames to mime.
*
* @param {String} type
* @return {String}
* @private
*/
function extToMime (type) {
return type.indexOf('/') === -1
? mime.lookup(type)
: type
}
/**
* Check if mime is valid.
*
* @param {String} type
* @return {String}
* @private
*/
function validMime (type) {
return typeof type === 'string'
}

View File

@ -0,0 +1,86 @@
{
"_from": "accepts@~1.3.7",
"_id": "accepts@1.3.7",
"_inBundle": false,
"_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"_location": "/accepts",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "accepts@~1.3.7",
"name": "accepts",
"escapedName": "accepts",
"rawSpec": "~1.3.7",
"saveSpec": null,
"fetchSpec": "~1.3.7"
},
"_requiredBy": [
"/express"
],
"_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"_shasum": "531bc726517a3b2b41f850021c6cc15eaab507cd",
"_spec": "accepts@~1.3.7",
"_where": "/Users/mirjam/Documents/subgraphVisualization/BioGraphVisart/static/scripts/node_modules/express",
"bugs": {
"url": "https://github.com/jshttp/accepts/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Douglas Christopher Wilson",
"email": "doug@somethingdoug.com"
},
{
"name": "Jonathan Ong",
"email": "me@jongleberry.com",
"url": "http://jongleberry.com"
}
],
"dependencies": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
},
"deprecated": false,
"description": "Higher-level content negotiation",
"devDependencies": {
"deep-equal": "1.0.1",
"eslint": "5.16.0",
"eslint-config-standard": "12.0.0",
"eslint-plugin-import": "2.17.2",
"eslint-plugin-markdown": "1.0.0",
"eslint-plugin-node": "8.0.1",
"eslint-plugin-promise": "4.1.1",
"eslint-plugin-standard": "4.0.0",
"mocha": "6.1.4",
"nyc": "14.0.0"
},
"engines": {
"node": ">= 0.6"
},
"files": [
"LICENSE",
"HISTORY.md",
"index.js"
],
"homepage": "https://github.com/jshttp/accepts#readme",
"keywords": [
"content",
"negotiation",
"accept",
"accepts"
],
"license": "MIT",
"name": "accepts",
"repository": {
"type": "git",
"url": "git+https://github.com/jshttp/accepts.git"
},
"scripts": {
"lint": "eslint --plugin markdown --ext js,md .",
"test": "mocha --reporter spec --check-leaks --bail test/",
"test-cov": "nyc --reporter=html --reporter=text npm test",
"test-travis": "nyc --reporter=text npm test"
},
"version": "1.3.7"
}

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -0,0 +1,43 @@
# Array Flatten
[![NPM version][npm-image]][npm-url]
[![NPM downloads][downloads-image]][downloads-url]
[![Build status][travis-image]][travis-url]
[![Test coverage][coveralls-image]][coveralls-url]
> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.
## Installation
```
npm install array-flatten --save
```
## Usage
```javascript
var flatten = require('array-flatten')
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)
//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]
(function () {
flatten(arguments) //=> [1, 2, 3]
})(1, [2, 3])
```
## License
MIT
[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat
[npm-url]: https://npmjs.org/package/array-flatten
[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat
[downloads-url]: https://npmjs.org/package/array-flatten
[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat
[travis-url]: https://travis-ci.org/blakeembrey/array-flatten
[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat
[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master

View File

@ -0,0 +1,64 @@
'use strict'
/**
* Expose `arrayFlatten`.
*/
module.exports = arrayFlatten
/**
* Recursive flatten function with depth.
*
* @param {Array} array
* @param {Array} result
* @param {Number} depth
* @return {Array}
*/
function flattenWithDepth (array, result, depth) {
for (var i = 0; i < array.length; i++) {
var value = array[i]
if (depth > 0 && Array.isArray(value)) {
flattenWithDepth(value, result, depth - 1)
} else {
result.push(value)
}
}
return result
}
/**
* Recursive flatten function. Omitting depth is slightly faster.
*
* @param {Array} array
* @param {Array} result
* @return {Array}
*/
function flattenForever (array, result) {
for (var i = 0; i < array.length; i++) {
var value = array[i]
if (Array.isArray(value)) {
flattenForever(value, result)
} else {
result.push(value)
}
}
return result
}
/**
* Flatten an array, with the ability to define a depth.
*
* @param {Array} array
* @param {Number} depth
* @return {Array}
*/
function arrayFlatten (array, depth) {
if (depth == null) {
return flattenForever(array, [])
}
return flattenWithDepth(array, [], depth)
}

View File

@ -0,0 +1,64 @@
{
"_from": "array-flatten@1.1.1",
"_id": "array-flatten@1.1.1",
"_inBundle": false,
"_integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
"_location": "/array-flatten",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "array-flatten@1.1.1",
"name": "array-flatten",
"escapedName": "array-flatten",
"rawSpec": "1.1.1",
"saveSpec": null,
"fetchSpec": "1.1.1"
},
"_requiredBy": [
"/express"
],
"_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"_shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2",
"_spec": "array-flatten@1.1.1",
"_where": "/Users/mirjam/Documents/subgraphVisualization/BioGraphVisart/static/scripts/node_modules/express",
"author": {
"name": "Blake Embrey",
"email": "hello@blakeembrey.com",
"url": "http://blakeembrey.me"
},
"bugs": {
"url": "https://github.com/blakeembrey/array-flatten/issues"
},
"bundleDependencies": false,
"deprecated": false,
"description": "Flatten an array of nested arrays into a single flat array",
"devDependencies": {
"istanbul": "^0.3.13",
"mocha": "^2.2.4",
"pre-commit": "^1.0.7",
"standard": "^3.7.3"
},
"files": [
"array-flatten.js",
"LICENSE"
],
"homepage": "https://github.com/blakeembrey/array-flatten",
"keywords": [
"array",
"flatten",
"arguments",
"depth"
],
"license": "MIT",
"main": "array-flatten.js",
"name": "array-flatten",
"repository": {
"type": "git",
"url": "git://github.com/blakeembrey/array-flatten.git"
},
"scripts": {
"test": "istanbul cover _mocha -- -R spec"
},
"version": "1.1.1"
}

View File

@ -0,0 +1,609 @@
1.19.0 / 2019-04-25
===================
* deps: bytes@3.1.0
- Add petabyte (`pb`) support
* deps: http-errors@1.7.2
- Set constructor name when possible
- deps: setprototypeof@1.1.1
- deps: statuses@'>= 1.5.0 < 2'
* deps: iconv-lite@0.4.24
- Added encoding MIK
* deps: qs@6.7.0
- Fix parsing array brackets after index
* deps: raw-body@2.4.0
- deps: bytes@3.1.0
- deps: http-errors@1.7.2
- deps: iconv-lite@0.4.24
* deps: type-is@~1.6.17
- deps: mime-types@~2.1.24
- perf: prevent internal `throw` on invalid type
1.18.3 / 2018-05-14
===================
* Fix stack trace for strict json parse error
* deps: depd@~1.1.2
- perf: remove argument reassignment
* deps: http-errors@~1.6.3
- deps: depd@~1.1.2
- deps: setprototypeof@1.1.0
- deps: statuses@'>= 1.3.1 < 2'
* deps: iconv-lite@0.4.23
- Fix loading encoding with year appended
- Fix deprecation warnings on Node.js 10+
* deps: qs@6.5.2
* deps: raw-body@2.3.3
- deps: http-errors@1.6.3
- deps: iconv-lite@0.4.23
* deps: type-is@~1.6.16
- deps: mime-types@~2.1.18
1.18.2 / 2017-09-22
===================
* deps: debug@2.6.9
* perf: remove argument reassignment
1.18.1 / 2017-09-12
===================
* deps: content-type@~1.0.4
- perf: remove argument reassignment
- perf: skip parameter parsing when no parameters
* deps: iconv-lite@0.4.19
- Fix ISO-8859-1 regression
- Update Windows-1255
* deps: qs@6.5.1
- Fix parsing & compacting very deep objects
* deps: raw-body@2.3.2
- deps: iconv-lite@0.4.19
1.18.0 / 2017-09-08
===================
* Fix JSON strict violation error to match native parse error
* Include the `body` property on verify errors
* Include the `type` property on all generated errors
* Use `http-errors` to set status code on errors
* deps: bytes@3.0.0
* deps: debug@2.6.8
* deps: depd@~1.1.1
- Remove unnecessary `Buffer` loading
* deps: http-errors@~1.6.2
- deps: depd@1.1.1
* deps: iconv-lite@0.4.18
- Add support for React Native
- Add a warning if not loaded as utf-8
- Fix CESU-8 decoding in Node.js 8
- Improve speed of ISO-8859-1 encoding
* deps: qs@6.5.0
* deps: raw-body@2.3.1
- Use `http-errors` for standard emitted errors
- deps: bytes@3.0.0
- deps: iconv-lite@0.4.18
- perf: skip buffer decoding on overage chunk
* perf: prevent internal `throw` when missing charset
1.17.2 / 2017-05-17
===================
* deps: debug@2.6.7
- Fix `DEBUG_MAX_ARRAY_LENGTH`
- deps: ms@2.0.0
* deps: type-is@~1.6.15
- deps: mime-types@~2.1.15
1.17.1 / 2017-03-06
===================
* deps: qs@6.4.0
- Fix regression parsing keys starting with `[`
1.17.0 / 2017-03-01
===================
* deps: http-errors@~1.6.1
- Make `message` property enumerable for `HttpError`s
- deps: setprototypeof@1.0.3
* deps: qs@6.3.1
- Fix compacting nested arrays
1.16.1 / 2017-02-10
===================
* deps: debug@2.6.1
- Fix deprecation messages in WebStorm and other editors
- Undeprecate `DEBUG_FD` set to `1` or `2`
1.16.0 / 2017-01-17
===================
* deps: debug@2.6.0
- Allow colors in workers
- Deprecated `DEBUG_FD` environment variable
- Fix error when running under React Native
- Use same color for same namespace
- deps: ms@0.7.2
* deps: http-errors@~1.5.1
- deps: inherits@2.0.3
- deps: setprototypeof@1.0.2
- deps: statuses@'>= 1.3.1 < 2'
* deps: iconv-lite@0.4.15
- Added encoding MS-31J
- Added encoding MS-932
- Added encoding MS-936
- Added encoding MS-949
- Added encoding MS-950
- Fix GBK/GB18030 handling of Euro character
* deps: qs@6.2.1
- Fix array parsing from skipping empty values
* deps: raw-body@~2.2.0
- deps: iconv-lite@0.4.15
* deps: type-is@~1.6.14
- deps: mime-types@~2.1.13
1.15.2 / 2016-06-19
===================
* deps: bytes@2.4.0
* deps: content-type@~1.0.2
- perf: enable strict mode
* deps: http-errors@~1.5.0
- Use `setprototypeof` module to replace `__proto__` setting
- deps: statuses@'>= 1.3.0 < 2'
- perf: enable strict mode
* deps: qs@6.2.0
* deps: raw-body@~2.1.7
- deps: bytes@2.4.0
- perf: remove double-cleanup on happy path
* deps: type-is@~1.6.13
- deps: mime-types@~2.1.11
1.15.1 / 2016-05-05
===================
* deps: bytes@2.3.0
- Drop partial bytes on all parsed units
- Fix parsing byte string that looks like hex
* deps: raw-body@~2.1.6
- deps: bytes@2.3.0
* deps: type-is@~1.6.12
- deps: mime-types@~2.1.10
1.15.0 / 2016-02-10
===================
* deps: http-errors@~1.4.0
- Add `HttpError` export, for `err instanceof createError.HttpError`
- deps: inherits@2.0.1
- deps: statuses@'>= 1.2.1 < 2'
* deps: qs@6.1.0
* deps: type-is@~1.6.11
- deps: mime-types@~2.1.9
1.14.2 / 2015-12-16
===================
* deps: bytes@2.2.0
* deps: iconv-lite@0.4.13
* deps: qs@5.2.0
* deps: raw-body@~2.1.5
- deps: bytes@2.2.0
- deps: iconv-lite@0.4.13
* deps: type-is@~1.6.10
- deps: mime-types@~2.1.8
1.14.1 / 2015-09-27
===================
* Fix issue where invalid charset results in 400 when `verify` used
* deps: iconv-lite@0.4.12
- Fix CESU-8 decoding in Node.js 4.x
* deps: raw-body@~2.1.4
- Fix masking critical errors from `iconv-lite`
- deps: iconv-lite@0.4.12
* deps: type-is@~1.6.9
- deps: mime-types@~2.1.7
1.14.0 / 2015-09-16
===================
* Fix JSON strict parse error to match syntax errors
* Provide static `require` analysis in `urlencoded` parser
* deps: depd@~1.1.0
- Support web browser loading
* deps: qs@5.1.0
* deps: raw-body@~2.1.3
- Fix sync callback when attaching data listener causes sync read
* deps: type-is@~1.6.8
- Fix type error when given invalid type to match against
- deps: mime-types@~2.1.6
1.13.3 / 2015-07-31
===================
* deps: type-is@~1.6.6
- deps: mime-types@~2.1.4
1.13.2 / 2015-07-05
===================
* deps: iconv-lite@0.4.11
* deps: qs@4.0.0
- Fix dropping parameters like `hasOwnProperty`
- Fix user-visible incompatibilities from 3.1.0
- Fix various parsing edge cases
* deps: raw-body@~2.1.2
- Fix error stack traces to skip `makeError`
- deps: iconv-lite@0.4.11
* deps: type-is@~1.6.4
- deps: mime-types@~2.1.2
- perf: enable strict mode
- perf: remove argument reassignment
1.13.1 / 2015-06-16
===================
* deps: qs@2.4.2
- Downgraded from 3.1.0 because of user-visible incompatibilities
1.13.0 / 2015-06-14
===================
* Add `statusCode` property on `Error`s, in addition to `status`
* Change `type` default to `application/json` for JSON parser
* Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
* Provide static `require` analysis
* Use the `http-errors` module to generate errors
* deps: bytes@2.1.0
- Slight optimizations
* deps: iconv-lite@0.4.10
- The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
- Leading BOM is now removed when decoding
* deps: on-finished@~2.3.0
- Add defined behavior for HTTP `CONNECT` requests
- Add defined behavior for HTTP `Upgrade` requests
- deps: ee-first@1.1.1
* deps: qs@3.1.0
- Fix dropping parameters like `hasOwnProperty`
- Fix various parsing edge cases
- Parsed object now has `null` prototype
* deps: raw-body@~2.1.1
- Use `unpipe` module for unpiping requests
- deps: iconv-lite@0.4.10
* deps: type-is@~1.6.3
- deps: mime-types@~2.1.1
- perf: reduce try block size
- perf: remove bitwise operations
* perf: enable strict mode
* perf: remove argument reassignment
* perf: remove delete call
1.12.4 / 2015-05-10
===================
* deps: debug@~2.2.0
* deps: qs@2.4.2
- Fix allowing parameters like `constructor`
* deps: on-finished@~2.2.1
* deps: raw-body@~2.0.1
- Fix a false-positive when unpiping in Node.js 0.8
- deps: bytes@2.0.1
* deps: type-is@~1.6.2
- deps: mime-types@~2.0.11
1.12.3 / 2015-04-15
===================
* Slight efficiency improvement when not debugging
* deps: depd@~1.0.1
* deps: iconv-lite@0.4.8
- Add encoding alias UNICODE-1-1-UTF-7
* deps: raw-body@1.3.4
- Fix hanging callback if request aborts during read
- deps: iconv-lite@0.4.8
1.12.2 / 2015-03-16
===================
* deps: qs@2.4.1
- Fix error when parameter `hasOwnProperty` is present
1.12.1 / 2015-03-15
===================
* deps: debug@~2.1.3
- Fix high intensity foreground color for bold
- deps: ms@0.7.0
* deps: type-is@~1.6.1
- deps: mime-types@~2.0.10
1.12.0 / 2015-02-13
===================
* add `debug` messages
* accept a function for the `type` option
* use `content-type` to parse `Content-Type` headers
* deps: iconv-lite@0.4.7
- Gracefully support enumerables on `Object.prototype`
* deps: raw-body@1.3.3
- deps: iconv-lite@0.4.7
* deps: type-is@~1.6.0
- fix argument reassignment
- fix false-positives in `hasBody` `Transfer-Encoding` check
- support wildcard for both type and subtype (`*/*`)
- deps: mime-types@~2.0.9
1.11.0 / 2015-01-30
===================
* make internal `extended: true` depth limit infinity
* deps: type-is@~1.5.6
- deps: mime-types@~2.0.8
1.10.2 / 2015-01-20
===================
* deps: iconv-lite@0.4.6
- Fix rare aliases of single-byte encodings
* deps: raw-body@1.3.2
- deps: iconv-lite@0.4.6
1.10.1 / 2015-01-01
===================
* deps: on-finished@~2.2.0
* deps: type-is@~1.5.5
- deps: mime-types@~2.0.7
1.10.0 / 2014-12-02
===================
* make internal `extended: true` array limit dynamic
1.9.3 / 2014-11-21
==================
* deps: iconv-lite@0.4.5
- Fix Windows-31J and X-SJIS encoding support
* deps: qs@2.3.3
- Fix `arrayLimit` behavior
* deps: raw-body@1.3.1
- deps: iconv-lite@0.4.5
* deps: type-is@~1.5.3
- deps: mime-types@~2.0.3
1.9.2 / 2014-10-27
==================
* deps: qs@2.3.2
- Fix parsing of mixed objects and values
1.9.1 / 2014-10-22
==================
* deps: on-finished@~2.1.1
- Fix handling of pipelined requests
* deps: qs@2.3.0
- Fix parsing of mixed implicit and explicit arrays
* deps: type-is@~1.5.2
- deps: mime-types@~2.0.2
1.9.0 / 2014-09-24
==================
* include the charset in "unsupported charset" error message
* include the encoding in "unsupported content encoding" error message
* deps: depd@~1.0.0
1.8.4 / 2014-09-23
==================
* fix content encoding to be case-insensitive
1.8.3 / 2014-09-19
==================
* deps: qs@2.2.4
- Fix issue with object keys starting with numbers truncated
1.8.2 / 2014-09-15
==================
* deps: depd@0.4.5
1.8.1 / 2014-09-07
==================
* deps: media-typer@0.3.0
* deps: type-is@~1.5.1
1.8.0 / 2014-09-05
==================
* make empty-body-handling consistent between chunked requests
- empty `json` produces `{}`
- empty `raw` produces `new Buffer(0)`
- empty `text` produces `''`
- empty `urlencoded` produces `{}`
* deps: qs@2.2.3
- Fix issue where first empty value in array is discarded
* deps: type-is@~1.5.0
- fix `hasbody` to be true for `content-length: 0`
1.7.0 / 2014-09-01
==================
* add `parameterLimit` option to `urlencoded` parser
* change `urlencoded` extended array limit to 100
* respond with 413 when over `parameterLimit` in `urlencoded`
1.6.7 / 2014-08-29
==================
* deps: qs@2.2.2
- Remove unnecessary cloning
1.6.6 / 2014-08-27
==================
* deps: qs@2.2.0
- Array parsing fix
- Performance improvements
1.6.5 / 2014-08-16
==================
* deps: on-finished@2.1.0
1.6.4 / 2014-08-14
==================
* deps: qs@1.2.2
1.6.3 / 2014-08-10
==================
* deps: qs@1.2.1
1.6.2 / 2014-08-07
==================
* deps: qs@1.2.0
- Fix parsing array of objects
1.6.1 / 2014-08-06
==================
* deps: qs@1.1.0
- Accept urlencoded square brackets
- Accept empty values in implicit array notation
1.6.0 / 2014-08-05
==================
* deps: qs@1.0.2
- Complete rewrite
- Limits array length to 20
- Limits object depth to 5
- Limits parameters to 1,000
1.5.2 / 2014-07-27
==================
* deps: depd@0.4.4
- Work-around v8 generating empty stack traces
1.5.1 / 2014-07-26
==================
* deps: depd@0.4.3
- Fix exception when global `Error.stackTraceLimit` is too low
1.5.0 / 2014-07-20
==================
* deps: depd@0.4.2
- Add `TRACE_DEPRECATION` environment variable
- Remove non-standard grey color from color output
- Support `--no-deprecation` argument
- Support `--trace-deprecation` argument
* deps: iconv-lite@0.4.4
- Added encoding UTF-7
* deps: raw-body@1.3.0
- deps: iconv-lite@0.4.4
- Added encoding UTF-7
- Fix `Cannot switch to old mode now` error on Node.js 0.10+
* deps: type-is@~1.3.2
1.4.3 / 2014-06-19
==================
* deps: type-is@1.3.1
- fix global variable leak
1.4.2 / 2014-06-19
==================
* deps: type-is@1.3.0
- improve type parsing
1.4.1 / 2014-06-19
==================
* fix urlencoded extended deprecation message
1.4.0 / 2014-06-19
==================
* add `text` parser
* add `raw` parser
* check accepted charset in content-type (accepts utf-8)
* check accepted encoding in content-encoding (accepts identity)
* deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
* deprecate `urlencoded()` without provided `extended` option
* lazy-load urlencoded parsers
* parsers split into files for reduced mem usage
* support gzip and deflate bodies
- set `inflate: false` to turn off
* deps: raw-body@1.2.2
- Support all encodings from `iconv-lite`
1.3.1 / 2014-06-11
==================
* deps: type-is@1.2.1
- Switch dependency from mime to mime-types@1.0.0
1.3.0 / 2014-05-31
==================
* add `extended` option to urlencoded parser
1.2.2 / 2014-05-27
==================
* deps: raw-body@1.1.6
- assert stream encoding on node.js 0.8
- assert stream encoding on node.js < 0.10.6
- deps: bytes@1
1.2.1 / 2014-05-26
==================
* invoke `next(err)` after request fully read
- prevents hung responses and socket hang ups
1.2.0 / 2014-05-11
==================
* add `verify` option
* deps: type-is@1.2.0
- support suffix matching
1.1.2 / 2014-05-11
==================
* improve json parser speed
1.1.1 / 2014-05-11
==================
* fix repeated limit parsing with every request
1.1.0 / 2014-05-10
==================
* add `type` option
* deps: pin for safety and consistency
1.0.2 / 2014-04-14
==================
* use `type-is` module
1.0.1 / 2014-03-20
==================
* lower default limits to 100kb

View File

@ -0,0 +1,23 @@
(The MIT License)
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,443 @@
# body-parser
[![NPM Version][npm-image]][npm-url]
[![NPM Downloads][downloads-image]][downloads-url]
[![Build Status][travis-image]][travis-url]
[![Test Coverage][coveralls-image]][coveralls-url]
Node.js body parsing middleware.
Parse incoming request bodies in a middleware before your handlers, available
under the `req.body` property.
**Note** As `req.body`'s shape is based on user-controlled input, all
properties and values in this object are untrusted and should be validated
before trusting. For example, `req.body.foo.toString()` may fail in multiple
ways, for example the `foo` property may not be there or may not be a string,
and `toString` may not be a function and instead a string or other user input.
[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
_This does not handle multipart bodies_, due to their complex and typically
large nature. For multipart bodies, you may be interested in the following
modules:
* [busboy](https://www.npmjs.org/package/busboy#readme) and
[connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
* [multiparty](https://www.npmjs.org/package/multiparty#readme) and
[connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
* [formidable](https://www.npmjs.org/package/formidable#readme)
* [multer](https://www.npmjs.org/package/multer#readme)
This module provides the following parsers:
* [JSON body parser](#bodyparserjsonoptions)
* [Raw body parser](#bodyparserrawoptions)
* [Text body parser](#bodyparsertextoptions)
* [URL-encoded form body parser](#bodyparserurlencodedoptions)
Other body parsers you might be interested in:
- [body](https://www.npmjs.org/package/body#readme)
- [co-body](https://www.npmjs.org/package/co-body#readme)
## Installation
```sh
$ npm install body-parser
```
## API
<!-- eslint-disable no-unused-vars -->
```js
var bodyParser = require('body-parser')
```
The `bodyParser` object exposes various factories to create middlewares. All
middlewares will populate the `req.body` property with the parsed body when
the `Content-Type` request header matches the `type` option, or an empty
object (`{}`) if there was no body to parse, the `Content-Type` was not matched,
or an error occurred.
The various errors returned by this module are described in the
[errors section](#errors).
### bodyParser.json([options])
Returns middleware that only parses `json` and only looks at requests where
the `Content-Type` header matches the `type` option. This parser accepts any
Unicode encoding of the body and supports automatic inflation of `gzip` and
`deflate` encodings.
A new `body` object containing the parsed data is populated on the `request`
object after the middleware (i.e. `req.body`).
#### Options
The `json` function takes an optional `options` object that may contain any of
the following keys:
##### inflate
When set to `true`, then deflated (compressed) bodies will be inflated; when
`false`, deflated bodies are rejected. Defaults to `true`.
##### limit
Controls the maximum request body size. If this is a number, then the value
specifies the number of bytes; if it is a string, the value is passed to the
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
to `'100kb'`.
##### reviver
The `reviver` option is passed directly to `JSON.parse` as the second
argument. You can find more information on this argument
[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
##### strict
When set to `true`, will only accept arrays and objects; when `false` will
accept anything `JSON.parse` accepts. Defaults to `true`.
##### type
The `type` option is used to determine what media type the middleware will
parse. This option can be a string, array of strings, or a function. If not a
function, `type` option is passed directly to the
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
be an extension name (like `json`), a mime type (like `application/json`), or
a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
option is called as `fn(req)` and the request is parsed if it returns a truthy
value. Defaults to `application/json`.
##### verify
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
where `buf` is a `Buffer` of the raw request body and `encoding` is the
encoding of the request. The parsing can be aborted by throwing an error.
### bodyParser.raw([options])
Returns middleware that parses all bodies as a `Buffer` and only looks at
requests where the `Content-Type` header matches the `type` option. This
parser supports automatic inflation of `gzip` and `deflate` encodings.
A new `body` object containing the parsed data is populated on the `request`
object after the middleware (i.e. `req.body`). This will be a `Buffer` object
of the body.
#### Options
The `raw` function takes an optional `options` object that may contain any of
the following keys:
##### inflate
When set to `true`, then deflated (compressed) bodies will be inflated; when
`false`, deflated bodies are rejected. Defaults to `true`.
##### limit
Controls the maximum request body size. If this is a number, then the value
specifies the number of bytes; if it is a string, the value is passed to the
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
to `'100kb'`.
##### type
The `type` option is used to determine what media type the middleware will
parse. This option can be a string, array of strings, or a function.
If not a function, `type` option is passed directly to the
[type-is](https://www.npmjs.org/package/type-is#readme) library and this
can be an extension name (like `bin`), a mime type (like
`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
`application/*`). If a function, the `type` option is called as `fn(req)`
and the request is parsed if it returns a truthy value. Defaults to
`application/octet-stream`.
##### verify
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
where `buf` is a `Buffer` of the raw request body and `encoding` is the
encoding of the request. The parsing can be aborted by throwing an error.
### bodyParser.text([options])
Returns middleware that parses all bodies as a string and only looks at
requests where the `Content-Type` header matches the `type` option. This
parser supports automatic inflation of `gzip` and `deflate` encodings.
A new `body` string containing the parsed data is populated on the `request`
object after the middleware (i.e. `req.body`). This will be a string of the
body.
#### Options
The `text` function takes an optional `options` object that may contain any of
the following keys:
##### defaultCharset
Specify the default character set for the text content if the charset is not
specified in the `Content-Type` header of the request. Defaults to `utf-8`.
##### inflate
When set to `true`, then deflated (compressed) bodies will be inflated; when
`false`, deflated bodies are rejected. Defaults to `true`.
##### limit
Controls the maximum request body size. If this is a number, then the value
specifies the number of bytes; if it is a string, the value is passed to the
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
to `'100kb'`.
##### type
The `type` option is used to determine what media type the middleware will
parse. This option can be a string, array of strings, or a function. If not
a function, `type` option is passed directly to the
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
option is called as `fn(req)` and the request is parsed if it returns a
truthy value. Defaults to `text/plain`.
##### verify
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
where `buf` is a `Buffer` of the raw request body and `encoding` is the
encoding of the request. The parsing can be aborted by throwing an error.
### bodyParser.urlencoded([options])
Returns middleware that only parses `urlencoded` bodies and only looks at
requests where the `Content-Type` header matches the `type` option. This
parser accepts only UTF-8 encoding of the body and supports automatic
inflation of `gzip` and `deflate` encodings.
A new `body` object containing the parsed data is populated on the `request`
object after the middleware (i.e. `req.body`). This object will contain
key-value pairs, where the value can be a string or array (when `extended` is
`false`), or any type (when `extended` is `true`).
#### Options
The `urlencoded` function takes an optional `options` object that may contain
any of the following keys:
##### extended
The `extended` option allows to choose between parsing the URL-encoded data
with the `querystring` library (when `false`) or the `qs` library (when
`true`). The "extended" syntax allows for rich objects and arrays to be
encoded into the URL-encoded format, allowing for a JSON-like experience
with URL-encoded. For more information, please
[see the qs library](https://www.npmjs.org/package/qs#readme).
Defaults to `true`, but using the default has been deprecated. Please
research into the difference between `qs` and `querystring` and choose the
appropriate setting.
##### inflate
When set to `true`, then deflated (compressed) bodies will be inflated; when
`false`, deflated bodies are rejected. Defaults to `true`.
##### limit
Controls the maximum request body size. If this is a number, then the value
specifies the number of bytes; if it is a string, the value is passed to the
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
to `'100kb'`.
##### parameterLimit
The `parameterLimit` option controls the maximum number of parameters that
are allowed in the URL-encoded data. If a request contains more parameters
than this value, a 413 will be returned to the client. Defaults to `1000`.
##### type
The `type` option is used to determine what media type the middleware will
parse. This option can be a string, array of strings, or a function. If not
a function, `type` option is passed directly to the
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
be an extension name (like `urlencoded`), a mime type (like
`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
`*/x-www-form-urlencoded`). If a function, the `type` option is called as
`fn(req)` and the request is parsed if it returns a truthy value. Defaults
to `application/x-www-form-urlencoded`.
##### verify
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
where `buf` is a `Buffer` of the raw request body and `encoding` is the
encoding of the request. The parsing can be aborted by throwing an error.
## Errors
The middlewares provided by this module create errors depending on the error
condition during parsing. The errors will typically have a `status`/`statusCode`
property that contains the suggested HTTP response code, an `expose` property
to determine if the `message` property should be displayed to the client, a
`type` property to determine the type of error without matching against the
`message`, and a `body` property containing the read body, if available.
The following are the common errors emitted, though any error can come through
for various reasons.
### content encoding unsupported
This error will occur when the request had a `Content-Encoding` header that
contained an encoding but the "inflation" option was set to `false`. The
`status` property is set to `415`, the `type` property is set to
`'encoding.unsupported'`, and the `charset` property will be set to the
encoding that is unsupported.
### request aborted
This error will occur when the request is aborted by the client before reading
the body has finished. The `received` property will be set to the number of
bytes received before the request was aborted and the `expected` property is
set to the number of expected bytes. The `status` property is set to `400`
and `type` property is set to `'request.aborted'`.
### request entity too large
This error will occur when the request body's size is larger than the "limit"
option. The `limit` property will be set to the byte limit and the `length`
property will be set to the request body's length. The `status` property is
set to `413` and the `type` property is set to `'entity.too.large'`.
### request size did not match content length
This error will occur when the request's length did not match the length from
the `Content-Length` header. This typically occurs when the request is malformed,
typically when the `Content-Length` header was calculated based on characters
instead of bytes. The `status` property is set to `400` and the `type` property
is set to `'request.size.invalid'`.
### stream encoding should not be set
This error will occur when something called the `req.setEncoding` method prior
to this middleware. This module operates directly on bytes only and you cannot
call `req.setEncoding` when using this module. The `status` property is set to
`500` and the `type` property is set to `'stream.encoding.set'`.
### too many parameters
This error will occur when the content of the request exceeds the configured
`parameterLimit` for the `urlencoded` parser. The `status` property is set to
`413` and the `type` property is set to `'parameters.too.many'`.
### unsupported charset "BOGUS"
This error will occur when the request had a charset parameter in the
`Content-Type` header, but the `iconv-lite` module does not support it OR the
parser does not support it. The charset is contained in the message as well
as in the `charset` property. The `status` property is set to `415`, the
`type` property is set to `'charset.unsupported'`, and the `charset` property
is set to the charset that is unsupported.
### unsupported content encoding "bogus"
This error will occur when the request had a `Content-Encoding` header that
contained an unsupported encoding. The encoding is contained in the message
as well as in the `encoding` property. The `status` property is set to `415`,
the `type` property is set to `'encoding.unsupported'`, and the `encoding`
property is set to the encoding that is unsupported.
## Examples
### Express/Connect top-level generic
This example demonstrates adding a generic JSON and URL-encoded parser as a
top-level middleware, which will parse the bodies of all incoming requests.
This is the simplest setup.
```js
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.use(function (req, res) {
res.setHeader('Content-Type', 'text/plain')
res.write('you posted:\n')
res.end(JSON.stringify(req.body, null, 2))
})
```
### Express route-specific
This example demonstrates adding body parsers specifically to the routes that
need them. In general, this is the most recommended way to use body-parser with
Express.
```js
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// create application/json parser
var jsonParser = bodyParser.json()
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })
// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
res.send('welcome, ' + req.body.username)
})
// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
// create user in req.body
})
```
### Change accepted type for parsers
All the parsers accept a `type` option which allows you to change the
`Content-Type` that the middleware will parse.
```js
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse various different custom JSON types as JSON
app.use(bodyParser.json({ type: 'application/*+json' }))
// parse some custom thing into a Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
// parse an HTML body into a string
app.use(bodyParser.text({ type: 'text/html' }))
```
## License
[MIT](LICENSE)
[npm-image]: https://img.shields.io/npm/v/body-parser.svg
[npm-url]: https://npmjs.org/package/body-parser
[travis-image]: https://img.shields.io/travis/expressjs/body-parser/master.svg
[travis-url]: https://travis-ci.org/expressjs/body-parser
[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg
[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg
[downloads-url]: https://npmjs.org/package/body-parser

View File

@ -0,0 +1,157 @@
/*!
* body-parser
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*/
'use strict'
/**
* Module dependencies.
* @private
*/
var deprecate = require('depd')('body-parser')
/**
* Cache of loaded parsers.
* @private
*/
var parsers = Object.create(null)
/**
* @typedef Parsers
* @type {function}
* @property {function} json
* @property {function} raw
* @property {function} text
* @property {function} urlencoded
*/
/**
* Module exports.
* @type {Parsers}
*/
exports = module.exports = deprecate.function(bodyParser,
'bodyParser: use individual json/urlencoded middlewares')
/**
* JSON parser.
* @public
*/
Object.defineProperty(exports, 'json', {
configurable: true,
enumerable: true,
get: createParserGetter('json')
})
/**
* Raw parser.
* @public
*/
Object.defineProperty(exports, 'raw', {
configurable: true,
enumerable: true,
get: createParserGetter('raw')
})
/**
* Text parser.
* @public
*/
Object.defineProperty(exports, 'text', {
configurable: true,
enumerable: true,
get: createParserGetter('text')
})
/**
* URL-encoded parser.
* @public
*/
Object.defineProperty(exports, 'urlencoded', {
configurable: true,
enumerable: true,
get: createParserGetter('urlencoded')
})
/**
* Create a middleware to parse json and urlencoded bodies.
*
* @param {object} [options]
* @return {function}
* @deprecated
* @public
*/
function bodyParser (options) {
var opts = {}
// exclude type option
if (options) {
for (var prop in options) {
if (prop !== 'type') {
opts[prop] = options[prop]
}
}
}
var _urlencoded = exports.urlencoded(opts)
var _json = exports.json(opts)
return function bodyParser (req, res, next) {
_json(req, res, function (err) {
if (err) return next(err)
_urlencoded(req, res, next)
})
}
}
/**
* Create a getter for loading a parser.
* @private
*/
function createParserGetter (name) {
return function get () {
return loadParser(name)
}
}
/**
* Load a parser module.
* @private
*/
function loadParser (parserName) {
var parser = parsers[parserName]
if (parser !== undefined) {
return parser
}
// this uses a switch for static require analysis
switch (parserName) {
case 'json':
parser = require('./lib/types/json')
break
case 'raw':
parser = require('./lib/types/raw')
break
case 'text':
parser = require('./lib/types/text')
break
case 'urlencoded':
parser = require('./lib/types/urlencoded')
break
}
// store to prevent invoking require()
return (parsers[parserName] = parser)
}

View File

@ -0,0 +1,181 @@
/*!
* body-parser
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*/
'use strict'
/**
* Module dependencies.
* @private
*/
var createError = require('http-errors')
var getBody = require('raw-body')
var iconv = require('iconv-lite')
var onFinished = require('on-finished')
var zlib = require('zlib')
/**
* Module exports.
*/
module.exports = read
/**
* Read a request into a buffer and parse.
*
* @param {object} req
* @param {object} res
* @param {function} next
* @param {function} parse
* @param {function} debug
* @param {object} options
* @private
*/
function read (req, res, next, parse, debug, options) {
var length
var opts = options
var stream
// flag as parsed
req._body = true
// read options
var encoding = opts.encoding !== null
? opts.encoding
: null
var verify = opts.verify
try {
// get the content stream
stream = contentstream(req, debug, opts.inflate)
length = stream.length
stream.length = undefined
} catch (err) {
return next(err)
}
// set raw-body options
opts.length = length
opts.encoding = verify
? null
: encoding
// assert charset is supported
if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
charset: encoding.toLowerCase(),
type: 'charset.unsupported'
}))
}
// read body
debug('read body')
getBody(stream, opts, function (error, body) {
if (error) {
var _error
if (error.type === 'encoding.unsupported') {
// echo back charset
_error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
charset: encoding.toLowerCase(),
type: 'charset.unsupported'
})
} else {
// set status code on error
_error = createError(400, error)
}
// read off entire request
stream.resume()
onFinished(req, function onfinished () {
next(createError(400, _error))
})
return
}
// verify
if (verify) {
try {
debug('verify body')
verify(req, res, body, encoding)
} catch (err) {
next(createError(403, err, {
body: body,
type: err.type || 'entity.verify.failed'
}))
return
}
}
// parse
var str = body
try {
debug('parse body')
str = typeof body !== 'string' && encoding !== null
? iconv.decode(body, encoding)
: body
req.body = parse(str)
} catch (err) {
next(createError(400, err, {
body: str,
type: err.type || 'entity.parse.failed'
}))
return
}
next()
})
}
/**
* Get the content stream of the request.
*
* @param {object} req
* @param {function} debug
* @param {boolean} [inflate=true]
* @return {object}
* @api private
*/
function contentstream (req, debug, inflate) {
var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
var length = req.headers['content-length']
var stream
debug('content-encoding "%s"', encoding)
if (inflate === false && encoding !== 'identity') {
throw createError(415, 'content encoding unsupported', {
encoding: encoding,
type: 'encoding.unsupported'
})
}
switch (encoding) {
case 'deflate':
stream = zlib.createInflate()
debug('inflate body')
req.pipe(stream)
break
case 'gzip':
stream = zlib.createGunzip()
debug('gunzip body')
req.pipe(stream)
break
case 'identity':
stream = req
stream.length = length
break
default:
throw createError(415, 'unsupported content encoding "' + encoding + '"', {
encoding: encoding,
type: 'encoding.unsupported'
})
}
return stream
}

View File

@ -0,0 +1,230 @@
/*!
* body-parser
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*/
'use strict'
/**
* Module dependencies.
* @private
*/
var bytes = require('bytes')
var contentType = require('content-type')
var createError = require('http-errors')
var debug = require('debug')('body-parser:json')
var read = require('../read')
var typeis = require('type-is')
/**
* Module exports.
*/
module.exports = json
/**
* RegExp to match the first non-space in a string.
*
* Allowed whitespace is defined in RFC 7159:
*
* ws = *(
* %x20 / ; Space
* %x09 / ; Horizontal tab
* %x0A / ; Line feed or New line
* %x0D ) ; Carriage return
*/
var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex
/**
* Create a middleware to parse JSON bodies.
*
* @param {object} [options]
* @return {function}
* @public
*/
function json (options) {
var opts = options || {}
var limit = typeof opts.limit !== 'number'
? bytes.parse(opts.limit || '100kb')
: opts.limit
var inflate = opts.inflate !== false
var reviver = opts.reviver
var strict = opts.strict !== false
var type = opts.type || 'application/json'
var verify = opts.verify || false
if (verify !== false && typeof verify !== 'function') {
throw new TypeError('option verify must be function')
}
// create the appropriate type checking function
var shouldParse = typeof type !== 'function'
? typeChecker(type)
: type
function parse (body) {
if (body.length === 0) {
// special-case empty json body, as it's a common client-side mistake
// TODO: maybe make this configurable or part of "strict" option
return {}
}
if (strict) {
var first = firstchar(body)
if (first !== '{' && first !== '[') {
debug('strict violation')
throw createStrictSyntaxError(body, first)
}
}
try {
debug('parse json')
return JSON.parse(body, reviver)
} catch (e) {
throw normalizeJsonSyntaxError(e, {
message: e.message,
stack: e.stack
})
}
}
return function jsonParser (req, res, next) {
if (req._body) {
debug('body already parsed')
next()
return
}
req.body = req.body || {}
// skip requests without bodies
if (!typeis.hasBody(req)) {
debug('skip empty body')
next()
return
}
debug('content-type %j', req.headers['content-type'])
// determine if request should be parsed
if (!shouldParse(req)) {
debug('skip parsing')
next()
return
}
// assert charset per RFC 7159 sec 8.1
var charset = getCharset(req) || 'utf-8'
if (charset.substr(0, 4) !== 'utf-') {
debug('invalid charset')
next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
charset: charset,
type: 'charset.unsupported'
}))
return
}
// read
read(req, res, next, parse, debug, {
encoding: charset,
inflate: inflate,
limit: limit,
verify: verify
})
}
}
/**
* Create strict violation syntax error matching native error.
*
* @param {string} str
* @param {string} char
* @return {Error}
* @private
*/
function createStrictSyntaxError (str, char) {
var index = str.indexOf(char)
var partial = str.substring(0, index) + '#'
try {
JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')
} catch (e) {
return normalizeJsonSyntaxError(e, {
message: e.message.replace('#', char),
stack: e.stack
})
}
}
/**
* Get the first non-whitespace character in a string.
*
* @param {string} str
* @return {function}
* @private
*/
function firstchar (str) {
return FIRST_CHAR_REGEXP.exec(str)[1]
}
/**
* Get the charset of a request.
*
* @param {object} req
* @api private
*/
function getCharset (req) {
try {
return (contentType.parse(req).parameters.charset || '').toLowerCase()
} catch (e) {
return undefined
}
}
/**
* Normalize a SyntaxError for JSON.parse.
*
* @param {SyntaxError} error
* @param {object} obj
* @return {SyntaxError}
*/
function normalizeJsonSyntaxError (error, obj) {
var keys = Object.getOwnPropertyNames(error)
for (var i = 0; i < keys.length; i++) {
var key = keys[i]
if (key !== 'stack' && key !== 'message') {
delete error[key]
}
}
// replace stack before message for Node.js 0.10 and below
error.stack = obj.stack.replace(error.message, obj.message)
error.message = obj.message
return error
}
/**
* Get the simple type checker.
*
* @param {string} type
* @return {function}
*/
function typeChecker (type) {
return function checkType (req) {
return Boolean(typeis(req, type))
}
}

View File

@ -0,0 +1,101 @@
/*!
* body-parser
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*/
'use strict'
/**
* Module dependencies.
*/
var bytes = require('bytes')
var debug = require('debug')('body-parser:raw')
var read = require('../read')
var typeis = require('type-is')
/**
* Module exports.
*/
module.exports = raw
/**
* Create a middleware to parse raw bodies.
*
* @param {object} [options]
* @return {function}
* @api public
*/
function raw (options) {
var opts = options || {}
var inflate = opts.inflate !== false
var limit = typeof opts.limit !== 'number'
? bytes.parse(opts.limit || '100kb')
: opts.limit
var type = opts.type || 'application/octet-stream'
var verify = opts.verify || false
if (verify !== false && typeof verify !== 'function') {
throw new TypeError('option verify must be function')
}
// create the appropriate type checking function
var shouldParse = typeof type !== 'function'
? typeChecker(type)
: type
function parse (buf) {
return buf
}
return function rawParser (req, res, next) {
if (req._body) {
debug('body already parsed')
next()
return
}
req.body = req.body || {}
// skip requests without bodies
if (!typeis.hasBody(req)) {
debug('skip empty body')
next()
return
}
debug('content-type %j', req.headers['content-type'])
// determine if request should be parsed
if (!shouldParse(req)) {
debug('skip parsing')
next()
return
}
// read
read(req, res, next, parse, debug, {
encoding: null,
inflate: inflate,
limit: limit,
verify: verify
})
}
}
/**
* Get the simple type checker.
*
* @param {string} type
* @return {function}
*/
function typeChecker (type) {
return function checkType (req) {
return Boolean(typeis(req, type))
}
}

Some files were not shown because too many files have changed in this diff Show More