@jbrowse/plugin-linear-genome-view 1.7.8 → 1.7.11
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/dist/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +1 -5
- package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js +32 -120
- package/dist/BaseLinearDisplay/components/Tooltip.d.ts +8 -0
- package/dist/BaseLinearDisplay/components/Tooltip.js +125 -0
- package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +4 -4
- package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +3 -2
- package/dist/LinearBareDisplay/model.d.ts +1 -1
- package/dist/LinearBasicDisplay/model.d.ts +1 -2
- package/dist/LinearBasicDisplay/model.js +2 -2
- package/dist/LinearGenomeView/components/ExportSvgDialog.js +35 -25
- package/dist/LinearGenomeView/components/Header.d.ts +0 -1
- package/dist/LinearGenomeView/components/Header.js +3 -1
- package/dist/LinearGenomeView/components/HelpDialog.js +2 -3
- package/dist/LinearGenomeView/components/ImportForm.d.ts +0 -1
- package/dist/LinearGenomeView/components/ImportForm.js +40 -70
- package/dist/LinearGenomeView/components/LinearGenomeView.js +6 -2
- package/dist/LinearGenomeView/components/LinearGenomeView.test.js +2 -2
- package/dist/LinearGenomeView/components/OverviewScaleBar.d.ts +21 -5
- package/dist/LinearGenomeView/components/OverviewScaleBar.js +25 -18
- package/dist/LinearGenomeView/components/ScaleBar.d.ts +6 -2
- package/dist/LinearGenomeView/components/ScaleBar.js +8 -3
- package/dist/LinearGenomeView/components/SearchBox.js +36 -72
- package/dist/LinearGenomeView/components/SearchResultsDialog.d.ts +1 -1
- package/dist/LinearGenomeView/components/SearchResultsDialog.js +0 -1
- package/dist/LinearGenomeView/components/TrackLabel.js +25 -41
- package/dist/LinearGenomeView/components/util.d.ts +12 -0
- package/dist/LinearGenomeView/components/util.js +59 -0
- package/dist/LinearGenomeView/index.d.ts +7 -11
- package/dist/LinearGenomeView/index.js +60 -33
- package/dist/LinearGenomeView/index.test.js +22 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.js +22 -11
- package/package.json +3 -2
- package/src/BaseLinearDisplay/components/BaseLinearDisplay.tsx +4 -89
- package/src/BaseLinearDisplay/components/Tooltip.tsx +97 -0
- package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +11 -4
- package/src/LinearBasicDisplay/model.ts +2 -4
- package/src/LinearGenomeView/components/ExportSvgDialog.tsx +24 -11
- package/src/LinearGenomeView/components/Header.tsx +2 -1
- package/src/LinearGenomeView/components/HelpDialog.tsx +5 -4
- package/src/LinearGenomeView/components/ImportForm.tsx +18 -25
- package/src/LinearGenomeView/components/LinearGenomeView.test.js +2 -2
- package/src/LinearGenomeView/components/LinearGenomeView.tsx +16 -10
- package/src/LinearGenomeView/components/OverviewScaleBar.tsx +42 -34
- package/src/LinearGenomeView/components/ScaleBar.tsx +6 -9
- package/src/LinearGenomeView/components/SearchBox.tsx +18 -29
- package/src/LinearGenomeView/components/SearchResultsDialog.tsx +0 -1
- package/src/LinearGenomeView/components/TrackLabel.tsx +25 -28
- package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +4 -21
- package/src/LinearGenomeView/components/util.ts +43 -0
- package/src/LinearGenomeView/index.test.ts +20 -5
- package/src/LinearGenomeView/index.tsx +56 -27
- package/src/index.ts +35 -30
|
@@ -11,8 +11,6 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
11
11
|
|
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
13
|
|
|
14
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
-
|
|
16
14
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
17
15
|
|
|
18
16
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -21,8 +19,6 @@ var _mobxReact = require("mobx-react");
|
|
|
21
19
|
|
|
22
20
|
var _core = require("@material-ui/core");
|
|
23
21
|
|
|
24
|
-
var _BaseResults = _interopRequireDefault(require("@jbrowse/core/TextSearch/BaseResults"));
|
|
25
|
-
|
|
26
22
|
var _util = require("@jbrowse/core/util");
|
|
27
23
|
|
|
28
24
|
var _RefNameAutocomplete = _interopRequireDefault(require("./RefNameAutocomplete"));
|
|
@@ -52,101 +48,61 @@ function SearchBox(_ref) {
|
|
|
52
48
|
rankSearchResults = model.rankSearchResults;
|
|
53
49
|
var assemblyName = assemblyNames[0];
|
|
54
50
|
var assembly = assemblyManager.get(assemblyName);
|
|
55
|
-
var searchScope = model.searchScope(assemblyName);
|
|
56
|
-
|
|
57
|
-
function fetchResults(_x, _x2) {
|
|
58
|
-
return _fetchResults.apply(this, arguments);
|
|
59
|
-
} // gets a string as input, or use stored option results from previous query,
|
|
51
|
+
var searchScope = model.searchScope(assemblyName); // gets a string as input, or use stored option results from previous query,
|
|
60
52
|
// then re-query and
|
|
61
53
|
// 1) if it has multiple results: pop a dialog
|
|
62
54
|
// 2) if it's a single result navigate to it
|
|
63
55
|
// 3) else assume it's a locstring and navigate to it
|
|
64
56
|
|
|
65
|
-
|
|
66
|
-
function _fetchResults() {
|
|
67
|
-
_fetchResults = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query, searchType) {
|
|
68
|
-
var _assembly$allRefNames;
|
|
69
|
-
|
|
70
|
-
var textSearchResults, refNameResults;
|
|
71
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
72
|
-
while (1) {
|
|
73
|
-
switch (_context.prev = _context.next) {
|
|
74
|
-
case 0:
|
|
75
|
-
if (!textSearchManager) {
|
|
76
|
-
console.warn('No text search manager');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
_context.next = 3;
|
|
80
|
-
return textSearchManager === null || textSearchManager === void 0 ? void 0 : textSearchManager.search({
|
|
81
|
-
queryString: query,
|
|
82
|
-
searchType: searchType
|
|
83
|
-
}, searchScope, rankSearchResults);
|
|
84
|
-
|
|
85
|
-
case 3:
|
|
86
|
-
textSearchResults = _context.sent;
|
|
87
|
-
refNameResults = assembly === null || assembly === void 0 ? void 0 : (_assembly$allRefNames = assembly.allRefNames) === null || _assembly$allRefNames === void 0 ? void 0 : _assembly$allRefNames.filter(function (refName) {
|
|
88
|
-
return refName.startsWith(query);
|
|
89
|
-
}).map(function (r) {
|
|
90
|
-
return new _BaseResults.default({
|
|
91
|
-
label: r
|
|
92
|
-
});
|
|
93
|
-
}).slice(0, 10);
|
|
94
|
-
return _context.abrupt("return", (0, _util2.dedupe)([].concat((0, _toConsumableArray2.default)(refNameResults || []), (0, _toConsumableArray2.default)(textSearchResults || [])), function (elt) {
|
|
95
|
-
return elt.getId();
|
|
96
|
-
}));
|
|
97
|
-
|
|
98
|
-
case 6:
|
|
99
|
-
case "end":
|
|
100
|
-
return _context.stop();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}, _callee);
|
|
104
|
-
}));
|
|
105
|
-
return _fetchResults.apply(this, arguments);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function handleSelectedRegion(_x3) {
|
|
57
|
+
function handleSelectedRegion(_x) {
|
|
109
58
|
return _handleSelectedRegion.apply(this, arguments);
|
|
110
59
|
}
|
|
111
60
|
|
|
112
61
|
function _handleSelectedRegion() {
|
|
113
|
-
_handleSelectedRegion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
62
|
+
_handleSelectedRegion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(option) {
|
|
114
63
|
var trackId, location, label, _location$split, _location$split2, ref, rest, allRefs, results;
|
|
115
64
|
|
|
116
|
-
return _regenerator.default.wrap(function
|
|
65
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
117
66
|
while (1) {
|
|
118
|
-
switch (
|
|
67
|
+
switch (_context.prev = _context.next) {
|
|
119
68
|
case 0:
|
|
120
69
|
trackId = option.getTrackId();
|
|
121
70
|
location = option.getLocation();
|
|
122
71
|
label = option.getLabel();
|
|
123
72
|
_location$split = location.split(':'), _location$split2 = (0, _slicedToArray2.default)(_location$split, 2), ref = _location$split2[0], rest = _location$split2[1];
|
|
124
73
|
allRefs = (assembly === null || assembly === void 0 ? void 0 : assembly.allRefNames) || [];
|
|
125
|
-
|
|
74
|
+
_context.prev = 5;
|
|
126
75
|
|
|
127
76
|
if (!(allRefs.includes(location) || allRefs.includes(ref) && rest !== undefined && !Number.isNaN(parseInt(rest, 10)))) {
|
|
128
|
-
|
|
77
|
+
_context.next = 10;
|
|
129
78
|
break;
|
|
130
79
|
}
|
|
131
80
|
|
|
132
81
|
model.navToLocString(location, assemblyName);
|
|
133
|
-
|
|
82
|
+
_context.next = 21;
|
|
134
83
|
break;
|
|
135
84
|
|
|
136
85
|
case 10:
|
|
137
|
-
|
|
138
|
-
return
|
|
86
|
+
_context.next = 12;
|
|
87
|
+
return (0, _util2.fetchResults)({
|
|
88
|
+
queryString: label,
|
|
89
|
+
searchType: 'exact',
|
|
90
|
+
searchScope: searchScope,
|
|
91
|
+
rankSearchResults: rankSearchResults,
|
|
92
|
+
textSearchManager: textSearchManager,
|
|
93
|
+
assembly: assembly
|
|
94
|
+
});
|
|
139
95
|
|
|
140
96
|
case 12:
|
|
141
|
-
results =
|
|
97
|
+
results = _context.sent;
|
|
142
98
|
|
|
143
99
|
if (!(results.length > 1)) {
|
|
144
|
-
|
|
100
|
+
_context.next = 18;
|
|
145
101
|
break;
|
|
146
102
|
}
|
|
147
103
|
|
|
148
104
|
model.setSearchResults(results, label.toLowerCase());
|
|
149
|
-
return
|
|
105
|
+
return _context.abrupt("return");
|
|
150
106
|
|
|
151
107
|
case 18:
|
|
152
108
|
if (results.length === 1) {
|
|
@@ -162,21 +118,21 @@ function SearchBox(_ref) {
|
|
|
162
118
|
}
|
|
163
119
|
|
|
164
120
|
case 21:
|
|
165
|
-
|
|
121
|
+
_context.next = 27;
|
|
166
122
|
break;
|
|
167
123
|
|
|
168
124
|
case 23:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
console.error(
|
|
172
|
-
session.notify("".concat(
|
|
125
|
+
_context.prev = 23;
|
|
126
|
+
_context.t0 = _context["catch"](5);
|
|
127
|
+
console.error(_context.t0);
|
|
128
|
+
session.notify("".concat(_context.t0), 'warning');
|
|
173
129
|
|
|
174
130
|
case 27:
|
|
175
131
|
case "end":
|
|
176
|
-
return
|
|
132
|
+
return _context.stop();
|
|
177
133
|
}
|
|
178
134
|
}
|
|
179
|
-
},
|
|
135
|
+
}, _callee, null, [[5, 23]]);
|
|
180
136
|
}));
|
|
181
137
|
return _handleSelectedRegion.apply(this, arguments);
|
|
182
138
|
}
|
|
@@ -185,7 +141,15 @@ function SearchBox(_ref) {
|
|
|
185
141
|
showHelp: showHelp,
|
|
186
142
|
onSelect: handleSelectedRegion,
|
|
187
143
|
assemblyName: assemblyName,
|
|
188
|
-
fetchResults: fetchResults
|
|
144
|
+
fetchResults: function fetchResults(queryString) {
|
|
145
|
+
return (0, _util2.fetchResults)({
|
|
146
|
+
queryString: queryString,
|
|
147
|
+
searchScope: searchScope,
|
|
148
|
+
rankSearchResults: rankSearchResults,
|
|
149
|
+
textSearchManager: textSearchManager,
|
|
150
|
+
assembly: assembly
|
|
151
|
+
});
|
|
152
|
+
},
|
|
189
153
|
model: model,
|
|
190
154
|
TextFieldProps: {
|
|
191
155
|
variant: 'outlined',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { LinearGenomeViewModel } from '../..';
|
|
3
|
-
export declare const useStyles: (props?: any) => import("@material-ui/styles").ClassNameMap<"
|
|
3
|
+
export declare const useStyles: (props?: any) => import("@material-ui/styles").ClassNameMap<"dialogContent" | "closeButton">;
|
|
4
4
|
export default function SearchResultsDialog({ model, optAssemblyName, handleClose, }: {
|
|
5
5
|
model: LinearGenomeViewModel;
|
|
6
6
|
optAssemblyName?: string;
|
|
@@ -7,30 +7,32 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
15
|
|
|
16
16
|
var _configuration = require("@jbrowse/core/configuration");
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _CascadingMenu = _interopRequireDefault(require("@jbrowse/core/ui/CascadingMenu"));
|
|
19
19
|
|
|
20
20
|
var _util = require("@jbrowse/core/util");
|
|
21
21
|
|
|
22
22
|
var _core = require("@material-ui/core");
|
|
23
23
|
|
|
24
|
+
var _hooks = require("material-ui-popup-state/hooks");
|
|
25
|
+
|
|
26
|
+
var _clsx = _interopRequireDefault(require("clsx"));
|
|
27
|
+
|
|
28
|
+
var _mobxReact = require("mobx-react");
|
|
29
|
+
|
|
24
30
|
var _MoreVert = _interopRequireDefault(require("@material-ui/icons/MoreVert"));
|
|
25
31
|
|
|
26
32
|
var _DragIndicator = _interopRequireDefault(require("@material-ui/icons/DragIndicator"));
|
|
27
33
|
|
|
28
34
|
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
29
35
|
|
|
30
|
-
var _clsx = _interopRequireDefault(require("clsx"));
|
|
31
|
-
|
|
32
|
-
var _mobxReact = require("mobx-react");
|
|
33
|
-
|
|
34
36
|
// icons
|
|
35
37
|
var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
36
38
|
return {
|
|
@@ -64,30 +66,20 @@ var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
|
64
66
|
};
|
|
65
67
|
});
|
|
66
68
|
|
|
67
|
-
var TrackLabel = /*#__PURE__*/_react.default.forwardRef(function (
|
|
69
|
+
var TrackLabel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
68
70
|
var _session$getTrackActi;
|
|
69
71
|
|
|
72
|
+
var track = _ref.track,
|
|
73
|
+
className = _ref.className;
|
|
70
74
|
var classes = useStyles();
|
|
71
|
-
|
|
72
|
-
var _React$useState = _react.default.useState(null),
|
|
73
|
-
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
74
|
-
anchorEl = _React$useState2[0],
|
|
75
|
-
setAnchorEl = _React$useState2[1];
|
|
76
|
-
|
|
77
|
-
var track = props.track,
|
|
78
|
-
className = props.className;
|
|
79
75
|
var view = (0, _util.getContainingView)(track);
|
|
80
76
|
var session = (0, _util.getSession)(track);
|
|
81
77
|
var trackConf = track.configuration;
|
|
82
78
|
var trackId = (0, _configuration.getConf)(track, 'trackId');
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
var handleClose = function handleClose() {
|
|
89
|
-
setAnchorEl(null);
|
|
90
|
-
};
|
|
79
|
+
var popupState = (0, _hooks.usePopupState)({
|
|
80
|
+
popupId: 'trackLabelMenu',
|
|
81
|
+
variant: 'popover'
|
|
82
|
+
});
|
|
91
83
|
|
|
92
84
|
var onDragStart = function onDragStart(event) {
|
|
93
85
|
var target = event.target;
|
|
@@ -108,12 +100,7 @@ var TrackLabel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
108
100
|
var r = session.assemblies.find(function (a) {
|
|
109
101
|
return a.sequence === trackConf;
|
|
110
102
|
});
|
|
111
|
-
trackName =
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function handleMenuItemClick(_, callback) {
|
|
115
|
-
callback();
|
|
116
|
-
handleClose();
|
|
103
|
+
trackName = trackName || (r ? "Reference Sequence (".concat((0, _configuration.readConfObject)(r, 'name'), ")") : 'Reference Sequence');
|
|
117
104
|
}
|
|
118
105
|
|
|
119
106
|
var items = [].concat((0, _toConsumableArray2.default)(((_session$getTrackActi = session.getTrackActionMenuItems) === null || _session$getTrackActi === void 0 ? void 0 : _session$getTrackActi.call(session, trackConf)) || []), (0, _toConsumableArray2.default)(track.trackMenuItems())).sort(function (a, b) {
|
|
@@ -141,21 +128,18 @@ var TrackLabel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
141
128
|
variant: "body1",
|
|
142
129
|
component: "span",
|
|
143
130
|
className: classes.trackName
|
|
144
|
-
}, trackName), /*#__PURE__*/_react.default.createElement(_core.IconButton, {
|
|
145
|
-
"aria-controls": "simple-menu",
|
|
146
|
-
"aria-haspopup": "true",
|
|
147
|
-
onClick: handleClick,
|
|
131
|
+
}, trackName), /*#__PURE__*/_react.default.createElement(_core.IconButton, (0, _extends2.default)({}, (0, _hooks.bindTrigger)(popupState), {
|
|
148
132
|
className: classes.iconButton,
|
|
149
133
|
color: "secondary",
|
|
150
134
|
"data-testid": "track_menu_icon",
|
|
151
135
|
disabled: !items.length
|
|
152
|
-
}, /*#__PURE__*/_react.default.createElement(_MoreVert.default, null))), /*#__PURE__*/_react.default.createElement(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}));
|
|
136
|
+
}), /*#__PURE__*/_react.default.createElement(_MoreVert.default, null))), /*#__PURE__*/_react.default.createElement(_CascadingMenu.default, (0, _extends2.default)({}, (0, _hooks.bindPopover)(popupState), {
|
|
137
|
+
onMenuItemClick: function onMenuItemClick(_, callback) {
|
|
138
|
+
return callback();
|
|
139
|
+
},
|
|
140
|
+
menuItems: items,
|
|
141
|
+
popupState: popupState
|
|
142
|
+
})));
|
|
159
143
|
});
|
|
160
144
|
|
|
161
145
|
var _default = (0, _mobxReact.observer)(TrackLabel);
|
|
@@ -1,2 +1,14 @@
|
|
|
1
|
+
import { Assembly } from '@jbrowse/core/assemblyManager/assembly';
|
|
2
|
+
import { SearchType } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
1
3
|
import BaseResult from '@jbrowse/core/TextSearch/BaseResults';
|
|
4
|
+
import { SearchScope } from '@jbrowse/core/TextSearch/TextSearchManager';
|
|
5
|
+
import { TextSearchManager } from '@jbrowse/core/util';
|
|
2
6
|
export declare function dedupe(results: BaseResult[] | undefined, cb: (result: BaseResult) => string): BaseResult[];
|
|
7
|
+
export declare function fetchResults({ queryString, searchType, searchScope, rankSearchResults, textSearchManager, assembly, }: {
|
|
8
|
+
queryString: string;
|
|
9
|
+
searchScope: SearchScope;
|
|
10
|
+
rankSearchResults: (results: BaseResult[]) => BaseResult[];
|
|
11
|
+
searchType?: SearchType;
|
|
12
|
+
textSearchManager?: TextSearchManager;
|
|
13
|
+
assembly?: Assembly;
|
|
14
|
+
}): Promise<BaseResult[]>;
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.dedupe = dedupe;
|
|
9
|
+
exports.fetchResults = fetchResults;
|
|
10
|
+
|
|
11
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
|
+
|
|
13
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
14
|
+
|
|
15
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
+
|
|
17
|
+
var _BaseResults = _interopRequireDefault(require("@jbrowse/core/TextSearch/BaseResults"));
|
|
7
18
|
|
|
8
19
|
function dedupe() {
|
|
9
20
|
var results = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
@@ -13,4 +24,52 @@ function dedupe() {
|
|
|
13
24
|
return cb(t) === cb(elt);
|
|
14
25
|
});
|
|
15
26
|
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function fetchResults(_x) {
|
|
30
|
+
return _fetchResults.apply(this, arguments);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function _fetchResults() {
|
|
34
|
+
_fetchResults = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
|
|
35
|
+
var _assembly$allRefNames;
|
|
36
|
+
|
|
37
|
+
var queryString, searchType, searchScope, rankSearchResults, textSearchManager, assembly, textSearchResults, refNameResults;
|
|
38
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
39
|
+
while (1) {
|
|
40
|
+
switch (_context.prev = _context.next) {
|
|
41
|
+
case 0:
|
|
42
|
+
queryString = _ref.queryString, searchType = _ref.searchType, searchScope = _ref.searchScope, rankSearchResults = _ref.rankSearchResults, textSearchManager = _ref.textSearchManager, assembly = _ref.assembly;
|
|
43
|
+
|
|
44
|
+
if (!textSearchManager) {
|
|
45
|
+
console.warn('No text search manager');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
_context.next = 4;
|
|
49
|
+
return textSearchManager === null || textSearchManager === void 0 ? void 0 : textSearchManager.search({
|
|
50
|
+
queryString: queryString,
|
|
51
|
+
searchType: searchType
|
|
52
|
+
}, searchScope, rankSearchResults);
|
|
53
|
+
|
|
54
|
+
case 4:
|
|
55
|
+
textSearchResults = _context.sent;
|
|
56
|
+
refNameResults = assembly === null || assembly === void 0 ? void 0 : (_assembly$allRefNames = assembly.allRefNames) === null || _assembly$allRefNames === void 0 ? void 0 : _assembly$allRefNames.filter(function (ref) {
|
|
57
|
+
return ref.toLowerCase().startsWith(queryString.toLowerCase());
|
|
58
|
+
}).slice(0, 10).map(function (r) {
|
|
59
|
+
return new _BaseResults.default({
|
|
60
|
+
label: r
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
return _context.abrupt("return", dedupe([].concat((0, _toConsumableArray2.default)(refNameResults || []), (0, _toConsumableArray2.default)(textSearchResults || [])), function (elt) {
|
|
64
|
+
return elt.getId();
|
|
65
|
+
}));
|
|
66
|
+
|
|
67
|
+
case 7:
|
|
68
|
+
case "end":
|
|
69
|
+
return _context.stop();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, _callee);
|
|
73
|
+
}));
|
|
74
|
+
return _fetchResults.apply(this, arguments);
|
|
16
75
|
}
|
|
@@ -20,6 +20,7 @@ export interface BpOffset {
|
|
|
20
20
|
}
|
|
21
21
|
export interface ExportSvgOptions {
|
|
22
22
|
rasterizeLayers?: boolean;
|
|
23
|
+
filename?: string;
|
|
23
24
|
}
|
|
24
25
|
export interface NavLocation {
|
|
25
26
|
refName: string;
|
|
@@ -55,6 +56,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
55
56
|
tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
|
|
56
57
|
hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
57
58
|
hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
59
|
+
hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
58
60
|
trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<"hierarchical">, [undefined]>;
|
|
59
61
|
trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
60
62
|
showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
@@ -86,6 +88,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
86
88
|
} & {
|
|
87
89
|
readonly width: number;
|
|
88
90
|
readonly interRegionPaddingWidth: number;
|
|
91
|
+
readonly assemblyNames: string[];
|
|
89
92
|
} & {
|
|
90
93
|
readonly assemblyErrors: string;
|
|
91
94
|
readonly assembliesInitialized: boolean;
|
|
@@ -105,19 +108,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
105
108
|
readonly minOffset: number;
|
|
106
109
|
readonly displayedRegionsTotalPx: number;
|
|
107
110
|
renderProps(): any;
|
|
108
|
-
readonly assemblyNames: string[];
|
|
109
111
|
searchScope(assemblyName: string): {
|
|
110
112
|
assemblyName: string;
|
|
111
113
|
includeAggregateIndexes: boolean;
|
|
112
114
|
tracks: import("mobx-state-tree").IMSTArray<import("mobx-state-tree").IAnyType> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>>;
|
|
113
115
|
};
|
|
114
|
-
/**
|
|
115
|
-
* @param refName - refName of the displayedRegion
|
|
116
|
-
* @param coord - coordinate at the displayed Region
|
|
117
|
-
* @param regionNumber - optional param used as identifier when
|
|
118
|
-
* there are multiple displayedRegions with the same refName
|
|
119
|
-
* @returns offsetPx of the displayed region that it lands in
|
|
120
|
-
*/
|
|
121
116
|
bpToPx({ refName, coord, regionNumber, }: {
|
|
122
117
|
refName: string;
|
|
123
118
|
coord: number;
|
|
@@ -163,6 +158,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
163
158
|
setError(error: Error | undefined): void;
|
|
164
159
|
toggleHeader(): void;
|
|
165
160
|
toggleHeaderOverview(): void;
|
|
161
|
+
toggleNoTracksActive(): void;
|
|
166
162
|
scrollTo(offsetPx: number): number;
|
|
167
163
|
zoomTo(bpPerPx: number): number;
|
|
168
164
|
setOffsets(left: undefined | BpOffset, right: undefined | BpOffset): void;
|
|
@@ -180,7 +176,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
180
176
|
toggleCenterLine(): void;
|
|
181
177
|
setDisplayedRegions(regions: Region[]): void;
|
|
182
178
|
activateTrackSelector(): import("@jbrowse/core/util").Widget;
|
|
183
|
-
navToLocString(locString: string, optAssemblyName?: string
|
|
179
|
+
navToLocString(locString: string, optAssemblyName?: string): void;
|
|
184
180
|
/**
|
|
185
181
|
* Navigate to a location based on its refName and optionally start, end,
|
|
186
182
|
* and assemblyName. Can handle if there are multiple displayedRegions
|
|
@@ -245,8 +241,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
245
241
|
centerAt(bp: number, refName: string, regionIndex: number): void;
|
|
246
242
|
center(): void;
|
|
247
243
|
showAllRegions(): void;
|
|
248
|
-
showAllRegionsInAssembly(assemblyName?: string
|
|
249
|
-
setDraggingTrackId(idx?: string
|
|
244
|
+
showAllRegionsInAssembly(assemblyName?: string): void;
|
|
245
|
+
setDraggingTrackId(idx?: string): void;
|
|
250
246
|
setScaleFactor(factor: number): void;
|
|
251
247
|
} & {
|
|
252
248
|
slide: (viewWidths: number) => void;
|
|
@@ -155,6 +155,7 @@ function stateModelFactory(pluginManager) {
|
|
|
155
155
|
tracks: _mobxStateTree.types.array(pluginManager.pluggableMstType('track', 'stateModel')),
|
|
156
156
|
hideHeader: false,
|
|
157
157
|
hideHeaderOverview: false,
|
|
158
|
+
hideNoTracksActive: false,
|
|
158
159
|
trackSelectorType: _mobxStateTree.types.optional(_mobxStateTree.types.enumeration(['hierarchical']), 'hierarchical'),
|
|
159
160
|
trackLabels: _mobxStateTree.types.optional(_mobxStateTree.types.string, function () {
|
|
160
161
|
return localStorageGetItem('lgv-trackLabels') || 'overlapping';
|
|
@@ -199,6 +200,12 @@ function stateModelFactory(pluginManager) {
|
|
|
199
200
|
|
|
200
201
|
get interRegionPaddingWidth() {
|
|
201
202
|
return INTER_REGION_PADDING_WIDTH;
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
get assemblyNames() {
|
|
206
|
+
return (0, _toConsumableArray2.default)(new Set(self.displayedRegions.map(function (region) {
|
|
207
|
+
return region.assemblyName;
|
|
208
|
+
})));
|
|
202
209
|
}
|
|
203
210
|
|
|
204
211
|
};
|
|
@@ -208,7 +215,8 @@ function stateModelFactory(pluginManager) {
|
|
|
208
215
|
var _getSession = (0, _util.getSession)(self),
|
|
209
216
|
assemblyManager = _getSession.assemblyManager;
|
|
210
217
|
|
|
211
|
-
|
|
218
|
+
var assemblyNames = self.assemblyNames;
|
|
219
|
+
return assemblyNames.map(function (a) {
|
|
212
220
|
var _assemblyManager$get;
|
|
213
221
|
|
|
214
222
|
return (_assemblyManager$get = assemblyManager.get(a)) === null || _assemblyManager$get === void 0 ? void 0 : _assemblyManager$get.error;
|
|
@@ -221,7 +229,8 @@ function stateModelFactory(pluginManager) {
|
|
|
221
229
|
var _getSession2 = (0, _util.getSession)(self),
|
|
222
230
|
assemblyManager = _getSession2.assemblyManager;
|
|
223
231
|
|
|
224
|
-
|
|
232
|
+
var assemblyNames = self.assemblyNames;
|
|
233
|
+
return assemblyNames.every(function (a) {
|
|
225
234
|
var _assemblyManager$get2;
|
|
226
235
|
|
|
227
236
|
return (_assemblyManager$get2 = assemblyManager.get(a)) === null || _assemblyManager$get2 === void 0 ? void 0 : _assemblyManager$get2.initialized;
|
|
@@ -312,13 +321,6 @@ function stateModelFactory(pluginManager) {
|
|
|
312
321
|
highResolutionScaling: (0, _configuration.getConf)((0, _util.getSession)(self), 'highResolutionScaling')
|
|
313
322
|
});
|
|
314
323
|
},
|
|
315
|
-
|
|
316
|
-
get assemblyNames() {
|
|
317
|
-
return (0, _toConsumableArray2.default)(new Set(self.displayedRegions.map(function (region) {
|
|
318
|
-
return region.assemblyName;
|
|
319
|
-
})));
|
|
320
|
-
},
|
|
321
|
-
|
|
322
324
|
searchScope: function searchScope(assemblyName) {
|
|
323
325
|
return {
|
|
324
326
|
assemblyName: assemblyName,
|
|
@@ -326,14 +328,6 @@ function stateModelFactory(pluginManager) {
|
|
|
326
328
|
tracks: self.tracks
|
|
327
329
|
};
|
|
328
330
|
},
|
|
329
|
-
|
|
330
|
-
/**
|
|
331
|
-
* @param refName - refName of the displayedRegion
|
|
332
|
-
* @param coord - coordinate at the displayed Region
|
|
333
|
-
* @param regionNumber - optional param used as identifier when
|
|
334
|
-
* there are multiple displayedRegions with the same refName
|
|
335
|
-
* @returns offsetPx of the displayed region that it lands in
|
|
336
|
-
*/
|
|
337
331
|
bpToPx: function bpToPx(_ref) {
|
|
338
332
|
var refName = _ref.refName,
|
|
339
333
|
coord = _ref.coord,
|
|
@@ -432,10 +426,8 @@ function stateModelFactory(pluginManager) {
|
|
|
432
426
|
return track.configuration.trackId;
|
|
433
427
|
});
|
|
434
428
|
results.forEach(function (result) {
|
|
435
|
-
if (openTrackIds
|
|
436
|
-
|
|
437
|
-
result.updateScore(result.getScore() + 1);
|
|
438
|
-
}
|
|
429
|
+
if (openTrackIds.includes(result.trackId)) {
|
|
430
|
+
result.updateScore(result.getScore() + 1);
|
|
439
431
|
}
|
|
440
432
|
});
|
|
441
433
|
return results;
|
|
@@ -509,6 +501,9 @@ function stateModelFactory(pluginManager) {
|
|
|
509
501
|
toggleHeaderOverview: function toggleHeaderOverview() {
|
|
510
502
|
self.hideHeaderOverview = !self.hideHeaderOverview;
|
|
511
503
|
},
|
|
504
|
+
toggleNoTracksActive: function toggleNoTracksActive() {
|
|
505
|
+
self.hideNoTracksActive = !self.hideNoTracksActive;
|
|
506
|
+
},
|
|
512
507
|
scrollTo: function scrollTo(offsetPx) {
|
|
513
508
|
var newOffsetPx = (0, _util.clamp)(offsetPx, self.minOffset, self.maxOffset);
|
|
514
509
|
self.offsetPx = newOffsetPx;
|
|
@@ -692,6 +687,8 @@ function stateModelFactory(pluginManager) {
|
|
|
692
687
|
throw new Error("invalid track selector type ".concat(self.trackSelectorType));
|
|
693
688
|
},
|
|
694
689
|
navToLocString: function navToLocString(locString, optAssemblyName) {
|
|
690
|
+
var _parsedLocStrings;
|
|
691
|
+
|
|
695
692
|
var assemblyNames = self.assemblyNames;
|
|
696
693
|
|
|
697
694
|
var _getSession3 = (0, _util.getSession)(self),
|
|
@@ -699,14 +696,38 @@ function stateModelFactory(pluginManager) {
|
|
|
699
696
|
|
|
700
697
|
var isValidRefName = assemblyManager.isValidRefName;
|
|
701
698
|
var assemblyName = optAssemblyName || assemblyNames[0];
|
|
702
|
-
var parsedLocStrings
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
699
|
+
var parsedLocStrings;
|
|
700
|
+
var inputs = locString.split(/(\s+)/).map(function (f) {
|
|
701
|
+
return f.trim();
|
|
702
|
+
}).filter(function (f) {
|
|
703
|
+
return !!f;
|
|
704
|
+
}); // first try interpreting as a whitespace-separated sequence of
|
|
705
|
+
// multiple locstrings
|
|
706
|
+
|
|
707
|
+
try {
|
|
708
|
+
parsedLocStrings = inputs.map(function (l) {
|
|
709
|
+
return (0, _util.parseLocString)(l, function (ref) {
|
|
710
|
+
return isValidRefName(ref, assemblyName);
|
|
711
|
+
});
|
|
707
712
|
});
|
|
708
|
-
})
|
|
709
|
-
|
|
713
|
+
} catch (e) {
|
|
714
|
+
// if this fails, try interpreting as a whitespace-separated refname,
|
|
715
|
+
// start, end if start and end are integer inputs
|
|
716
|
+
var _inputs = (0, _slicedToArray2.default)(inputs, 3),
|
|
717
|
+
refName = _inputs[0],
|
|
718
|
+
start = _inputs[1],
|
|
719
|
+
end = _inputs[2];
|
|
720
|
+
|
|
721
|
+
if ("".concat(e).match(/Unknown reference sequence/) && Number.isInteger(+start) && Number.isInteger(+end)) {
|
|
722
|
+
parsedLocStrings = [(0, _util.parseLocString)(refName + ':' + start + '..' + end, function (ref) {
|
|
723
|
+
return isValidRefName(ref, assemblyName);
|
|
724
|
+
})];
|
|
725
|
+
} else {
|
|
726
|
+
throw e;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
var locations = (_parsedLocStrings = parsedLocStrings) === null || _parsedLocStrings === void 0 ? void 0 : _parsedLocStrings.map(function (region) {
|
|
710
731
|
var asmName = region.assemblyName || assemblyName;
|
|
711
732
|
var asm = assemblyManager.get(asmName);
|
|
712
733
|
var refName = region.refName;
|
|
@@ -746,12 +767,12 @@ function stateModelFactory(pluginManager) {
|
|
|
746
767
|
this.setDisplayedRegions([_objectSpread({
|
|
747
768
|
reversed: loc.reversed
|
|
748
769
|
}, loc.parentRegion)]);
|
|
749
|
-
var
|
|
750
|
-
|
|
770
|
+
var _start = loc.start,
|
|
771
|
+
_end = loc.end,
|
|
751
772
|
parentRegion = loc.parentRegion;
|
|
752
773
|
this.navTo(_objectSpread(_objectSpread({}, loc), {}, {
|
|
753
|
-
start: (0, _util.clamp)(
|
|
754
|
-
end: (0, _util.clamp)(
|
|
774
|
+
start: (0, _util.clamp)(_start !== null && _start !== void 0 ? _start : 0, 0, parentRegion.end),
|
|
775
|
+
end: (0, _util.clamp)(_end !== null && _end !== void 0 ? _end : parentRegion.end, 0, parentRegion.end)
|
|
755
776
|
}));
|
|
756
777
|
} else {
|
|
757
778
|
this.setDisplayedRegions( // @ts-ignore
|
|
@@ -1230,6 +1251,12 @@ function stateModelFactory(pluginManager) {
|
|
|
1230
1251
|
checked: !self.hideHeaderOverview,
|
|
1231
1252
|
onClick: self.toggleHeaderOverview,
|
|
1232
1253
|
disabled: self.hideHeader
|
|
1254
|
+
}, {
|
|
1255
|
+
label: 'Show no tracks active button',
|
|
1256
|
+
icon: _Visibility.default,
|
|
1257
|
+
type: 'checkbox',
|
|
1258
|
+
checked: !self.hideNoTracksActive,
|
|
1259
|
+
onClick: self.toggleNoTracksActive
|
|
1233
1260
|
}, {
|
|
1234
1261
|
label: 'Track labels',
|
|
1235
1262
|
icon: _Label.default,
|
|
@@ -1380,7 +1407,7 @@ function stateModelFactory(pluginManager) {
|
|
|
1380
1407
|
blob = new Blob([html], {
|
|
1381
1408
|
type: 'image/svg+xml'
|
|
1382
1409
|
});
|
|
1383
|
-
(0, _fileSaver.saveAs)(blob, 'image.svg');
|
|
1410
|
+
(0, _fileSaver.saveAs)(blob, opts.filename || 'image.svg');
|
|
1384
1411
|
|
|
1385
1412
|
case 6:
|
|
1386
1413
|
case "end":
|