@jbrowse/plugin-linear-genome-view 1.7.8 → 1.7.9
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/models/BaseLinearDisplayModel.d.ts +3 -3
- package/dist/LinearGenomeView/components/ExportSvgDialog.js +35 -25
- package/dist/LinearGenomeView/index.d.ts +4 -3
- package/dist/LinearGenomeView/index.js +1 -1
- package/package.json +2 -2
- package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +1 -0
- package/src/LinearGenomeView/components/ExportSvgDialog.tsx +24 -11
- package/src/LinearGenomeView/index.tsx +2 -1
|
@@ -172,8 +172,8 @@ export declare const BaseLinearDisplay: import("mobx-state-tree").IModelType<{
|
|
|
172
172
|
signal?: AbortSignal;
|
|
173
173
|
filters?: string[];
|
|
174
174
|
}): Promise<{}>;
|
|
175
|
-
setRegionStatsP(p?: Promise<Stats>
|
|
176
|
-
setRegionStats(estimatedRegionStats?: Stats
|
|
175
|
+
setRegionStatsP(p?: Promise<Stats>): void;
|
|
176
|
+
setRegionStats(estimatedRegionStats?: Stats): void;
|
|
177
177
|
clearRegionStats(): void;
|
|
178
178
|
setHeight(displayHeight: number): number;
|
|
179
179
|
resizeHeight(distance: number): number;
|
|
@@ -186,7 +186,7 @@ export declare const BaseLinearDisplay: import("mobx-state-tree").IModelType<{
|
|
|
186
186
|
clearFeatureSelection(): void;
|
|
187
187
|
setFeatureIdUnderMouse(feature: string | undefined): void;
|
|
188
188
|
reload(): void;
|
|
189
|
-
setContextMenuFeature(feature?: Feature
|
|
189
|
+
setContextMenuFeature(feature?: Feature): void;
|
|
190
190
|
} & {
|
|
191
191
|
readonly regionTooLarge: boolean;
|
|
192
192
|
readonly regionTooLargeReason: string;
|
|
@@ -17,17 +17,17 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
17
17
|
|
|
18
18
|
var _react = _interopRequireWildcard(require("react"));
|
|
19
19
|
|
|
20
|
-
var _styles = require("@material-ui/core/styles");
|
|
21
|
-
|
|
22
20
|
var _core = require("@material-ui/core");
|
|
23
21
|
|
|
22
|
+
var _ui = require("@jbrowse/core/ui");
|
|
23
|
+
|
|
24
24
|
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
25
25
|
|
|
26
26
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
27
|
|
|
28
28
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
29
|
|
|
30
|
-
var useStyles = (0,
|
|
30
|
+
var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
31
31
|
return {
|
|
32
32
|
closeButton: {
|
|
33
33
|
position: 'absolute',
|
|
@@ -38,6 +38,17 @@ var useStyles = (0, _styles.makeStyles)(function (theme) {
|
|
|
38
38
|
};
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
+
function LoadingMessage() {
|
|
42
|
+
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_core.CircularProgress, {
|
|
43
|
+
size: 20,
|
|
44
|
+
style: {
|
|
45
|
+
marginRight: 20
|
|
46
|
+
}
|
|
47
|
+
}), /*#__PURE__*/_react.default.createElement(_core.Typography, {
|
|
48
|
+
display: "inline"
|
|
49
|
+
}, "Creating SVG"));
|
|
50
|
+
}
|
|
51
|
+
|
|
41
52
|
function ExportSvgDlg(_ref) {
|
|
42
53
|
var model = _ref.model,
|
|
43
54
|
handleClose = _ref.handleClose;
|
|
@@ -54,10 +65,15 @@ function ExportSvgDlg(_ref) {
|
|
|
54
65
|
loading = _useState4[0],
|
|
55
66
|
setLoading = _useState4[1];
|
|
56
67
|
|
|
57
|
-
var _useState5 = (0, _react.useState)(),
|
|
68
|
+
var _useState5 = (0, _react.useState)('jbrowse.svg'),
|
|
58
69
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
59
|
-
|
|
60
|
-
|
|
70
|
+
filename = _useState6[0],
|
|
71
|
+
setFilename = _useState6[1];
|
|
72
|
+
|
|
73
|
+
var _useState7 = (0, _react.useState)(),
|
|
74
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
75
|
+
error = _useState8[0],
|
|
76
|
+
setError = _useState8[1];
|
|
61
77
|
|
|
62
78
|
var classes = useStyles();
|
|
63
79
|
return /*#__PURE__*/_react.default.createElement(_core.Dialog, {
|
|
@@ -66,18 +82,15 @@ function ExportSvgDlg(_ref) {
|
|
|
66
82
|
}, /*#__PURE__*/_react.default.createElement(_core.DialogTitle, null, "Export SVG", /*#__PURE__*/_react.default.createElement(_core.IconButton, {
|
|
67
83
|
className: classes.closeButton,
|
|
68
84
|
onClick: handleClose
|
|
69
|
-
}, /*#__PURE__*/_react.default.createElement(_Close.default, null))), /*#__PURE__*/_react.default.createElement(_core.DialogContent, null, error ? /*#__PURE__*/_react.default.createElement(
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
}, /*#__PURE__*/_react.default.createElement(_Close.default, null))), /*#__PURE__*/_react.default.createElement(_core.DialogContent, null, error ? /*#__PURE__*/_react.default.createElement(_ui.ErrorMessage, {
|
|
86
|
+
error: error
|
|
87
|
+
}) : loading ? /*#__PURE__*/_react.default.createElement(LoadingMessage, null) : null, /*#__PURE__*/_react.default.createElement(_core.TextField, {
|
|
88
|
+
helperText: "filename",
|
|
89
|
+
value: filename,
|
|
90
|
+
onChange: function onChange(event) {
|
|
91
|
+
return setFilename(event.target.value);
|
|
72
92
|
}
|
|
73
|
-
},
|
|
74
|
-
size: 20,
|
|
75
|
-
style: {
|
|
76
|
-
marginRight: 20
|
|
77
|
-
}
|
|
78
|
-
}), /*#__PURE__*/_react.default.createElement(_core.Typography, {
|
|
79
|
-
display: "inline"
|
|
80
|
-
}, "Creating SVG")) : null, offscreenCanvas ? /*#__PURE__*/_react.default.createElement(_core.FormControlLabel, {
|
|
93
|
+
}), offscreenCanvas ? /*#__PURE__*/_react.default.createElement(_core.FormControlLabel, {
|
|
81
94
|
control: /*#__PURE__*/_react.default.createElement(_core.Checkbox, {
|
|
82
95
|
checked: rasterizeLayers,
|
|
83
96
|
onChange: function onChange() {
|
|
@@ -107,12 +120,13 @@ function ExportSvgDlg(_ref) {
|
|
|
107
120
|
_context.prev = 2;
|
|
108
121
|
_context.next = 5;
|
|
109
122
|
return model.exportSvg({
|
|
110
|
-
rasterizeLayers: rasterizeLayers
|
|
123
|
+
rasterizeLayers: rasterizeLayers,
|
|
124
|
+
filename: filename
|
|
111
125
|
});
|
|
112
126
|
|
|
113
127
|
case 5:
|
|
114
128
|
handleClose();
|
|
115
|
-
_context.next =
|
|
129
|
+
_context.next = 13;
|
|
116
130
|
break;
|
|
117
131
|
|
|
118
132
|
case 8:
|
|
@@ -120,18 +134,14 @@ function ExportSvgDlg(_ref) {
|
|
|
120
134
|
_context.t0 = _context["catch"](2);
|
|
121
135
|
console.error(_context.t0);
|
|
122
136
|
setError(_context.t0);
|
|
123
|
-
|
|
124
|
-
case 12:
|
|
125
|
-
_context.prev = 12;
|
|
126
137
|
setLoading(false);
|
|
127
|
-
return _context.finish(12);
|
|
128
138
|
|
|
129
|
-
case
|
|
139
|
+
case 13:
|
|
130
140
|
case "end":
|
|
131
141
|
return _context.stop();
|
|
132
142
|
}
|
|
133
143
|
}
|
|
134
|
-
}, _callee, null, [[2, 8
|
|
144
|
+
}, _callee, null, [[2, 8]]);
|
|
135
145
|
}))
|
|
136
146
|
}, "Submit")));
|
|
137
147
|
}
|
|
@@ -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;
|
|
@@ -180,7 +181,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
180
181
|
toggleCenterLine(): void;
|
|
181
182
|
setDisplayedRegions(regions: Region[]): void;
|
|
182
183
|
activateTrackSelector(): import("@jbrowse/core/util").Widget;
|
|
183
|
-
navToLocString(locString: string, optAssemblyName?: string
|
|
184
|
+
navToLocString(locString: string, optAssemblyName?: string): void;
|
|
184
185
|
/**
|
|
185
186
|
* Navigate to a location based on its refName and optionally start, end,
|
|
186
187
|
* and assemblyName. Can handle if there are multiple displayedRegions
|
|
@@ -245,8 +246,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
245
246
|
centerAt(bp: number, refName: string, regionIndex: number): void;
|
|
246
247
|
center(): void;
|
|
247
248
|
showAllRegions(): void;
|
|
248
|
-
showAllRegionsInAssembly(assemblyName?: string
|
|
249
|
-
setDraggingTrackId(idx?: string
|
|
249
|
+
showAllRegionsInAssembly(assemblyName?: string): void;
|
|
250
|
+
setDraggingTrackId(idx?: string): void;
|
|
250
251
|
setScaleFactor(factor: number): void;
|
|
251
252
|
} & {
|
|
252
253
|
slide: (viewWidths: number) => void;
|
|
@@ -1380,7 +1380,7 @@ function stateModelFactory(pluginManager) {
|
|
|
1380
1380
|
blob = new Blob([html], {
|
|
1381
1381
|
type: 'image/svg+xml'
|
|
1382
1382
|
});
|
|
1383
|
-
(0, _fileSaver.saveAs)(blob, 'image.svg');
|
|
1383
|
+
(0, _fileSaver.saveAs)(blob, opts.filename || 'image.svg');
|
|
1384
1384
|
|
|
1385
1385
|
case 6:
|
|
1386
1386
|
case "end":
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-linear-genome-view",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.9",
|
|
4
4
|
"description": "JBrowse 2 linear genome view",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"publishConfig": {
|
|
58
58
|
"access": "public"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "a6504c385d703ce6e755d05652ef659ffe28c864"
|
|
61
61
|
}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
|
-
import { makeStyles } from '@material-ui/core/styles'
|
|
3
2
|
import {
|
|
4
3
|
Button,
|
|
4
|
+
Checkbox,
|
|
5
|
+
CircularProgress,
|
|
5
6
|
Dialog,
|
|
6
7
|
DialogActions,
|
|
7
8
|
DialogContent,
|
|
8
9
|
DialogTitle,
|
|
9
|
-
IconButton,
|
|
10
|
-
Checkbox,
|
|
11
10
|
FormControlLabel,
|
|
12
|
-
|
|
11
|
+
IconButton,
|
|
12
|
+
TextField,
|
|
13
13
|
Typography,
|
|
14
|
+
makeStyles,
|
|
14
15
|
} from '@material-ui/core'
|
|
16
|
+
import { ErrorMessage } from '@jbrowse/core/ui'
|
|
15
17
|
import CloseIcon from '@material-ui/icons/Close'
|
|
16
18
|
import { LinearGenomeViewModel as LGV } from '..'
|
|
17
19
|
|
|
@@ -24,6 +26,15 @@ const useStyles = makeStyles(theme => ({
|
|
|
24
26
|
},
|
|
25
27
|
}))
|
|
26
28
|
|
|
29
|
+
function LoadingMessage() {
|
|
30
|
+
return (
|
|
31
|
+
<div>
|
|
32
|
+
<CircularProgress size={20} style={{ marginRight: 20 }} />
|
|
33
|
+
<Typography display="inline">Creating SVG</Typography>
|
|
34
|
+
</div>
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
27
38
|
export default function ExportSvgDlg({
|
|
28
39
|
model,
|
|
29
40
|
handleClose,
|
|
@@ -35,6 +46,7 @@ export default function ExportSvgDlg({
|
|
|
35
46
|
const offscreenCanvas = typeof OffscreenCanvas !== 'undefined'
|
|
36
47
|
const [rasterizeLayers, setRasterizeLayers] = useState(offscreenCanvas)
|
|
37
48
|
const [loading, setLoading] = useState(false)
|
|
49
|
+
const [filename, setFilename] = useState('jbrowse.svg')
|
|
38
50
|
const [error, setError] = useState<unknown>()
|
|
39
51
|
const classes = useStyles()
|
|
40
52
|
return (
|
|
@@ -47,13 +59,15 @@ export default function ExportSvgDlg({
|
|
|
47
59
|
</DialogTitle>
|
|
48
60
|
<DialogContent>
|
|
49
61
|
{error ? (
|
|
50
|
-
<
|
|
62
|
+
<ErrorMessage error={error} />
|
|
51
63
|
) : loading ? (
|
|
52
|
-
<
|
|
53
|
-
<CircularProgress size={20} style={{ marginRight: 20 }} />
|
|
54
|
-
<Typography display="inline">Creating SVG</Typography>
|
|
55
|
-
</div>
|
|
64
|
+
<LoadingMessage />
|
|
56
65
|
) : null}
|
|
66
|
+
<TextField
|
|
67
|
+
helperText="filename"
|
|
68
|
+
value={filename}
|
|
69
|
+
onChange={event => setFilename(event.target.value)}
|
|
70
|
+
/>
|
|
57
71
|
{offscreenCanvas ? (
|
|
58
72
|
<FormControlLabel
|
|
59
73
|
control={
|
|
@@ -87,12 +101,11 @@ export default function ExportSvgDlg({
|
|
|
87
101
|
setLoading(true)
|
|
88
102
|
setError(undefined)
|
|
89
103
|
try {
|
|
90
|
-
await model.exportSvg({ rasterizeLayers })
|
|
104
|
+
await model.exportSvg({ rasterizeLayers, filename })
|
|
91
105
|
handleClose()
|
|
92
106
|
} catch (e) {
|
|
93
107
|
console.error(e)
|
|
94
108
|
setError(e)
|
|
95
|
-
} finally {
|
|
96
109
|
setLoading(false)
|
|
97
110
|
}
|
|
98
111
|
}}
|
|
@@ -67,6 +67,7 @@ export interface BpOffset {
|
|
|
67
67
|
|
|
68
68
|
export interface ExportSvgOptions {
|
|
69
69
|
rasterizeLayers?: boolean
|
|
70
|
+
filename?: string
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
function calculateVisibleLocStrings(contentBlocks: BaseBlock[]) {
|
|
@@ -1330,7 +1331,7 @@ export function stateModelFactory(pluginManager: PluginManager) {
|
|
|
1330
1331
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1331
1332
|
const html = await renderToSvg(self as any, opts)
|
|
1332
1333
|
const blob = new Blob([html], { type: 'image/svg+xml' })
|
|
1333
|
-
saveAs(blob, 'image.svg')
|
|
1334
|
+
saveAs(blob, opts.filename || 'image.svg')
|
|
1334
1335
|
},
|
|
1335
1336
|
}))
|
|
1336
1337
|
.views(self => ({
|