oncoprintjs 5.0.3 → 6.0.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 (100) hide show
  1. package/README.md +34 -0
  2. package/dist/index.d.ts +4 -0
  3. package/dist/index.es.js +14746 -0
  4. package/dist/index.es.js.map +1 -0
  5. package/dist/index.js +14760 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/js/CachedProperty.d.ts +10 -10
  8. package/dist/js/binarysearch.d.ts +1 -1
  9. package/dist/js/bucketsort.d.ts +16 -16
  10. package/dist/js/clustering.d.ts +14 -14
  11. package/dist/js/extractrgba.d.ts +4 -4
  12. package/dist/js/haselementsininterval.d.ts +1 -1
  13. package/dist/js/heatmapcolors.d.ts +5 -4
  14. package/dist/js/makesvgelement.d.ts +1 -1
  15. package/dist/js/modelutils.d.ts +7 -7
  16. package/dist/js/oncoprint.d.ts +168 -170
  17. package/dist/js/oncoprintheaderview.d.ts +23 -22
  18. package/dist/js/oncoprintlabelview.d.ts +79 -78
  19. package/dist/js/oncoprintlegendrenderer.d.ts +32 -31
  20. package/dist/js/oncoprintminimapview.d.ts +69 -68
  21. package/dist/js/oncoprintmodel.d.ts +403 -398
  22. package/dist/js/oncoprintruleset.d.ts +176 -177
  23. package/dist/js/oncoprintshape.d.ts +67 -67
  24. package/dist/js/oncoprintshapetosvg.d.ts +2 -2
  25. package/dist/js/oncoprintshapetovertexes.d.ts +5 -5
  26. package/dist/js/oncoprinttooltip.d.ts +23 -22
  27. package/dist/js/oncoprinttrackinfoview.d.ts +40 -39
  28. package/dist/js/oncoprinttrackoptionsview.d.ts +58 -57
  29. package/dist/js/oncoprintwebglcellview.d.ts +168 -167
  30. package/dist/js/oncoprintzoomslider.d.ts +28 -27
  31. package/dist/js/polyfill.d.ts +4 -4
  32. package/dist/js/precomputedcomparator.d.ts +13 -13
  33. package/dist/js/shaders.d.ts +2 -2
  34. package/dist/js/svgfactory.d.ts +24 -23
  35. package/dist/js/utils.d.ts +16 -16
  36. package/dist/js/workers/clustering-worker.d.ts +19 -20
  37. package/dist/test/gradientCategoricalRuleset.spec.d.ts +1 -1
  38. package/dist/test/monolith.spec.d.ts +1 -1
  39. package/jest.config.ts +2 -0
  40. package/package.json +20 -26
  41. package/rollup.config.ts +14 -0
  42. package/rules/geneticrules.ts +344 -305
  43. package/server.js +11 -0
  44. package/src/img/menudots.svg +9 -9
  45. package/src/img/zoomtofit.svg +12 -12
  46. package/src/index.tsx +13 -0
  47. package/src/js/CachedProperty.ts +6 -7
  48. package/src/js/binarysearch.ts +8 -3
  49. package/src/js/bucketsort.ts +89 -47
  50. package/src/js/clustering.ts +22 -10
  51. package/src/js/extractrgba.ts +16 -12
  52. package/src/js/haselementsininterval.ts +8 -4
  53. package/src/js/heatmapcolors.ts +515 -515
  54. package/src/js/main.js +1 -1
  55. package/src/js/makesvgelement.ts +2 -2
  56. package/src/js/modelutils.ts +11 -8
  57. package/src/js/oncoprint.ts +706 -385
  58. package/src/js/oncoprintheaderview.ts +165 -125
  59. package/src/js/oncoprintlabelview.ts +388 -170
  60. package/src/js/oncoprintlegendrenderer.ts +203 -72
  61. package/src/js/oncoprintminimapview.ts +965 -423
  62. package/src/js/oncoprintmodel.ts +905 -532
  63. package/src/js/oncoprintruleset.ts +694 -379
  64. package/src/js/oncoprintshape.ts +240 -97
  65. package/src/js/oncoprintshapetosvg.ts +77 -26
  66. package/src/js/oncoprintshapetovertexes.ts +153 -48
  67. package/src/js/oncoprinttooltip.ts +58 -27
  68. package/src/js/oncoprinttrackinfoview.ts +115 -59
  69. package/src/js/oncoprinttrackoptionsview.ts +354 -187
  70. package/src/js/oncoprintwebglcellview.ts +951 -415
  71. package/src/js/oncoprintzoomslider.ts +172 -107
  72. package/src/js/polyfill.ts +7 -3
  73. package/src/js/precomputedcomparator.ts +133 -50
  74. package/src/js/shaders.ts +2 -4
  75. package/src/js/svgfactory.ts +128 -73
  76. package/src/js/utils.ts +51 -31
  77. package/src/js/workers/clustering-worker.ts +50 -42
  78. package/src/test/gradientCategoricalRuleset.spec.ts +55 -38
  79. package/src/test/monolith.spec.ts +718 -285
  80. package/test/generate_data.py +108 -0
  81. package/test/glyphmap-data.js +1041 -0
  82. package/test/heatmap-data.js +1027 -0
  83. package/test/index.html +21 -0
  84. package/test/oncoprint-glyphmap.js +79 -0
  85. package/test/oncoprint-heatmap.js +123 -0
  86. package/tsconfig.json +4 -10
  87. package/tsconfig.test.json +11 -0
  88. package/.idea/misc.xml +0 -6
  89. package/.idea/modules.xml +0 -8
  90. package/.idea/oncoprintjs.iml +0 -12
  91. package/.idea/vcs.xml +0 -6
  92. package/.idea/workspace.xml +0 -105
  93. package/dist/.gitkeep +0 -0
  94. package/dist/js/minimaputils.d.ts +0 -0
  95. package/dist/oncoprint.bundle.js +0 -44313
  96. package/jest.config.js +0 -12
  97. package/src/js/minimaputils.ts +0 -0
  98. package/typings/custom.d.ts +0 -7
  99. package/typings/missing.d.ts +0 -7
  100. package/webpack.config.js +0 -43
