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