genoverse 3.2.0

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.
Files changed (148) hide show
  1. package/.eslintrc.js +197 -0
  2. package/.github/workflows/test.yml +24 -0
  3. package/LICENSE.TXT +24 -0
  4. package/README.md +11 -0
  5. package/css/controlPanel.css +200 -0
  6. package/css/fileDrop.css +22 -0
  7. package/css/font-awesome.css +3 -0
  8. package/css/fullscreen.css +19 -0
  9. package/css/genoverse.css +466 -0
  10. package/css/karyotype.css +85 -0
  11. package/css/resizer.css +36 -0
  12. package/css/tooltips.css +26 -0
  13. package/css/trackControls.css +111 -0
  14. package/expanded.html +120 -0
  15. package/fontawesome/css/fontawesome.min.css +5 -0
  16. package/fontawesome/css/regular.min.css +5 -0
  17. package/fontawesome/css/solid.min.css +5 -0
  18. package/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  19. package/fontawesome/webfonts/fa-brands-400.woff +0 -0
  20. package/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  21. package/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  22. package/fontawesome/webfonts/fa-regular-400.woff +0 -0
  23. package/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  24. package/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  25. package/fontawesome/webfonts/fa-solid-900.woff +0 -0
  26. package/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  27. package/help.pdf +0 -0
  28. package/i/sort_handle.png +0 -0
  29. package/index.html +68 -0
  30. package/index.js +83 -0
  31. package/jest.config.js +4 -0
  32. package/js/Genoverse.js +1681 -0
  33. package/js/Track/Controller/Sequence.js +17 -0
  34. package/js/Track/Controller/Stranded.js +73 -0
  35. package/js/Track/Controller.js +620 -0
  36. package/js/Track/Model/File/BAM.js +44 -0
  37. package/js/Track/Model/File/BED.js +116 -0
  38. package/js/Track/Model/File/GFF.js +40 -0
  39. package/js/Track/Model/File/VCF.js +101 -0
  40. package/js/Track/Model/File/WIG.js +67 -0
  41. package/js/Track/Model/File.js +36 -0
  42. package/js/Track/Model/Gene/Ensembl.js +22 -0
  43. package/js/Track/Model/Gene.js +5 -0
  44. package/js/Track/Model/Sequence/Ensembl.js +4 -0
  45. package/js/Track/Model/Sequence/Fasta.js +60 -0
  46. package/js/Track/Model/Sequence.js +50 -0
  47. package/js/Track/Model/SequenceVariation.js +41 -0
  48. package/js/Track/Model/Stranded.js +28 -0
  49. package/js/Track/Model/Transcript/Ensembl.js +67 -0
  50. package/js/Track/Model/Transcript.js +5 -0
  51. package/js/Track/Model.js +303 -0
  52. package/js/Track/View/Gene/Ensembl.js +46 -0
  53. package/js/Track/View/Gene.js +6 -0
  54. package/js/Track/View/Sequence/Variation.js +115 -0
  55. package/js/Track/View/Sequence.js +63 -0
  56. package/js/Track/View/Transcript/Ensembl.js +12 -0
  57. package/js/Track/View/Transcript.js +28 -0
  58. package/js/Track/View.js +566 -0
  59. package/js/Track/library/Chromosome.js +145 -0
  60. package/js/Track/library/File/BAM.js +30 -0
  61. package/js/Track/library/File/BED.js +24 -0
  62. package/js/Track/library/File/BIGBED.js +47 -0
  63. package/js/Track/library/File/BIGWIG.js +52 -0
  64. package/js/Track/library/File/GFF.js +9 -0
  65. package/js/Track/library/File/VCF.js +71 -0
  66. package/js/Track/library/File/WIG.js +5 -0
  67. package/js/Track/library/File.js +10 -0
  68. package/js/Track/library/Gene.js +37 -0
  69. package/js/Track/library/Graph/Bar.js +235 -0
  70. package/js/Track/library/Graph/Line.js +296 -0
  71. package/js/Track/library/Graph.js +355 -0
  72. package/js/Track/library/HighlightRegion.js +292 -0
  73. package/js/Track/library/Legend.js +224 -0
  74. package/js/Track/library/Scalebar.js +227 -0
  75. package/js/Track/library/Scaleline.js +91 -0
  76. package/js/Track/library/Static.js +78 -0
  77. package/js/Track/library/dbSNP.js +142 -0
  78. package/js/Track.js +632 -0
  79. package/js/genomes/grch37.js +990 -0
  80. package/js/genomes/grch38.js +990 -0
  81. package/js/genoverse.min.js +2 -0
  82. package/js/genoverse.min.js.map +1 -0
  83. package/js/lib/BWReader.js +578 -0
  84. package/js/lib/Base.js +145 -0
  85. package/js/lib/VCFReader.js +286 -0
  86. package/js/lib/dalliance/js/bam.js +494 -0
  87. package/js/lib/dalliance/js/bin.js +185 -0
  88. package/js/lib/dalliance/js/das.js +749 -0
  89. package/js/lib/dalliance/js/utils.js +370 -0
  90. package/js/lib/dalliance-lib.js +3594 -0
  91. package/js/lib/dalliance-lib.min.js +68 -0
  92. package/js/lib/jDataView.js +2 -0
  93. package/js/lib/jParser.js +192 -0
  94. package/js/lib/jquery-ui.js +8 -0
  95. package/js/lib/jquery.js +2 -0
  96. package/js/lib/jquery.mousehold.js +53 -0
  97. package/js/lib/jquery.mousewheel.js +84 -0
  98. package/js/lib/jquery.tipsy.js +258 -0
  99. package/js/lib/rtree.js +1 -0
  100. package/js/plugins/controlPanel.js +395 -0
  101. package/js/plugins/fileDrop.js +62 -0
  102. package/js/plugins/focusRegion.js +12 -0
  103. package/js/plugins/fullscreen.js +77 -0
  104. package/js/plugins/karyotype.js +210 -0
  105. package/js/plugins/resizer.js +45 -0
  106. package/js/plugins/tooltips.js +94 -0
  107. package/js/plugins/trackControls.js +143 -0
  108. package/package.json +43 -0
  109. package/test/View/__snapshots__/render-bar-graph.test.js.snap +111 -0
  110. package/test/View/__snapshots__/render-blocks.test.js.snap +105 -0
  111. package/test/View/__snapshots__/render-chromosome.test.js.snap +5 -0
  112. package/test/View/__snapshots__/render-highlights.test.js.snap +73 -0
  113. package/test/View/__snapshots__/render-insert-variants.test.js.snap +9 -0
  114. package/test/View/__snapshots__/render-labels.test.js.snap +241 -0
  115. package/test/View/__snapshots__/render-legends.test.js.snap +13 -0
  116. package/test/View/__snapshots__/render-line-graph.test.js.snap +349 -0
  117. package/test/View/__snapshots__/render-scalebar.test.js.snap +49 -0
  118. package/test/View/__snapshots__/render-scaleline.test.js.snap +31 -0
  119. package/test/View/__snapshots__/render-sequence.test.js.snap +23 -0
  120. package/test/View/__snapshots__/render-stranded.test.js.snap +5 -0
  121. package/test/View/__snapshots__/render-transcripts.test.js.snap +193 -0
  122. package/test/View/render-bar-graph.test.js +87 -0
  123. package/test/View/render-blocks.test.js +171 -0
  124. package/test/View/render-chromosome.test.js +40 -0
  125. package/test/View/render-highlights.test.js +67 -0
  126. package/test/View/render-insert-variants.test.js +11 -0
  127. package/test/View/render-labels.test.js +266 -0
  128. package/test/View/render-legends.test.js +31 -0
  129. package/test/View/render-line-graph.test.js +169 -0
  130. package/test/View/render-scalebar.test.js +36 -0
  131. package/test/View/render-scaleline.test.js +28 -0
  132. package/test/View/render-sequence.test.js +49 -0
  133. package/test/View/render-stranded.test.js +10 -0
  134. package/test/View/render-transcripts.test.js +165 -0
  135. package/test/create-and-destroy.test.js +63 -0
  136. package/test/track-ordering.test.js +514 -0
  137. package/test/track_config/__snapshots__/config-settings.test.js.snap +23 -0
  138. package/test/track_config/config-settings.test.js +321 -0
  139. package/test/track_config/zoom-level-settings.test.js +98 -0
  140. package/test/utils.js +80 -0
  141. package/utils/createGenome.js +52 -0
  142. package/utils/devServer.js +36 -0
  143. package/utils/expandedTemplate.html +46 -0
  144. package/utils/git-hooks/post-commit +9 -0
  145. package/utils/git-hooks/pre-commit +7 -0
  146. package/utils/git-hooks/setup +6 -0
  147. package/utils/makeExpanded.js +19 -0
  148. package/webpack.config.js +39 -0