@@ -1,69 +1,74 @@
1
- import OncoprintModel from "./oncoprintmodel";
2
- import menuDotsIcon from "../img/menudots.svg";
3
- import svgfactory from "./svgfactory";
4
- import $ from "jquery";
1
+ import OncoprintModel from './oncoprintmodel';
2
+ import menuDotsIcon from '../img/menudots.svg';
3
+ import svgfactory from './svgfactory';
4
+ import $ from 'jquery';
5
5
  import ClickEvent = JQuery.ClickEvent;
6
- import {CLOSE_MENUS_EVENT as TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT} from "./oncoprinttrackoptionsview";
6
+ import { CLOSE_MENUS_EVENT as TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT } from './oncoprinttrackoptionsview';
7
7
 
8
8
  const MENU_DOTS_SIZE = 20;
9
- const LABEL_CLASS = "oncoprintjs__header__label";
10
- const TOGGLE_BTN_CLASS = "oncoprintjs__header__toggle_btn_img";
11
- const TOGGLE_BTN_OPEN_CLASS = "oncoprintjs__header__open";
12
- const DROPDOWN_CLASS = "oncoprintjs__header__dropdown";
13
- const SEPARATOR_CLASS = "oncoprintjs__header__separator";
14
- const NTH_CLASS_PREFIX = "track-group-";
9
+ const LABEL_CLASS = 'oncoprintjs__header__label';
10
+ const TOGGLE_BTN_CLASS = 'oncoprintjs__header__toggle_btn_img';
11
+ const TOGGLE_BTN_OPEN_CLASS = 'oncoprintjs__header__open';
12
+ const DROPDOWN_CLASS = 'oncoprintjs__header__dropdown';
13
+ const SEPARATOR_CLASS = 'oncoprintjs__header__separator';
14
+ const NTH_CLASS_PREFIX = 'track-group-';
15
15
 
