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.
- package/README.md +34 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.es.js +14746 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.js +14760 -0
- package/dist/index.js.map +1 -0
- package/dist/js/CachedProperty.d.ts +10 -10
- package/dist/js/binarysearch.d.ts +1 -1
- package/dist/js/bucketsort.d.ts +16 -16
- package/dist/js/clustering.d.ts +14 -14
- package/dist/js/extractrgba.d.ts +4 -4
- package/dist/js/haselementsininterval.d.ts +1 -1
- package/dist/js/heatmapcolors.d.ts +5 -4
- package/dist/js/makesvgelement.d.ts +1 -1
- package/dist/js/modelutils.d.ts +7 -7
- package/dist/js/oncoprint.d.ts +168 -170
- package/dist/js/oncoprintheaderview.d.ts +23 -22
- package/dist/js/oncoprintlabelview.d.ts +79 -78
- package/dist/js/oncoprintlegendrenderer.d.ts +32 -31
- package/dist/js/oncoprintminimapview.d.ts +69 -68
- package/dist/js/oncoprintmodel.d.ts +403 -398
- package/dist/js/oncoprintruleset.d.ts +176 -177
- package/dist/js/oncoprintshape.d.ts +67 -67
- package/dist/js/oncoprintshapetosvg.d.ts +2 -2
- package/dist/js/oncoprintshapetovertexes.d.ts +5 -5
- package/dist/js/oncoprinttooltip.d.ts +23 -22
- package/dist/js/oncoprinttrackinfoview.d.ts +40 -39
- package/dist/js/oncoprinttrackoptionsview.d.ts +58 -57
- package/dist/js/oncoprintwebglcellview.d.ts +168 -167
- package/dist/js/oncoprintzoomslider.d.ts +28 -27
- package/dist/js/polyfill.d.ts +4 -4
- package/dist/js/precomputedcomparator.d.ts +13 -13
- package/dist/js/shaders.d.ts +2 -2
- package/dist/js/svgfactory.d.ts +24 -23
- package/dist/js/utils.d.ts +16 -16
- package/dist/js/workers/clustering-worker.d.ts +19 -20
- package/dist/test/gradientCategoricalRuleset.spec.d.ts +1 -1
- package/dist/test/monolith.spec.d.ts +1 -1
- package/jest.config.ts +2 -0
- package/package.json +20 -26
- package/rollup.config.ts +14 -0
- package/rules/geneticrules.ts +344 -305
- package/server.js +11 -0
- package/src/img/menudots.svg +9 -9
- package/src/img/zoomtofit.svg +12 -12
- package/src/index.tsx +13 -0
- package/src/js/CachedProperty.ts +6 -7
- package/src/js/binarysearch.ts +8 -3
- package/src/js/bucketsort.ts +89 -47
- package/src/js/clustering.ts +22 -10
- package/src/js/extractrgba.ts +16 -12
- package/src/js/haselementsininterval.ts +8 -4
- package/src/js/heatmapcolors.ts +515 -515
- package/src/js/main.js +1 -1
- package/src/js/makesvgelement.ts +2 -2
- package/src/js/modelutils.ts +11 -8
- package/src/js/oncoprint.ts +706 -385
- package/src/js/oncoprintheaderview.ts +165 -125
- package/src/js/oncoprintlabelview.ts +388 -170
- package/src/js/oncoprintlegendrenderer.ts +203 -72
- package/src/js/oncoprintminimapview.ts +965 -423
- package/src/js/oncoprintmodel.ts +905 -532
- package/src/js/oncoprintruleset.ts +694 -379
- package/src/js/oncoprintshape.ts +240 -97
- package/src/js/oncoprintshapetosvg.ts +77 -26
- package/src/js/oncoprintshapetovertexes.ts +153 -48
- package/src/js/oncoprinttooltip.ts +58 -27
- package/src/js/oncoprinttrackinfoview.ts +115 -59
- package/src/js/oncoprinttrackoptionsview.ts +354 -187
- package/src/js/oncoprintwebglcellview.ts +951 -415
- package/src/js/oncoprintzoomslider.ts +172 -107
- package/src/js/polyfill.ts +7 -3
- package/src/js/precomputedcomparator.ts +133 -50
- package/src/js/shaders.ts +2 -4
- package/src/js/svgfactory.ts +128 -73
- package/src/js/utils.ts +51 -31
- package/src/js/workers/clustering-worker.ts +50 -42
- package/src/test/gradientCategoricalRuleset.spec.ts +55 -38
- package/src/test/monolith.spec.ts +718 -285
- package/test/generate_data.py +108 -0
- package/test/glyphmap-data.js +1041 -0
- package/test/heatmap-data.js +1027 -0
- package/test/index.html +21 -0
- package/test/oncoprint-glyphmap.js +79 -0
- package/test/oncoprint-heatmap.js +123 -0
- package/tsconfig.json +4 -10
- package/tsconfig.test.json +11 -0
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/oncoprintjs.iml +0 -12
- package/.idea/vcs.xml +0 -6
- package/.idea/workspace.xml +0 -105
- package/dist/.gitkeep +0 -0
- package/dist/js/minimaputils.d.ts +0 -0
- package/dist/oncoprint.bundle.js +0 -44313
- package/jest.config.js +0 -12
- package/src/js/minimaputils.ts +0 -0
- package/typings/custom.d.ts +0 -7
- package/typings/missing.d.ts +0 -7
- package/webpack.config.js +0 -43
|
@@ -1,69 +1,74 @@
|
|
|
1
|
-
import OncoprintModel from
|
|
2
|
-
import menuDotsIcon from
|
|
3
|
-
import svgfactory from
|
|
4
|
-
import $ from
|
|
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
|
|
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 =
|
|
10
|
-
const TOGGLE_BTN_CLASS =
|
|
11
|
-
const TOGGLE_BTN_OPEN_CLASS =
|
|
12
|
-
const DROPDOWN_CLASS =
|
|
13
|
-
const SEPARATOR_CLASS =
|
|
14
|
-
const NTH_CLASS_PREFIX =
|
|
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 =
|
|
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 = $(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
86
|
-
|
|
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(
|
|
91
|
-
li.css({
|
|
92
|
-
li.click(callback)
|
|
93
|
-
|
|
94
|
-
$(this).css({'background-color': 'rgb(200,200,200)'});
|
|
95
|
-
},
|
|
96
|
-
|
|
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) {
|
|
119
|
+
li.click(function(evt) {
|
|
120
|
+
evt.stopPropagation();
|
|
121
|
+
});
|
|
100
122
|
}
|
|
101
123
|
} else {
|
|
102
|
-
li.addClass(
|
|
103
|
-
li.css({
|
|
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>')
|
|
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
|
|
140
|
+
top: -model.getVertScroll(),
|
|
118
141
|
});
|
|
119
142
|
this.$dropdowns_ctr.empty();
|
|
120
143
|
this.$dropdowns_ctr.css({
|
|
121
|
-
top
|
|
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 = $(
|
|
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
|
-
|
|
162
|
+
'margin-right': 10,
|
|
140
163
|
// TODO - custom styling
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
})
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
182
|
+
float: 'right',
|
|
159
183
|
'background-color': 'rgb(255,255,255)',
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
'pointer-events':'auto'
|
|
184
|
+
left: '0px',
|
|
185
|
+
top: headerTops[trackGroupIndex] + MENU_DOTS_SIZE,
|
|
186
|
+
'pointer-events': 'auto',
|
|
163
187
|
})
|
|
164
|
-
.addClass(DROPDOWN_CLASS)
|
|
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(
|
|
198
|
+
group.header.options.forEach(option => {
|
|
174
199
|
if (option.separator) {
|
|
175
|
-
$dropdown.append(
|
|
200
|
+
$dropdown.append(
|
|
201
|
+
OncoprintHeaderView.$makeDropdownSeparator()
|
|
202
|
+
);
|
|
176
203
|
} else {
|
|
177
|
-
$dropdown.append(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
option.
|
|
184
|
-
|
|
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 = $(
|
|
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:
|
|
201
|
-
border:
|
|
202
|
-
display:
|
|
232
|
+
cursor: 'pointer',
|
|
233
|
+
border: '1px solid rgba(125,125,125,0)',
|
|
234
|
+
display: 'inline-block',
|
|
203
235
|
})
|
|
204
|
-
.addClass(TOGGLE_BTN_CLASS)
|
|
205
|
-
.
|
|
236
|
+
.addClass(TOGGLE_BTN_CLASS)
|
|
237
|
+
.addClass(NTH_CLASS_PREFIX + trackGroupIndex)
|
|
238
|
+
.on('click', evt => {
|
|
206
239
|
evt.stopPropagation();
|
|
207
|
-
if ($dropdown.is(
|
|
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:
|
|
222
|
-
top:headerTops[trackGroupIndex],
|
|
223
|
-
left:0,
|
|
224
|
-
width:
|
|
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
|
|
266
|
+
top: -model.getVertScroll(),
|
|
234
267
|
});
|
|
235
268
|
this.$dropdowns_ctr.css({
|
|
236
|
-
top
|
|
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(
|
|
254
|
-
|
|
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(
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
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
|
+
}
|