@@ -0,0 +1,370 @@
1
+ /* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+
3
+ //
4
+ // Dalliance Genome Explorer
5
+ // (c) Thomas Down 2006-2010
6
+ //
7
+ // utils.js: odds, sods, and ends.
8
+ //
9
+
10
+ var NUM_REGEXP = new RegExp('[0-9]+');
11
+
12
+ function stringToNumbersArray(str) {
13
+ var nums = new Array();
14
+ var m;
15
+ while (m = NUM_REGEXP.exec(str)) {
16
+ nums.push(m[0]);
17
+ str=str.substring(m.index + (m[0].length));
18
+ }
19
+ return nums;
20
+ }
21
+
22
+ var STRICT_NUM_REGEXP = new RegExp('^[0-9]+$');
23
+
24
+ function stringToInt(str) {
25
+ str = str.replace(new RegExp(',', 'g'), '');
26
+ if (!STRICT_NUM_REGEXP.test(str)) {
27
+ return null;
28
+ }
29
+ return str|0;
30
+ }
31
+
32
+ function pushnew(a, v) {
33
+ for (var i = 0; i < a.length; ++i) {
34
+ if (a[i] == v) {
35
+ return;
36
+ }
37
+ }
38
+ a.push(v);
39
+ }
40
+
41
+ function pusho(obj, k, v) {
42
+ if (obj[k]) {
43
+ obj[k].push(v);
44
+ } else {
45
+ obj[k] = [v];
46
+ }
47
+ }
48
+
49
+ function pushnewo(obj, k, v) {
50
+ var a = obj[k];
51
+ if (a) {
52
+ for (var i = 0; i < a.length; ++i) { // indexOf requires JS16 :-(.
53
+ if (a[i] == v) {
54
+ return;
55
+ }
56
+ }
57
+ a.push(v);
58
+ } else {
59
+ obj[k] = [v];
60
+ }
61
+ }
62
+
63
+
64
+ function pick(a, b, c, d)
65
+ {
66
+ if (a) {
67
+ return a;
68
+ } else if (b) {
69
+ return b;
70
+ } else if (c) {
71
+ return c;
72
+ } else if (d) {
73
+ return d;
74
+ }
75
+ }
76
+
77
+ function pushnew(l, o)
78
+ {
79
+ for (var i = 0; i < l.length; ++i) {
80
+ if (l[i] == o) {
81
+ return;
82
+ }
83
+ }
84
+ l.push(o);
85
+ }
86
+
87
+ function maybeConcat(a, b) {
88
+ var l = [];
89
+ if (a) {
90
+ for (var i = 0; i < a.length; ++i) {
91
+ pushnew(l, a[i]);
92
+ }
93
+ }
94
+ if (b) {
95
+ for (var i = 0; i < b.length; ++i) {
96
+ pushnew(l, b[i]);
97
+ }
98
+ }
99
+ return l;
100
+ }
101
+
102
+ function arrayIndexOf(a, x) {
103
+ if (!a) {
104
+ return -1;
105
+ }
106
+
107
+ for (var i = 0; i < a.length; ++i) {
108
+ if (a[i] === x) {
109
+ return i;
110
+ }
111
+ }
112
+ return -1;
113
+ }
114
+
115
+ function arrayRemove(a, x) {
116
+ var i = arrayIndexOf(a, x);
117
+ if (i >= 0) {
118
+ a.splice(i, 1);
119
+ return true;
120
+ }
121
+ return false;
122
+ }
123
+
124
+ //
125
+ // DOM utilities
126
+ //
127
+
128
+
129
+ function makeElement(tag, children, attribs, styles)
130
+ {
131
+ var ele = document.createElement(tag);
132
+ if (children) {
133
+ if (! (children instanceof Array)) {
134
+ children = [children];
135
+ }
136
+ for (var i = 0; i < children.length; ++i) {
137
+ var c = children[i];
138
+ if (typeof c == 'string') {
139
+ c = document.createTextNode(c);
140
+ }
141
+ ele.appendChild(c);
142
+ }
143
+ }
144
+
145
+ if (attribs) {
146
+ for (var l in attribs) {
147
+ ele[l] = attribs[l];
148
+ }
149
+ }
150
+ if (styles) {
151
+ for (var l in styles) {
152
+ ele.style[l] = styles[l];
153
+ }
154
+ }
155
+ return ele;
156
+ }
157
+
158
+ function makeElementNS(namespace, tag, children, attribs)
159
+ {
160
+ var ele = document.createElementNS(namespace, tag);
161
+ if (children) {
162
+ if (! (children instanceof Array)) {
163
+ children = [children];
164
+ }
165
+ for (var i = 0; i < children.length; ++i) {
166
+ var c = children[i];
167
+ if (typeof c == 'string') {
168
+ c = document.createTextNode(c);
169
+ }
170
+ ele.appendChild(c);
171
+ }
172
+ }
173
+
174
+ setAttrs(ele, attribs);
175
+ return ele;
176
+ }
177
+
178
+ var attr_name_cache = {};
179
+
180
+ function setAttr(node, key, value)
181
+ {
182
+ var attr = attr_name_cache[key];
183
+ if (!attr) {
184
+ var _attr = '';
185
+ for (var c = 0; c < key.length; ++c) {
186
+ var cc = key.substring(c, c+1);
187
+ var lcc = cc.toLowerCase();
188
+ if (lcc != cc) {
189
+ _attr = _attr + '-' + lcc;
190
+ } else {
191
+ _attr = _attr + cc;
192
+ }
193
+ }
194
+ attr_name_cache[key] = _attr;
195
+ attr = _attr;
196
+ }
197
+ node.setAttribute(attr, value);
198
+ }
199
+
200
+ function setAttrs(node, attribs)
201
+ {
202
+ if (attribs) {
203
+ for (var l in attribs) {
204
+ setAttr(node, l, attribs[l]);
205
+ }
206
+ }
207
+ }
208
+
209
+
210
+
211
+ function removeChildren(node)
212
+ {
213
+ if (!node || !node.childNodes) {
214
+ return;
215
+ }
216
+
217
+ while (node.childNodes.length > 0) {
218
+ node.removeChild(node.firstChild);
219
+ }
220
+ }
221
+
222
+
223
+
224
+ //
225
+ // WARNING: not for general use!
226
+ //
227
+
228
+ function miniJSONify(o, exc) {
229
+ if (typeof o === 'undefined') {
230
+ return 'undefined';
231
+ } else if (o == null) {
232
+ return 'null';
233
+ } else if (typeof o == 'string') {
234
+ return "'" + o + "'";
235
+ } else if (typeof o == 'number') {
236
+ return "" + o;
237
+ } else if (typeof o == 'boolean') {
238
+ return "" + o;
239
+ } else if (typeof o == 'object') {
240
+ if (o instanceof Array) {
241
+ var s = null;
242
+ for (var i = 0; i < o.length; ++i) {
243
+ s = (s == null ? '' : (s + ', ')) + miniJSONify(o[i], exc);
244
+ }
245
+ return '[' + (s?s:'') + ']';
246
+ } else {
247
+ exc = exc || {};
248
+ var s = null;
249
+ for (var k in o) {
250
+ if (exc[k])
251
+ continue;
252
+ if (k != undefined && typeof(o[k]) != 'function') {
253
+ s = (s == null ? '' : (s + ', ')) + k + ': ' + miniJSONify(o[k], exc);
254
+ }
255
+ }
256
+ return '{' + (s?s:'') + '}';
257
+ }
258
+ } else {
259
+ return (typeof o);
260
+ }
261
+ }
262
+
263
+ function shallowCopy(o) {
264
+ n = {};
265
+ for (k in o) {
266
+ n[k] = o[k];
267
+ }
268
+ return n;
269
+ }
270
+
271
+ function Observed(x) {
272
+ this.value = x;
273
+ this.listeners = [];
274
+ }
275
+
276
+ Observed.prototype.addListener = function(f) {
277
+ this.listeners.push(f);
278
+ }
279
+
280
+ Observed.prototype.addListenerAndFire = function(f) {
281
+ this.listeners.push(f);
282
+ f(this.value);
283
+ }
284
+
285
+ Observed.prototype.removeListener = function(f) {
286
+ arrayRemove(this.listeners, f);
287
+ }
288
+
289
+ Observed.prototype.get = function() {
290
+ return this.value;
291
+ }
292
+
293
+ Observed.prototype.set = function(x) {
294
+ this.value = x;
295
+ for (var i = 0; i < this.listeners.length; ++i) {
296
+ this.listeners[i](x);
297
+ }
298
+ }
299
+
300
+ function Awaited() {
301
+ this.queue = [];
302
+ }
303
+
304
+ Awaited.prototype.provide = function(x) {
305
+ if (this.res !== undefined) {
306
+ throw "Resource has already been provided.";
307
+ }
308
+
309
+ this.res = x;
310
+ for (var i = 0; i < this.queue.length; ++i) {
311
+ this.queue[i](x);
312
+ }
313
+ this.queue = null; // avoid leaking closures.
314
+ }
315
+
316
+ Awaited.prototype.await = function(f) {
317
+ if (this.res !== undefined) {
318
+ f(this.res);
319
+ return this.res;
320
+ } else {
321
+ this.queue.push(f);
322
+ }
323
+ }
324
+
325
+ function textXHR(url, callback, opts) {
326
+ var req = new XMLHttpRequest();
327
+ req.onreadystatechange = function() {
328
+ if (req.readyState == 4) {
329
+ if (req.status >= 300) {
330
+ callback(null, 'Error code ' + req.status);
331
+ } else {
332
+ callback(req.responseText);
333
+ }
334
+ }
335
+ };
336
+
337
+ req.open('GET', url, true);
338
+ req.responseType = 'text';
339
+
340
+ if (opts && opts.credentials) {
341
+ req.withCredentials = true;
342
+ }
343
+ req.send('');
344
+ }
345
+
346
+ function relativeURL(base, rel) {
347
+ // FIXME quite naive -- good enough for trackhubs?
348
+
349
+ if (rel.indexOf('http:') == 0 || rel.indexOf('https:') == 0) {
350
+ return rel;
351
+ }
352
+
353
+ var li = base.lastIndexOf('/');
354
+ if (li >= 0) {
355
+ return base.substr(0, li + 1) + rel;
356
+ } else {
357
+ return rel;
358
+ }
359
+ }
360
+
361
+
362
+ //
363
+ // Missing APIs
364
+ //
365
+
366
+ if (!('trim' in String.prototype)) {
367
+ String.prototype.trim = function() {
368
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
369
+ };
370
+ }