react-msaview 1.3.2 → 2.1.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.
- package/bundle/index.js +285 -97099
- package/dist/StructureModel.d.ts +9 -0
- package/dist/StructureModel.js +11 -0
- package/dist/StructureModel.js.map +1 -0
- package/dist/UniprotTrack.d.ts +27 -0
- package/dist/UniprotTrack.js +53 -0
- package/dist/UniprotTrack.js.map +1 -0
- package/dist/colorSchemes.d.ts +5 -11
- package/dist/colorSchemes.js +27 -32
- package/dist/colorSchemes.js.map +1 -0
- package/dist/components/BoxTrack.d.ts +6 -6
- package/dist/components/BoxTrack.js +9 -137
- package/dist/components/BoxTrack.js.map +1 -0
- package/dist/components/BoxTrackBlock.d.ts +8 -0
- package/dist/components/BoxTrackBlock.js +136 -0
- package/dist/components/BoxTrackBlock.js.map +1 -0
- package/dist/components/Header.d.ts +2 -2
- package/dist/components/Header.js +55 -48
- package/dist/components/Header.js.map +1 -0
- package/dist/components/ImportForm.d.ts +2 -2
- package/dist/components/ImportForm.js +59 -71
- package/dist/components/ImportForm.js.map +1 -0
- package/dist/components/MSABlock.d.ts +8 -0
- package/dist/components/MSABlock.js +103 -0
- package/dist/components/MSABlock.js.map +1 -0
- package/dist/components/MSACanvas.d.ts +2 -2
- package/dist/components/MSACanvas.js +32 -133
- package/dist/components/MSACanvas.js.map +1 -0
- package/dist/components/MSAMouseoverCanvas.d.ts +6 -0
- package/dist/components/MSAMouseoverCanvas.js +52 -0
- package/dist/components/MSAMouseoverCanvas.js.map +1 -0
- package/dist/components/MSAView.d.ts +2 -2
- package/dist/components/MSAView.js +17 -62
- package/dist/components/MSAView.js.map +1 -0
- package/dist/components/MultiAlignmentSelector.d.ts +6 -0
- package/dist/components/MultiAlignmentSelector.js +13 -0
- package/dist/components/MultiAlignmentSelector.js.map +1 -0
- package/dist/components/ResizeHandles.d.ts +5 -5
- package/dist/components/ResizeHandles.js +31 -32
- package/dist/components/ResizeHandles.js.map +1 -0
- package/dist/components/Rubberband.d.ts +3 -2
- package/dist/components/Rubberband.js +41 -64
- package/dist/components/Rubberband.js.map +1 -0
- package/dist/components/Ruler.d.ts +2 -16
- package/dist/components/Ruler.js +19 -88
- package/dist/components/Ruler.js.map +1 -0
- package/dist/components/TextTrack.d.ts +5 -5
- package/dist/components/TextTrack.js +23 -24
- package/dist/components/TextTrack.js.map +1 -0
- package/dist/components/Track.d.ts +5 -5
- package/dist/components/Track.js +41 -40
- package/dist/components/Track.js.map +1 -0
- package/dist/components/TreeBranchMenu.d.ts +14 -0
- package/dist/components/TreeBranchMenu.js +26 -0
- package/dist/components/TreeBranchMenu.js.map +1 -0
- package/dist/components/TreeCanvas.d.ts +2 -2
- package/dist/components/TreeCanvas.js +24 -356
- package/dist/components/TreeCanvas.js.map +1 -0
- package/dist/components/TreeCanvasBlock.d.ts +7 -0
- package/dist/components/TreeCanvasBlock.js +252 -0
- package/dist/components/TreeCanvasBlock.js.map +1 -0
- package/dist/components/TreeMenu.d.ts +12 -0
- package/dist/components/TreeMenu.js +56 -0
- package/dist/components/TreeMenu.js.map +1 -0
- package/dist/components/TreeRuler.d.ts +2 -2
- package/dist/components/TreeRuler.js +3 -3
- package/dist/components/TreeRuler.js.map +1 -0
- package/dist/components/VerticalGuide.d.ts +7 -0
- package/dist/components/VerticalGuide.js +30 -0
- package/dist/components/VerticalGuide.js.map +1 -0
- package/dist/components/ZoomControls.d.ts +6 -0
- package/dist/components/ZoomControls.js +58 -0
- package/dist/components/ZoomControls.js.map +1 -0
- package/dist/components/data/seq2.d.ts +3 -3
- package/dist/components/data/seq2.js +33 -3
- package/dist/components/data/seq2.js.map +1 -0
- package/dist/components/dialogs/AboutDlg.d.ts +4 -0
- package/dist/components/dialogs/AboutDlg.js +40 -0
- package/dist/components/dialogs/AboutDlg.js.map +1 -0
- package/{bundle/components → dist/components/dialogs}/AddTrackDlg.d.ts +3 -3
- package/dist/components/dialogs/AddTrackDlg.js +26 -0
- package/dist/components/dialogs/AddTrackDlg.js.map +1 -0
- package/dist/components/{AnnotationDlg.d.ts → dialogs/AnnotationDlg.d.ts} +3 -3
- package/dist/components/dialogs/AnnotationDlg.js +65 -0
- package/dist/components/dialogs/AnnotationDlg.js.map +1 -0
- package/dist/components/dialogs/DetailsDlg.d.ts +7 -0
- package/dist/components/dialogs/DetailsDlg.js +13 -0
- package/dist/components/dialogs/DetailsDlg.js.map +1 -0
- package/dist/components/dialogs/MoreInfoDlg.d.ts +6 -0
- package/dist/components/dialogs/MoreInfoDlg.js +11 -0
- package/dist/components/dialogs/MoreInfoDlg.js.map +1 -0
- package/dist/components/dialogs/SettingsDlg.d.ts +7 -0
- package/dist/components/dialogs/SettingsDlg.js +48 -0
- package/dist/components/dialogs/SettingsDlg.js.map +1 -0
- package/dist/components/dialogs/TrackInfoDlg.d.ts +9 -0
- package/{bundle/components → dist/components/dialogs}/TrackInfoDlg.js +12 -13
- package/dist/components/dialogs/TrackInfoDlg.js.map +1 -0
- package/dist/components/dialogs/TracklistDlg.d.ts +7 -0
- package/dist/components/dialogs/TracklistDlg.js +18 -0
- package/dist/components/dialogs/TracklistDlg.js.map +1 -0
- package/{bundle/components/Ruler.d.ts → dist/components/util.d.ts} +1 -6
- package/dist/components/util.js +68 -0
- package/dist/components/util.js.map +1 -0
- package/dist/index.d.ts +2 -4
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -0
- package/dist/layout.js +14 -20
- package/dist/layout.js.map +1 -0
- package/dist/model.d.ts +114 -97
- package/dist/model.js +248 -486
- package/dist/model.js.map +1 -0
- package/dist/parseNewick.d.ts +1 -5
- package/dist/parseNewick.js +11 -8
- package/dist/parseNewick.js.map +1 -0
- package/dist/parsers/ClustalMSA.d.ts +6 -18
- package/dist/parsers/ClustalMSA.js +55 -64
- package/dist/parsers/ClustalMSA.js.map +1 -0
- package/dist/parsers/FastaMSA.d.ts +5 -12
- package/dist/parsers/FastaMSA.js +55 -64
- package/dist/parsers/FastaMSA.js.map +1 -0
- package/dist/parsers/StockholmMSA.d.ts +10 -17
- package/dist/parsers/StockholmMSA.js +81 -110
- package/dist/parsers/StockholmMSA.js.map +1 -0
- package/dist/util.d.ts +34 -7
- package/dist/util.js +76 -24
- package/dist/util.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +34 -34
- package/src/StructureModel.ts +11 -0
- package/src/UniprotTrack.ts +59 -0
- package/src/colorSchemes.ts +520 -0
- package/src/components/BoxTrack.tsx +33 -0
- package/src/components/BoxTrackBlock.tsx +198 -0
- package/src/components/Header.tsx +106 -0
- package/src/components/ImportForm.tsx +192 -0
- package/src/components/MSABlock.tsx +164 -0
- package/src/components/MSACanvas.tsx +142 -0
- package/src/components/MSAMouseoverCanvas.tsx +87 -0
- package/src/components/MSAView.tsx +88 -0
- package/src/components/MultiAlignmentSelector.tsx +33 -0
- package/src/components/ResizeHandles.tsx +137 -0
- package/src/components/Rubberband.tsx +270 -0
- package/src/components/Ruler.tsx +123 -0
- package/src/components/TextTrack.tsx +120 -0
- package/src/components/Track.tsx +153 -0
- package/src/components/TreeBranchMenu.tsx +67 -0
- package/src/components/TreeCanvas.tsx +128 -0
- package/src/components/TreeCanvasBlock.tsx +359 -0
- package/src/components/TreeMenu.tsx +105 -0
- package/src/components/TreeRuler.tsx +12 -0
- package/src/components/VerticalGuide.tsx +50 -0
- package/src/components/ZoomControls.tsx +78 -0
- package/src/components/data/seq2.ts +35 -0
- package/src/components/dialogs/AboutDlg.tsx +58 -0
- package/src/components/dialogs/AddTrackDlg.tsx +74 -0
- package/src/components/dialogs/AnnotationDlg.tsx +144 -0
- package/src/components/dialogs/DetailsDlg.tsx +28 -0
- package/src/components/dialogs/MoreInfoDlg.tsx +21 -0
- package/src/components/dialogs/SettingsDlg.tsx +154 -0
- package/src/components/dialogs/TrackInfoDlg.tsx +59 -0
- package/src/components/dialogs/TracklistDlg.tsx +59 -0
- package/src/components/util.ts +93 -0
- package/src/declare.d.ts +1 -0
- package/src/index.ts +2 -0
- package/src/layout.ts +83 -0
- package/src/model.ts +793 -0
- package/{bundle/parseNewick.d.ts → src/parseNewick.ts} +35 -5
- package/src/parsers/ClustalMSA.ts +79 -0
- package/src/parsers/FastaMSA.ts +82 -0
- package/src/parsers/StockholmMSA.ts +137 -0
- package/src/util.ts +142 -0
- package/src/version.ts +1 -0
- package/bundle/colorSchemes.d.ts +0 -16
- package/bundle/colorSchemes.js +0 -455
- package/bundle/components/AboutDlg.d.ts +0 -5
- package/bundle/components/AboutDlg.js +0 -47
- package/bundle/components/AddTrackDlg.js +0 -26
- package/bundle/components/AnnotationDlg.d.ts +0 -11
- package/bundle/components/AnnotationDlg.js +0 -77
- package/bundle/components/BoxTrack.d.ts +0 -7
- package/bundle/components/BoxTrack.js +0 -143
- package/bundle/components/DetailsDlg.d.ts +0 -8
- package/bundle/components/DetailsDlg.js +0 -12
- package/bundle/components/Header.d.ts +0 -6
- package/bundle/components/Header.js +0 -63
- package/bundle/components/ImportForm.d.ts +0 -6
- package/bundle/components/ImportForm.js +0 -89
- package/bundle/components/MSACanvas.d.ts +0 -6
- package/bundle/components/MSACanvas.js +0 -210
- package/bundle/components/MSAView.d.ts +0 -6
- package/bundle/components/MSAView.js +0 -88
- package/bundle/components/MoreInfoDlg.d.ts +0 -6
- package/bundle/components/MoreInfoDlg.js +0 -11
- package/bundle/components/ResizeHandles.d.ts +0 -8
- package/bundle/components/ResizeHandles.js +0 -110
- package/bundle/components/Rubberband.d.ts +0 -7
- package/bundle/components/Rubberband.js +0 -196
- package/bundle/components/Ruler.js +0 -121
- package/bundle/components/SettingsDlg.d.ts +0 -8
- package/bundle/components/SettingsDlg.js +0 -40
- package/bundle/components/TextTrack.d.ts +0 -7
- package/bundle/components/TextTrack.js +0 -72
- package/bundle/components/Track.d.ts +0 -11
- package/bundle/components/Track.js +0 -81
- package/bundle/components/TrackInfoDlg.d.ts +0 -6
- package/bundle/components/TracklistDlg.d.ts +0 -8
- package/bundle/components/TracklistDlg.js +0 -18
- package/bundle/components/TreeCanvas.d.ts +0 -6
- package/bundle/components/TreeCanvas.js +0 -431
- package/bundle/components/TreeRuler.d.ts +0 -6
- package/bundle/components/TreeRuler.js +0 -8
- package/bundle/components/data/seq2.d.ts +0 -3
- package/bundle/components/data/seq2.js +0 -3
- package/bundle/index.d.ts +0 -4
- package/bundle/layout.d.ts +0 -23
- package/bundle/layout.js +0 -53
- package/bundle/model.d.ts +0 -364
- package/bundle/model.js +0 -894
- package/bundle/parseNewick.js +0 -94
- package/bundle/parsers/ClustalMSA.d.ts +0 -39
- package/bundle/parsers/ClustalMSA.js +0 -77
- package/bundle/parsers/FastaMSA.d.ts +0 -26
- package/bundle/parsers/FastaMSA.js +0 -78
- package/bundle/parsers/StockholmMSA.d.ts +0 -75
- package/bundle/parsers/StockholmMSA.js +0 -142
- package/bundle/util.d.ts +0 -17
- package/bundle/util.js +0 -33
- package/dist/components/AboutDlg.d.ts +0 -5
- package/dist/components/AboutDlg.js +0 -50
- package/dist/components/AddTrackDlg.d.ts +0 -8
- package/dist/components/AddTrackDlg.js +0 -26
- package/dist/components/AnnotationDlg.js +0 -77
- package/dist/components/DetailsDlg.d.ts +0 -8
- package/dist/components/DetailsDlg.js +0 -12
- package/dist/components/MoreInfoDlg.d.ts +0 -6
- package/dist/components/MoreInfoDlg.js +0 -11
- package/dist/components/SettingsDlg.d.ts +0 -8
- package/dist/components/SettingsDlg.js +0 -40
- package/dist/components/TrackInfoDlg.d.ts +0 -6
- package/dist/components/TrackInfoDlg.js +0 -33
- package/dist/components/TracklistDlg.d.ts +0 -8
- package/dist/components/TracklistDlg.js +0 -18
- package/dist/components/package.json +0 -62
package/dist/model.js
CHANGED
|
@@ -1,210 +1,23 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
-
function step(op) {
|
|
26
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
-
while (_) try {
|
|
28
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
-
switch (op[0]) {
|
|
31
|
-
case 0: case 1: t = op; break;
|
|
32
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
-
default:
|
|
36
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
-
if (t[2]) _.ops.pop();
|
|
41
|
-
_.trys.pop(); continue;
|
|
42
|
-
}
|
|
43
|
-
op = body.call(thisArg, _);
|
|
44
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
49
|
-
var t = {};
|
|
50
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
51
|
-
t[p] = s[p];
|
|
52
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
53
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
54
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
55
|
-
t[p[i]] = s[p[i]];
|
|
56
|
-
}
|
|
57
|
-
return t;
|
|
58
|
-
};
|
|
59
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
60
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
61
|
-
if (ar || !(i in from)) {
|
|
62
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
63
|
-
ar[i] = from[i];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
67
|
-
};
|
|
68
1
|
import { cast, types, addDisposer } from 'mobx-state-tree';
|
|
69
2
|
import { hierarchy, cluster } from 'd3-hierarchy';
|
|
70
|
-
import { ascending
|
|
3
|
+
import { ascending } from 'd3-array';
|
|
71
4
|
import { FileLocation, ElementId } from '@jbrowse/core/util/types/mst';
|
|
72
5
|
import { openLocation } from '@jbrowse/core/util/io';
|
|
73
6
|
import { autorun } from 'mobx';
|
|
74
7
|
import BaseViewModel from '@jbrowse/core/pluggableElementTypes/models/BaseViewModel';
|
|
75
8
|
import Stockholm from 'stockholm-js';
|
|
9
|
+
// locals
|
|
10
|
+
import { collapse, generateNodeIds, maxLength, setBrLength, skipBlanks, clamp, } from './util';
|
|
11
|
+
import TextTrack from './components/TextTrack';
|
|
12
|
+
import BoxTrack from './components/BoxTrack';
|
|
76
13
|
import ClustalMSA from './parsers/ClustalMSA';
|
|
77
14
|
import StockholmMSA from './parsers/StockholmMSA';
|
|
78
15
|
import FastaMSA from './parsers/FastaMSA';
|
|
79
16
|
import parseNewick from './parseNewick';
|
|
80
17
|
import colorSchemes from './colorSchemes';
|
|
81
|
-
import {
|
|
82
|
-
import
|
|
83
|
-
|
|
84
|
-
function skipBlanks(blanks, arg) {
|
|
85
|
-
var s = '';
|
|
86
|
-
var b = 0;
|
|
87
|
-
for (var j = 0; j < arg.length; j++) {
|
|
88
|
-
if (j === blanks[b]) {
|
|
89
|
-
b++;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
s += arg[j];
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return s;
|
|
96
|
-
}
|
|
97
|
-
function setBrLength(d, y0, k) {
|
|
98
|
-
var _a;
|
|
99
|
-
//@ts-ignore
|
|
100
|
-
d.len = (y0 += Math.max(d.data.length || 0, 0)) * k;
|
|
101
|
-
(_a = d.children) === null || _a === void 0 ? void 0 : _a.forEach(function (d) {
|
|
102
|
-
setBrLength(d, y0, k);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
function maxLength(d) {
|
|
106
|
-
return (d.data.length || 1) + (d.children ? max(d.children, maxLength) : 0);
|
|
107
|
-
}
|
|
108
|
-
// Collapse the node and all it's children, from
|
|
109
|
-
// https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd
|
|
110
|
-
function collapse(d) {
|
|
111
|
-
if (d.children) {
|
|
112
|
-
//@ts-ignore
|
|
113
|
-
d._children = d.children;
|
|
114
|
-
//@ts-ignore
|
|
115
|
-
d._children.forEach(collapse);
|
|
116
|
-
//@ts-ignore
|
|
117
|
-
d.children = null;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function clamp(min, num, max) {
|
|
121
|
-
return Math.min(Math.max(num, min), max);
|
|
122
|
-
}
|
|
123
|
-
var StructureModel = types.model({
|
|
124
|
-
id: types.identifier,
|
|
125
|
-
structure: types.model({
|
|
126
|
-
pdb: types.string,
|
|
127
|
-
startPos: types.number,
|
|
128
|
-
endPos: types.number,
|
|
129
|
-
}),
|
|
130
|
-
range: types.maybe(types.string),
|
|
131
|
-
});
|
|
132
|
-
var UniprotTrack = types
|
|
133
|
-
.model({
|
|
134
|
-
id: types.string,
|
|
135
|
-
accession: types.string,
|
|
136
|
-
name: types.string,
|
|
137
|
-
associatedRowName: types.string,
|
|
138
|
-
height: types.optional(types.number, 100),
|
|
139
|
-
})
|
|
140
|
-
.volatile(function () { return ({
|
|
141
|
-
error: undefined,
|
|
142
|
-
data: undefined,
|
|
143
|
-
}); })
|
|
144
|
-
.actions(function (self) { return ({
|
|
145
|
-
setError: function (error) {
|
|
146
|
-
self.error = error;
|
|
147
|
-
},
|
|
148
|
-
setData: function (data) {
|
|
149
|
-
self.data = data;
|
|
150
|
-
},
|
|
151
|
-
}); })
|
|
152
|
-
.actions(function (self) { return ({
|
|
153
|
-
afterCreate: function () {
|
|
154
|
-
var _this = this;
|
|
155
|
-
addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
156
|
-
var accession, url, response, text, e_1;
|
|
157
|
-
return __generator(this, function (_a) {
|
|
158
|
-
switch (_a.label) {
|
|
159
|
-
case 0:
|
|
160
|
-
_a.trys.push([0, 3, , 4]);
|
|
161
|
-
accession = self.accession;
|
|
162
|
-
url = "https://www.uniprot.org/uniprot/".concat(accession, ".gff");
|
|
163
|
-
return [4 /*yield*/, fetch(url)];
|
|
164
|
-
case 1:
|
|
165
|
-
response = _a.sent();
|
|
166
|
-
if (!response.ok) {
|
|
167
|
-
throw new Error("HTTP ".concat(response.status, " ").concat(response.statusText, " fetching ").concat(url));
|
|
168
|
-
}
|
|
169
|
-
return [4 /*yield*/, response.text()];
|
|
170
|
-
case 2:
|
|
171
|
-
text = _a.sent();
|
|
172
|
-
self.setData(text);
|
|
173
|
-
return [3 /*break*/, 4];
|
|
174
|
-
case 3:
|
|
175
|
-
e_1 = _a.sent();
|
|
176
|
-
self.setError(e_1);
|
|
177
|
-
return [3 /*break*/, 4];
|
|
178
|
-
case 4: return [2 /*return*/];
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
}); }));
|
|
182
|
-
},
|
|
183
|
-
}); })
|
|
184
|
-
.views(function (self) { return ({
|
|
185
|
-
get loading() {
|
|
186
|
-
return !self.data;
|
|
187
|
-
},
|
|
188
|
-
get features() {
|
|
189
|
-
var _a;
|
|
190
|
-
return (_a = self.data) === null || _a === void 0 ? void 0 : _a.split('\n').map(function (f) { return f.trim(); }).filter(function (f) { return !!f; }).filter(function (f) { return !f.startsWith('#'); }).map(function (f) {
|
|
191
|
-
var _a = f.split('\t'), seq_id = _a[0], source = _a[1], type = _a[2], start = _a[3], end = _a[4], score = _a[5], strand = _a[6], phase = _a[7], col9 = _a[8];
|
|
192
|
-
return __assign({ seq_id: seq_id, source: source, type: type, start: +start, end: +end, score: +score, strand: strand, phase: phase }, Object.fromEntries(col9
|
|
193
|
-
.split(';')
|
|
194
|
-
.map(function (f) { return f.trim(); })
|
|
195
|
-
.filter(function (f) { return !!f; })
|
|
196
|
-
.map(function (f) { return f.split('='); })
|
|
197
|
-
.map(function (_a) {
|
|
198
|
-
var key = _a[0], val = _a[1];
|
|
199
|
-
return [
|
|
200
|
-
key.trim(),
|
|
201
|
-
decodeURIComponent(val).trim().split(',').join(' '),
|
|
202
|
-
];
|
|
203
|
-
})));
|
|
204
|
-
});
|
|
205
|
-
},
|
|
206
|
-
}); });
|
|
207
|
-
var MSAModel = types
|
|
18
|
+
import { UniprotTrack } from './UniprotTrack';
|
|
19
|
+
import { StructureModel } from './StructureModel';
|
|
20
|
+
const MSAModel = types
|
|
208
21
|
.model('MsaView', {
|
|
209
22
|
id: ElementId,
|
|
210
23
|
type: types.literal('MsaView'),
|
|
@@ -244,45 +57,46 @@ var MSAModel = types
|
|
|
244
57
|
tree: types.maybe(types.string),
|
|
245
58
|
msa: types.maybe(types.string),
|
|
246
59
|
})
|
|
247
|
-
.actions(
|
|
248
|
-
setTree
|
|
60
|
+
.actions(self => ({
|
|
61
|
+
setTree(tree) {
|
|
249
62
|
self.tree = tree;
|
|
250
63
|
},
|
|
251
|
-
setMSA
|
|
64
|
+
setMSA(msa) {
|
|
252
65
|
self.msa = msa;
|
|
253
66
|
},
|
|
254
|
-
})
|
|
67
|
+
})), { tree: '', msa: '' }),
|
|
255
68
|
})
|
|
256
|
-
.volatile(
|
|
69
|
+
.volatile(() => ({
|
|
70
|
+
rulerHeight: 20,
|
|
257
71
|
error: undefined,
|
|
258
72
|
margin: { left: 20, top: 20 },
|
|
259
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
260
74
|
DialogComponent: undefined,
|
|
261
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
262
76
|
DialogProps: undefined,
|
|
263
77
|
// annotations
|
|
264
78
|
annotPos: undefined,
|
|
265
|
-
})
|
|
266
|
-
.actions(
|
|
267
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
268
|
-
setDialogComponent
|
|
79
|
+
}))
|
|
80
|
+
.actions(self => ({
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
+
setDialogComponent(dlg, props) {
|
|
269
83
|
self.DialogComponent = dlg;
|
|
270
84
|
self.DialogProps = props;
|
|
271
85
|
},
|
|
272
|
-
setHeight
|
|
86
|
+
setHeight(height) {
|
|
273
87
|
self.height = height;
|
|
274
88
|
},
|
|
275
|
-
addStructureToSelection
|
|
89
|
+
addStructureToSelection(elt) {
|
|
276
90
|
self.selectedStructures.push(elt);
|
|
277
91
|
},
|
|
278
|
-
removeStructureFromSelection
|
|
279
|
-
|
|
92
|
+
removeStructureFromSelection(elt) {
|
|
93
|
+
const r = self.selectedStructures.find(node => node.id === elt.id);
|
|
280
94
|
if (r) {
|
|
281
95
|
self.selectedStructures.remove(r);
|
|
282
96
|
}
|
|
283
97
|
},
|
|
284
|
-
toggleStructureSelection
|
|
285
|
-
|
|
98
|
+
toggleStructureSelection(elt) {
|
|
99
|
+
const r = self.selectedStructures.find(node => node.id === elt.id);
|
|
286
100
|
if (r) {
|
|
287
101
|
self.selectedStructures.remove(r);
|
|
288
102
|
}
|
|
@@ -290,51 +104,48 @@ var MSAModel = types
|
|
|
290
104
|
self.selectedStructures.push(elt);
|
|
291
105
|
}
|
|
292
106
|
},
|
|
293
|
-
clearSelectedStructures
|
|
294
|
-
|
|
107
|
+
clearSelectedStructures() {
|
|
108
|
+
// @ts-expect-error
|
|
295
109
|
self.selectedStructures = [];
|
|
296
110
|
},
|
|
297
|
-
setError
|
|
298
|
-
if (error) {
|
|
299
|
-
console.error(error);
|
|
300
|
-
}
|
|
111
|
+
setError(error) {
|
|
301
112
|
self.error = error;
|
|
302
113
|
},
|
|
303
|
-
setMousePos
|
|
114
|
+
setMousePos(col, row) {
|
|
304
115
|
self.mouseCol = col;
|
|
305
116
|
self.mouseRow = row;
|
|
306
117
|
},
|
|
307
|
-
setRowHeight
|
|
118
|
+
setRowHeight(n) {
|
|
308
119
|
self.rowHeight = n;
|
|
309
120
|
},
|
|
310
|
-
setColWidth
|
|
121
|
+
setColWidth(n) {
|
|
311
122
|
self.colWidth = n;
|
|
312
123
|
},
|
|
313
|
-
setColorSchemeName
|
|
124
|
+
setColorSchemeName(name) {
|
|
314
125
|
self.colorSchemeName = name;
|
|
315
126
|
},
|
|
316
|
-
setScrollY
|
|
127
|
+
setScrollY(n) {
|
|
317
128
|
self.scrollY = n;
|
|
318
129
|
},
|
|
319
|
-
setScrollX
|
|
130
|
+
setScrollX(n) {
|
|
320
131
|
self.scrollX = n;
|
|
321
132
|
},
|
|
322
|
-
setTreeAreaWidth
|
|
133
|
+
setTreeAreaWidth(n) {
|
|
323
134
|
self.treeAreaWidth = n;
|
|
324
135
|
},
|
|
325
|
-
setTreeWidth
|
|
136
|
+
setTreeWidth(n) {
|
|
326
137
|
self.treeWidth = n;
|
|
327
138
|
},
|
|
328
|
-
setCurrentAlignment
|
|
139
|
+
setCurrentAlignment(n) {
|
|
329
140
|
self.currentAlignment = n;
|
|
330
141
|
},
|
|
331
|
-
toggleLabelsAlignRight
|
|
142
|
+
toggleLabelsAlignRight() {
|
|
332
143
|
self.labelsAlignRight = !self.labelsAlignRight;
|
|
333
144
|
},
|
|
334
|
-
toggleDrawTree
|
|
145
|
+
toggleDrawTree() {
|
|
335
146
|
self.drawTree = !self.drawTree;
|
|
336
147
|
},
|
|
337
|
-
toggleCollapsed
|
|
148
|
+
toggleCollapsed(node) {
|
|
338
149
|
if (self.collapsed.includes(node)) {
|
|
339
150
|
self.collapsed.remove(node);
|
|
340
151
|
}
|
|
@@ -342,110 +153,71 @@ var MSAModel = types
|
|
|
342
153
|
self.collapsed.push(node);
|
|
343
154
|
}
|
|
344
155
|
},
|
|
345
|
-
setShowOnly
|
|
156
|
+
setShowOnly(node) {
|
|
346
157
|
self.showOnly = node;
|
|
347
158
|
},
|
|
348
|
-
toggleBranchLen
|
|
159
|
+
toggleBranchLen() {
|
|
349
160
|
self.showBranchLen = !self.showBranchLen;
|
|
350
161
|
},
|
|
351
|
-
toggleBgColor
|
|
162
|
+
toggleBgColor() {
|
|
352
163
|
self.bgColor = !self.bgColor;
|
|
353
164
|
},
|
|
354
|
-
toggleNodeBubbles
|
|
165
|
+
toggleNodeBubbles() {
|
|
355
166
|
self.drawNodeBubbles = !self.drawNodeBubbles;
|
|
356
167
|
},
|
|
357
|
-
setData
|
|
168
|
+
setData(data) {
|
|
358
169
|
self.data = cast(data);
|
|
359
170
|
},
|
|
360
|
-
setMSAFilehandle
|
|
361
|
-
|
|
362
|
-
return __generator(this, function (_a) {
|
|
363
|
-
self.msaFilehandle = msaFilehandle;
|
|
364
|
-
return [2 /*return*/];
|
|
365
|
-
});
|
|
366
|
-
});
|
|
171
|
+
async setMSAFilehandle(msaFilehandle) {
|
|
172
|
+
self.msaFilehandle = msaFilehandle;
|
|
367
173
|
},
|
|
368
|
-
setTreeFilehandle
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
case 1:
|
|
377
|
-
r = (_a.sent());
|
|
378
|
-
this.setTree(r);
|
|
379
|
-
return [3 /*break*/, 3];
|
|
380
|
-
case 2:
|
|
381
|
-
self.treeFilehandle = treeFilehandle;
|
|
382
|
-
_a.label = 3;
|
|
383
|
-
case 3: return [2 /*return*/];
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
});
|
|
174
|
+
async setTreeFilehandle(treeFilehandle) {
|
|
175
|
+
if (treeFilehandle && 'blobId' in treeFilehandle) {
|
|
176
|
+
const r = await openLocation(treeFilehandle).readFile('utf8');
|
|
177
|
+
this.setTree(r);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
self.treeFilehandle = treeFilehandle;
|
|
181
|
+
}
|
|
387
182
|
},
|
|
388
|
-
setMSA
|
|
183
|
+
setMSA(result) {
|
|
389
184
|
self.data.setMSA(result);
|
|
390
185
|
},
|
|
391
|
-
setTree
|
|
186
|
+
setTree(result) {
|
|
392
187
|
self.data.setTree(result);
|
|
393
188
|
},
|
|
394
|
-
afterCreate
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
case 0:
|
|
401
|
-
treeFilehandle = self.treeFilehandle;
|
|
402
|
-
if (!treeFilehandle) return [3 /*break*/, 4];
|
|
403
|
-
_b.label = 1;
|
|
404
|
-
case 1:
|
|
405
|
-
_b.trys.push([1, 3, , 4]);
|
|
406
|
-
_a = this.setTree;
|
|
407
|
-
return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];
|
|
408
|
-
case 2:
|
|
409
|
-
_a.apply(this, [(_b.sent())]);
|
|
410
|
-
return [3 /*break*/, 4];
|
|
411
|
-
case 3:
|
|
412
|
-
e_2 = _b.sent();
|
|
413
|
-
this.setError(e_2);
|
|
414
|
-
return [3 /*break*/, 4];
|
|
415
|
-
case 4: return [2 /*return*/];
|
|
189
|
+
afterCreate() {
|
|
190
|
+
addDisposer(self, autorun(async () => {
|
|
191
|
+
const { treeFilehandle } = self;
|
|
192
|
+
if (treeFilehandle) {
|
|
193
|
+
try {
|
|
194
|
+
this.setTree(await openLocation(treeFilehandle).readFile('utf8'));
|
|
416
195
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
var msaFilehandle, _a, e_3;
|
|
421
|
-
return __generator(this, function (_b) {
|
|
422
|
-
switch (_b.label) {
|
|
423
|
-
case 0:
|
|
424
|
-
msaFilehandle = self.msaFilehandle;
|
|
425
|
-
if (!msaFilehandle) return [3 /*break*/, 4];
|
|
426
|
-
_b.label = 1;
|
|
427
|
-
case 1:
|
|
428
|
-
_b.trys.push([1, 3, , 4]);
|
|
429
|
-
_a = this.setMSA;
|
|
430
|
-
return [4 /*yield*/, openLocation(msaFilehandle).readFile('utf8')];
|
|
431
|
-
case 2:
|
|
432
|
-
_a.apply(this, [(_b.sent())]);
|
|
433
|
-
return [3 /*break*/, 4];
|
|
434
|
-
case 3:
|
|
435
|
-
e_3 = _b.sent();
|
|
436
|
-
this.setError(e_3);
|
|
437
|
-
return [3 /*break*/, 4];
|
|
438
|
-
case 4: return [2 /*return*/];
|
|
196
|
+
catch (e) {
|
|
197
|
+
console.error(e);
|
|
198
|
+
this.setError(e);
|
|
439
199
|
}
|
|
440
|
-
}
|
|
441
|
-
})
|
|
442
|
-
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
200
|
+
}
|
|
201
|
+
}));
|
|
202
|
+
addDisposer(self, autorun(async () => {
|
|
203
|
+
const { msaFilehandle } = self;
|
|
204
|
+
if (msaFilehandle) {
|
|
205
|
+
try {
|
|
206
|
+
this.setMSA(await openLocation(msaFilehandle).readFile('utf8'));
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
console.error(e);
|
|
210
|
+
this.setError(e);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}));
|
|
214
|
+
},
|
|
215
|
+
}))
|
|
216
|
+
.views(self => {
|
|
217
|
+
let oldBlocksX = [];
|
|
218
|
+
let oldBlocksY = [];
|
|
219
|
+
let oldValX = 0;
|
|
220
|
+
let oldValY = 0;
|
|
449
221
|
return {
|
|
450
222
|
get initialized() {
|
|
451
223
|
return ((self.data.msa ||
|
|
@@ -455,10 +227,10 @@ var MSAModel = types
|
|
|
455
227
|
!self.error);
|
|
456
228
|
},
|
|
457
229
|
get blocksX() {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
for (
|
|
230
|
+
const { scrollX, blockSize: size, colWidth } = self;
|
|
231
|
+
const ret = -(size * Math.floor(scrollX / size)) - size;
|
|
232
|
+
const b = [];
|
|
233
|
+
for (let i = ret; i < ret + size * 3; i += size) {
|
|
462
234
|
if (i + size > 0) {
|
|
463
235
|
b.push(i);
|
|
464
236
|
}
|
|
@@ -471,10 +243,10 @@ var MSAModel = types
|
|
|
471
243
|
return oldBlocksX;
|
|
472
244
|
},
|
|
473
245
|
get blocksY() {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
for (
|
|
246
|
+
const { scrollY, blockSize: size, rowHeight } = self;
|
|
247
|
+
const ret = -(size * Math.floor(scrollY / size)) - 2 * size;
|
|
248
|
+
const b = [];
|
|
249
|
+
for (let i = ret; i < ret + size * 3; i += size) {
|
|
478
250
|
if (i + size > 0) {
|
|
479
251
|
b.push(i);
|
|
480
252
|
}
|
|
@@ -488,9 +260,9 @@ var MSAModel = types
|
|
|
488
260
|
},
|
|
489
261
|
};
|
|
490
262
|
})
|
|
491
|
-
.views(
|
|
263
|
+
.views(self => ({
|
|
492
264
|
get blocks2d() {
|
|
493
|
-
return self.blocksY.
|
|
265
|
+
return self.blocksY.flatMap(by => self.blocksX.map(bx => [bx, by]));
|
|
494
266
|
},
|
|
495
267
|
get done() {
|
|
496
268
|
return self.initialized && (self.data.msa || self.data.tree);
|
|
@@ -498,16 +270,17 @@ var MSAModel = types
|
|
|
498
270
|
get colorScheme() {
|
|
499
271
|
return colorSchemes[self.colorSchemeName];
|
|
500
272
|
},
|
|
501
|
-
get
|
|
273
|
+
get header() {
|
|
502
274
|
var _a;
|
|
503
|
-
return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.
|
|
275
|
+
return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getHeader()) || {};
|
|
504
276
|
},
|
|
505
|
-
|
|
506
|
-
var _a
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
277
|
+
getRowData(name) {
|
|
278
|
+
var _a;
|
|
279
|
+
const matches = name.match(/\S+\/(\d+)-(\d+)/);
|
|
280
|
+
return {
|
|
281
|
+
data: ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRowData(name)) || {},
|
|
282
|
+
...(matches && { range: { start: +matches[1], end: +matches[2] } }),
|
|
283
|
+
};
|
|
511
284
|
},
|
|
512
285
|
get currentAlignmentName() {
|
|
513
286
|
return this.alignmentNames[self.currentAlignment];
|
|
@@ -523,7 +296,7 @@ var MSAModel = types
|
|
|
523
296
|
return [];
|
|
524
297
|
},
|
|
525
298
|
get MSA() {
|
|
526
|
-
|
|
299
|
+
const text = self.data.msa;
|
|
527
300
|
if (text) {
|
|
528
301
|
if (Stockholm.sniff(text)) {
|
|
529
302
|
return new StockholmMSA(text, self.currentAlignment);
|
|
@@ -545,38 +318,39 @@ var MSAModel = types
|
|
|
545
318
|
var _a;
|
|
546
319
|
return self.data.tree
|
|
547
320
|
? generateNodeIds(parseNewick(self.data.tree))
|
|
548
|
-
: ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getTree()) || {
|
|
321
|
+
: ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getTree()) || {
|
|
322
|
+
noTree: true,
|
|
323
|
+
branchset: [],
|
|
324
|
+
id: 'empty',
|
|
325
|
+
name: 'empty',
|
|
326
|
+
};
|
|
549
327
|
},
|
|
550
328
|
get rowNames() {
|
|
551
|
-
return this.hierarchy.leaves().map(
|
|
329
|
+
return this.hierarchy.leaves().map(node => node.data.name);
|
|
552
330
|
},
|
|
553
331
|
get mouseOverRowName() {
|
|
554
332
|
return self.mouseRow !== undefined
|
|
555
333
|
? this.rowNames[self.mouseRow]
|
|
556
334
|
: undefined;
|
|
557
335
|
},
|
|
558
|
-
getMouseOverResidue
|
|
336
|
+
getMouseOverResidue(rowName) {
|
|
559
337
|
return this.columns[rowName];
|
|
560
338
|
},
|
|
561
339
|
get root() {
|
|
562
|
-
|
|
563
|
-
.sum(
|
|
564
|
-
.sort(
|
|
565
|
-
return ascending(a.data.length || 1, b.data.length || 1);
|
|
566
|
-
});
|
|
340
|
+
let hier = hierarchy(this.tree, d => d.branchset)
|
|
341
|
+
.sum(d => (d.branchset ? 0 : 1))
|
|
342
|
+
.sort((a, b) => ascending(a.data.length || 1, b.data.length || 1));
|
|
567
343
|
if (self.showOnly) {
|
|
568
|
-
|
|
344
|
+
const res = hier.find(node => node.data.id === self.showOnly);
|
|
569
345
|
if (res) {
|
|
570
346
|
hier = res;
|
|
571
347
|
}
|
|
572
348
|
}
|
|
573
349
|
if (self.collapsed.length) {
|
|
574
350
|
self.collapsed
|
|
575
|
-
.map(
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
.filter(function (f) { return !!f; })
|
|
579
|
-
.map(function (node) { return collapse(node); });
|
|
351
|
+
.map(collapsedId => hier.find(node => node.data.id === collapsedId))
|
|
352
|
+
.filter((f) => !!f)
|
|
353
|
+
.map(node => collapse(node));
|
|
580
354
|
}
|
|
581
355
|
return hier;
|
|
582
356
|
},
|
|
@@ -585,34 +359,23 @@ var MSAModel = types
|
|
|
585
359
|
return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getStructures()) || {};
|
|
586
360
|
},
|
|
587
361
|
get inverseStructures() {
|
|
588
|
-
|
|
589
|
-
.map(function (_a) {
|
|
590
|
-
var key = _a[0], val = _a[1];
|
|
591
|
-
return val.map(function (pdbEntry) { return [pdbEntry.pdb, { id: key }]; });
|
|
592
|
-
})
|
|
593
|
-
.flat();
|
|
594
|
-
return Object.fromEntries(map);
|
|
362
|
+
return Object.fromEntries(Object.entries(this.structures).flatMap(([key, val]) => val.map(pdbEntry => [pdbEntry.pdb, { id: key }])));
|
|
595
363
|
},
|
|
596
364
|
get msaAreaWidth() {
|
|
597
|
-
|
|
365
|
+
// @ts-expect-error
|
|
598
366
|
return self.width - self.treeAreaWidth;
|
|
599
367
|
},
|
|
600
368
|
get blanks() {
|
|
601
|
-
var _this = this;
|
|
602
369
|
var _a;
|
|
603
|
-
|
|
604
|
-
|
|
370
|
+
const blanks = [];
|
|
371
|
+
const strs = this.hierarchy
|
|
605
372
|
.leaves()
|
|
606
|
-
.map(
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
for (var i = 0; i < ((_a = strs[0]) === null || _a === void 0 ? void 0 : _a.length); i++) {
|
|
613
|
-
var counter = 0;
|
|
614
|
-
for (var j = 0; j < strs.length; j++) {
|
|
615
|
-
if (strs[j][i] === '-') {
|
|
373
|
+
.map(({ data }) => { var _a; return (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRow(data.name); })
|
|
374
|
+
.filter((item) => !!item);
|
|
375
|
+
for (let i = 0; i < ((_a = strs[0]) === null || _a === void 0 ? void 0 : _a.length); i++) {
|
|
376
|
+
let counter = 0;
|
|
377
|
+
for (const str of strs) {
|
|
378
|
+
if (str[i] === '-') {
|
|
616
379
|
counter++;
|
|
617
380
|
}
|
|
618
381
|
}
|
|
@@ -623,39 +386,27 @@ var MSAModel = types
|
|
|
623
386
|
return blanks;
|
|
624
387
|
},
|
|
625
388
|
get rows() {
|
|
626
|
-
var _this = this;
|
|
627
389
|
return this.hierarchy
|
|
628
390
|
.leaves()
|
|
629
|
-
.map(
|
|
630
|
-
|
|
631
|
-
var data = _a.data;
|
|
632
|
-
return [data.name, (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name)];
|
|
633
|
-
})
|
|
634
|
-
.filter(function (f) { return !!f[1]; });
|
|
391
|
+
.map(({ data }) => { var _a; return [data.name, (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRow(data.name)]; })
|
|
392
|
+
.filter((f) => !!f[1]);
|
|
635
393
|
},
|
|
636
394
|
get columns() {
|
|
637
|
-
|
|
638
|
-
var cols = this.columns2d;
|
|
639
|
-
return Object.fromEntries(rows.map(function (row, index) { return [row[0], cols[index]]; }));
|
|
395
|
+
return Object.fromEntries(this.rows.map((row, index) => [row[0], this.columns2d[index]]));
|
|
640
396
|
},
|
|
641
397
|
get columns2d() {
|
|
642
|
-
|
|
643
|
-
var ret = [];
|
|
644
|
-
for (var i = 0; i < strs.length; i++) {
|
|
645
|
-
ret.push(skipBlanks(this.blanks, strs[i]));
|
|
646
|
-
}
|
|
647
|
-
return ret;
|
|
398
|
+
return this.rows.map(r => r[1]).map(str => skipBlanks(this.blanks, str));
|
|
648
399
|
},
|
|
649
400
|
get colStats() {
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
for (
|
|
653
|
-
for (
|
|
654
|
-
|
|
655
|
-
if (!l[
|
|
656
|
-
l[
|
|
401
|
+
const r = [];
|
|
402
|
+
const columns = this.columns2d;
|
|
403
|
+
for (const column of columns) {
|
|
404
|
+
for (let j = 0; j < column.length; j++) {
|
|
405
|
+
const l = r[j] || {};
|
|
406
|
+
if (!l[column[j]]) {
|
|
407
|
+
l[column[j]] = 0;
|
|
657
408
|
}
|
|
658
|
-
l[
|
|
409
|
+
l[column[j]]++;
|
|
659
410
|
r[j] = l;
|
|
660
411
|
}
|
|
661
412
|
}
|
|
@@ -663,43 +414,45 @@ var MSAModel = types
|
|
|
663
414
|
},
|
|
664
415
|
// generates a new tree that is clustered with x,y positions
|
|
665
416
|
get hierarchy() {
|
|
666
|
-
|
|
667
|
-
|
|
417
|
+
const root = this.root;
|
|
418
|
+
const clust = cluster()
|
|
668
419
|
.size([this.totalHeight, self.treeWidth])
|
|
669
|
-
.separation(
|
|
420
|
+
.separation(() => 1);
|
|
670
421
|
clust(root);
|
|
671
|
-
setBrLength(root,
|
|
672
|
-
//@ts-ignore
|
|
673
|
-
(root.data.length = 0), self.treeWidth / maxLength(root));
|
|
422
|
+
setBrLength(root, (root.data.length = 0), self.treeWidth / maxLength(root));
|
|
674
423
|
return root;
|
|
675
424
|
},
|
|
676
425
|
get totalHeight() {
|
|
677
426
|
return this.root.leaves().length * self.rowHeight;
|
|
678
427
|
},
|
|
679
|
-
})
|
|
680
|
-
.actions(
|
|
681
|
-
addUniprotTrack
|
|
682
|
-
if (self.boxTracks.
|
|
428
|
+
}))
|
|
429
|
+
.actions(self => ({
|
|
430
|
+
addUniprotTrack(node) {
|
|
431
|
+
if (self.boxTracks.some(t => t.name === node.name)) {
|
|
683
432
|
if (self.turnedOffTracks.has(node.name)) {
|
|
684
433
|
this.toggleTrack(node.name);
|
|
685
434
|
}
|
|
686
435
|
}
|
|
687
436
|
else {
|
|
688
|
-
self.boxTracks.push(
|
|
437
|
+
self.boxTracks.push({
|
|
438
|
+
...node,
|
|
439
|
+
id: node.name,
|
|
440
|
+
associatedRowName: node.name,
|
|
441
|
+
});
|
|
689
442
|
}
|
|
690
443
|
},
|
|
691
|
-
doScrollY
|
|
444
|
+
doScrollY(deltaY) {
|
|
692
445
|
self.scrollY = clamp(-self.totalHeight + 10, self.scrollY + deltaY, 0);
|
|
693
446
|
},
|
|
694
|
-
doScrollX
|
|
447
|
+
doScrollX(deltaX) {
|
|
695
448
|
self.scrollX = clamp(-self.numColumns + (self.msaAreaWidth - 100), self.scrollX + deltaX, 0);
|
|
696
449
|
},
|
|
697
|
-
setMouseoveredColumn
|
|
450
|
+
setMouseoveredColumn(n, chain, file) {
|
|
698
451
|
var _a;
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
452
|
+
let j = 0;
|
|
453
|
+
let i = 0;
|
|
454
|
+
const { id } = self.inverseStructures[file.slice(0, -4)] || {};
|
|
455
|
+
const row = (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.getRow(id);
|
|
703
456
|
if (row) {
|
|
704
457
|
for (i = 0; i < row.length && j < n; i++) {
|
|
705
458
|
if (row[i] !== '-') {
|
|
@@ -712,7 +465,7 @@ var MSAModel = types
|
|
|
712
465
|
self.mouseCol = undefined;
|
|
713
466
|
}
|
|
714
467
|
},
|
|
715
|
-
toggleTrack
|
|
468
|
+
toggleTrack(id) {
|
|
716
469
|
if (self.turnedOffTracks.has(id)) {
|
|
717
470
|
self.turnedOffTracks.delete(id);
|
|
718
471
|
}
|
|
@@ -720,8 +473,8 @@ var MSAModel = types
|
|
|
720
473
|
self.turnedOffTracks.set(id, true);
|
|
721
474
|
}
|
|
722
475
|
},
|
|
723
|
-
})
|
|
724
|
-
.views(
|
|
476
|
+
}))
|
|
477
|
+
.views(self => ({
|
|
725
478
|
get secondaryStructureConsensus() {
|
|
726
479
|
var _a;
|
|
727
480
|
return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.secondaryStructureConsensus;
|
|
@@ -731,36 +484,39 @@ var MSAModel = types
|
|
|
731
484
|
return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.seqConsensus;
|
|
732
485
|
},
|
|
733
486
|
get conservation() {
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
col.push(m[j][i]);
|
|
487
|
+
if (self.columns2d.length) {
|
|
488
|
+
for (let i = 0; i < self.columns2d[0].length; i++) {
|
|
489
|
+
const col = [];
|
|
490
|
+
for (const column of self.columns2d) {
|
|
491
|
+
col.push(column[i]);
|
|
740
492
|
}
|
|
741
493
|
}
|
|
742
494
|
}
|
|
743
495
|
return ['a'];
|
|
744
496
|
},
|
|
745
497
|
get tracks() {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
? self.MSA.tracks.map(
|
|
749
|
-
|
|
498
|
+
const blanks = self.blanks;
|
|
499
|
+
const adapterTracks = self.MSA
|
|
500
|
+
? self.MSA.tracks.map(track => {
|
|
501
|
+
const { data } = track;
|
|
750
502
|
return {
|
|
751
|
-
model:
|
|
503
|
+
model: {
|
|
504
|
+
...track,
|
|
505
|
+
data: data ? skipBlanks(blanks, data) : undefined,
|
|
506
|
+
height: self.rowHeight,
|
|
507
|
+
},
|
|
752
508
|
ReactComponent: TextTrack,
|
|
753
509
|
};
|
|
754
510
|
})
|
|
755
511
|
: [];
|
|
756
|
-
|
|
512
|
+
const boxTracks = self.boxTracks
|
|
757
513
|
// filter out tracks that are associated with hidden rows
|
|
758
|
-
.filter(
|
|
759
|
-
.map(
|
|
514
|
+
.filter(track => !!self.rows.some(row => row[0] === track.name))
|
|
515
|
+
.map(track => ({
|
|
760
516
|
model: track,
|
|
761
517
|
ReactComponent: BoxTrack,
|
|
762
|
-
})
|
|
763
|
-
|
|
518
|
+
}));
|
|
519
|
+
const annotationTracks = self.annotatedRegions.length > 0
|
|
764
520
|
? [
|
|
765
521
|
{
|
|
766
522
|
model: {
|
|
@@ -769,13 +525,10 @@ var MSAModel = types
|
|
|
769
525
|
id: 'annotations',
|
|
770
526
|
name: 'User-created annotations',
|
|
771
527
|
data: self.annotatedRegions
|
|
772
|
-
.map(
|
|
773
|
-
|
|
528
|
+
.map(region => {
|
|
529
|
+
const attrs = region.attributes
|
|
774
530
|
? Object.entries(region.attributes)
|
|
775
|
-
.map(
|
|
776
|
-
var k = _a[0], v = _a[1];
|
|
777
|
-
return "".concat(k, "=").concat(v.join(','));
|
|
778
|
-
})
|
|
531
|
+
.map(([k, v]) => `${k}=${v.join(',')}`)
|
|
779
532
|
.join(';')
|
|
780
533
|
: '.';
|
|
781
534
|
return [
|
|
@@ -796,69 +549,72 @@ var MSAModel = types
|
|
|
796
549
|
},
|
|
797
550
|
]
|
|
798
551
|
: [];
|
|
799
|
-
return
|
|
552
|
+
return [...adapterTracks, ...boxTracks, ...annotationTracks];
|
|
800
553
|
},
|
|
801
554
|
get turnedOnTracks() {
|
|
802
|
-
return this.tracks.filter(
|
|
555
|
+
return this.tracks.filter(f => !self.turnedOffTracks.has(f.model.id));
|
|
803
556
|
},
|
|
804
557
|
// returns coordinate in the current relative coordinate scheme
|
|
805
|
-
pxToBp
|
|
558
|
+
pxToBp(coord) {
|
|
806
559
|
return Math.floor((coord - self.scrollX) / self.colWidth);
|
|
807
560
|
},
|
|
808
|
-
rowSpecificBpToPx
|
|
561
|
+
rowSpecificBpToPx(rowName, position) {
|
|
809
562
|
var _a;
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
563
|
+
const { rowNames, rows, blanks } = self;
|
|
564
|
+
const index = rowNames.indexOf(rowName);
|
|
565
|
+
const row = rows[index][1];
|
|
566
|
+
const details = self.getRowData(rowName);
|
|
567
|
+
const offset = ((_a = details.range) === null || _a === void 0 ? void 0 : _a.start) || 0;
|
|
568
|
+
const current = position - offset;
|
|
816
569
|
if (current < 0) {
|
|
817
570
|
return 0;
|
|
818
571
|
}
|
|
819
|
-
|
|
820
|
-
|
|
572
|
+
let j = 0;
|
|
573
|
+
let i = 0;
|
|
821
574
|
for (; i < row.length; i++) {
|
|
822
575
|
if (row[i] !== '-' && j++ === current) {
|
|
823
576
|
break;
|
|
824
577
|
}
|
|
825
578
|
}
|
|
826
|
-
|
|
827
|
-
for (
|
|
828
|
-
if (blanks.
|
|
579
|
+
let count = 0;
|
|
580
|
+
for (let k = 0; k < row.length; k++) {
|
|
581
|
+
if (blanks.includes(k) && k < i + 1) {
|
|
829
582
|
count++;
|
|
830
583
|
}
|
|
831
584
|
}
|
|
832
585
|
return i - count;
|
|
833
586
|
},
|
|
834
|
-
globalBpToPx
|
|
587
|
+
globalBpToPx(position) {
|
|
835
588
|
var _a;
|
|
836
|
-
|
|
837
|
-
for (
|
|
838
|
-
if (self.blanks.
|
|
589
|
+
let count = 0;
|
|
590
|
+
for (let k = 0; k < ((_a = self.rows[0]) === null || _a === void 0 ? void 0 : _a[1].length); k++) {
|
|
591
|
+
if (self.blanks.includes(k) && k < position + 1) {
|
|
839
592
|
count++;
|
|
840
593
|
}
|
|
841
594
|
}
|
|
842
595
|
return position - count;
|
|
843
596
|
},
|
|
844
|
-
relativePxToBp
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
597
|
+
relativePxToBp(rowName, position) {
|
|
598
|
+
const { rowNames, rows } = self;
|
|
599
|
+
const index = rowNames.indexOf(rowName);
|
|
600
|
+
if (index !== -1) {
|
|
601
|
+
const row = rows[index][1];
|
|
602
|
+
let k = 0;
|
|
603
|
+
for (let i = 0; i < position; i++) {
|
|
604
|
+
if (row[i] !== '-') {
|
|
605
|
+
k++;
|
|
606
|
+
}
|
|
607
|
+
else if (k >= position) {
|
|
608
|
+
break;
|
|
609
|
+
}
|
|
855
610
|
}
|
|
611
|
+
return k;
|
|
856
612
|
}
|
|
857
|
-
return
|
|
613
|
+
return 0;
|
|
858
614
|
},
|
|
859
|
-
getPos
|
|
860
|
-
|
|
861
|
-
for (
|
|
615
|
+
getPos(pos) {
|
|
616
|
+
let j = 0;
|
|
617
|
+
for (let i = 0, k = 0; i < pos; i++, j++) {
|
|
862
618
|
while (j === self.blanks[k]) {
|
|
863
619
|
k++;
|
|
864
620
|
j++;
|
|
@@ -866,31 +622,37 @@ var MSAModel = types
|
|
|
866
622
|
}
|
|
867
623
|
return j;
|
|
868
624
|
},
|
|
869
|
-
})
|
|
870
|
-
.actions(
|
|
871
|
-
addAnnotation
|
|
625
|
+
}))
|
|
626
|
+
.actions(self => ({
|
|
627
|
+
addAnnotation(start, end, attributes) {
|
|
872
628
|
self.annotatedRegions.push({
|
|
873
629
|
start: self.getPos(start),
|
|
874
630
|
end: self.getPos(end),
|
|
875
|
-
attributes
|
|
631
|
+
attributes,
|
|
876
632
|
});
|
|
877
633
|
},
|
|
878
|
-
setOffsets
|
|
879
|
-
self.annotPos = { left
|
|
634
|
+
setOffsets(left, right) {
|
|
635
|
+
self.annotPos = { left, right };
|
|
880
636
|
},
|
|
881
|
-
clearAnnotPos
|
|
637
|
+
clearAnnotPos() {
|
|
882
638
|
self.annotPos = undefined;
|
|
883
639
|
},
|
|
884
|
-
})
|
|
885
|
-
|
|
886
|
-
postProcessor
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
// which case it can be reloaded on refresh
|
|
890
|
-
, ["data"]);
|
|
640
|
+
}));
|
|
641
|
+
const model = types.snapshotProcessor(types.compose(BaseViewModel, MSAModel), {
|
|
642
|
+
postProcessor(result) {
|
|
643
|
+
const snap = result;
|
|
644
|
+
const { data: { tree, msa }, ...rest } = snap;
|
|
891
645
|
// remove the MSA/tree data from the tree if the filehandle available in
|
|
892
646
|
// which case it can be reloaded on refresh
|
|
893
|
-
return
|
|
647
|
+
return {
|
|
648
|
+
data: {
|
|
649
|
+
// https://andreasimonecosta.dev/posts/the-shortest-way-to-conditionally-insert-properties-into-an-object-literal/
|
|
650
|
+
...(!result.treeFilehandle && { tree }),
|
|
651
|
+
...(!result.msaFilehandle && { msa }),
|
|
652
|
+
},
|
|
653
|
+
...rest,
|
|
654
|
+
};
|
|
894
655
|
},
|
|
895
656
|
});
|
|
896
657
|
export default model;
|
|
658
|
+
//# sourceMappingURL=model.js.map
|