@jbrowse/core 1.7.11 → 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/BaseFeatureWidget/BaseFeatureDetail.d.ts +20 -4
- package/BaseFeatureWidget/BaseFeatureDetail.js +313 -558
- package/BaseFeatureWidget/SequenceFeatureDetails.js +213 -473
- package/BaseFeatureWidget/index.d.ts +2 -2
- package/BaseFeatureWidget/index.js +88 -124
- 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 +84 -117
- package/PluginManager.js +377 -666
- package/ReExports/Attributes.d.ts +2 -0
- package/ReExports/Attributes.js +5 -0
- package/ReExports/BaseCard.d.ts +2 -0
- package/ReExports/BaseCard.js +5 -0
- package/ReExports/DataGrid.d.ts +2 -0
- package/ReExports/DataGrid.js +6 -0
- package/ReExports/FeatureDetails.d.ts +2 -0
- package/ReExports/FeatureDetails.js +5 -0
- package/ReExports/index.js +6 -12
- package/ReExports/list.d.ts +5 -0
- package/ReExports/list.js +271 -7
- package/ReExports/material-ui-colors.d.ts +1 -19
- package/ReExports/material-ui-colors.js +16 -158
- package/ReExports/modules.d.ts +68 -109
- package/ReExports/modules.js +455 -244
- package/TextSearch/BaseResults.js +51 -123
- package/TextSearch/TextSearchManager.d.ts +3 -1
- package/TextSearch/TextSearchManager.js +66 -144
- package/assemblyManager/assembly.js +280 -554
- package/assemblyManager/assemblyConfigSchema.js +47 -64
- package/assemblyManager/assemblyManager.d.ts +12 -10
- package/assemblyManager/assemblyManager.js +126 -270
- 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.d.ts +1 -1
- 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 +16 -18
- 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.d.ts +10 -10
- package/pluggableElementTypes/models/BaseDisplayModel.js +58 -95
- package/pluggableElementTypes/models/BaseTrackModel.d.ts +1 -1
- package/pluggableElementTypes/models/BaseTrackModel.js +139 -200
- 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.d.ts +2 -2
- 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 +107 -158
- package/ui/App.js +157 -261
- package/ui/AssemblySelector.d.ts +1 -1
- package/ui/AssemblySelector.js +59 -115
- package/ui/CascadingMenu.js +100 -199
- package/ui/ColorPicker.d.ts +16 -0
- package/ui/ColorPicker.js +97 -0
- package/ui/Drawer.js +28 -58
- package/ui/DrawerWidget.js +109 -209
- package/ui/DropDownMenu.d.ts +0 -8
- package/ui/DropDownMenu.js +60 -97
- package/ui/EditableTypography.d.ts +1 -1
- package/ui/EditableTypography.js +87 -155
- package/ui/ErrorMessage.js +41 -66
- 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 -71
- package/ui/FileSelector/UrlChooser.js +17 -38
- package/ui/FileSelector/index.js +6 -12
- package/ui/Icons.d.ts +1 -1
- package/ui/Icons.js +45 -69
- package/ui/Logo.js +57 -110
- package/ui/Menu.d.ts +1 -1
- package/ui/Menu.js +232 -355
- package/ui/PrerenderedCanvas.js +63 -78
- package/ui/ResizeHandle.js +87 -114
- package/ui/ReturnToImportFormDialog.js +32 -59
- package/ui/SanitizedHTML.js +63 -52
- package/ui/Snackbar.js +74 -99
- package/ui/SnackbarModel.js +37 -51
- package/ui/Tooltip.d.ts +3 -1
- package/ui/Tooltip.js +49 -74
- package/ui/ViewContainer.js +113 -183
- 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 +279 -131
- package/ui/theme.js +197 -225
- package/util/Base1DUtils.d.ts +32 -0
- package/util/Base1DUtils.js +174 -0
- package/util/Base1DViewModel.d.ts +16 -37
- package/util/Base1DViewModel.js +116 -295
- 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 -39
- package/util/index.js +743 -1236
- 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 -557
- package/util/layouts/MultiLayout.js +41 -109
- package/util/layouts/PrecomputedLayout.js +56 -114
- 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 -171
- package/util/types/index.d.ts +3 -3
- package/util/types/index.js +110 -179
- package/util/types/mst.d.ts +3 -3
- package/util/types/mst.js +91 -142
- 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 -51
- 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 -111
- 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,37 +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
|
-
/**
|
|
66
|
-
* calculates the Px at which coord is found.
|
|
67
|
-
*
|
|
68
|
-
* @param refName - string, refName of region
|
|
69
|
-
* @param coord - number, bp to be translated to Px
|
|
70
|
-
* @param regionNumber - number, index of displayedRegion in displayedRegions array
|
|
71
|
-
*/
|
|
72
51
|
bpToPx({ refName, coord, regionNumber, }: {
|
|
73
52
|
refName: string;
|
|
74
53
|
coord: number;
|
|
@@ -76,8 +55,14 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
76
55
|
}): number | undefined;
|
|
77
56
|
} & {
|
|
78
57
|
setFeatures(features: Feature[]): void;
|
|
79
|
-
zoomToDisplayedRegions(leftPx: BpOffset | undefined, rightPx: BpOffset | undefined): void;
|
|
80
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
|
+
} & {
|
|
81
66
|
/**
|
|
82
67
|
* offset is the base-pair-offset in the displayed region, index is the index of the
|
|
83
68
|
* displayed region in the linear genome view
|
|
@@ -85,13 +70,7 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
|
|
|
85
70
|
* @param start - object as `{start, end, offset, index}`
|
|
86
71
|
* @param end - object as `{start, end, offset, index}`
|
|
87
72
|
*/
|
|
88
|
-
moveTo(start
|
|
89
|
-
zoomOut(): void;
|
|
90
|
-
zoomIn(): void;
|
|
91
|
-
zoomTo(newBpPerPx: number, offset?: number): void;
|
|
92
|
-
scrollTo(offsetPx: number): number;
|
|
93
|
-
centerAt(bp: number, refName: string, regionIndex: number): void;
|
|
94
|
-
scroll(distance: number): number;
|
|
73
|
+
moveTo(start?: BpOffset, end?: BpOffset): void;
|
|
95
74
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
96
75
|
export declare type Base1DViewStateModel = typeof Base1DView;
|
|
97
76
|
export declare type Base1DViewModel = Instance<Base1DViewStateModel>;
|
package/util/Base1DViewModel.js
CHANGED
|
@@ -1,244 +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
|
-
return _objectSpread(_objectSpread({}, (0, _mobxStateTree.getSnapshot)(region)), {}, {
|
|
97
|
-
oob: true,
|
|
98
|
-
coord: region.reversed ? Math.floor(region.end - offset) + 1 : Math.floor(region.start + offset) + 1,
|
|
99
|
-
offset: offset,
|
|
100
|
-
index: 0
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
var interRegionPaddingBp = self.interRegionPaddingWidth * self.bpPerPx;
|
|
105
|
-
var minimumBlockBp = self.minimumBlockWidth * self.bpPerPx;
|
|
106
|
-
|
|
107
|
-
for (var index = 0; index < self.displayedRegions.length; index += 1) {
|
|
108
|
-
var _region = self.displayedRegions[index];
|
|
109
|
-
var len = _region.end - _region.start;
|
|
110
|
-
|
|
111
|
-
var _offset = bp - bpSoFar;
|
|
112
|
-
|
|
113
|
-
if (len + bpSoFar > bp && bpSoFar <= bp) {
|
|
114
|
-
return _objectSpread(_objectSpread({}, (0, _mobxStateTree.getSnapshot)(_region)), {}, {
|
|
115
|
-
oob: false,
|
|
116
|
-
offset: _offset,
|
|
117
|
-
coord: _region.reversed ? Math.floor(_region.end - _offset) + 1 : Math.floor(_region.start + _offset) + 1,
|
|
118
|
-
index: index
|
|
119
|
-
});
|
|
120
|
-
} // add the interRegionPaddingWidth if the boundary is in the screen
|
|
121
|
-
// e.g. offset>0 && offset<width
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (_region.end - _region.start > minimumBlockBp && _offset / self.bpPerPx > 0 && _offset / self.bpPerPx < this.width) {
|
|
125
|
-
bpSoFar += len + interRegionPaddingBp;
|
|
126
|
-
} else {
|
|
127
|
-
bpSoFar += len;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (bp >= bpSoFar) {
|
|
132
|
-
var _region2 = self.displayedRegions[n - 1];
|
|
133
|
-
|
|
134
|
-
var _len = _region2.end - _region2.start;
|
|
135
|
-
|
|
136
|
-
var _offset2 = bp - bpSoFar + _len;
|
|
137
|
-
|
|
138
|
-
return _objectSpread(_objectSpread({}, (0, _mobxStateTree.getSnapshot)(_region2)), {}, {
|
|
139
|
-
oob: true,
|
|
140
|
-
offset: _offset2,
|
|
141
|
-
coord: _region2.reversed ? Math.floor(_region2.end - _offset2) + 1 : Math.floor(_region2.start + _offset2) + 1,
|
|
142
|
-
index: n - 1
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return {
|
|
147
|
-
coord: 0,
|
|
148
|
-
index: 0,
|
|
149
|
-
start: 0,
|
|
150
|
-
refName: '',
|
|
151
|
-
oob: true,
|
|
152
|
-
assemblyName: '',
|
|
153
|
-
offset: 0,
|
|
154
|
-
reversed: false
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
}).views(function (self) {
|
|
159
|
-
return {
|
|
63
|
+
}))
|
|
64
|
+
.views(self => ({
|
|
160
65
|
get dynamicBlocks() {
|
|
161
|
-
|
|
66
|
+
return (0, calculateDynamicBlocks_1.default)(self);
|
|
162
67
|
},
|
|
163
|
-
|
|
164
68
|
get staticBlocks() {
|
|
165
|
-
|
|
69
|
+
return (0, calculateStaticBlocks_1.default)(self);
|
|
166
70
|
},
|
|
167
|
-
|
|
168
71
|
get currBp() {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
return a + b;
|
|
173
|
-
}, 0);
|
|
72
|
+
return this.dynamicBlocks
|
|
73
|
+
.map(a => a.end - a.start)
|
|
74
|
+
.reduce((a, b) => a + b, 0);
|
|
174
75
|
},
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
bpToPx: function bpToPx(_ref) {
|
|
184
|
-
var _viewBpToPx;
|
|
185
|
-
|
|
186
|
-
var refName = _ref.refName,
|
|
187
|
-
coord = _ref.coord,
|
|
188
|
-
regionNumber = _ref.regionNumber;
|
|
189
|
-
return (_viewBpToPx = (0, _index.viewBpToPx)({
|
|
190
|
-
refName: refName,
|
|
191
|
-
coord: coord,
|
|
192
|
-
regionNumber: regionNumber,
|
|
193
|
-
self: self
|
|
194
|
-
})) === null || _viewBpToPx === void 0 ? void 0 : _viewBpToPx.offsetPx;
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
}).actions(function (self) {
|
|
198
|
-
return {
|
|
199
|
-
setFeatures: function setFeatures(features) {
|
|
200
|
-
self.features = features;
|
|
76
|
+
}))
|
|
77
|
+
.views(self => ({
|
|
78
|
+
pxToBp(px) {
|
|
79
|
+
return (0, Base1DUtils_1.pxToBp)(self, px);
|
|
80
|
+
},
|
|
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;
|
|
201
84
|
},
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
var singleRefSeq = leftPx.refName === rightPx.refName && leftPx.index === rightPx.index; // zooming into one displayed Region
|
|
208
|
-
|
|
209
|
-
if (singleRefSeq && rightPx.offset < leftPx.offset || leftPx.index > rightPx.index) {
|
|
210
|
-
;
|
|
211
|
-
var _ref2 = [rightPx, leftPx];
|
|
212
|
-
leftPx = _ref2[0];
|
|
213
|
-
rightPx = _ref2[1];
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
var startOffset = {
|
|
217
|
-
start: leftPx.start,
|
|
218
|
-
end: leftPx.end,
|
|
219
|
-
index: leftPx.index,
|
|
220
|
-
offset: leftPx.offset
|
|
221
|
-
};
|
|
222
|
-
var endOffset = {
|
|
223
|
-
start: rightPx.start,
|
|
224
|
-
end: rightPx.end,
|
|
225
|
-
index: rightPx.index,
|
|
226
|
-
offset: rightPx.offset
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
if (startOffset && endOffset) {
|
|
230
|
-
this.moveTo(startOffset, endOffset);
|
|
231
|
-
} else {
|
|
232
|
-
throw new Error('regions not found');
|
|
233
|
-
}
|
|
85
|
+
}))
|
|
86
|
+
.actions(self => ({
|
|
87
|
+
setFeatures(features) {
|
|
88
|
+
self.features = features;
|
|
234
89
|
},
|
|
235
90
|
// this makes a zoomed out view that shows all displayedRegions
|
|
236
91
|
// that makes the overview bar square with the scale bar
|
|
237
|
-
showAllRegions
|
|
238
|
-
|
|
239
|
-
|
|
92
|
+
showAllRegions() {
|
|
93
|
+
self.bpPerPx = self.totalBp / self.width;
|
|
94
|
+
self.offsetPx = 0;
|
|
95
|
+
},
|
|
96
|
+
zoomOut() {
|
|
97
|
+
this.zoomTo(self.bpPerPx * 2);
|
|
240
98
|
},
|
|
241
|
-
|
|
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;
|
|
137
|
+
},
|
|
138
|
+
}))
|
|
139
|
+
.actions(self => ({
|
|
242
140
|
/**
|
|
243
141
|
* offset is the base-pair-offset in the displayed region, index is the index of the
|
|
244
142
|
* displayed region in the linear genome view
|
|
@@ -246,85 +144,8 @@ var Base1DView = _mobxStateTree.types.model('Base1DView', {
|
|
|
246
144
|
* @param start - object as `{start, end, offset, index}`
|
|
247
145
|
* @param end - object as `{start, end, offset, index}`
|
|
248
146
|
*/
|
|
249
|
-
moveTo
|
|
250
|
-
|
|
251
|
-
var bpSoFar = 0;
|
|
252
|
-
|
|
253
|
-
if (start.index === end.index) {
|
|
254
|
-
bpSoFar += end.offset - start.offset;
|
|
255
|
-
} else {
|
|
256
|
-
var s = self.displayedRegions[start.index];
|
|
257
|
-
bpSoFar += s.end - s.start - start.offset;
|
|
258
|
-
|
|
259
|
-
if (end.index - start.index >= 2) {
|
|
260
|
-
for (var i = start.index + 1; i < end.index; i += 1) {
|
|
261
|
-
bpSoFar += self.displayedRegions[i].end - self.displayedRegions[i].start;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
bpSoFar += end.offset;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
this.zoomTo(bpSoFar / (self.width - self.interRegionPaddingWidth * (end.index - start.index)));
|
|
269
|
-
var bpToStart = 0;
|
|
270
|
-
|
|
271
|
-
for (var _i = 0; _i < self.displayedRegions.length; _i += 1) {
|
|
272
|
-
var region = self.displayedRegions[_i];
|
|
273
|
-
|
|
274
|
-
if (start.index === _i) {
|
|
275
|
-
bpToStart += start.offset;
|
|
276
|
-
break;
|
|
277
|
-
} else {
|
|
278
|
-
bpToStart += region.end - region.start;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
self.offsetPx = Math.round(bpToStart / self.bpPerPx) + self.interRegionPaddingWidth * start.index;
|
|
283
|
-
},
|
|
284
|
-
zoomOut: function zoomOut() {
|
|
285
|
-
this.zoomTo(self.bpPerPx * 2);
|
|
286
|
-
},
|
|
287
|
-
zoomIn: function zoomIn() {
|
|
288
|
-
this.zoomTo(self.bpPerPx / 2);
|
|
289
|
-
},
|
|
290
|
-
zoomTo: function zoomTo(newBpPerPx) {
|
|
291
|
-
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : self.width / 2;
|
|
292
|
-
var bpPerPx = newBpPerPx;
|
|
293
|
-
|
|
294
|
-
if (bpPerPx === self.bpPerPx) {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
var oldBpPerPx = self.bpPerPx;
|
|
299
|
-
self.bpPerPx = bpPerPx; // tweak the offset so that the center of the view remains at the same coordinate
|
|
300
|
-
|
|
301
|
-
self.offsetPx = (0, _index.clamp)(Math.round((self.offsetPx + offset) * oldBpPerPx / bpPerPx - offset), self.minOffset, self.maxOffset);
|
|
302
|
-
},
|
|
303
|
-
scrollTo: function scrollTo(offsetPx) {
|
|
304
|
-
var newOffsetPx = (0, _index.clamp)(offsetPx, self.minOffset, self.maxOffset);
|
|
305
|
-
self.offsetPx = newOffsetPx;
|
|
306
|
-
return newOffsetPx;
|
|
307
|
-
},
|
|
308
|
-
centerAt: function centerAt(bp, refName, regionIndex) {
|
|
309
|
-
var centerPx = self.bpToPx({
|
|
310
|
-
refName: refName,
|
|
311
|
-
coord: bp,
|
|
312
|
-
regionNumber: regionIndex
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
if (centerPx) {
|
|
316
|
-
this.scrollTo(Math.round(centerPx - self.width / 2));
|
|
317
|
-
}
|
|
147
|
+
moveTo(start, end) {
|
|
148
|
+
(0, Base1DUtils_1.moveTo)(self, start, end);
|
|
318
149
|
},
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
var newOffsetPx = (0, _index.clamp)(self.offsetPx + distance, self.minOffset, self.maxOffset);
|
|
323
|
-
self.offsetPx = newOffsetPx;
|
|
324
|
-
return newOffsetPx - oldOffsetPx;
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
});
|
|
328
|
-
|
|
329
|
-
var _default = Base1DView;
|
|
330
|
-
exports.default = _default;
|
|
150
|
+
}));
|
|
151
|
+
exports.default = Base1DView;
|