@jbrowse/core 2.0.0 → 2.1.2
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/BaseFeatureWidget/BaseFeatureDetail.d.ts +9 -3
- package/BaseFeatureWidget/BaseFeatureDetail.js +313 -581
- package/BaseFeatureWidget/SequenceFeatureDetails.js +213 -478
- package/BaseFeatureWidget/index.js +88 -126
- package/BaseFeatureWidget/types.d.ts +1 -0
- package/BaseFeatureWidget/types.js +1 -4
- package/BaseFeatureWidget/util.js +40 -75
- package/CorePlugin.js +55 -94
- package/Plugin.js +9 -34
- package/PluginLoader.js +153 -422
- package/PluginManager.d.ts +28 -33
- package/PluginManager.js +377 -666
- package/ReExports/Attributes.js +3 -10
- package/ReExports/BaseCard.js +3 -10
- package/ReExports/DataGrid.js +5 -12
- package/ReExports/FeatureDetails.js +3 -10
- package/ReExports/index.js +6 -12
- package/ReExports/list.d.ts +5 -0
- package/ReExports/list.js +271 -7
- package/ReExports/material-ui-colors.js +15 -16
- package/ReExports/modules.d.ts +11 -20
- package/ReExports/modules.js +453 -798
- package/TextSearch/BaseResults.js +51 -123
- package/TextSearch/TextSearchManager.js +66 -144
- package/assemblyManager/assembly.js +280 -555
- package/assemblyManager/assemblyConfigSchema.js +47 -64
- package/assemblyManager/assemblyManager.js +126 -272
- package/assemblyManager/index.js +9 -22
- package/configuration/configurationSchema.js +167 -203
- package/configuration/configurationSlot.js +248 -326
- package/configuration/index.js +19 -35
- package/configuration/util.js +131 -173
- package/data_adapters/BaseAdapter.d.ts +2 -2
- package/data_adapters/BaseAdapter.js +132 -521
- package/data_adapters/CytobandAdapter.js +40 -126
- package/data_adapters/dataAdapterCache.js +77 -158
- package/package.json +4 -5
- package/pluggableElementTypes/AdapterType.js +24 -79
- package/pluggableElementTypes/AddTrackWorkflowType.d.ts +17 -0
- package/pluggableElementTypes/AddTrackWorkflowType.js +20 -0
- package/pluggableElementTypes/ConnectionType.js +22 -65
- package/pluggableElementTypes/DisplayType.js +35 -82
- package/pluggableElementTypes/InternetAccountType.js +23 -64
- package/pluggableElementTypes/PluggableElementBase.js +8 -20
- package/pluggableElementTypes/RpcMethodType.js +85 -427
- package/pluggableElementTypes/TextSearchAdapterType.js +16 -55
- package/pluggableElementTypes/TrackType.js +26 -70
- package/pluggableElementTypes/ViewType.js +21 -63
- package/pluggableElementTypes/WidgetType.js +21 -64
- package/pluggableElementTypes/index.d.ts +4 -3
- package/pluggableElementTypes/index.js +42 -125
- package/pluggableElementTypes/models/BaseConnectionModelFactory.js +28 -43
- package/pluggableElementTypes/models/BaseDisplayModel.js +58 -95
- package/pluggableElementTypes/models/BaseTrackModel.js +139 -199
- package/pluggableElementTypes/models/BaseViewModel.js +24 -40
- package/pluggableElementTypes/models/InternetAccountModel.js +116 -263
- package/pluggableElementTypes/models/baseConnectionConfig.js +14 -25
- package/pluggableElementTypes/models/baseInternetAccountConfig.js +29 -38
- package/pluggableElementTypes/models/baseTrackConfig.js +106 -133
- package/pluggableElementTypes/models/index.js +21 -70
- package/pluggableElementTypes/renderers/BoxRendererType.js +132 -291
- package/pluggableElementTypes/renderers/CircularChordRendererType.js +8 -38
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +60 -192
- package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +0 -2
- package/pluggableElementTypes/renderers/FeatureRendererType.js +89 -255
- package/pluggableElementTypes/renderers/RendererType.js +31 -105
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +61 -72
- package/pluggableElementTypes/renderers/ServerSideRendererType.js +112 -265
- package/pluggableElementTypes/renderers/index.js +19 -62
- package/pluggableElementTypes/renderers/util/serializableFilterChain.js +27 -65
- package/rpc/BaseRpcDriver.js +169 -405
- package/rpc/MainThreadRpcDriver.js +27 -150
- package/rpc/RpcManager.js +58 -159
- package/rpc/WebWorkerRpcDriver.js +54 -171
- package/rpc/configSchema.js +25 -49
- package/rpc/coreRpcMethods.d.ts +1 -3
- package/rpc/coreRpcMethods.js +221 -959
- package/rpc/remoteAbortSignals.js +46 -70
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/AboutDialog.js +106 -162
- package/ui/App.js +157 -242
- package/ui/AssemblySelector.js +59 -120
- package/ui/CascadingMenu.js +101 -196
- package/ui/ColorPicker.d.ts +16 -0
- package/ui/ColorPicker.js +97 -0
- package/ui/Drawer.js +28 -61
- package/ui/DrawerWidget.js +108 -202
- package/ui/DropDownMenu.js +60 -91
- package/ui/EditableTypography.js +87 -149
- package/ui/ErrorMessage.js +41 -56
- package/ui/FactoryResetDialog.js +24 -57
- package/ui/FatalErrorDialog.js +59 -91
- package/ui/FileSelector/FileSelector.js +123 -189
- package/ui/FileSelector/LocalFileChooser.js +44 -75
- package/ui/FileSelector/UrlChooser.js +17 -38
- package/ui/FileSelector/index.js +6 -12
- package/ui/Icons.js +45 -69
- package/ui/Logo.js +57 -110
- package/ui/Menu.js +232 -354
- package/ui/PrerenderedCanvas.js +63 -87
- package/ui/ResizeHandle.js +87 -116
- package/ui/ReturnToImportFormDialog.js +32 -63
- package/ui/SanitizedHTML.js +64 -47
- package/ui/Snackbar.js +74 -101
- package/ui/SnackbarModel.js +37 -51
- package/ui/Tooltip.js +49 -76
- package/ui/ViewContainer.js +113 -196
- package/ui/colors.d.ts +10 -0
- package/ui/colors.js +78 -0
- package/ui/index.js +51 -181
- package/ui/react-colorful.d.ts +17 -0
- package/ui/react-colorful.js +455 -0
- package/ui/theme.d.ts +23 -1
- package/ui/theme.js +199 -247
- package/util/Base1DUtils.d.ts +32 -0
- package/util/Base1DUtils.js +174 -0
- package/util/Base1DViewModel.d.ts +16 -30
- package/util/Base1DViewModel.js +116 -293
- package/util/QuickLRU.js +84 -332
- package/util/TimeTraveller.d.ts +19 -0
- package/util/TimeTraveller.js +86 -0
- package/util/aborting.js +49 -127
- package/util/analytics.js +91 -154
- package/util/blockTypes.js +106 -240
- package/util/calculateDynamicBlocks.js +98 -128
- package/util/calculateStaticBlocks.js +105 -125
- package/util/color/cssColorsLevel4.js +156 -160
- package/util/color/index.js +33 -55
- package/util/compositeMap.js +49 -333
- package/util/formatFastaStrings.js +9 -14
- package/util/idMaker.js +18 -31
- package/util/index.d.ts +18 -32
- package/util/index.js +747 -1226
- package/util/io/RemoteFileWithRangeCache.js +88 -257
- package/util/io/index.js +95 -169
- package/util/jexl.js +60 -115
- package/util/jexlStrings.js +24 -29
- package/util/layouts/BaseLayout.js +1 -4
- package/util/layouts/GranularRectLayout.js +388 -555
- package/util/layouts/MultiLayout.js +41 -109
- package/util/layouts/PrecomputedLayout.js +56 -112
- package/util/layouts/PrecomputedMultiLayout.js +22 -59
- package/util/layouts/SceneGraph.js +127 -197
- package/util/layouts/index.js +29 -66
- package/util/mst-reflection.js +55 -71
- package/util/offscreenCanvasPonyfill.js +66 -134
- package/util/offscreenCanvasUtils.d.ts +2 -7
- package/util/offscreenCanvasUtils.js +49 -146
- package/util/range.js +29 -40
- package/util/rxjs.js +20 -27
- package/util/simpleFeature.js +88 -152
- package/util/stats.js +91 -151
- package/util/tracks.js +130 -173
- package/util/types/index.js +110 -179
- package/util/types/mst.js +91 -146
- package/util/types/util.js +1 -4
- package/util/when.js +54 -101
- package/BaseFeatureWidget/SequenceFeatureDetails.test.js +0 -122
- package/BaseFeatureWidget/index.test.js +0 -69
- package/TextSearch/BaseResults.test.js +0 -42
- package/configuration/configurationSchema.test.js +0 -266
- package/configuration/configurationSlot.test.js +0 -69
- package/configuration/util.test.js +0 -39
- package/data_adapters/BaseAdapter.test.js +0 -200
- package/declare.d.js +0 -1
- package/pluggableElementTypes/RpcMethodType.test.js +0 -118
- package/pluggableElementTypes/renderers/declare.d.js +0 -1
- package/pluggableElementTypes/renderers/util/serializableFilterChain.test.js +0 -20
- package/rpc/BaseRpcDriver.test.js +0 -540
- package/rpc/declaration.d.js +0 -1
- package/ui/FatalErrorDialog.test.js +0 -82
- package/ui/SanitizedHTML.test.js +0 -36
- package/ui/theme.test.js +0 -92
- package/util/Base1DViewModel.test.js +0 -130
- package/util/calculateDynamicBlocks.test.js +0 -74
- package/util/calculateStaticBlocks.test.js +0 -297
- package/util/declare.d.js +0 -1
- package/util/formatFastaStrings.test.js +0 -40
- package/util/index.test.js +0 -213
- package/util/jexlStrings.test.js +0 -48
- package/util/layouts/GranularRectLayout.test.js +0 -99
- package/util/range.test.js +0 -64
- package/util/simpleFeature.test.js +0 -34
- package/util/stats.test.js +0 -172
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { Instance } from 'mobx-state-tree';
|
|
2
2
|
import { Feature } from './simpleFeature';
|
|
3
3
|
import { Region as IRegion } from './types';
|
|
4
|
-
|
|
5
|
-
refName?: string;
|
|
6
|
-
index: number;
|
|
7
|
-
offset: number;
|
|
8
|
-
start?: number;
|
|
9
|
-
end?: number;
|
|
10
|
-
}
|
|
4
|
+
import { BpOffset } from './Base1DUtils';
|
|
11
5
|
declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
12
6
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
13
7
|
displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
@@ -38,30 +32,22 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
38
32
|
readonly maxOffset: number;
|
|
39
33
|
readonly minOffset: number;
|
|
40
34
|
readonly totalBp: number;
|
|
35
|
+
} & {
|
|
36
|
+
readonly dynamicBlocks: import("./blockTypes").BlockSet;
|
|
37
|
+
readonly staticBlocks: import("./blockTypes").BlockSet;
|
|
38
|
+
readonly currBp: number;
|
|
39
|
+
} & {
|
|
41
40
|
pxToBp(px: number): {
|
|
42
|
-
oob: boolean;
|
|
43
41
|
coord: number;
|
|
44
|
-
offset: number;
|
|
45
42
|
index: number;
|
|
46
43
|
refName: string;
|
|
47
|
-
start: number;
|
|
48
|
-
end: number;
|
|
49
|
-
reversed: boolean;
|
|
50
|
-
assemblyName: string;
|
|
51
|
-
} | {
|
|
52
|
-
coord: number;
|
|
53
|
-
index: number;
|
|
54
|
-
start: number;
|
|
55
|
-
refName: string;
|
|
56
44
|
oob: boolean;
|
|
57
45
|
assemblyName: string;
|
|
58
46
|
offset: number;
|
|
47
|
+
start: number;
|
|
48
|
+
end: number;
|
|
59
49
|
reversed: boolean;
|
|
60
50
|
};
|
|
61
|
-
} & {
|
|
62
|
-
readonly dynamicBlocks: import("./blockTypes").BlockSet;
|
|
63
|
-
readonly staticBlocks: import("./blockTypes").BlockSet;
|
|
64
|
-
readonly currBp: number;
|
|
65
51
|
bpToPx({ refName, coord, regionNumber, }: {
|
|
66
52
|
refName: string;
|
|
67
53
|
coord: number;
|
|
@@ -69,8 +55,14 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
69
55
|
}): number | undefined;
|
|
70
56
|
} & {
|
|
71
57
|
setFeatures(features: Feature[]): void;
|
|
72
|
-
zoomToDisplayedRegions(leftPx: BpOffset | undefined, rightPx: BpOffset | undefined): void;
|
|
73
58
|
showAllRegions(): void;
|
|
59
|
+
zoomOut(): void;
|
|
60
|
+
zoomIn(): void;
|
|
61
|
+
zoomTo(newBpPerPx: number, offset?: number): number;
|
|
62
|
+
scrollTo(offsetPx: number): number;
|
|
63
|
+
centerAt(coord: number, refName: string | undefined, regionNumber: number): void;
|
|
64
|
+
scroll(distance: number): number;
|
|
65
|
+
} & {
|
|
74
66
|
/**
|
|
75
67
|
* offset is the base-pair-offset in the displayed region, index is the index of the
|
|
76
68
|
* displayed region in the linear genome view
|
|
@@ -78,13 +70,7 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
78
70
|
* @param start - object as `{start, end, offset, index}`
|
|
79
71
|
* @param end - object as `{start, end, offset, index}`
|
|
80
72
|
*/
|
|
81
|
-
moveTo(start
|
|
82
|
-
zoomOut(): void;
|
|
83
|
-
zoomIn(): void;
|
|
84
|
-
zoomTo(newBpPerPx: number, offset?: number): void;
|
|
85
|
-
scrollTo(offsetPx: number): number;
|
|
86
|
-
centerAt(coord: number, refName: string, regionNumber: number): void;
|
|
87
|
-
scroll(distance: number): number;
|
|
73
|
+
moveTo(start?: BpOffset, end?: BpOffset): void;
|
|
88
74
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
89
75
|
export declare type Base1DViewStateModel = typeof Base1DView;
|
|
90
76
|
export declare type Base1DViewModel = Instance<Base1DViewStateModel>;
|
package/util/Base1DViewModel.js
CHANGED
|
@@ -1,242 +1,142 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var _calculateStaticBlocks = _interopRequireDefault(require("./calculateStaticBlocks"));
|
|
23
|
-
|
|
24
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
25
|
-
|
|
26
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
27
|
-
|
|
28
|
-
var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
29
|
-
id: _mst.ElementId,
|
|
30
|
-
displayedRegions: _mobxStateTree.types.array(_mst.Region),
|
|
31
|
-
bpPerPx: 0,
|
|
32
|
-
offsetPx: 0,
|
|
33
|
-
interRegionPaddingWidth: _mobxStateTree.types.optional(_mobxStateTree.types.number, 0),
|
|
34
|
-
minimumBlockWidth: _mobxStateTree.types.optional(_mobxStateTree.types.number, 0)
|
|
35
|
-
}).volatile(function () {
|
|
36
|
-
return {
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
7
|
+
const index_1 = require("./index");
|
|
8
|
+
const mst_1 = require("./types/mst");
|
|
9
|
+
const calculateDynamicBlocks_1 = __importDefault(require("./calculateDynamicBlocks"));
|
|
10
|
+
const calculateStaticBlocks_1 = __importDefault(require("./calculateStaticBlocks"));
|
|
11
|
+
const Base1DUtils_1 = require("./Base1DUtils");
|
|
12
|
+
const Base1DView = mobx_state_tree_1.types
|
|
13
|
+
.model('Base1DView', {
|
|
14
|
+
id: mst_1.ElementId,
|
|
15
|
+
displayedRegions: mobx_state_tree_1.types.array(mst_1.Region),
|
|
16
|
+
bpPerPx: 0,
|
|
17
|
+
offsetPx: 0,
|
|
18
|
+
interRegionPaddingWidth: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 0),
|
|
19
|
+
minimumBlockWidth: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 0),
|
|
20
|
+
})
|
|
21
|
+
.volatile(() => ({
|
|
37
22
|
features: undefined,
|
|
38
|
-
volatileWidth: 0
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
self.displayedRegions = (0, _mobxStateTree.cast)(regions);
|
|
23
|
+
volatileWidth: 0,
|
|
24
|
+
}))
|
|
25
|
+
.actions(self => ({
|
|
26
|
+
setDisplayedRegions(regions) {
|
|
27
|
+
self.displayedRegions = (0, mobx_state_tree_1.cast)(regions);
|
|
44
28
|
},
|
|
45
|
-
setBpPerPx
|
|
46
|
-
|
|
29
|
+
setBpPerPx(val) {
|
|
30
|
+
self.bpPerPx = val;
|
|
47
31
|
},
|
|
48
|
-
setVolatileWidth
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return {
|
|
32
|
+
setVolatileWidth(width) {
|
|
33
|
+
self.volatileWidth = width;
|
|
34
|
+
},
|
|
35
|
+
}))
|
|
36
|
+
.views(self => ({
|
|
54
37
|
get width() {
|
|
55
|
-
|
|
38
|
+
return self.volatileWidth;
|
|
56
39
|
},
|
|
57
|
-
|
|
58
40
|
get assemblyNames() {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
41
|
+
return [
|
|
42
|
+
...new Set(self.displayedRegions.map(region => region.assemblyName)),
|
|
43
|
+
];
|
|
62
44
|
},
|
|
63
|
-
|
|
64
45
|
get displayedRegionsTotalPx() {
|
|
65
|
-
|
|
46
|
+
return this.totalBp / self.bpPerPx;
|
|
66
47
|
},
|
|
67
|
-
|
|
68
48
|
get maxOffset() {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
49
|
+
// objectively determined to keep the linear genome on the main screen
|
|
50
|
+
const leftPadding = 10;
|
|
51
|
+
return this.displayedRegionsTotalPx - leftPadding;
|
|
72
52
|
},
|
|
73
|
-
|
|
74
53
|
get minOffset() {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
54
|
+
// objectively determined to keep the linear genome on the main screen
|
|
55
|
+
const rightPadding = 30;
|
|
56
|
+
return -this.width + rightPadding;
|
|
78
57
|
},
|
|
79
|
-
|
|
80
58
|
get totalBp() {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return a + b;
|
|
85
|
-
}, 0);
|
|
59
|
+
return self.displayedRegions
|
|
60
|
+
.map(a => a.end - a.start)
|
|
61
|
+
.reduce((a, b) => a + b, 0);
|
|
86
62
|
},
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var bpSoFar = 0;
|
|
90
|
-
var bp = (self.offsetPx + px) * self.bpPerPx;
|
|
91
|
-
var n = self.displayedRegions.length;
|
|
92
|
-
|
|
93
|
-
if (bp < 0) {
|
|
94
|
-
var region = self.displayedRegions[0];
|
|
95
|
-
var offset = bp;
|
|
96
|
-
var snap = (0, _mobxStateTree.getSnapshot)(region);
|
|
97
|
-
return _objectSpread(_objectSpread({}, snap), {}, {
|
|
98
|
-
oob: true,
|
|
99
|
-
coord: region.reversed ? Math.floor(region.end - offset) + 1 : Math.floor(region.start + offset) + 1,
|
|
100
|
-
offset: offset,
|
|
101
|
-
index: 0
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
var interRegionPaddingBp = self.interRegionPaddingWidth * self.bpPerPx;
|
|
106
|
-
var minimumBlockBp = self.minimumBlockWidth * self.bpPerPx;
|
|
107
|
-
|
|
108
|
-
for (var index = 0; index < self.displayedRegions.length; index += 1) {
|
|
109
|
-
var _region = self.displayedRegions[index];
|
|
110
|
-
var len = _region.end - _region.start;
|
|
111
|
-
|
|
112
|
-
var _offset = bp - bpSoFar;
|
|
113
|
-
|
|
114
|
-
if (len + bpSoFar > bp && bpSoFar <= bp) {
|
|
115
|
-
var _snap = (0, _mobxStateTree.getSnapshot)(_region);
|
|
116
|
-
|
|
117
|
-
return _objectSpread(_objectSpread({}, _snap), {}, {
|
|
118
|
-
oob: false,
|
|
119
|
-
offset: _offset,
|
|
120
|
-
coord: _region.reversed ? Math.floor(_region.end - _offset) + 1 : Math.floor(_region.start + _offset) + 1,
|
|
121
|
-
index: index
|
|
122
|
-
});
|
|
123
|
-
} // add the interRegionPaddingWidth if the boundary is in the screen
|
|
124
|
-
// e.g. offset>0 && offset<width
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (_region.end - _region.start > minimumBlockBp && _offset / self.bpPerPx > 0 && _offset / self.bpPerPx < this.width) {
|
|
128
|
-
bpSoFar += len + interRegionPaddingBp;
|
|
129
|
-
} else {
|
|
130
|
-
bpSoFar += len;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (bp >= bpSoFar) {
|
|
135
|
-
var _region2 = self.displayedRegions[n - 1];
|
|
136
|
-
|
|
137
|
-
var _len = _region2.end - _region2.start;
|
|
138
|
-
|
|
139
|
-
var _offset2 = bp - bpSoFar + _len;
|
|
140
|
-
|
|
141
|
-
var _snap2 = (0, _mobxStateTree.getSnapshot)(_region2);
|
|
142
|
-
|
|
143
|
-
return _objectSpread(_objectSpread({}, _snap2), {}, {
|
|
144
|
-
oob: true,
|
|
145
|
-
offset: _offset2,
|
|
146
|
-
coord: _region2.reversed ? Math.floor(_region2.end - _offset2) + 1 : Math.floor(_region2.start + _offset2) + 1,
|
|
147
|
-
index: n - 1
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
coord: 0,
|
|
153
|
-
index: 0,
|
|
154
|
-
start: 0,
|
|
155
|
-
refName: '',
|
|
156
|
-
oob: true,
|
|
157
|
-
assemblyName: '',
|
|
158
|
-
offset: 0,
|
|
159
|
-
reversed: false
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
}).views(function (self) {
|
|
164
|
-
return {
|
|
63
|
+
}))
|
|
64
|
+
.views(self => ({
|
|
165
65
|
get dynamicBlocks() {
|
|
166
|
-
|
|
66
|
+
return (0, calculateDynamicBlocks_1.default)(self);
|
|
167
67
|
},
|
|
168
|
-
|
|
169
68
|
get staticBlocks() {
|
|
170
|
-
|
|
69
|
+
return (0, calculateStaticBlocks_1.default)(self);
|
|
171
70
|
},
|
|
172
|
-
|
|
173
71
|
get currBp() {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
72
|
+
return this.dynamicBlocks
|
|
73
|
+
.map(a => a.end - a.start)
|
|
74
|
+
.reduce((a, b) => a + b, 0);
|
|
75
|
+
},
|
|
76
|
+
}))
|
|
77
|
+
.views(self => ({
|
|
78
|
+
pxToBp(px) {
|
|
79
|
+
return (0, Base1DUtils_1.pxToBp)(self, px);
|
|
179
80
|
},
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
var refName = _ref.refName,
|
|
185
|
-
coord = _ref.coord,
|
|
186
|
-
regionNumber = _ref.regionNumber;
|
|
187
|
-
return (_viewBpToPx = (0, _index.viewBpToPx)({
|
|
188
|
-
refName: refName,
|
|
189
|
-
coord: coord,
|
|
190
|
-
regionNumber: regionNumber,
|
|
191
|
-
self: self
|
|
192
|
-
})) === null || _viewBpToPx === void 0 ? void 0 : _viewBpToPx.offsetPx;
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
}).actions(function (self) {
|
|
196
|
-
return {
|
|
197
|
-
setFeatures: function setFeatures(features) {
|
|
198
|
-
self.features = features;
|
|
81
|
+
bpToPx({ refName, coord, regionNumber, }) {
|
|
82
|
+
var _a;
|
|
83
|
+
return (_a = (0, Base1DUtils_1.bpToPx)({ refName, coord, regionNumber, self })) === null || _a === void 0 ? void 0 : _a.offsetPx;
|
|
199
84
|
},
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
var singleRefSeq = leftPx.refName === rightPx.refName && leftPx.index === rightPx.index; // zooming into one displayed Region
|
|
206
|
-
|
|
207
|
-
if (singleRefSeq && rightPx.offset < leftPx.offset || leftPx.index > rightPx.index) {
|
|
208
|
-
;
|
|
209
|
-
var _ref2 = [rightPx, leftPx];
|
|
210
|
-
leftPx = _ref2[0];
|
|
211
|
-
rightPx = _ref2[1];
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
var startOffset = {
|
|
215
|
-
start: leftPx.start,
|
|
216
|
-
end: leftPx.end,
|
|
217
|
-
index: leftPx.index,
|
|
218
|
-
offset: leftPx.offset
|
|
219
|
-
};
|
|
220
|
-
var endOffset = {
|
|
221
|
-
start: rightPx.start,
|
|
222
|
-
end: rightPx.end,
|
|
223
|
-
index: rightPx.index,
|
|
224
|
-
offset: rightPx.offset
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
if (startOffset && endOffset) {
|
|
228
|
-
this.moveTo(startOffset, endOffset);
|
|
229
|
-
} else {
|
|
230
|
-
throw new Error('regions not found');
|
|
231
|
-
}
|
|
85
|
+
}))
|
|
86
|
+
.actions(self => ({
|
|
87
|
+
setFeatures(features) {
|
|
88
|
+
self.features = features;
|
|
232
89
|
},
|
|
233
90
|
// this makes a zoomed out view that shows all displayedRegions
|
|
234
91
|
// that makes the overview bar square with the scale bar
|
|
235
|
-
showAllRegions
|
|
236
|
-
|
|
237
|
-
|
|
92
|
+
showAllRegions() {
|
|
93
|
+
self.bpPerPx = self.totalBp / self.width;
|
|
94
|
+
self.offsetPx = 0;
|
|
95
|
+
},
|
|
96
|
+
zoomOut() {
|
|
97
|
+
this.zoomTo(self.bpPerPx * 2);
|
|
98
|
+
},
|
|
99
|
+
zoomIn() {
|
|
100
|
+
this.zoomTo(self.bpPerPx / 2);
|
|
101
|
+
},
|
|
102
|
+
zoomTo(newBpPerPx, offset = self.width / 2) {
|
|
103
|
+
const bpPerPx = newBpPerPx;
|
|
104
|
+
if (bpPerPx === self.bpPerPx) {
|
|
105
|
+
return self.bpPerPx;
|
|
106
|
+
}
|
|
107
|
+
const oldBpPerPx = self.bpPerPx;
|
|
108
|
+
self.bpPerPx = bpPerPx;
|
|
109
|
+
// tweak the offset so that the center of the view remains at the same coordinate
|
|
110
|
+
self.offsetPx = (0, index_1.clamp)(Math.round(((self.offsetPx + offset) * oldBpPerPx) / bpPerPx - offset), self.minOffset, self.maxOffset);
|
|
111
|
+
return self.bpPerPx;
|
|
112
|
+
},
|
|
113
|
+
scrollTo(offsetPx) {
|
|
114
|
+
const newOffsetPx = (0, index_1.clamp)(offsetPx, self.minOffset, self.maxOffset);
|
|
115
|
+
self.offsetPx = newOffsetPx;
|
|
116
|
+
return newOffsetPx;
|
|
117
|
+
},
|
|
118
|
+
centerAt(coord, refName, regionNumber) {
|
|
119
|
+
if (!refName) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const centerPx = self.bpToPx({
|
|
123
|
+
refName,
|
|
124
|
+
coord,
|
|
125
|
+
regionNumber,
|
|
126
|
+
});
|
|
127
|
+
if (centerPx) {
|
|
128
|
+
this.scrollTo(Math.round(centerPx - self.width / 2));
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
scroll(distance) {
|
|
132
|
+
const oldOffsetPx = self.offsetPx;
|
|
133
|
+
// the scroll is clamped to keep the linear genome on the main screen
|
|
134
|
+
const newOffsetPx = (0, index_1.clamp)(self.offsetPx + distance, self.minOffset, self.maxOffset);
|
|
135
|
+
self.offsetPx = newOffsetPx;
|
|
136
|
+
return newOffsetPx - oldOffsetPx;
|
|
238
137
|
},
|
|
239
|
-
|
|
138
|
+
}))
|
|
139
|
+
.actions(self => ({
|
|
240
140
|
/**
|
|
241
141
|
* offset is the base-pair-offset in the displayed region, index is the index of the
|
|
242
142
|
* displayed region in the linear genome view
|
|
@@ -244,85 +144,8 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
244
144
|
* @param start - object as `{start, end, offset, index}`
|
|
245
145
|
* @param end - object as `{start, end, offset, index}`
|
|
246
146
|
*/
|
|
247
|
-
moveTo
|
|
248
|
-
|
|
249
|
-
var bpSoFar = 0;
|
|
250
|
-
|
|
251
|
-
if (start.index === end.index) {
|
|
252
|
-
bpSoFar += end.offset - start.offset;
|
|
253
|
-
} else {
|
|
254
|
-
var s = self.displayedRegions[start.index];
|
|
255
|
-
bpSoFar += s.end - s.start - start.offset;
|
|
256
|
-
|
|
257
|
-
if (end.index - start.index >= 2) {
|
|
258
|
-
for (var i = start.index + 1; i < end.index; i += 1) {
|
|
259
|
-
bpSoFar += self.displayedRegions[i].end - self.displayedRegions[i].start;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
bpSoFar += end.offset;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
this.zoomTo(bpSoFar / (self.width - self.interRegionPaddingWidth * (end.index - start.index)));
|
|
267
|
-
var bpToStart = 0;
|
|
268
|
-
|
|
269
|
-
for (var _i = 0; _i < self.displayedRegions.length; _i += 1) {
|
|
270
|
-
var region = self.displayedRegions[_i];
|
|
271
|
-
|
|
272
|
-
if (start.index === _i) {
|
|
273
|
-
bpToStart += start.offset;
|
|
274
|
-
break;
|
|
275
|
-
} else {
|
|
276
|
-
bpToStart += region.end - region.start;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
self.offsetPx = Math.round(bpToStart / self.bpPerPx) + self.interRegionPaddingWidth * start.index;
|
|
281
|
-
},
|
|
282
|
-
zoomOut: function zoomOut() {
|
|
283
|
-
this.zoomTo(self.bpPerPx * 2);
|
|
284
|
-
},
|
|
285
|
-
zoomIn: function zoomIn() {
|
|
286
|
-
this.zoomTo(self.bpPerPx / 2);
|
|
287
|
-
},
|
|
288
|
-
zoomTo: function zoomTo(newBpPerPx) {
|
|
289
|
-
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : self.width / 2;
|
|
290
|
-
var bpPerPx = newBpPerPx;
|
|
291
|
-
|
|
292
|
-
if (bpPerPx === self.bpPerPx) {
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
var oldBpPerPx = self.bpPerPx;
|
|
297
|
-
self.bpPerPx = bpPerPx; // tweak the offset so that the center of the view remains at the same coordinate
|
|
298
|
-
|
|
299
|
-
self.offsetPx = (0, _index.clamp)(Math.round((self.offsetPx + offset) * oldBpPerPx / bpPerPx - offset), self.minOffset, self.maxOffset);
|
|
300
|
-
},
|
|
301
|
-
scrollTo: function scrollTo(offsetPx) {
|
|
302
|
-
var newOffsetPx = (0, _index.clamp)(offsetPx, self.minOffset, self.maxOffset);
|
|
303
|
-
self.offsetPx = newOffsetPx;
|
|
304
|
-
return newOffsetPx;
|
|
305
|
-
},
|
|
306
|
-
centerAt: function centerAt(coord, refName, regionNumber) {
|
|
307
|
-
var centerPx = self.bpToPx({
|
|
308
|
-
refName: refName,
|
|
309
|
-
coord: coord,
|
|
310
|
-
regionNumber: regionNumber
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
if (centerPx) {
|
|
314
|
-
this.scrollTo(Math.round(centerPx - self.width / 2));
|
|
315
|
-
}
|
|
147
|
+
moveTo(start, end) {
|
|
148
|
+
(0, Base1DUtils_1.moveTo)(self, start, end);
|
|
316
149
|
},
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
var newOffsetPx = (0, _index.clamp)(self.offsetPx + distance, self.minOffset, self.maxOffset);
|
|
321
|
-
self.offsetPx = newOffsetPx;
|
|
322
|
-
return newOffsetPx - oldOffsetPx;
|
|
323
|
-
}
|
|
324
|
-
};
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
var _default = Base1DView;
|
|
328
|
-
exports.default = _default;
|
|
150
|
+
}));
|
|
151
|
+
exports.default = Base1DView;
|