TSUMUGI 1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- TSUMUGI/annotator.py +103 -0
- TSUMUGI/argparser.py +599 -0
- TSUMUGI/core.py +185 -0
- TSUMUGI/data/impc_phenodigm.csv +3406 -0
- TSUMUGI/data/mp.obo +143993 -0
- TSUMUGI/filterer.py +36 -0
- TSUMUGI/formatter.py +122 -0
- TSUMUGI/genewise_annotation_builder.py +94 -0
- TSUMUGI/io_handler.py +189 -0
- TSUMUGI/main.py +300 -0
- TSUMUGI/network_constructor.py +603 -0
- TSUMUGI/ontology_handler.py +62 -0
- TSUMUGI/pairwise_similarity_builder.py +66 -0
- TSUMUGI/report_generator.py +122 -0
- TSUMUGI/similarity_calculator.py +498 -0
- TSUMUGI/subcommands/count_filterer.py +47 -0
- TSUMUGI/subcommands/genes_filterer.py +89 -0
- TSUMUGI/subcommands/graphml_builder.py +158 -0
- TSUMUGI/subcommands/life_stage_filterer.py +48 -0
- TSUMUGI/subcommands/mp_filterer.py +142 -0
- TSUMUGI/subcommands/score_filterer.py +22 -0
- TSUMUGI/subcommands/sex_filterer.py +48 -0
- TSUMUGI/subcommands/webapp_builder.py +358 -0
- TSUMUGI/subcommands/zygosity_filterer.py +48 -0
- TSUMUGI/validator.py +65 -0
- TSUMUGI/web/app/css/app.css +1129 -0
- TSUMUGI/web/app/genelist/network_genelist.html +339 -0
- TSUMUGI/web/app/genelist/network_genelist.js +421 -0
- TSUMUGI/web/app/js/data/dataLoader.js +41 -0
- TSUMUGI/web/app/js/export/graphExporter.js +214 -0
- TSUMUGI/web/app/js/graph/centrality.js +495 -0
- TSUMUGI/web/app/js/graph/components.js +30 -0
- TSUMUGI/web/app/js/graph/filters.js +158 -0
- TSUMUGI/web/app/js/graph/highlighter.js +52 -0
- TSUMUGI/web/app/js/graph/layoutController.js +454 -0
- TSUMUGI/web/app/js/graph/valueScaler.js +43 -0
- TSUMUGI/web/app/js/search/geneSearcher.js +93 -0
- TSUMUGI/web/app/js/search/phenotypeSearcher.js +292 -0
- TSUMUGI/web/app/js/ui/dynamicFontSize.js +30 -0
- TSUMUGI/web/app/js/ui/mobilePanel.js +77 -0
- TSUMUGI/web/app/js/ui/slider.js +22 -0
- TSUMUGI/web/app/js/ui/tooltips.js +514 -0
- TSUMUGI/web/app/js/viewer/pageSetup.js +217 -0
- TSUMUGI/web/app/viewer.html +515 -0
- TSUMUGI/web/app/viewer.js +1593 -0
- TSUMUGI/web/css/sanitize.css +363 -0
- TSUMUGI/web/css/top.css +391 -0
- TSUMUGI/web/image/tsumugi-favicon.ico +0 -0
- TSUMUGI/web/image/tsumugi-icon.png +0 -0
- TSUMUGI/web/image/tsumugi-logo.png +0 -0
- TSUMUGI/web/image/tsumugi-logo.svg +69 -0
- TSUMUGI/web/js/genelist_formatter.js +123 -0
- TSUMUGI/web/js/top.js +338 -0
- TSUMUGI/web/open_webapp_linux.sh +25 -0
- TSUMUGI/web/open_webapp_mac.command +25 -0
- TSUMUGI/web/open_webapp_windows.bat +37 -0
- TSUMUGI/web/serve_index.py +110 -0
- TSUMUGI/web/template/template_index.html +197 -0
- TSUMUGI/web_deployer.py +150 -0
- tsumugi-1.0.1.dist-info/METADATA +504 -0
- tsumugi-1.0.1.dist-info/RECORD +64 -0
- tsumugi-1.0.1.dist-info/WHEEL +4 -0
- tsumugi-1.0.1.dist-info/entry_points.txt +3 -0
- tsumugi-1.0.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
|
|
8
|
+
<title>TSUMUGI Viewer</title>
|
|
9
|
+
<link rel="icon" href="../image/tsumugi-favicon.ico" />
|
|
10
|
+
|
|
11
|
+
<!-- ============================= -->
|
|
12
|
+
<!-- JS -->
|
|
13
|
+
<!-- ============================= -->
|
|
14
|
+
<!-- noUiSlider -->
|
|
15
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/15.8.1/nouislider.min.css" />
|
|
16
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/15.8.1/nouislider.min.js" defer></script>
|
|
17
|
+
|
|
18
|
+
<!-- pako for reading gzip JSON -->
|
|
19
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako.min.js" defer></script>
|
|
20
|
+
|
|
21
|
+
<!-- Cytoscape -->
|
|
22
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.30.4/cytoscape.min.js" defer></script>
|
|
23
|
+
<script src="https://cdn.jsdelivr.net/npm/cytoscape-svg@0.4.0/cytoscape-svg.min.js" defer></script>
|
|
24
|
+
|
|
25
|
+
<!-- Custom JS -->
|
|
26
|
+
<script type="module" src="./viewer.js"></script>
|
|
27
|
+
|
|
28
|
+
<!-- ============================= -->
|
|
29
|
+
<!-- CSS -->
|
|
30
|
+
<!-- ============================= -->
|
|
31
|
+
<link rel="stylesheet" href="https://larc-tsukuba.github.io/tsumugi/css/sanitize.css" />
|
|
32
|
+
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet" />
|
|
33
|
+
<link href="https://use.fontawesome.com/releases/v6.6.0/css/all.css" rel="stylesheet" />
|
|
34
|
+
<link rel="stylesheet" href="./css/app.css" />
|
|
35
|
+
</head>
|
|
36
|
+
|
|
37
|
+
<body>
|
|
38
|
+
<header class="header-container">
|
|
39
|
+
<button id="menu-toggle" class="menu-toggle-icon">
|
|
40
|
+
<i class="fa-solid fa-sliders"></i>
|
|
41
|
+
</button>
|
|
42
|
+
<h1>
|
|
43
|
+
Phenotype-Similarity Gene Network of <br />
|
|
44
|
+
<a id="page-title-link" href="#" target="_blank" rel="noreferrer"></a>
|
|
45
|
+
</h1>
|
|
46
|
+
</header>
|
|
47
|
+
|
|
48
|
+
<div class="body-container">
|
|
49
|
+
<button id="toggle-left-panel" class="panel-toggle-button left-panel-toggle" aria-label="Hide left panel">
|
|
50
|
+
<i class="fa-solid fa-chevron-left"></i>
|
|
51
|
+
</button>
|
|
52
|
+
<button id="toggle-right-panel" class="panel-toggle-button right-panel-toggle" aria-label="Hide right panel">
|
|
53
|
+
<i class="fa-solid fa-chevron-right"></i>
|
|
54
|
+
</button>
|
|
55
|
+
<div class="left-control-panel-container">
|
|
56
|
+
<button id="close-panel" class="close-button">✕</button>
|
|
57
|
+
|
|
58
|
+
<!-- ===================================== -->
|
|
59
|
+
<!-- Slider for phenotype metrics -->
|
|
60
|
+
<!-- ===================================== -->
|
|
61
|
+
|
|
62
|
+
<!-- Slider for phenotypes similarity -->
|
|
63
|
+
<div class="panel-section">
|
|
64
|
+
<div class="panel-title">
|
|
65
|
+
<i class="fa-solid fa-sliders"></i>
|
|
66
|
+
Phenotypic metrics
|
|
67
|
+
<div class="info-tooltip-container">
|
|
68
|
+
<div class="info-tooltip-icon">i</div>
|
|
69
|
+
<div class="info-tooltip-content">Phenotype severity is not displayed when phenotype evaluation
|
|
70
|
+
is
|
|
71
|
+
binary (presence/absence).</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div class="slider-container">
|
|
76
|
+
<div class="label-row">
|
|
77
|
+
<span class="control-label">Phenotypes similarity:</span>
|
|
78
|
+
</div>
|
|
79
|
+
<div class="input-row">
|
|
80
|
+
<div class="numeric-inputs" aria-label="Phenotypes similarity range">
|
|
81
|
+
<input type="number" id="edge-size-min-input" class="range-input" min="1" max="100" step="1"
|
|
82
|
+
aria-label="Phenotypes similarity minimum" />
|
|
83
|
+
<span class="range-separator">-</span>
|
|
84
|
+
<input type="number" id="edge-size-max-input" class="range-input" min="1" max="100" step="1"
|
|
85
|
+
aria-label="Phenotypes similarity maximum" />
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="slider-element" id="filter-edge-slider"></div>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<div class="slider-container phenotype-only" id="phenotype-severity-controls">
|
|
92
|
+
<div class="label-row">
|
|
93
|
+
<span class="control-label">Phenotype severity:</span>
|
|
94
|
+
</div>
|
|
95
|
+
<div class="input-row">
|
|
96
|
+
<div class="numeric-inputs" aria-label="Phenotype severity range">
|
|
97
|
+
<input type="number" id="node-color-min-input" class="range-input" min="1" max="100" step="1"
|
|
98
|
+
aria-label="Phenotype severity minimum" />
|
|
99
|
+
<span class="range-separator">-</span>
|
|
100
|
+
<input type="number" id="node-color-max-input" class="range-input" min="1" max="100" step="1"
|
|
101
|
+
aria-label="Phenotype severity maximum" />
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
<div class="slider-element" id="filter-node-slider"></div>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<!-- ===================================== -->
|
|
110
|
+
<!-- Filter of Genotype / Sex / Life-stage -->
|
|
111
|
+
<!-- ===================================== -->
|
|
112
|
+
<div class="panel-section">
|
|
113
|
+
<div class="panel-title">
|
|
114
|
+
<i class="fa-solid fa-dna"></i>
|
|
115
|
+
Biological annotations
|
|
116
|
+
</div>
|
|
117
|
+
|
|
118
|
+
<div class="boxed-section">
|
|
119
|
+
<span>Genotype</span>
|
|
120
|
+
<form id="genotype-filter-form" class="two-column-options">
|
|
121
|
+
<div class="option-column">
|
|
122
|
+
<div class="round-checkbox">
|
|
123
|
+
<input type="checkbox" id="genotype-all" value="All" checked />
|
|
124
|
+
<label for="genotype-all">All</label>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="round-checkbox">
|
|
127
|
+
<input type="checkbox" id="homo" value="Homo" />
|
|
128
|
+
<label for="homo">Homo</label>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
<div class="option-column">
|
|
132
|
+
<div class="round-checkbox">
|
|
133
|
+
<input type="checkbox" id="hetero" value="Hetero" />
|
|
134
|
+
<label for="hetero">Hetero</label>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="round-checkbox">
|
|
137
|
+
<input type="checkbox" id="hemi" value="Hemi" />
|
|
138
|
+
<label for="hemi">Hemi</label>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</form>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<div class="boxed-section">
|
|
145
|
+
<span>Sex</span>
|
|
146
|
+
<form id="sex-filter-form" class="two-column-options">
|
|
147
|
+
<div class="option-column">
|
|
148
|
+
<div class="round-checkbox">
|
|
149
|
+
<input type="checkbox" id="sex-all" value="All" checked />
|
|
150
|
+
<label for="sex-all">All</label>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="option-column">
|
|
154
|
+
<div class="round-checkbox">
|
|
155
|
+
<input type="checkbox" id="female" value="Female" />
|
|
156
|
+
<label for="female">Female</label>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="round-checkbox">
|
|
159
|
+
<input type="checkbox" id="male" value="Male" />
|
|
160
|
+
<label for="male">Male</label>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</form>
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
<div class="boxed-section">
|
|
167
|
+
<span>Life stage
|
|
168
|
+
<div class="info-tooltip-container">
|
|
169
|
+
<div class="info-tooltip-icon">i</div>
|
|
170
|
+
<div class="info-tooltip-content">Early: -16w, Interval: 17-48w, Late: 49w-</div>
|
|
171
|
+
</div>
|
|
172
|
+
</span>
|
|
173
|
+
<form id="lifestage-filter-form" class="two-column-options">
|
|
174
|
+
<div class="option-column">
|
|
175
|
+
<div class="round-checkbox">
|
|
176
|
+
<input type="checkbox" id="lifestage-all" value="All" checked />
|
|
177
|
+
<label for="lifestage-all">All</label>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="round-checkbox">
|
|
180
|
+
<input type="checkbox" id="embryo" value="Embryo" />
|
|
181
|
+
<label for="embryo">Embryo</label>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
<div class="option-column">
|
|
185
|
+
<div class="round-checkbox">
|
|
186
|
+
<input type="checkbox" id="early" value="Early" />
|
|
187
|
+
<label for="early">Early</label>
|
|
188
|
+
</div>
|
|
189
|
+
<div class="round-checkbox">
|
|
190
|
+
<input type="checkbox" id="interval" value="Interval" />
|
|
191
|
+
<label for="interval">Interval</label>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="round-checkbox">
|
|
194
|
+
<input type="checkbox" id="late" value="Late" />
|
|
195
|
+
<label for="late">Late</label>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
</form>
|
|
199
|
+
</div>
|
|
200
|
+
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
<div class="cy-container">
|
|
206
|
+
<div class="cy"></div>
|
|
207
|
+
<div class="cy-controls">
|
|
208
|
+
<div class="control-group">
|
|
209
|
+
<button id="recenter-button" class="recenter-button" aria-label="Recenter network">
|
|
210
|
+
<i class="fa-solid fa-crosshairs"></i>
|
|
211
|
+
</button>
|
|
212
|
+
<div class="info-tooltip-container">
|
|
213
|
+
<div class="info-tooltip-icon" aria-label="Tooltip: recenter network">i</div>
|
|
214
|
+
<div class="info-tooltip-content">Recenter and fit the current network in view.</div>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
<div class="control-group">
|
|
218
|
+
<button id="arrange-modules-button" class="recenter-button arrange-modules-button"
|
|
219
|
+
aria-label="Arrange modules to avoid overlap">
|
|
220
|
+
<i class="fa-solid fa-object-group"></i>
|
|
221
|
+
</button>
|
|
222
|
+
<div class="info-tooltip-container">
|
|
223
|
+
<div class="info-tooltip-icon" aria-label="Tooltip: arrange modules">i</div>
|
|
224
|
+
<div class="info-tooltip-content">Arrange modules into a grid to avoid overlap and fit on
|
|
225
|
+
screen.</div>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
<div id="no-nodes-message" class="no-nodes-message" style="display: none;">No Gene Network Found</div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div class="right-control-panel-container">
|
|
233
|
+
<div class="panel-section">
|
|
234
|
+
<div class="panel-title">
|
|
235
|
+
<i class="fa-regular fa-lightbulb"></i>
|
|
236
|
+
Highlight
|
|
237
|
+
</div>
|
|
238
|
+
<div class="boxed-section align-center">
|
|
239
|
+
<span> Markup </span>
|
|
240
|
+
|
|
241
|
+
<!-- Human disease -->
|
|
242
|
+
<form id="human-disease-filter-form">
|
|
243
|
+
<div class="round-checkbox">
|
|
244
|
+
<input type="checkbox" id="disease" value="Disease" />
|
|
245
|
+
<label for="disease">Human Disease</label>
|
|
246
|
+
<div class="info-tooltip-container">
|
|
247
|
+
<div class="info-tooltip-icon">i</div>
|
|
248
|
+
<div class="info-tooltip-content">Human Disease annotations use <a
|
|
249
|
+
href="https://diseasemodels.research.its.qmul.ac.uk/" target="_blank">IMPC
|
|
250
|
+
Disease
|
|
251
|
+
Models</a>. Genes associated with human diseases are
|
|
252
|
+
highlighted with a red border.</div>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
</form>
|
|
256
|
+
|
|
257
|
+
<!-- Phenotype search -->
|
|
258
|
+
<div class="search-container">
|
|
259
|
+
<i class="fa-solid fa-magnifying-glass"></i>
|
|
260
|
+
<input type="text" id="phenotype-search" placeholder="Phenotypes" />
|
|
261
|
+
<ul id="phenotype-suggestions" class="suggestions" hidden></ul>
|
|
262
|
+
<div class="info-tooltip-container">
|
|
263
|
+
<div class="info-tooltip-icon">i</div>
|
|
264
|
+
<div class="info-tooltip-content">
|
|
265
|
+
Search for phenotypes to highlight. Genes with matching phenotypes are highlighted with
|
|
266
|
+
a
|
|
267
|
+
blue border.
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
<div id="selected-phenotypes" class="selected-phenotypes"></div>
|
|
272
|
+
|
|
273
|
+
<!-- Gene search -->
|
|
274
|
+
<div class="search-container">
|
|
275
|
+
<i class="fa-solid fa-magnifying-glass"></i>
|
|
276
|
+
<input type="text" id="gene-search" placeholder="Gene Symbol">
|
|
277
|
+
<ul id="suggestions" class="suggestions" hidden></ul>
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
|
|
281
|
+
<!-- ===================================== -->
|
|
282
|
+
<!-- Centrality controls -->
|
|
283
|
+
<!-- ===================================== -->
|
|
284
|
+
<div class="boxed-section">
|
|
285
|
+
<span>Centrality
|
|
286
|
+
<div class="info-tooltip-container">
|
|
287
|
+
<div class="info-tooltip-icon">i</div>
|
|
288
|
+
<div class="info-tooltip-content">
|
|
289
|
+
'Normalized' options divide the centrality score by the number of phenotypes
|
|
290
|
+
observed in KO mice
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
</span>
|
|
294
|
+
|
|
295
|
+
<div class="slider-container">
|
|
296
|
+
<div class="label-row">
|
|
297
|
+
<label for="centrality-type-dropdown" class="control-label">
|
|
298
|
+
</label>
|
|
299
|
+
</div>
|
|
300
|
+
<div>
|
|
301
|
+
<select class="exporter" id="centrality-type-dropdown"
|
|
302
|
+
onchange="handleCentralityTypeChange(this.value)">
|
|
303
|
+
<option value="none">None</option>
|
|
304
|
+
<option value="degree">Degree</option>
|
|
305
|
+
<option value="betweenness">Betweenness</option>
|
|
306
|
+
<option value="normalized_degree" selected>Normalized Degree</option>
|
|
307
|
+
<option value="normalized_betweenness">Normalized Betweenness</option>
|
|
308
|
+
</select>
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
|
|
312
|
+
<div class="slider-container hidden" id="centrality-slider-container">
|
|
313
|
+
<div class="label-row">
|
|
314
|
+
<span class="control-label">Scale:</span>
|
|
315
|
+
<input type="number" id="centrality-scale-input" class="range-input" min="0" max="100"
|
|
316
|
+
step="1" aria-label="Centrality scale" />
|
|
317
|
+
</div>
|
|
318
|
+
<div class="slider-element" id="centrality-scale-slider"></div>
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
<!-- ===================================== -->
|
|
323
|
+
<!-- Cytoscape's visualization setting -->
|
|
324
|
+
<!-- ===================================== -->
|
|
325
|
+
<div class="panel-section">
|
|
326
|
+
<div class="panel-title">
|
|
327
|
+
<i class="fa-solid fa-chart-simple"></i>
|
|
328
|
+
Visualization
|
|
329
|
+
</div>
|
|
330
|
+
<div class="boxed-section">
|
|
331
|
+
<span>Layout</span>
|
|
332
|
+
|
|
333
|
+
<div class="slider-container">
|
|
334
|
+
<div class="label-row">
|
|
335
|
+
<label for="layout-dropdown" class="control-label"></label>
|
|
336
|
+
</div>
|
|
337
|
+
<div>
|
|
338
|
+
<select class="exporter" id="layout-dropdown">
|
|
339
|
+
<option value="cose" selected>Cose</option>
|
|
340
|
+
<option value="grid">Grid</option>
|
|
341
|
+
<option value="random">Random</option>
|
|
342
|
+
<option value="concentric">Concentric</option>
|
|
343
|
+
<option value="breadthfirst">Breadthfirst</option>
|
|
344
|
+
</select>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
348
|
+
|
|
349
|
+
<div class="boxed-section" id="node-repulsion-box">
|
|
350
|
+
<span>Node repulsion</span>
|
|
351
|
+
<div class="slider-container" id="node-repulsion-container">
|
|
352
|
+
<div class="label-row">
|
|
353
|
+
<span class="control-label">Scale:</span>
|
|
354
|
+
<input type="number" id="node-repulsion-input" class="range-input" min="1" max="10" step="1"
|
|
355
|
+
aria-label="Node repulsion scale" />
|
|
356
|
+
</div>
|
|
357
|
+
<div class="slider-element" id="nodeRepulsion-slider"></div>
|
|
358
|
+
</div>
|
|
359
|
+
</div>
|
|
360
|
+
|
|
361
|
+
<div class="boxed-section">
|
|
362
|
+
<span>Size & Width</span>
|
|
363
|
+
<div class="slider-container">
|
|
364
|
+
<div class="label-row">
|
|
365
|
+
<span class="control-label">Font size:</span>
|
|
366
|
+
<input type="number" id="font-size-input" class="range-input" min="1" max="50" step="1"
|
|
367
|
+
aria-label="Font size" />
|
|
368
|
+
</div>
|
|
369
|
+
<div class="slider-element" id="font-size-slider"></div>
|
|
370
|
+
</div>
|
|
371
|
+
|
|
372
|
+
<div class="slider-container">
|
|
373
|
+
<div class="label-row">
|
|
374
|
+
<span class="control-label">Line width:</span>
|
|
375
|
+
<input type="number" id="edge-width-input" class="range-input" min="1" max="10" step="1"
|
|
376
|
+
aria-label="Line width" />
|
|
377
|
+
</div>
|
|
378
|
+
<div class="slider-element" id="edge-width-slider"></div>
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
|
|
385
|
+
<!-- ===================================== -->
|
|
386
|
+
<!-- SVG for phenotypes similarity -->
|
|
387
|
+
<!-- ===================================== -->
|
|
388
|
+
<div class="phenotype-scale-container">
|
|
389
|
+
<div class="phenotype-scale-wrapper">
|
|
390
|
+
<div class="edge-scale-container">
|
|
391
|
+
<svg viewBox="0 0 400 30" preserveAspectRatio="xMidYMid meet">
|
|
392
|
+
<polygon points="0,15 400,0 400,30" style="fill: gray; stroke: none" />
|
|
393
|
+
<text x="0" y="25" font-family="Arial" font-size="12px" fill="#333">Few</text>
|
|
394
|
+
<text x="370" y="25" font-family="Arial" font-size="12px" fill="#FFF">Many</text>
|
|
395
|
+
</svg>
|
|
396
|
+
<p class="scale-label">Similarity of accessory phenotypes</p>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<div class="color-scale-container phenotype-only" id="phenotype-color-scale">
|
|
400
|
+
<svg viewBox="0 0 400 30" preserveAspectRatio="xMidYMid meet">
|
|
401
|
+
<defs>
|
|
402
|
+
<linearGradient id="colorGradient" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
403
|
+
<stop offset="0%" style="stop-color: rgb(248, 229, 140); stop-opacity: 1" />
|
|
404
|
+
<stop offset="100%" style="stop-color: rgb(255, 140, 0); stop-opacity: 1" />
|
|
405
|
+
</linearGradient>
|
|
406
|
+
</defs>
|
|
407
|
+
<rect x="0" y="0" width="400" height="30" fill="url(#colorGradient)" />
|
|
408
|
+
<text x="0" y="25" font-family="Arial" font-size="12px" fill="#000">Low</text>
|
|
409
|
+
<text x="370" y="25" font-family="Arial" font-size="12px" fill="#000">High</text>
|
|
410
|
+
</svg>
|
|
411
|
+
<p class="scale-label">Severity of target phenotype</p>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
</div>
|
|
415
|
+
<!-- ===================================== -->
|
|
416
|
+
<!-- Export (Mobile) -->
|
|
417
|
+
<!-- ===================================== -->
|
|
418
|
+
<div class="mobile-exporter">
|
|
419
|
+
<button class="exporter" id="export-png-mobile">
|
|
420
|
+
<i class="fa-regular fa-image"></i>
|
|
421
|
+
PNG
|
|
422
|
+
</button>
|
|
423
|
+
<button class="exporter" id="export-jpg-mobile">
|
|
424
|
+
<i class="fa-regular fa-image"></i>
|
|
425
|
+
JPG
|
|
426
|
+
</button>
|
|
427
|
+
<button class="exporter" id="export-svg-mobile">
|
|
428
|
+
<i class="fa-solid fa-draw-polygon"></i>
|
|
429
|
+
SVG
|
|
430
|
+
</button>
|
|
431
|
+
<button class="exporter" id="export-csv-mobile">
|
|
432
|
+
<i class="fa-regular fa-file-lines"></i>
|
|
433
|
+
CSV
|
|
434
|
+
</button>
|
|
435
|
+
<button class="exporter" id="export-graphml-mobile">
|
|
436
|
+
<i class="fa-solid fa-project-diagram"></i>
|
|
437
|
+
GraphML
|
|
438
|
+
</button>
|
|
439
|
+
</div>
|
|
440
|
+
|
|
441
|
+
<!-- ===================================== -->
|
|
442
|
+
<!-- Export (Desktop only) -->
|
|
443
|
+
<!-- ===================================== -->
|
|
444
|
+
<div class="panel-section export-desktop">
|
|
445
|
+
<div class="panel-title">
|
|
446
|
+
<i class="fa-solid fa-download"></i>
|
|
447
|
+
Export
|
|
448
|
+
<div class="info-tooltip-container">
|
|
449
|
+
<div class="info-tooltip-icon">i</div>
|
|
450
|
+
<div class="info-tooltip-content">
|
|
451
|
+
GraphML can be used for visualization in other network analysis tools.
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
<div class="exporter-group">
|
|
456
|
+
<button class="exporter" id="export-png">
|
|
457
|
+
<i class="fa-regular fa-image"></i>
|
|
458
|
+
PNG
|
|
459
|
+
</button>
|
|
460
|
+
<button class="exporter" id="export-jpg">
|
|
461
|
+
<i class="fa-regular fa-image"></i>
|
|
462
|
+
JPG
|
|
463
|
+
</button>
|
|
464
|
+
<button class="exporter" id="export-svg">
|
|
465
|
+
<i class="fa-solid fa-draw-polygon"></i>
|
|
466
|
+
SVG
|
|
467
|
+
</button>
|
|
468
|
+
<button class="exporter" id="export-csv">
|
|
469
|
+
<i class="fa-regular fa-file-lines"></i>
|
|
470
|
+
CSV
|
|
471
|
+
</button>
|
|
472
|
+
<button class="exporter" id="export-graphml">
|
|
473
|
+
<i class="fa-solid fa-project-diagram"></i>
|
|
474
|
+
GraphML
|
|
475
|
+
</button>
|
|
476
|
+
</div>
|
|
477
|
+
</div>
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
<!-- ======================================== -->
|
|
481
|
+
<!-- Footer -->
|
|
482
|
+
<!-- ======================================== -->
|
|
483
|
+
<footer>
|
|
484
|
+
|
|
485
|
+
<!-- ======================================== -->
|
|
486
|
+
<!-- Resources Section -->
|
|
487
|
+
<!-- ======================================== -->
|
|
488
|
+
<div class="resources-container">
|
|
489
|
+
<div class="resource-section">
|
|
490
|
+
<div class="resource-buttons">
|
|
491
|
+
<a class="resource-btn" href="https://github.com/akikuno/TSUMUGI-dev/blob/main/README.md"
|
|
492
|
+
target="_blank">
|
|
493
|
+
<i class="fa-regular fa-file-lines"></i> Documentation
|
|
494
|
+
</a>
|
|
495
|
+
<a class="resource-btn" href="https://forms.gle/TpLeatthUBLN57PU6" target="_blank">
|
|
496
|
+
<i class="fa-regular fa-comment-dots"></i> Contact
|
|
497
|
+
</a>
|
|
498
|
+
</div>
|
|
499
|
+
</div>
|
|
500
|
+
|
|
501
|
+
</div>
|
|
502
|
+
|
|
503
|
+
<p>TSUMUGI version <span id="tsumugi-version">-</span></p>
|
|
504
|
+
<!-- <p><i class="fa-regular fa-newspaper"></i><a href="https://example.com" target="_blank">Article</a> </p>-->
|
|
505
|
+
<p>
|
|
506
|
+
© 2026
|
|
507
|
+
<a href="https://www.md.tsukuba.ac.jp/LabAnimalResCNT/public_E/index.html" target="_blank">Laboratory
|
|
508
|
+
Animal
|
|
509
|
+
Resource Center, University of Tsukuba</a>
|
|
510
|
+
</p>
|
|
511
|
+
</footer>
|
|
512
|
+
|
|
513
|
+
</body>
|
|
514
|
+
|
|
515
|
+
</html>
|