forked from veg/alignment.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.jsx
175 lines (160 loc) · 5.1 KB
/
app.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import "./styles.scss";
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { BrowserRouter, Route, NavLink } from "react-router-dom";
import Home from "./app/home.jsx";
import * as FASTA from "./app/FASTA.jsx";
import * as FNA from "./app/FNA.jsx";
import * as BAM from "./app/BAM.jsx";
import PreventDefaultPatch from "./prevent_default_patch";
function Divider(props) {
return [
<div className="dropdown-divider" key="divider-div" />,
props.header ? (
<h6 className="dropdown-header" key="divider-header">
{props.header}
</h6>
) : null
];
}
function Link(props) {
return (
<NavLink className="dropdown-item link" to={props.to}>
{props.header}
</NavLink>
);
}
function Dropdown(props) {
return (
<ul className="navbar-nav ">
<li className="nav-item dropdown">
<a
className="nav-link dropdown-toggle"
href="#"
id="navbarDropdown"
role="button"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
{props.title}
</a>
<div className="dropdown-menu" aria-labelledby="navbarDropdown">
{props.children}
</div>
</li>
</ul>
);
}
function FASTALinks(props) {
return (
<Dropdown title={"FASTA"}>
<Link to="/fasta-viewer" header="Viewer" />
<Divider header="Examples" />
<Link to="/fasta-aminoacid" header="Amino acid alignment" />
<Link to="/fasta-highlight" header="Highlight individual sites" />
<Link to="/fasta-start" header="Start at a given sequence and site" />
<Link to="/fasta-lowercase" header="Lower case alignment" />
<Link to="/fasta-svg" header="SVG alignment" />
<Link to="/fasta-intrahost" header="Intrahost variation" />
<Link to="/fasta-sequence-bar" header="Sequence Bar Chart" />
<Link to="/fasta-site-stacked-bar" header="Site Stacked Bar Chart" />
<Link to="/fasta-ar" header="Artificial Recombination" />
<Link to="/fasta-click-and-hover" header="Click handler" />
</Dropdown>
);
}
function FNALinks(props) {
return (
<Dropdown title={"FNA"}>
<Link to="/fna-viewer" header="Viewer" />
<Divider header="Examples" />
<Link to="/fna-immunology" header="Immunology - heavy chain regions" />
<Link to="/fna-hiv" header="HIV - site annotations" />
<Link to="/fna-basesvgtree" header="BaseSVGTreeInstance" />
</Dropdown>
);
}
function BAMLinks(props) {
return (
<Dropdown title={"BAM"}>
<Link to="/sam-viewer" header="Viewer" />
<Divider header="Examples" />
<Link to="/sam-variantcaller" header="Variant caller" />
<Link to="/sam-scaffold" header="Scaffold viewer" />
</Dropdown>
);
}
function NavBar(props) {
return (
<div>
<nav className="navbar navbar-expand-lg navbar-light bg-light">
<NavLink className="navbar-brand" to="/">
Javascript Alignment Viewer
</NavLink>
<div className="collapse navbar-collapse">
<FASTALinks />
<FNALinks />
<BAMLinks />
</div>
</nav>
</div>
);
}
class App extends Component {
constructor(props) {
super(props);
this.state = {
data: null
};
}
render() {
return (
<div>
<NavBar />
<div style={{ maxWidth: 1140 }} className="container-fluid">
<Route exact path="/" render={props => <Home />} />
<Route path="/fasta-viewer" render={props => <FASTA.FASTAViewer />} />
<Route path="/fasta-aminoacid" component={FASTA.AminoAcid} />
<Route path="/fasta-highlight" component={FASTA.Highlight} />
<Route path="/fasta-start" component={FASTA.StartAtSiteAndSequence} />
<Route path="/fasta-lowercase" component={FASTA.Lowercase} />
<Route path="/fasta-svg" component={FASTA.SVGAlignmentExample} />
<Route path="/fasta-intrahost" component={FASTA.Intrahost} />
<Route
path="/fasta-sequence-bar"
component={FASTA.SequenceBarChart}
/>
<Route
path="/fasta-site-stacked-bar"
component={FASTA.SiteStackedBarChart}
/>
<Route path="/fasta-ar" component={FASTA.ArtificialRecombination} />
<Route
path="/fasta-click-and-hover"
component={FASTA.ClickAndHover}
/>
<Route path="/fna-viewer" component={FNA.FNAViewer} />
<Route path="/fna-immunology" component={FNA.Immunology} />
<Route path="/fna-hiv" component={FNA.HIV} />
<Route path="/fna-basesvgtree" component={FNA.BaseSVGTreeInstance} />
<Route path="/sam-viewer" component={BAM.BAMViewer} />
<Route path="/sam-scaffold" component={BAM.ScaffoldExample} />
<Route path="/sam-variantcaller" component={BAM.VariantCaller} />
</div>
</div>
);
}
}
function Main(props) {
return (
<BrowserRouter>
<App />
</BrowserRouter>
);
}
PreventDefaultPatch(document);
ReactDOM.render(
<Main />,
document.body.appendChild(document.createElement("div"))
);