@jbrowse/plugin-wiggle 2.5.0 → 2.6.1
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/BigWigAdapter/BigWigAdapter.js +2 -1
- package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -1
- package/dist/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -1
- package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
- package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -1
- package/dist/LinearWiggleDisplay/index.js +27 -4
- package/dist/LinearWiggleDisplay/index.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/configSchema.d.ts +18 -35
- package/dist/LinearWiggleDisplay/models/configSchema.js +6 -67
- package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/model.d.ts +147 -342
- package/dist/LinearWiggleDisplay/models/model.js +17 -432
- package/dist/LinearWiggleDisplay/models/model.js.map +1 -1
- package/dist/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/dist/LinearWiggleDisplay/models/renderSvg.js +21 -0
- package/dist/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/dist/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
- package/dist/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
- package/dist/MultiLineRenderer/MultiLineRenderer.js +1 -1
- package/dist/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -1
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +2 -2
- package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -2
- package/dist/MultiLinearWiggleDisplay/index.js +25 -2
- package/dist/MultiLinearWiggleDisplay/index.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/configSchema.d.ts +24 -44
- package/dist/MultiLinearWiggleDisplay/models/configSchema.js +6 -66
- package/dist/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/model.d.ts +263 -175
- package/dist/MultiLinearWiggleDisplay/models/model.js +335 -508
- package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -1
- package/dist/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/dist/MultiLinearWiggleDisplay/models/renderSvg.js +20 -0
- package/dist/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
- package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
- package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
- package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -1
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
- package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
- package/dist/MultiWiggleRendering.d.ts +2 -1
- package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js +3 -2
- package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
- package/dist/Tooltip.d.ts +1 -1
- package/dist/WiggleBaseRenderer.d.ts +1 -1
- package/dist/WiggleRendering.d.ts +2 -1
- package/dist/index.d.ts +222 -198
- package/dist/shared/SetMinMaxDialog.d.ts +2 -1
- package/dist/shared/YScaleBar.d.ts +4 -2
- package/dist/shared/YScaleBar.js +1 -1
- package/dist/shared/YScaleBar.js.map +1 -1
- package/dist/shared/configShared.d.ts +85 -0
- package/dist/shared/configShared.js +84 -0
- package/dist/shared/configShared.js.map +1 -0
- package/dist/shared/modelShared.d.ts +576 -0
- package/dist/shared/modelShared.js +480 -0
- package/dist/shared/modelShared.js.map +1 -0
- package/dist/util.d.ts +0 -3
- package/dist/util.js +1 -11
- package/dist/util.js.map +1 -1
- package/esm/BigWigAdapter/BigWigAdapter.js +2 -1
- package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -1
- package/esm/CreateMultiWiggleExtension/ConfirmDialog.d.ts +2 -1
- package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
- package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +2 -1
- package/esm/LinearWiggleDisplay/index.js +2 -2
- package/esm/LinearWiggleDisplay/index.js.map +1 -1
- package/esm/LinearWiggleDisplay/models/configSchema.d.ts +18 -35
- package/esm/LinearWiggleDisplay/models/configSchema.js +3 -67
- package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/esm/LinearWiggleDisplay/models/model.d.ts +147 -342
- package/esm/LinearWiggleDisplay/models/model.js +20 -435
- package/esm/LinearWiggleDisplay/models/model.js.map +1 -1
- package/esm/LinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/esm/LinearWiggleDisplay/models/renderSvg.js +14 -0
- package/esm/LinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/esm/MultiDensityRenderer/MultiDensityRenderer.js +1 -1
- package/esm/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -1
- package/esm/MultiLineRenderer/MultiLineRenderer.js +1 -1
- package/esm/MultiLineRenderer/MultiLineRenderer.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +2 -1
- package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +2 -1
- package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +1 -1
- package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/components/Tooltip.d.ts +1 -1
- package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +3 -2
- package/esm/MultiLinearWiggleDisplay/index.js +2 -2
- package/esm/MultiLinearWiggleDisplay/index.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/models/configSchema.d.ts +24 -44
- package/esm/MultiLinearWiggleDisplay/models/configSchema.js +3 -66
- package/esm/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/models/model.d.ts +263 -175
- package/esm/MultiLinearWiggleDisplay/models/model.js +337 -512
- package/esm/MultiLinearWiggleDisplay/models/model.js.map +1 -1
- package/esm/MultiLinearWiggleDisplay/models/renderSvg.d.ts +4 -0
- package/esm/MultiLinearWiggleDisplay/models/renderSvg.js +13 -0
- package/esm/MultiLinearWiggleDisplay/models/renderSvg.js.map +1 -0
- package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js +1 -1
- package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -1
- package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +1 -1
- package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -1
- package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +2 -1
- package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +1 -1
- package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -1
- package/esm/MultiWiggleRendering.d.ts +2 -1
- package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js +2 -1
- package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -1
- package/esm/Tooltip.d.ts +1 -1
- package/esm/WiggleBaseRenderer.d.ts +1 -1
- package/esm/WiggleRendering.d.ts +2 -1
- package/esm/index.d.ts +222 -198
- package/esm/shared/SetMinMaxDialog.d.ts +2 -1
- package/esm/shared/YScaleBar.d.ts +4 -2
- package/esm/shared/YScaleBar.js +1 -1
- package/esm/shared/YScaleBar.js.map +1 -1
- package/esm/shared/configShared.d.ts +85 -0
- package/esm/shared/configShared.js +81 -0
- package/esm/shared/configShared.js.map +1 -0
- package/esm/shared/modelShared.d.ts +576 -0
- package/esm/shared/modelShared.js +454 -0
- package/esm/shared/modelShared.js.map +1 -0
- package/esm/util.d.ts +0 -3
- package/esm/util.js +0 -9
- package/esm/util.js.map +1 -1
- package/package.json +3 -3
- package/src/BigWigAdapter/BigWigAdapter.ts +2 -4
- package/src/LinearWiggleDisplay/index.ts +2 -2
- package/src/LinearWiggleDisplay/models/configSchema.ts +4 -73
- package/src/LinearWiggleDisplay/models/model.tsx +22 -503
- package/src/LinearWiggleDisplay/models/renderSvg.tsx +29 -0
- package/src/MultiDensityRenderer/MultiDensityRenderer.ts +1 -2
- package/src/MultiLineRenderer/MultiLineRenderer.ts +1 -2
- package/src/MultiLinearWiggleDisplay/components/SetColorDialog.tsx +1 -1
- package/src/MultiLinearWiggleDisplay/index.ts +2 -2
- package/src/MultiLinearWiggleDisplay/models/configSchema.ts +4 -72
- package/src/MultiLinearWiggleDisplay/models/model.tsx +132 -371
- package/src/MultiLinearWiggleDisplay/models/renderSvg.tsx +26 -0
- package/src/MultiRowLineRenderer/MultiRowLineRenderer.ts +1 -2
- package/src/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.ts +1 -2
- package/src/MultiWiggleAddTrackWidget/AddTrackWorkflow.tsx +1 -1
- package/src/MultiXYPlotRenderer/MultiXYPlotRenderer.ts +2 -2
- package/src/shared/YScaleBar.tsx +4 -2
- package/src/shared/configShared.ts +90 -0
- package/src/shared/modelShared.ts +510 -0
- package/src/util.ts +1 -10
|
@@ -1,37 +1,25 @@
|
|
|
1
1
|
import React, { lazy } from 'react'
|
|
2
2
|
import {
|
|
3
|
-
ConfigurationReference,
|
|
4
3
|
AnyConfigurationSchemaType,
|
|
5
4
|
getConf,
|
|
6
|
-
readConfObject,
|
|
7
5
|
} from '@jbrowse/core/configuration'
|
|
8
|
-
import {
|
|
9
|
-
getEnv,
|
|
10
|
-
getSession,
|
|
11
|
-
getContainingView,
|
|
12
|
-
isSelectionContainer,
|
|
13
|
-
Feature,
|
|
14
|
-
} from '@jbrowse/core/util'
|
|
15
|
-
import {
|
|
16
|
-
BaseLinearDisplay,
|
|
17
|
-
LinearGenomeViewModel,
|
|
18
|
-
} from '@jbrowse/plugin-linear-genome-view'
|
|
19
|
-
import { when } from 'mobx'
|
|
6
|
+
import { getSession } from '@jbrowse/core/util'
|
|
20
7
|
import { types, Instance } from 'mobx-state-tree'
|
|
21
8
|
import PluginManager from '@jbrowse/core/PluginManager'
|
|
22
|
-
|
|
23
9
|
import { axisPropsFromTickScale } from 'react-d3-axis-mod'
|
|
10
|
+
import { ExportSvgDisplayOptions } from '@jbrowse/plugin-linear-genome-view'
|
|
11
|
+
|
|
12
|
+
// locals
|
|
24
13
|
import {
|
|
25
|
-
getNiceDomain,
|
|
26
14
|
getScale,
|
|
27
15
|
quantitativeStatsAutorun,
|
|
28
16
|
YSCALEBAR_LABEL_OFFSET,
|
|
29
17
|
} from '../../util'
|
|
30
18
|
|
|
31
19
|
import Tooltip from '../components/Tooltip'
|
|
32
|
-
import
|
|
20
|
+
import SharedWiggleMixin from '../../shared/modelShared'
|
|
33
21
|
|
|
34
|
-
|
|
22
|
+
// lazies
|
|
35
23
|
const SetColorDlg = lazy(() => import('../components/SetColorDialog'))
|
|
36
24
|
|
|
37
25
|
// using a map because it preserves order
|
|
@@ -41,11 +29,9 @@ const rendererTypes = new Map([
|
|
|
41
29
|
['line', 'LinePlotRenderer'],
|
|
42
30
|
])
|
|
43
31
|
|
|
44
|
-
type LGV = LinearGenomeViewModel
|
|
45
|
-
|
|
46
32
|
/**
|
|
47
33
|
* #stateModel LinearWiggleDisplay
|
|
48
|
-
*
|
|
34
|
+
* extends `SharedWiggleMixin`
|
|
49
35
|
*/
|
|
50
36
|
function stateModelFactory(
|
|
51
37
|
pluginManager: PluginManager,
|
|
@@ -54,411 +40,36 @@ function stateModelFactory(
|
|
|
54
40
|
return types
|
|
55
41
|
.compose(
|
|
56
42
|
'LinearWiggleDisplay',
|
|
57
|
-
|
|
43
|
+
SharedWiggleMixin(configSchema),
|
|
58
44
|
types.model({
|
|
59
45
|
/**
|
|
60
46
|
* #property
|
|
61
47
|
*/
|
|
62
48
|
type: types.literal('LinearWiggleDisplay'),
|
|
63
|
-
/**
|
|
64
|
-
* #property
|
|
65
|
-
*/
|
|
66
|
-
configuration: ConfigurationReference(configSchema),
|
|
67
|
-
/**
|
|
68
|
-
* #property
|
|
69
|
-
*/
|
|
70
|
-
selectedRendering: types.optional(types.string, ''),
|
|
71
|
-
/**
|
|
72
|
-
* #property
|
|
73
|
-
*/
|
|
74
|
-
resolution: types.optional(types.number, 1),
|
|
75
|
-
/**
|
|
76
|
-
* #property
|
|
77
|
-
*/
|
|
78
|
-
fill: types.maybe(types.boolean),
|
|
79
|
-
/**
|
|
80
|
-
* #property
|
|
81
|
-
*/
|
|
82
|
-
minSize: types.maybe(types.number),
|
|
83
|
-
/**
|
|
84
|
-
* #property
|
|
85
|
-
*/
|
|
86
|
-
color: types.maybe(types.string),
|
|
87
|
-
/**
|
|
88
|
-
* #property
|
|
89
|
-
*/
|
|
90
|
-
posColor: types.maybe(types.string),
|
|
91
|
-
/**
|
|
92
|
-
* #property
|
|
93
|
-
*/
|
|
94
|
-
negColor: types.maybe(types.string),
|
|
95
|
-
/**
|
|
96
|
-
* #property
|
|
97
|
-
*/
|
|
98
|
-
summaryScoreMode: types.maybe(types.string),
|
|
99
|
-
/**
|
|
100
|
-
* #property
|
|
101
|
-
*/
|
|
102
|
-
rendererTypeNameState: types.maybe(types.string),
|
|
103
|
-
/**
|
|
104
|
-
* #property
|
|
105
|
-
*/
|
|
106
|
-
scale: types.maybe(types.string),
|
|
107
|
-
/**
|
|
108
|
-
* #property
|
|
109
|
-
*/
|
|
110
|
-
autoscale: types.maybe(types.string),
|
|
111
|
-
/**
|
|
112
|
-
* #property
|
|
113
|
-
*/
|
|
114
|
-
displayCrossHatches: types.maybe(types.boolean),
|
|
115
|
-
/**
|
|
116
|
-
* #property
|
|
117
|
-
*/
|
|
118
|
-
constraints: types.optional(
|
|
119
|
-
types.model({
|
|
120
|
-
max: types.maybe(types.number),
|
|
121
|
-
min: types.maybe(types.number),
|
|
122
|
-
}),
|
|
123
|
-
{},
|
|
124
|
-
),
|
|
125
49
|
}),
|
|
126
50
|
)
|
|
127
|
-
.volatile(() => ({
|
|
128
|
-
message: undefined as undefined | string,
|
|
129
|
-
stats: undefined as { scoreMin: number; scoreMax: number } | undefined,
|
|
130
|
-
statsFetchInProgress: undefined as undefined | AbortController,
|
|
131
|
-
}))
|
|
132
|
-
.actions(self => ({
|
|
133
|
-
/**
|
|
134
|
-
* #action
|
|
135
|
-
*/
|
|
136
|
-
updateQuantitativeStats(stats: { scoreMin: number; scoreMax: number }) {
|
|
137
|
-
const { scoreMin, scoreMax } = stats
|
|
138
|
-
const EPSILON = 0.000001
|
|
139
|
-
if (!self.stats) {
|
|
140
|
-
self.stats = { scoreMin, scoreMax }
|
|
141
|
-
} else if (
|
|
142
|
-
Math.abs(self.stats.scoreMax - scoreMax) > EPSILON ||
|
|
143
|
-
Math.abs(self.stats.scoreMin - scoreMin) > EPSILON
|
|
144
|
-
) {
|
|
145
|
-
self.stats = { scoreMin, scoreMax }
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
/**
|
|
149
|
-
* #action
|
|
150
|
-
*/
|
|
151
|
-
setColor(color?: string) {
|
|
152
|
-
self.color = color
|
|
153
|
-
},
|
|
154
|
-
/**
|
|
155
|
-
* #action
|
|
156
|
-
*/
|
|
157
|
-
setPosColor(color?: string) {
|
|
158
|
-
self.posColor = color
|
|
159
|
-
},
|
|
160
|
-
/**
|
|
161
|
-
* #action
|
|
162
|
-
*/
|
|
163
|
-
setNegColor(color?: string) {
|
|
164
|
-
self.negColor = color
|
|
165
|
-
},
|
|
166
51
|
|
|
167
|
-
/**
|
|
168
|
-
* #action
|
|
169
|
-
*/
|
|
170
|
-
setLoading(aborter: AbortController) {
|
|
171
|
-
const { statsFetchInProgress: statsFetch } = self
|
|
172
|
-
if (statsFetch !== undefined && !statsFetch.signal.aborted) {
|
|
173
|
-
statsFetch.abort()
|
|
174
|
-
}
|
|
175
|
-
self.statsFetchInProgress = aborter
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* #action
|
|
180
|
-
* this overrides the BaseLinearDisplayModel to avoid popping up a
|
|
181
|
-
* feature detail display, but still sets the feature selection on the
|
|
182
|
-
* model so listeners can detect a click
|
|
183
|
-
*/
|
|
184
|
-
selectFeature(feature: Feature) {
|
|
185
|
-
const session = getSession(self)
|
|
186
|
-
if (isSelectionContainer(session)) {
|
|
187
|
-
session.setSelection(feature)
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* #action
|
|
193
|
-
*/
|
|
194
|
-
setResolution(res: number) {
|
|
195
|
-
self.resolution = res
|
|
196
|
-
},
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* #action
|
|
200
|
-
*/
|
|
201
|
-
setFill(fill: number) {
|
|
202
|
-
if (fill === 0) {
|
|
203
|
-
self.fill = true
|
|
204
|
-
self.minSize = 0
|
|
205
|
-
} else if (fill === 1) {
|
|
206
|
-
self.fill = false
|
|
207
|
-
self.minSize = 1
|
|
208
|
-
} else if (fill === 2) {
|
|
209
|
-
self.fill = false
|
|
210
|
-
self.minSize = 2
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* #action
|
|
216
|
-
*/
|
|
217
|
-
toggleLogScale() {
|
|
218
|
-
self.scale = self.scale === 'log' ? 'linear' : 'log'
|
|
219
|
-
},
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* #action
|
|
223
|
-
*/
|
|
224
|
-
setScaleType(scale?: string) {
|
|
225
|
-
self.scale = scale
|
|
226
|
-
},
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* #action
|
|
230
|
-
*/
|
|
231
|
-
setSummaryScoreMode(val: string) {
|
|
232
|
-
self.summaryScoreMode = val
|
|
233
|
-
},
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* #action
|
|
237
|
-
*/
|
|
238
|
-
setAutoscale(val: string) {
|
|
239
|
-
self.autoscale = val
|
|
240
|
-
},
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* #action
|
|
244
|
-
*/
|
|
245
|
-
setMaxScore(val?: number) {
|
|
246
|
-
self.constraints.max = val
|
|
247
|
-
},
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* #action
|
|
251
|
-
*/
|
|
252
|
-
setRendererType(val: string) {
|
|
253
|
-
self.rendererTypeNameState = val
|
|
254
|
-
},
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* #action
|
|
258
|
-
*/
|
|
259
|
-
setMinScore(val?: number) {
|
|
260
|
-
self.constraints.min = val
|
|
261
|
-
},
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* #action
|
|
265
|
-
*/
|
|
266
|
-
toggleCrossHatches() {
|
|
267
|
-
self.displayCrossHatches = !self.displayCrossHatches
|
|
268
|
-
},
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* #action
|
|
272
|
-
*/
|
|
273
|
-
setCrossHatches(cross: boolean) {
|
|
274
|
-
self.displayCrossHatches = cross
|
|
275
|
-
},
|
|
276
|
-
}))
|
|
277
52
|
.views(self => ({
|
|
278
53
|
/**
|
|
279
54
|
* #getter
|
|
280
55
|
*/
|
|
281
56
|
get TooltipComponent() {
|
|
282
|
-
return Tooltip as
|
|
283
|
-
},
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* #getter
|
|
287
|
-
*/
|
|
288
|
-
get adapterTypeName() {
|
|
289
|
-
return self.adapterConfig.type
|
|
290
|
-
},
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* #getter
|
|
294
|
-
*/
|
|
295
|
-
get rendererTypeNameSimple() {
|
|
296
|
-
return self.rendererTypeNameState || getConf(self, 'defaultRendering')
|
|
57
|
+
return Tooltip as React.FC
|
|
297
58
|
},
|
|
298
59
|
|
|
299
60
|
/**
|
|
300
61
|
* #getter
|
|
301
62
|
*/
|
|
302
63
|
get rendererTypeName() {
|
|
303
|
-
const name =
|
|
64
|
+
const name = self.rendererTypeNameSimple
|
|
304
65
|
const rendererType = rendererTypes.get(name)
|
|
305
66
|
if (!rendererType) {
|
|
306
67
|
throw new Error(`unknown renderer ${name}`)
|
|
307
68
|
}
|
|
308
69
|
return rendererType
|
|
309
70
|
},
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* #getter
|
|
313
|
-
* subclasses can define these, as snpcoverage track does
|
|
314
|
-
*/
|
|
315
|
-
get filters() {
|
|
316
|
-
return undefined
|
|
317
|
-
},
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* #getter
|
|
321
|
-
*/
|
|
322
|
-
get scaleType() {
|
|
323
|
-
return self.scale || getConf(self, 'scaleType')
|
|
324
|
-
},
|
|
325
|
-
|
|
326
|
-
/**
|
|
327
|
-
* #getter
|
|
328
|
-
*/
|
|
329
|
-
get maxScore() {
|
|
330
|
-
return self.constraints.max ?? getConf(self, 'maxScore')
|
|
331
|
-
},
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* #getter
|
|
335
|
-
*/
|
|
336
|
-
get minScore() {
|
|
337
|
-
return self.constraints.min ?? getConf(self, 'minScore')
|
|
338
|
-
},
|
|
339
71
|
}))
|
|
340
|
-
.views(self => ({
|
|
341
|
-
/**
|
|
342
|
-
* #getter
|
|
343
|
-
*/
|
|
344
|
-
get rendererConfig() {
|
|
345
|
-
const {
|
|
346
|
-
color,
|
|
347
|
-
displayCrossHatches,
|
|
348
|
-
fill,
|
|
349
|
-
minSize,
|
|
350
|
-
negColor,
|
|
351
|
-
posColor,
|
|
352
|
-
summaryScoreMode,
|
|
353
|
-
scaleType,
|
|
354
|
-
rendererTypeName,
|
|
355
|
-
} = self
|
|
356
|
-
const configBlob = getConf(self, ['renderers', rendererTypeName]) || {}
|
|
357
|
-
return self.rendererType.configSchema.create(
|
|
358
|
-
{
|
|
359
|
-
...configBlob,
|
|
360
|
-
...(scaleType ? { scaleType } : {}),
|
|
361
|
-
...(fill !== undefined ? { filled: fill } : {}),
|
|
362
|
-
...(displayCrossHatches !== undefined
|
|
363
|
-
? { displayCrossHatches }
|
|
364
|
-
: {}),
|
|
365
|
-
...(summaryScoreMode !== undefined ? { summaryScoreMode } : {}),
|
|
366
|
-
...(color !== undefined ? { color } : {}),
|
|
367
|
-
...(negColor !== undefined ? { negColor } : {}),
|
|
368
|
-
...(posColor !== undefined ? { posColor } : {}),
|
|
369
|
-
...(minSize !== undefined ? { minSize } : {}),
|
|
370
|
-
},
|
|
371
|
-
getEnv(self),
|
|
372
|
-
)
|
|
373
|
-
},
|
|
374
|
-
}))
|
|
375
|
-
.views(self => {
|
|
376
|
-
let oldDomain: [number, number] = [0, 0]
|
|
377
|
-
return {
|
|
378
|
-
/**
|
|
379
|
-
* #getter
|
|
380
|
-
*/
|
|
381
|
-
get filled() {
|
|
382
|
-
return readConfObject(self.rendererConfig, 'filled')
|
|
383
|
-
},
|
|
384
|
-
/**
|
|
385
|
-
* #getter
|
|
386
|
-
*/
|
|
387
|
-
get summaryScoreModeSetting() {
|
|
388
|
-
return readConfObject(self.rendererConfig, 'summaryScoreMode')
|
|
389
|
-
},
|
|
390
|
-
/**
|
|
391
|
-
* #getter
|
|
392
|
-
*/
|
|
393
|
-
get domain() {
|
|
394
|
-
const { stats, scaleType, minScore, maxScore } = self
|
|
395
|
-
if (!stats) {
|
|
396
|
-
return undefined
|
|
397
|
-
}
|
|
398
72
|
|
|
399
|
-
const ret = getNiceDomain({
|
|
400
|
-
domain: [stats.scoreMin, stats.scoreMax],
|
|
401
|
-
bounds: [minScore, maxScore],
|
|
402
|
-
scaleType,
|
|
403
|
-
})
|
|
404
|
-
|
|
405
|
-
// avoid weird scalebar if log value and empty region displayed
|
|
406
|
-
if (scaleType === 'log' && ret[1] === Number.MIN_VALUE) {
|
|
407
|
-
return [0, Number.MIN_VALUE]
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
// avoid returning a new object if it matches the old value
|
|
411
|
-
if (JSON.stringify(oldDomain) !== JSON.stringify(ret)) {
|
|
412
|
-
oldDomain = ret
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
return oldDomain
|
|
416
|
-
},
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* #getter
|
|
420
|
-
*/
|
|
421
|
-
get needsScalebar() {
|
|
422
|
-
return (
|
|
423
|
-
self.rendererTypeName === 'XYPlotRenderer' ||
|
|
424
|
-
self.rendererTypeName === 'LinePlotRenderer'
|
|
425
|
-
)
|
|
426
|
-
},
|
|
427
|
-
/**
|
|
428
|
-
* #getter
|
|
429
|
-
*/
|
|
430
|
-
get scaleOpts() {
|
|
431
|
-
return {
|
|
432
|
-
domain: this.domain,
|
|
433
|
-
stats: self.stats,
|
|
434
|
-
autoscaleType: this.autoscaleType,
|
|
435
|
-
scaleType: self.scaleType,
|
|
436
|
-
inverted: getConf(self, 'inverted'),
|
|
437
|
-
}
|
|
438
|
-
},
|
|
439
|
-
|
|
440
|
-
/**
|
|
441
|
-
* #getter
|
|
442
|
-
*/
|
|
443
|
-
get canHaveFill() {
|
|
444
|
-
return self.rendererTypeName === 'XYPlotRenderer'
|
|
445
|
-
},
|
|
446
|
-
|
|
447
|
-
/**
|
|
448
|
-
* #getter
|
|
449
|
-
*/
|
|
450
|
-
get autoscaleType() {
|
|
451
|
-
return self.autoscale ?? getConf(self, 'autoscale')
|
|
452
|
-
},
|
|
453
|
-
|
|
454
|
-
/**
|
|
455
|
-
* #getter
|
|
456
|
-
*/
|
|
457
|
-
get displayCrossHatchesSetting() {
|
|
458
|
-
return readConfObject(self.rendererConfig, 'displayCrossHatches')
|
|
459
|
-
},
|
|
460
|
-
}
|
|
461
|
-
})
|
|
462
73
|
.views(self => ({
|
|
463
74
|
/**
|
|
464
75
|
* #getter
|
|
@@ -482,14 +93,6 @@ function stateModelFactory(
|
|
|
482
93
|
? { ...ticks, values: domain }
|
|
483
94
|
: ticks
|
|
484
95
|
},
|
|
485
|
-
|
|
486
|
-
/**
|
|
487
|
-
* #getter
|
|
488
|
-
*/
|
|
489
|
-
get adapterCapabilities() {
|
|
490
|
-
const type = self.adapterTypeName
|
|
491
|
-
return pluginManager.getAdapterType(type).adapterCapabilities
|
|
492
|
-
},
|
|
493
96
|
}))
|
|
494
97
|
.views(self => {
|
|
495
98
|
const { renderProps: superRenderProps } = self
|
|
@@ -514,20 +117,14 @@ function stateModelFactory(
|
|
|
514
117
|
filters,
|
|
515
118
|
}
|
|
516
119
|
},
|
|
517
|
-
/**
|
|
518
|
-
* #getter
|
|
519
|
-
*/
|
|
520
|
-
get hasResolution() {
|
|
521
|
-
return self.adapterCapabilities.includes('hasResolution')
|
|
522
|
-
},
|
|
523
120
|
|
|
524
121
|
/**
|
|
525
122
|
* #getter
|
|
526
123
|
*/
|
|
527
|
-
get
|
|
528
|
-
|
|
124
|
+
get needsScalebar() {
|
|
125
|
+
const { rendererTypeName: type } = self
|
|
126
|
+
return type === 'XYPlotRenderer' || type === 'LinePlotRenderer'
|
|
529
127
|
},
|
|
530
|
-
|
|
531
128
|
/**
|
|
532
129
|
* #getter
|
|
533
130
|
*/
|
|
@@ -552,32 +149,10 @@ function stateModelFactory(
|
|
|
552
149
|
trackMenuItems() {
|
|
553
150
|
return [
|
|
554
151
|
...superTrackMenuItems(),
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
subMenu: [
|
|
560
|
-
{
|
|
561
|
-
label: 'Finer resolution',
|
|
562
|
-
onClick: () => self.setResolution(self.resolution * 5),
|
|
563
|
-
},
|
|
564
|
-
{
|
|
565
|
-
label: 'Coarser resolution',
|
|
566
|
-
onClick: () => self.setResolution(self.resolution / 5),
|
|
567
|
-
},
|
|
568
|
-
],
|
|
569
|
-
},
|
|
570
|
-
{
|
|
571
|
-
label: 'Summary score mode',
|
|
572
|
-
subMenu: ['min', 'max', 'avg', 'whiskers'].map(elt => ({
|
|
573
|
-
label: elt,
|
|
574
|
-
type: 'radio',
|
|
575
|
-
checked: self.summaryScoreModeSetting === elt,
|
|
576
|
-
onClick: () => self.setSummaryScoreMode(elt),
|
|
577
|
-
})),
|
|
578
|
-
},
|
|
579
|
-
]
|
|
580
|
-
: []),
|
|
152
|
+
{
|
|
153
|
+
label: 'Score',
|
|
154
|
+
subMenu: self.scoreTrackMenuItems(),
|
|
155
|
+
},
|
|
581
156
|
|
|
582
157
|
...(self.canHaveFill
|
|
583
158
|
? [
|
|
@@ -594,11 +169,6 @@ function stateModelFactory(
|
|
|
594
169
|
},
|
|
595
170
|
]
|
|
596
171
|
: []),
|
|
597
|
-
{
|
|
598
|
-
label:
|
|
599
|
-
self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
|
|
600
|
-
onClick: () => self.toggleLogScale(),
|
|
601
|
-
},
|
|
602
172
|
|
|
603
173
|
...(self.needsScalebar
|
|
604
174
|
? [
|
|
@@ -624,33 +194,7 @@ function stateModelFactory(
|
|
|
624
194
|
},
|
|
625
195
|
]
|
|
626
196
|
: []),
|
|
627
|
-
|
|
628
|
-
label: 'Autoscale type',
|
|
629
|
-
subMenu: [
|
|
630
|
-
['local', 'Local'],
|
|
631
|
-
...(self.hasGlobalStats
|
|
632
|
-
? [
|
|
633
|
-
['global', 'Global'],
|
|
634
|
-
['globalsd', 'Global ± 3σ'],
|
|
635
|
-
]
|
|
636
|
-
: []),
|
|
637
|
-
['localsd', 'Local ± 3σ'],
|
|
638
|
-
].map(([val, label]) => ({
|
|
639
|
-
label,
|
|
640
|
-
type: 'radio',
|
|
641
|
-
checked: self.autoscaleType === val,
|
|
642
|
-
onClick: () => self.setAutoscale(val),
|
|
643
|
-
})),
|
|
644
|
-
},
|
|
645
|
-
{
|
|
646
|
-
label: 'Set min/max score',
|
|
647
|
-
onClick: () => {
|
|
648
|
-
getSession(self).queueDialog(handleClose => [
|
|
649
|
-
SetMinMaxDlg,
|
|
650
|
-
{ model: self, handleClose },
|
|
651
|
-
])
|
|
652
|
-
},
|
|
653
|
-
},
|
|
197
|
+
|
|
654
198
|
{
|
|
655
199
|
label: 'Set color',
|
|
656
200
|
onClick: () => {
|
|
@@ -665,43 +209,18 @@ function stateModelFactory(
|
|
|
665
209
|
}
|
|
666
210
|
})
|
|
667
211
|
.actions(self => {
|
|
668
|
-
const {
|
|
669
|
-
|
|
670
|
-
type ExportSvgOpts = Parameters<typeof superRenderSvg>[0]
|
|
212
|
+
const { renderSvg: superRenderSvg } = self
|
|
671
213
|
|
|
672
214
|
return {
|
|
673
|
-
/**
|
|
674
|
-
* #action
|
|
675
|
-
* re-runs stats and refresh whole display on reload
|
|
676
|
-
*/
|
|
677
|
-
async reload() {
|
|
678
|
-
self.setError()
|
|
679
|
-
superReload()
|
|
680
|
-
},
|
|
681
|
-
|
|
682
215
|
afterAttach() {
|
|
683
216
|
quantitativeStatsAutorun(self)
|
|
684
217
|
},
|
|
685
218
|
/**
|
|
686
219
|
* #action
|
|
687
220
|
*/
|
|
688
|
-
async renderSvg(opts:
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
const { offsetPx } = getContainingView(self) as LGV
|
|
692
|
-
return (
|
|
693
|
-
<>
|
|
694
|
-
<g id="snpcov">{await superRenderSvg(opts)}</g>
|
|
695
|
-
{needsScalebar && stats ? (
|
|
696
|
-
<g transform={`translate(${Math.max(-offsetPx, 0)})`}>
|
|
697
|
-
<YScaleBar
|
|
698
|
-
model={self as WiggleDisplayModel}
|
|
699
|
-
orientation="left"
|
|
700
|
-
/>
|
|
701
|
-
</g>
|
|
702
|
-
) : null}
|
|
703
|
-
</>
|
|
704
|
-
)
|
|
221
|
+
async renderSvg(opts: ExportSvgDisplayOptions) {
|
|
222
|
+
const { renderSvg } = await import('./renderSvg')
|
|
223
|
+
return renderSvg(self, opts, superRenderSvg)
|
|
705
224
|
},
|
|
706
225
|
}
|
|
707
226
|
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { getContainingView } from '@jbrowse/core/util'
|
|
3
|
+
import { when } from 'mobx'
|
|
4
|
+
import YScaleBar from '../../shared/YScaleBar'
|
|
5
|
+
import {
|
|
6
|
+
ExportSvgDisplayOptions,
|
|
7
|
+
LinearGenomeViewModel,
|
|
8
|
+
} from '@jbrowse/plugin-linear-genome-view'
|
|
9
|
+
import { WiggleDisplayModel } from './model'
|
|
10
|
+
|
|
11
|
+
export async function renderSvg(
|
|
12
|
+
self: WiggleDisplayModel,
|
|
13
|
+
opts: ExportSvgDisplayOptions,
|
|
14
|
+
superRenderSvg: (opts: ExportSvgDisplayOptions) => Promise<React.ReactNode>,
|
|
15
|
+
) {
|
|
16
|
+
await when(() => !!self.stats && !!self.regionCannotBeRenderedText)
|
|
17
|
+
const { needsScalebar, stats } = self
|
|
18
|
+
const { offsetPx } = getContainingView(self) as LinearGenomeViewModel
|
|
19
|
+
return (
|
|
20
|
+
<>
|
|
21
|
+
<g id="snpcov">{await superRenderSvg(opts)}</g>
|
|
22
|
+
{needsScalebar && stats ? (
|
|
23
|
+
<g transform={`translate(${Math.max(-offsetPx, 0)})`}>
|
|
24
|
+
<YScaleBar model={self} orientation="left" />
|
|
25
|
+
</g>
|
|
26
|
+
) : null}
|
|
27
|
+
</>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
@@ -13,7 +13,6 @@ import clone from 'clone'
|
|
|
13
13
|
// locals
|
|
14
14
|
import DraggableDialog from './DraggableDialog'
|
|
15
15
|
import ColorPicker, { ColorPopover } from '@jbrowse/core/ui/ColorPicker'
|
|
16
|
-
import { UriLink } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail'
|
|
17
16
|
import { moveUp, moveDown } from './util'
|
|
18
17
|
import { Source } from '../../util'
|
|
19
18
|
|
|
@@ -22,6 +21,7 @@ import KeyboardDoubleArrowUpIcon from '@mui/icons-material/KeyboardDoubleArrowUp
|
|
|
22
21
|
import KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown'
|
|
23
22
|
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'
|
|
24
23
|
import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'
|
|
24
|
+
import UriLink from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/UriLink'
|
|
25
25
|
|
|
26
26
|
const useStyles = makeStyles()({
|
|
27
27
|
content: {
|