forked from igvteam/igv.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocalBam.html
143 lines (104 loc) · 3.37 KB
/
localBam.html
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<meta content="" name="description">
<meta content="" name="author">
<link href=../img/favicon.ico rel="shortcut icon">
<title>IGV - Dev</title>
<!-- IGV CSS -->
<link href="css/dev.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div>
<h1>Local BAM file example</h1>
<p>
<label>BAM file and index
<input accept=".bam,.bai" id="fileWidget" multiple="true" onchange="load()" type="file"/>
</label>
</p>
<p>
<div id="fileNameDiv"></div>
</p>
</div>
<div id="myDiv" style="padding-top: 50px;padding-bottom: 20px; height: auto">
</div>
<script type="text/javascript">
let igvBrowser;
function goto() {
var locus = document.getElementById("locationInput").value;
igv.browser.search(locus);
}
function load() {
var fileWidget = document.getElementById("fileWidget");
var files = fileWidget.files;
var fileTxt = "<ul>";
for (let file of files) {
fileTxt += "<li>" + file.name + "</li>";
}
fileTxt += "</ul>";
document.getElementById("fileNameDiv").innerHTML = fileTxt;
// Find BAM files and cache index files. Note there are 2 index naming conventions, .bam.bai and .bai
// This scheme catches both.
var bamFiles = [];
var indexFiles = {};
for (let file of files) {
if (file.name.endsWith(".bam")) {
bamFiles.push(file);
} else if (file.name.endsWith(".bai")) {
var key = getKey(file.name);
indexFiles[key] = file;
} else {
alert("Unsupported file type: " + file.name);
}
}
// Create track objects
var trackConfigs = [];
for (let file of bamFiles) {
var key = getKey(file.name);
var indexFile = indexFiles[key];
if (indexFile) {
trackConfigs.push({
name: file.name,
type: "alignment",
format: "bam",
url: file,
indexURL: indexFile
})
} else {
alert("No index file for: " + file.name);
}
}
if (trackConfigs.length > 0) {
igvBrowser.loadTrackList(trackConfigs);
}
function getKey(filename) {
var idx = filename.indexOf(".");
if (idx < 0) {
console.error("File with no extension: " + filename);
} else {
return filename.substring(0, idx);
}
}
// igv.browser.loadSession(sessionFile)
// .catch(function (error) {
// alert("Error loading session file");
// })
}
</script>
<script type="module">
import igv from "../js/api.js";
var div = document.getElementById("myDiv");
var options = {
locus: "SLC25A3", // OPTIONAL, open at a specific location
genome: "hg19"
};
igv.createBrowser(div, options)
.then(function (b) {
igvBrowser = b;
})
</script>
</body>
</html>