16
16
  const FADE_MS = 100;
17
17
 
18
18
  const HEADER_FONT_SIZE = 16;
19
19
 
20
- export const CLOSE_MENUS_EVENT = "oncoprint-header-view.do-close-menus";
20
+ export const CLOSE_MENUS_EVENT = 'oncoprint-header-view.do-close-menus';
21
21
 
22
22
  export default class OncoprintHeaderView {
23
23
  private rendering_suppressed = false;
24
- private $occluded_ctr:JQuery; // holds labels and menu buttons, which can be occluded by scrolling
25
- private $dropdowns_ctr:JQuery;
26
- private clickHandler:()=>void;
27
- private $dropdowns:JQuery[] = [];
24
+ private $occluded_ctr: JQuery; // holds labels and menu buttons, which can be occluded by scrolling
25
+ private $dropdowns_ctr: JQuery;
26
+ private clickHandler: () => void;
27
+ private $dropdowns: JQuery[] = [];
28
28
 
29
- constructor($div:JQuery) {
29
+ constructor($div: JQuery) {
30
30
  $div.css({
31
- position:'relative',
32
- 'pointer-events':'none'
31
+ position: 'relative',
32
+ 'pointer-events': 'none',
33
33
  });
34
34
 
35
- const $occluding_superctr = $("<div/>").appendTo($div).css({
36
- position:'relative',
37
- 'overflow-y':'hidden',
38
- 'overflow-x':'hidden',
39
- width:"100%",
40
- height:"100%"
41
- });
42
- this.$occluded_ctr = $("<div/>").appendTo($occluding_superctr).css({
43
- position:'absolute',
44
- width: "100%",
45
- height: "100%"
46
- });
47
-
48
- this.$dropdowns_ctr = $("<div/>").appendTo($div).css({
49
- position:'absolute',
50
- width: "100%",
51
- height: "100%"
52
- });
53
-
54
-
55
- this.clickHandler = ()=>{
35
+ const $occluding_superctr = $('<div/>')
36
+ .appendTo($div)
37
+ .css({
38
+ position: 'relative',
39
+ 'overflow-y': 'hidden',
40
+ 'overflow-x': 'hidden',
41
+ width: '100%',
42
+ height: '100%',
43
+ });
44
+ this.$occluded_ctr = $('<div/>')
45
+ .appendTo($occluding_superctr)
46
+ .css({
47
+ position: 'absolute',
48
+ width: '100%',
49
+ height: '100%',
50
+ });
51
+
52
+ this.$dropdowns_ctr = $('<div/>')
53
+ .appendTo($div)
54
+ .css({
55
+ position: 'absolute',
56
+ width: '100%',
57
+ height: '100%',
58
+ });
59
+
60
+ this.clickHandler = () => {
56
61
  $(document).trigger(CLOSE_MENUS_EVENT);
57
62
  };
58
- $(document).on("click", this.clickHandler);
63
+ $(document).on('click', this.clickHandler);
59
64
 
60
- $(document).on(CLOSE_MENUS_EVENT, ()=>{
65
+ $(document).on(CLOSE_MENUS_EVENT, () => {
61
66
  this.closeAllDropdowns();
62
67
  });
63
68
  }
64
69
 
65
70
  public destroy() {
66
- $(document).off("click", this.clickHandler);
71
+ $(document).off('click', this.clickHandler);
67
72
  $(document).off(CLOSE_MENUS_EVENT);
68
73
  }
69
74
 
@@ -73,7 +78,7 @@ export default class OncoprintHeaderView {
73
78
  }
74
79
  }
75
80
 
76
- private closeDropdownsExcept($keep_open_dropdown:JQuery) {
81
+ private closeDropdownsExcept($keep_open_dropdown: JQuery) {
77
82
  for (const $dropdown of this.$dropdowns) {
78
83
  if ($dropdown !== $keep_open_dropdown) {
79
84
  $dropdown.fadeOut(FADE_MS);
@@ -82,43 +87,61 @@ export default class OncoprintHeaderView {
82
87
  $(document).trigger(TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT);
83
88
  }
84
89
 
85
- private static $makeDropdownOption(text:string, weight:string, isDisabled?:()=>boolean, callback?:(evt:ClickEvent)=>void) {
86
- const li = $('<li>').text(text).css({'font-weight': weight, 'font-size': 12, 'border-bottom': '1px solid rgba(0,0,0,0.3)'});
90
+ private static $makeDropdownOption(
91
+ text: string,
92
+ weight: string,
93
+ isDisabled?: () => boolean,
94
+ callback?: (evt: ClickEvent) => void
95
+ ) {
96
+ const li = $('<li>')
97
+ .text(text)
98
+ .css({
99
+ 'font-weight': weight,
100
+ 'font-size': 12,
101
+ 'border-bottom': '1px solid rgba(0,0,0,0.3)',
102
+ });
87
103
  const disabled = isDisabled && isDisabled();
88
104
  if (!disabled) {
89
105
  if (callback) {
90
- li.addClass("clickable");
91
- li.css({'cursor': 'pointer'});
92
- li.click(callback)
93
- .hover(function () {
94
- $(this).css({'background-color': 'rgb(200,200,200)'});
95
- }, function () {
96
- $(this).css({'background-color': 'rgba(255,255,255,0)'});
97
- });
106
+ li.addClass('clickable');
107
+ li.css({ cursor: 'pointer' });
108
+ li.click(callback).hover(
109
+ function() {
110
+ $(this).css({ 'background-color': 'rgb(200,200,200)' });
111
+ },
112
+ function() {
113
+ $(this).css({
114
+ 'background-color': 'rgba(255,255,255,0)',
115
+ });
116
+ }
117
+ );
98
118
  } else {
99
- li.click(function(evt) { evt.stopPropagation(); });
119
+ li.click(function(evt) {
120
+ evt.stopPropagation();
121
+ });
100
122
  }
101
123
  } else {
102
- li.addClass("disabled");
103
- li.css({'color': 'rgb(200, 200, 200)', 'cursor': 'default'});
124
+ li.addClass('disabled');
125
+ li.css({ color: 'rgb(200, 200, 200)', cursor: 'default' });
104
126
  }
105
127
  return li;
106
128
  }
107
129
 
108
130
  private static $makeDropdownSeparator() {
109
- return $('<li>').css({'border-top': '1px solid black'}).addClass(SEPARATOR_CLASS);
131
+ return $('<li>')
132
+ .css({ 'border-top': '1px solid black' })
133
+ .addClass(SEPARATOR_CLASS);
110
134
  }
111
135
 
112
-
113
- public render(model:OncoprintModel) {
136
+ public render(model: OncoprintModel) {
114
137
  // clear existing elements
115
138
  this.$occluded_ctr.empty();
116
139
  this.$occluded_ctr.css({
117
- top:-model.getVertScroll()
140
+ top: -model.getVertScroll(),
118
141
  });
119
142
  this.$dropdowns_ctr.empty();
120
143
  this.$dropdowns_ctr.css({
121
- top:-model.getVertScroll()
144
+ top: -model.getVertScroll(),
122
145
  });
123
146
  this.$dropdowns = [];
124
147
 
@@ -126,85 +149,95 @@ export default class OncoprintHeaderView {
126
149
  const trackGroups = model.getTrackGroups();
127
150
  const headerTops = model.getZoomedHeaderTops();
128
151
 
129
- trackGroups.forEach((group, trackGroupIndex)=>{
152
+ trackGroups.forEach((group, trackGroupIndex) => {
130
153
  if (group.header) {
131
- const $headerDiv = $("<div/>").css({
132
- 'pointer-events':'auto'
154
+ const $headerDiv = $('<div/>').css({
155
+ 'pointer-events': 'auto',
133
156
  });
134
157
 
135
158
  // add label
136
159
  $(`<span>${group.header.label.text}</span>`)
137
160
  .appendTo($headerDiv)
138
161
  .css({
139
- "margin-right":10,
162
+ 'margin-right': 10,
140
163
  // TODO - custom styling
141
- "font-weight":"bold",
142
- "text-decoration":"underline",
143
- "font-size":HEADER_FONT_SIZE,
144
- "font-family":"Arial"
145
- }).addClass(LABEL_CLASS);
164
+ 'font-weight': 'bold',
165
+ 'text-decoration': 'underline',
166
+ 'font-size': HEADER_FONT_SIZE,
167
+ 'font-family': 'Arial',
168
+ })
169
+ .addClass(LABEL_CLASS);
146
170
 
147
171
  if (group.header.options.length > 0) {
148
172
  // add dropdown menu
149
173
  const $dropdown = $('<ul>')
150
174
  .appendTo(this.$dropdowns_ctr)
151
175
  .css({
152
- 'position':'absolute',
153
- 'width': 120,
154
- 'display': 'none',
176
+ position: 'absolute',
177
+ width: 120,
178
+ display: 'none',
155
179
  'list-style-type': 'none',
156
180
  'padding-left': '6',
157
181
  'padding-right': '6',
158
- 'float': 'right',
182
+ float: 'right',
159
183
  'background-color': 'rgb(255,255,255)',
160
- 'left':'0px',
161
- 'top': headerTops[trackGroupIndex] + MENU_DOTS_SIZE,
162
- 'pointer-events':'auto'
184
+ left: '0px',
185
+ top: headerTops[trackGroupIndex] + MENU_DOTS_SIZE,
186
+ 'pointer-events': 'auto',
163
187
  })
164
- .addClass(DROPDOWN_CLASS).addClass(NTH_CLASS_PREFIX+(trackGroupIndex));
188
+ .addClass(DROPDOWN_CLASS)
189
+ .addClass(NTH_CLASS_PREFIX + trackGroupIndex);
165
190
 
166
191
  this.$dropdowns.push($dropdown);
167
192
 
168
- const populateDropdownOptions = ()=>{
193
+ const populateDropdownOptions = () => {
169
194
  // repopulate dropdown every time it opens, and every time an option is clicked,
170
195
  // in order to update dynamic disabled status and weight
171
196
  $dropdown.empty();
172
197
  // add dropdown options
173
- group.header.options.forEach((option)=>{
198
+ group.header.options.forEach(option => {
174
199
  if (option.separator) {
175
- $dropdown.append(OncoprintHeaderView.$makeDropdownSeparator());
200
+ $dropdown.append(
201
+ OncoprintHeaderView.$makeDropdownSeparator()
202
+ );
176
203
  } else {
177
- $dropdown.append(OncoprintHeaderView.$makeDropdownOption(
178
- option.label || "",
179
- option.weight ? option.weight() : "normal",
180
- option.disabled,
181
- function(evt) {
182
- evt.stopPropagation();
183
- option.onClick && option.onClick(trackGroupIndex);
184
- populateDropdownOptions();
185
- }
186
- ));
204
+ $dropdown.append(
205
+ OncoprintHeaderView.$makeDropdownOption(
206
+ option.label || '',
207
+ option.weight
208
+ ? option.weight()
209
+ : 'normal',
210
+ option.disabled,
211
+ function(evt) {
212
+ evt.stopPropagation();
213
+ option.onClick &&
214
+ option.onClick(trackGroupIndex);
215
+ populateDropdownOptions();
216
+ }
217
+ )
218
+ );
187
219
  }
188
220
  });
189
221
  };
190
222
 
191
223
  // add dropdown button
192
- const $img = $("<img/>")
224
+ const $img = $('<img/>')
193
225
  .appendTo($headerDiv)
194
226
  .attr({
195
227
  src: menuDotsIcon,
196
- width:MENU_DOTS_SIZE,
197
- height:MENU_DOTS_SIZE
228
+ width: MENU_DOTS_SIZE,
229
+ height: MENU_DOTS_SIZE,
198
230
  })
199
231
  .css({
200
- cursor:"pointer",
201
- border:"1px solid rgba(125,125,125,0)",
202
- display:"inline-block"
232
+ cursor: 'pointer',
233
+ border: '1px solid rgba(125,125,125,0)',
234
+ display: 'inline-block',
203
235
  })
204
- .addClass(TOGGLE_BTN_CLASS).addClass(NTH_CLASS_PREFIX+(trackGroupIndex))
205
- .on("click", (evt)=>{
236
+ .addClass(TOGGLE_BTN_CLASS)
237
+ .addClass(NTH_CLASS_PREFIX + trackGroupIndex)
238
+ .on('click', evt => {
206
239
  evt.stopPropagation();
207
- if ($dropdown.is(":visible")) {
240
+ if ($dropdown.is(':visible')) {
208
241
  $img.removeClass(TOGGLE_BTN_OPEN_CLASS);
209
242
  $dropdown.fadeOut(FADE_MS);
210
243
  } else {
@@ -218,60 +251,67 @@ export default class OncoprintHeaderView {
218
251
  }
219
252
 
220
253
  $headerDiv.css({
221
- position:"absolute",
222
- top:headerTops[trackGroupIndex],
223
- left:0,
224
- width:"100%"
254
+ position: 'absolute',
255
+ top: headerTops[trackGroupIndex],
256
+ left: 0,
257
+ width: '100%',
225
258
  });
226
259
  this.$occluded_ctr.append($headerDiv);
227
260
  }
228
261
  });
229
262
  }
230
263
 
231
- public setScroll(model:OncoprintModel) {
264
+ public setScroll(model: OncoprintModel) {
232
265
  this.$occluded_ctr.css({
233
- top:-model.getVertScroll()
266
+ top: -model.getVertScroll(),
234
267
  });
235
268
  this.$dropdowns_ctr.css({
236
- top:-model.getVertScroll()
269
+ top: -model.getVertScroll(),
237
270
  });
238
271
 
239
272
  this.closeAllDropdowns();
240
273
  }
241
274
 
242
- public setVertScroll(model:OncoprintModel) {
275
+ public setVertScroll(model: OncoprintModel) {
243
276
  this.setScroll(model);
244
277
  }
245
278
 
246
279
  public suppressRendering() {
247
280
  this.rendering_suppressed = true;
248
281
  }
249
- public releaseRendering(model:OncoprintModel) {
282
+ public releaseRendering(model: OncoprintModel) {
250
283
  this.rendering_suppressed = false;
251
284
  this.render(model);
252
285
  }
253
- public toSVGGroup(model:OncoprintModel, offset_x:number, offset_y:number) {
254
- const group = svgfactory.group((offset_x || 0), (offset_y || 0));
286
+ public toSVGGroup(
287
+ model: OncoprintModel,
288
+ offset_x: number,
289
+ offset_y: number
290
+ ) {
291
+ const group = svgfactory.group(offset_x || 0, offset_y || 0);
255
292
  const trackGroups = model.getTrackGroups();
256
293
  const headerTops = model.getZoomedHeaderTops();
257
294
 
258
- trackGroups.forEach((trackGroup, index)=>{
259
- const header = trackGroup.header
295
+ trackGroups.forEach((trackGroup, index) => {
296
+ const header = trackGroup.header;
260
297
  if (header) {
261
298
  const y = headerTops[index];
262
- group.appendChild(svgfactory.text(
263
- header.label.text,
264
- 0, y,
265
- HEADER_FONT_SIZE,
266
- "Arial",
267
- "bold",
268
- undefined,
269
- undefined,
270
- "underline"
271
- ))
299
+ group.appendChild(
300
+ svgfactory.text(
301
+ header.label.text,
302
+ 0,
303
+ y,
304
+ HEADER_FONT_SIZE,
305
+ 'Arial',
306
+ 'bold',
307
+ undefined,
308
+ undefined,
309
+ 'underline'
310
+ )
311
+ );
272
312
  }
273
313
  });
274
314
 
275
315
  return group;
276
316
  }
277
- }
317
+ }