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,57 +1,80 @@
|
|
|
1
|
-
import $ from
|
|
1
|
+
import $ from 'jquery';
|
|
2
2
|
import menuDotsIcon from '../img/menudots.svg';
|
|
3
|
-
import OncoprintModel, {
|
|
3
|
+
import OncoprintModel, {
|
|
4
|
+
TrackGroupProp,
|
|
5
|
+
TrackId,
|
|
6
|
+
TrackProp,
|
|
7
|
+
TrackSortDirection,
|
|
8
|
+
} from './oncoprintmodel';
|
|
4
9
|
import ClickEvent = JQuery.ClickEvent;
|
|
5
|
-
import {CLOSE_MENUS_EVENT as HEADER_VIEW_CLOSE_MENUS_EVENT} from
|
|
10
|
+
import { CLOSE_MENUS_EVENT as HEADER_VIEW_CLOSE_MENUS_EVENT } from './oncoprintheaderview';
|
|
6
11
|
|
|
7
|
-
const TOGGLE_BTN_CLASS =
|
|
8
|
-
const TOGGLE_BTN_OPEN_CLASS =
|
|
9
|
-
const DROPDOWN_CLASS =
|
|
10
|
-
const SEPARATOR_CLASS =
|
|
11
|
-
const NTH_CLASS_PREFIX =
|
|
12
|
+
const TOGGLE_BTN_CLASS = 'oncoprintjs__track_options__toggle_btn_img';
|
|
13
|
+
const TOGGLE_BTN_OPEN_CLASS = 'oncoprintjs__track_options__open';
|
|
14
|
+
const DROPDOWN_CLASS = 'oncoprintjs__track_options__dropdown';
|
|
15
|
+
const SEPARATOR_CLASS = 'oncoprintjs__track_options__separator';
|
|
16
|
+
const NTH_CLASS_PREFIX = 'nth-';
|
|
12
17
|
|
|
13
|
-
export const CLOSE_MENUS_EVENT =
|
|
18
|
+
export const CLOSE_MENUS_EVENT = 'oncoprint-track-options-view.do-close-menus';
|
|
14
19
|
|
|
15
|
-
type TrackCallback = (trackId:TrackId)=>void;
|
|
20
|
+
type TrackCallback = (trackId: TrackId) => void;
|
|
16
21
|
export default class OncoprintTrackOptionsView {
|
|
22
|
+
private $ctr: JQuery;
|
|
23
|
+
private $buttons_ctr: JQuery;
|
|
24
|
+
private $dropdown_ctr: JQuery;
|
|
17
25
|
|
|
18
|
-
private
|
|
19
|
-
private $buttons_ctr:JQuery;
|
|
20
|
-
private $dropdown_ctr:JQuery;
|
|
21
|
-
|
|
22
|
-
private img_size:number;
|
|
26
|
+
private img_size: number;
|
|
23
27
|
private rendering_suppressed = false;
|
|
24
|
-
private track_options_$elts:TrackProp<{
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
private track_options_$elts: TrackProp<{
|
|
29
|
+
$div: JQuery;
|
|
30
|
+
$img: JQuery;
|
|
31
|
+
$dropdown: JQuery;
|
|
32
|
+
}> = {};
|
|
33
|
+
private menu_shown: TrackProp<boolean> = {};
|
|
34
|
+
private clickHandler: () => void;
|
|
27
35
|
private interaction_disabled = false;
|
|
28
36
|
|
|
29
37
|
constructor(
|
|
30
|
-
private $div:JQuery,
|
|
31
|
-
private moveUpCallback:TrackCallback,
|
|
32
|
-
private moveDownCallback:TrackCallback,
|
|
33
|
-
private removeCallback:TrackCallback,
|
|
34
|
-
private sortChangeCallback:(
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
private $div: JQuery,
|
|
39
|
+
private moveUpCallback: TrackCallback,
|
|
40
|
+
private moveDownCallback: TrackCallback,
|
|
41
|
+
private removeCallback: TrackCallback,
|
|
42
|
+
private sortChangeCallback: (
|
|
43
|
+
trackId: TrackId,
|
|
44
|
+
sortDirection: TrackSortDirection
|
|
45
|
+
) => void,
|
|
46
|
+
private unexpandCallback: TrackCallback,
|
|
47
|
+
private showGapsCallback: (trackId: TrackId, showGaps: boolean) => void
|
|
37
48
|
) {
|
|
38
49
|
const position = $div.css('position');
|
|
39
50
|
if (position !== 'absolute' && position !== 'relative') {
|
|
40
|
-
console.log(
|
|
51
|
+
console.log(
|
|
52
|
+
'WARNING: div passed to OncoprintTrackOptionsView must be absolute or relative positioned - layout problems will occur'
|
|
53
|
+
);
|
|
41
54
|
}
|
|
42
55
|
|
|
43
|
-
this.$ctr = $('<div></div>')
|
|
44
|
-
|
|
45
|
-
|
|
56
|
+
this.$ctr = $('<div></div>')
|
|
57
|
+
.css({
|
|
58
|
+
position: 'absolute',
|
|
59
|
+
'overflow-y': 'hidden',
|
|
60
|
+
'overflow-x': 'hidden',
|
|
61
|
+
})
|
|
62
|
+
.appendTo(this.$div);
|
|
63
|
+
this.$buttons_ctr = $('<div></div>')
|
|
64
|
+
.css({ position: 'absolute' })
|
|
65
|
+
.appendTo(this.$ctr);
|
|
66
|
+
this.$dropdown_ctr = $('<div></div>')
|
|
67
|
+
.css({ position: 'absolute' })
|
|
68
|
+
.appendTo(this.$div);
|
|
46
69
|
|
|
47
70
|
const self = this;
|
|
48
71
|
this.clickHandler = function() {
|
|
49
72
|
$(document).trigger(CLOSE_MENUS_EVENT);
|
|
50
73
|
};
|
|
51
|
-
$(document).on(
|
|
74
|
+
$(document).on('click', this.clickHandler);
|
|
52
75
|
}
|
|
53
76
|
|
|
54
|
-
private renderAllOptions(model:OncoprintModel) {
|
|
77
|
+
private renderAllOptions(model: OncoprintModel) {
|
|
55
78
|
if (this.rendering_suppressed) {
|
|
56
79
|
return;
|
|
57
80
|
}
|
|
@@ -68,7 +91,10 @@ export default class OncoprintTrackOptionsView {
|
|
|
68
91
|
var tracks = model.getTracks();
|
|
69
92
|
var minimum_track_height = Number.POSITIVE_INFINITY;
|
|
70
93
|
for (let i = 0; i < tracks.length; i++) {
|
|
71
|
-
minimum_track_height = Math.min(
|
|
94
|
+
minimum_track_height = Math.min(
|
|
95
|
+
minimum_track_height,
|
|
96
|
+
model.getTrackHeight(tracks[i])
|
|
97
|
+
);
|
|
72
98
|
}
|
|
73
99
|
this.img_size = Math.floor(minimum_track_height * 0.75);
|
|
74
100
|
|
|
@@ -77,39 +103,39 @@ export default class OncoprintTrackOptionsView {
|
|
|
77
103
|
}
|
|
78
104
|
}
|
|
79
105
|
|
|
80
|
-
private scroll(scroll_y:number) {
|
|
106
|
+
private scroll(scroll_y: number) {
|
|
81
107
|
if (this.rendering_suppressed) {
|
|
82
108
|
return;
|
|
83
109
|
}
|
|
84
|
-
this.$buttons_ctr.css({
|
|
85
|
-
this.$dropdown_ctr.css({
|
|
110
|
+
this.$buttons_ctr.css({ top: -scroll_y });
|
|
111
|
+
this.$dropdown_ctr.css({ top: -scroll_y });
|
|
86
112
|
|
|
87
113
|
this.hideAllMenus();
|
|
88
114
|
}
|
|
89
115
|
|
|
90
|
-
private resize(model:OncoprintModel, getCellViewHeight:()=>number) {
|
|
116
|
+
private resize(model: OncoprintModel, getCellViewHeight: () => number) {
|
|
91
117
|
if (this.rendering_suppressed) {
|
|
92
118
|
return;
|
|
93
119
|
}
|
|
94
|
-
this.$div.css({
|
|
95
|
-
this.$ctr.css({
|
|
120
|
+
this.$div.css({ width: this.getWidth(), height: getCellViewHeight() });
|
|
121
|
+
this.$ctr.css({ width: this.getWidth(), height: getCellViewHeight() });
|
|
96
122
|
}
|
|
97
123
|
|
|
98
|
-
private hideTrackMenu(track_id:TrackId) {
|
|
124
|
+
private hideTrackMenu(track_id: TrackId) {
|
|
99
125
|
this.menu_shown[track_id] = false;
|
|
100
126
|
const $elts = this.track_options_$elts[track_id];
|
|
101
|
-
$elts.$dropdown.css({'z-index': 1});
|
|
102
|
-
$elts.$dropdown.css({
|
|
103
|
-
$elts.$img.css({
|
|
127
|
+
$elts.$dropdown.css({ 'z-index': 1 });
|
|
128
|
+
$elts.$dropdown.css({ border: '1px solid rgba(125,125,125,0)' });
|
|
129
|
+
$elts.$img.css({ border: '1px solid rgba(125,125,125,0)' });
|
|
104
130
|
$elts.$dropdown.fadeOut(100);
|
|
105
131
|
}
|
|
106
132
|
|
|
107
|
-
private showTrackMenu(track_id:TrackId) {
|
|
133
|
+
private showTrackMenu(track_id: TrackId) {
|
|
108
134
|
this.menu_shown[track_id] = true;
|
|
109
135
|
const $elts = this.track_options_$elts[track_id];
|
|
110
|
-
$elts.$dropdown.css({'z-index': 10});
|
|
111
|
-
$elts.$dropdown.css({
|
|
112
|
-
$elts.$img.css({
|
|
136
|
+
$elts.$dropdown.css({ 'z-index': 10 });
|
|
137
|
+
$elts.$dropdown.css({ border: '1px solid rgba(125,125,125,1)' });
|
|
138
|
+
$elts.$img.css({ border: '1px solid rgba(125,125,125,1)' });
|
|
113
139
|
$elts.$dropdown.fadeIn(100);
|
|
114
140
|
}
|
|
115
141
|
|
|
@@ -121,7 +147,7 @@ export default class OncoprintTrackOptionsView {
|
|
|
121
147
|
}
|
|
122
148
|
}
|
|
123
149
|
|
|
124
|
-
private hideMenusExcept(track_id:TrackId) {
|
|
150
|
+
private hideMenusExcept(track_id: TrackId) {
|
|
125
151
|
for (const _other_track_id in this.track_options_$elts) {
|
|
126
152
|
if (this.track_options_$elts.hasOwnProperty(_other_track_id)) {
|
|
127
153
|
const other_track_id = parseInt(_other_track_id, 10);
|
|
@@ -135,88 +161,144 @@ export default class OncoprintTrackOptionsView {
|
|
|
135
161
|
$(document).trigger(HEADER_VIEW_CLOSE_MENUS_EVENT);
|
|
136
162
|
}
|
|
137
163
|
|
|
138
|
-
private static $makeDropdownOption(
|
|
139
|
-
|
|
164
|
+
private static $makeDropdownOption(
|
|
165
|
+
text: string,
|
|
166
|
+
weight: string,
|
|
167
|
+
disabled?: boolean,
|
|
168
|
+
callback?: (evt: ClickEvent) => void
|
|
169
|
+
) {
|
|
170
|
+
const li = $('<li>')
|
|
171
|
+
.text(text)
|
|
172
|
+
.css({
|
|
173
|
+
'font-weight': weight,
|
|
174
|
+
'font-size': 12,
|
|
175
|
+
'border-bottom': '1px solid rgba(0,0,0,0.3)',
|
|
176
|
+
});
|
|
140
177
|
if (!disabled) {
|
|
141
178
|
if (callback) {
|
|
142
|
-
li.addClass(
|
|
143
|
-
li.css({
|
|
144
|
-
li.click(callback)
|
|
145
|
-
|
|
146
|
-
$(this).css({'background-color': 'rgb(200,200,200)'});
|
|
147
|
-
},
|
|
148
|
-
|
|
149
|
-
|
|
179
|
+
li.addClass('clickable');
|
|
180
|
+
li.css({ cursor: 'pointer' });
|
|
181
|
+
li.click(callback).hover(
|
|
182
|
+
function() {
|
|
183
|
+
$(this).css({ 'background-color': 'rgb(200,200,200)' });
|
|
184
|
+
},
|
|
185
|
+
function() {
|
|
186
|
+
$(this).css({
|
|
187
|
+
'background-color': 'rgba(255,255,255,0)',
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
);
|
|
150
191
|
} else {
|
|
151
|
-
li.click(function(evt) {
|
|
192
|
+
li.click(function(evt) {
|
|
193
|
+
evt.stopPropagation();
|
|
194
|
+
});
|
|
152
195
|
}
|
|
153
196
|
} else {
|
|
154
|
-
li.addClass(
|
|
155
|
-
li.css({
|
|
197
|
+
li.addClass('disabled');
|
|
198
|
+
li.css({ color: 'rgb(200, 200, 200)', cursor: 'default' });
|
|
156
199
|
}
|
|
157
200
|
return li;
|
|
158
201
|
}
|
|
159
202
|
|
|
160
203
|
private static $makeDropdownSeparator() {
|
|
161
|
-
return $('<li>')
|
|
204
|
+
return $('<li>')
|
|
205
|
+
.css({ 'border-top': '1px solid black' })
|
|
206
|
+
.addClass(SEPARATOR_CLASS);
|
|
162
207
|
}
|
|
163
208
|
|
|
164
|
-
private static renderSortArrow(
|
|
209
|
+
private static renderSortArrow(
|
|
210
|
+
$sortarrow: JQuery,
|
|
211
|
+
model: OncoprintModel,
|
|
212
|
+
track_id: TrackId
|
|
213
|
+
) {
|
|
165
214
|
let sortarrow_char = '';
|
|
166
|
-
if (model.isTrackSortDirectionChangeable(track_id)){
|
|
215
|
+
if (model.isTrackSortDirectionChangeable(track_id)) {
|
|
167
216
|
sortarrow_char = {
|
|
168
|
-
'1':
|
|
169
|
-
|
|
170
|
-
'
|
|
217
|
+
'1':
|
|
218
|
+
'<i class="fa fa-signal" aria-hidden="true" title="Sorted ascending"></i>',
|
|
219
|
+
'-1':
|
|
220
|
+
'<i class="fa fa-signal" style="transform: scaleX(-1);" aria-hidden="true" title="Sorted descending"></i>',
|
|
221
|
+
'0': '',
|
|
222
|
+
}[model.getTrackSortDirection(track_id)];
|
|
171
223
|
}
|
|
172
224
|
$sortarrow.html(sortarrow_char);
|
|
173
225
|
}
|
|
174
226
|
|
|
175
|
-
private renderTrackOptions(
|
|
176
|
-
|
|
227
|
+
private renderTrackOptions(
|
|
228
|
+
model: OncoprintModel,
|
|
229
|
+
track_id: TrackId,
|
|
230
|
+
index: number
|
|
231
|
+
) {
|
|
232
|
+
let $div: JQuery, $img: JQuery, $sortarrow: JQuery, $dropdown: JQuery;
|
|
177
233
|
const top = model.getZoomedTrackTops(track_id);
|
|
178
|
-
$div = $('<div>')
|
|
179
|
-
|
|
234
|
+
$div = $('<div>')
|
|
235
|
+
.appendTo(this.$buttons_ctr)
|
|
236
|
+
.css({
|
|
237
|
+
position: 'absolute',
|
|
238
|
+
left: '0px',
|
|
239
|
+
top: top + 'px',
|
|
240
|
+
'white-space': 'nowrap',
|
|
241
|
+
});
|
|
242
|
+
$img = $('<img/>')
|
|
243
|
+
.appendTo($div)
|
|
180
244
|
.attr({
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
245
|
+
src: menuDotsIcon,
|
|
246
|
+
width: this.img_size,
|
|
247
|
+
height: this.img_size,
|
|
184
248
|
})
|
|
185
249
|
.css({
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
})
|
|
190
|
-
|
|
191
|
-
|
|
250
|
+
float: 'left',
|
|
251
|
+
cursor: 'pointer',
|
|
252
|
+
border: '1px solid rgba(125,125,125,0)',
|
|
253
|
+
})
|
|
254
|
+
.addClass(TOGGLE_BTN_CLASS)
|
|
255
|
+
.addClass(NTH_CLASS_PREFIX + (index + 1));
|
|
256
|
+
$sortarrow = $('<span>')
|
|
257
|
+
.appendTo($div)
|
|
192
258
|
.css({
|
|
193
|
-
|
|
194
|
-
'
|
|
195
|
-
|
|
259
|
+
position: 'absolute',
|
|
260
|
+
top: Math.floor(this.img_size / 4) + 'px',
|
|
261
|
+
});
|
|
262
|
+
$dropdown = $('<ul>')
|
|
263
|
+
.appendTo(this.$dropdown_ctr)
|
|
264
|
+
.css({
|
|
265
|
+
position: 'absolute',
|
|
266
|
+
width: 120,
|
|
267
|
+
display: 'none',
|
|
196
268
|
'list-style-type': 'none',
|
|
197
269
|
'padding-left': '6',
|
|
198
270
|
'padding-right': '6',
|
|
199
|
-
|
|
271
|
+
float: 'right',
|
|
200
272
|
'background-color': 'rgb(255,255,255)',
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
273
|
+
left: '0px',
|
|
274
|
+
top: top + this.img_size + 'px',
|
|
275
|
+
})
|
|
276
|
+
.addClass(DROPDOWN_CLASS)
|
|
277
|
+
.addClass(NTH_CLASS_PREFIX + (index + 1));
|
|
278
|
+
this.track_options_$elts[track_id] = {
|
|
279
|
+
$div: $div,
|
|
280
|
+
$img: $img,
|
|
281
|
+
$dropdown: $dropdown,
|
|
282
|
+
};
|
|
204
283
|
|
|
205
284
|
OncoprintTrackOptionsView.renderSortArrow($sortarrow, model, track_id);
|
|
206
285
|
|
|
207
286
|
const self = this;
|
|
208
|
-
$img.hover(
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
287
|
+
$img.hover(
|
|
288
|
+
function(evt) {
|
|
289
|
+
if (!self.menu_shown[track_id]) {
|
|
290
|
+
$(this).css({ border: '1px solid rgba(125,125,125,0.3)' });
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
function(evt) {
|
|
294
|
+
if (!self.menu_shown[track_id]) {
|
|
295
|
+
$(this).css({ border: '1px solid rgba(125,125,125,0)' });
|
|
296
|
+
}
|
|
215
297
|
}
|
|
216
|
-
|
|
217
|
-
$img.click(function
|
|
298
|
+
);
|
|
299
|
+
$img.click(function(evt) {
|
|
218
300
|
evt.stopPropagation();
|
|
219
|
-
if ($dropdown.is(
|
|
301
|
+
if ($dropdown.is(':visible')) {
|
|
220
302
|
$img.addClass(TOGGLE_BTN_OPEN_CLASS);
|
|
221
303
|
self.hideTrackMenu(track_id);
|
|
222
304
|
} else {
|
|
@@ -226,82 +308,144 @@ export default class OncoprintTrackOptionsView {
|
|
|
226
308
|
self.hideMenusExcept(track_id);
|
|
227
309
|
});
|
|
228
310
|
|
|
229
|
-
const movingDisabled =
|
|
311
|
+
const movingDisabled =
|
|
312
|
+
model.getTrackMovable(track_id) &&
|
|
313
|
+
model.isTrackInClusteredGroup(track_id);
|
|
230
314
|
|
|
231
315
|
if (model.getTrackMovable(track_id)) {
|
|
232
|
-
$dropdown.append(
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
316
|
+
$dropdown.append(
|
|
317
|
+
OncoprintTrackOptionsView.$makeDropdownOption(
|
|
318
|
+
'Move up',
|
|
319
|
+
'normal',
|
|
320
|
+
movingDisabled,
|
|
321
|
+
function(evt) {
|
|
322
|
+
evt.stopPropagation();
|
|
323
|
+
self.moveUpCallback(track_id);
|
|
324
|
+
}
|
|
325
|
+
)
|
|
326
|
+
);
|
|
327
|
+
$dropdown.append(
|
|
328
|
+
OncoprintTrackOptionsView.$makeDropdownOption(
|
|
329
|
+
'Move down',
|
|
330
|
+
'normal',
|
|
331
|
+
movingDisabled,
|
|
332
|
+
function(evt) {
|
|
333
|
+
evt.stopPropagation();
|
|
334
|
+
self.moveDownCallback(track_id);
|
|
335
|
+
}
|
|
336
|
+
)
|
|
337
|
+
);
|
|
240
338
|
}
|
|
241
339
|
if (model.isTrackRemovable(track_id)) {
|
|
242
|
-
$dropdown.append(
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
340
|
+
$dropdown.append(
|
|
341
|
+
OncoprintTrackOptionsView.$makeDropdownOption(
|
|
342
|
+
'Remove track',
|
|
343
|
+
'normal',
|
|
344
|
+
false,
|
|
345
|
+
function(evt) {
|
|
346
|
+
evt.stopPropagation();
|
|
347
|
+
self.removeCallback(track_id);
|
|
348
|
+
}
|
|
349
|
+
)
|
|
350
|
+
);
|
|
246
351
|
}
|
|
247
352
|
if (model.isTrackSortDirectionChangeable(track_id)) {
|
|
248
|
-
$dropdown.append(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
let $
|
|
252
|
-
$
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
353
|
+
$dropdown.append(
|
|
354
|
+
OncoprintTrackOptionsView.$makeDropdownSeparator()
|
|
355
|
+
);
|
|
356
|
+
let $sort_inc_li: JQuery;
|
|
357
|
+
let $sort_dec_li: JQuery;
|
|
358
|
+
let $dont_sort_li: JQuery;
|
|
359
|
+
$sort_inc_li = OncoprintTrackOptionsView.$makeDropdownOption(
|
|
360
|
+
'Sort a-Z',
|
|
361
|
+
model.getTrackSortDirection(track_id) === 1 ? 'bold' : 'normal',
|
|
362
|
+
false,
|
|
363
|
+
function(evt) {
|
|
364
|
+
evt.stopPropagation();
|
|
365
|
+
$sort_inc_li.css('font-weight', 'bold');
|
|
366
|
+
$sort_dec_li.css('font-weight', 'normal');
|
|
367
|
+
$dont_sort_li.css('font-weight', 'normal');
|
|
368
|
+
self.sortChangeCallback(track_id, 1);
|
|
369
|
+
OncoprintTrackOptionsView.renderSortArrow(
|
|
370
|
+
$sortarrow,
|
|
371
|
+
model,
|
|
372
|
+
track_id
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
);
|
|
376
|
+
$sort_dec_li = OncoprintTrackOptionsView.$makeDropdownOption(
|
|
377
|
+
'Sort Z-a',
|
|
378
|
+
model.getTrackSortDirection(track_id) === -1
|
|
379
|
+
? 'bold'
|
|
380
|
+
: 'normal',
|
|
381
|
+
false,
|
|
382
|
+
function(evt) {
|
|
383
|
+
evt.stopPropagation();
|
|
384
|
+
$sort_inc_li.css('font-weight', 'normal');
|
|
385
|
+
$sort_dec_li.css('font-weight', 'bold');
|
|
386
|
+
$dont_sort_li.css('font-weight', 'normal');
|
|
387
|
+
self.sortChangeCallback(track_id, -1);
|
|
388
|
+
OncoprintTrackOptionsView.renderSortArrow(
|
|
389
|
+
$sortarrow,
|
|
390
|
+
model,
|
|
391
|
+
track_id
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
);
|
|
395
|
+
$dont_sort_li = OncoprintTrackOptionsView.$makeDropdownOption(
|
|
396
|
+
"Don't sort track",
|
|
397
|
+
model.getTrackSortDirection(track_id) === 0 ? 'bold' : 'normal',
|
|
398
|
+
false,
|
|
399
|
+
function(evt) {
|
|
400
|
+
evt.stopPropagation();
|
|
401
|
+
$sort_inc_li.css('font-weight', 'normal');
|
|
402
|
+
$sort_dec_li.css('font-weight', 'normal');
|
|
403
|
+
$dont_sort_li.css('font-weight', 'bold');
|
|
404
|
+
self.sortChangeCallback(track_id, 0);
|
|
405
|
+
OncoprintTrackOptionsView.renderSortArrow(
|
|
406
|
+
$sortarrow,
|
|
407
|
+
model,
|
|
408
|
+
track_id
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
);
|
|
276
412
|
$dropdown.append($sort_inc_li);
|
|
277
413
|
$dropdown.append($sort_dec_li);
|
|
278
414
|
$dropdown.append($dont_sort_li);
|
|
279
415
|
}
|
|
280
416
|
if (model.isTrackExpandable(track_id)) {
|
|
281
|
-
$dropdown.append(
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
evt
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
417
|
+
$dropdown.append(
|
|
418
|
+
OncoprintTrackOptionsView.$makeDropdownOption(
|
|
419
|
+
model.getExpandButtonText(track_id),
|
|
420
|
+
'normal',
|
|
421
|
+
false,
|
|
422
|
+
function(evt) {
|
|
423
|
+
evt.stopPropagation();
|
|
424
|
+
// close the menu to discourage clicking again, as it
|
|
425
|
+
// may take a moment to finish expanding
|
|
426
|
+
self.renderAllOptions(model);
|
|
427
|
+
model.expandTrack(track_id);
|
|
428
|
+
}
|
|
429
|
+
)
|
|
430
|
+
);
|
|
292
431
|
}
|
|
293
432
|
if (model.isTrackExpanded(track_id)) {
|
|
294
|
-
$dropdown.append(
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
evt
|
|
300
|
-
|
|
301
|
-
|
|
433
|
+
$dropdown.append(
|
|
434
|
+
OncoprintTrackOptionsView.$makeDropdownOption(
|
|
435
|
+
'Remove expansion',
|
|
436
|
+
'normal',
|
|
437
|
+
false,
|
|
438
|
+
function(evt) {
|
|
439
|
+
evt.stopPropagation();
|
|
440
|
+
self.unexpandCallback(track_id);
|
|
441
|
+
}
|
|
442
|
+
)
|
|
443
|
+
);
|
|
302
444
|
}
|
|
303
445
|
if (model.getTrackCanShowGaps(track_id)) {
|
|
304
|
-
$dropdown.append(
|
|
446
|
+
$dropdown.append(
|
|
447
|
+
OncoprintTrackOptionsView.$makeDropdownSeparator()
|
|
448
|
+
);
|
|
305
449
|
const $show_gaps_opt = OncoprintTrackOptionsView.$makeDropdownOption(
|
|
306
450
|
'Show gaps',
|
|
307
451
|
model.getTrackShowGaps(track_id) ? 'bold' : 'normal',
|
|
@@ -331,23 +475,33 @@ export default class OncoprintTrackOptionsView {
|
|
|
331
475
|
// Add custom options
|
|
332
476
|
const custom_options = model.getTrackCustomOptions(track_id);
|
|
333
477
|
if (custom_options && custom_options.length > 0) {
|
|
334
|
-
for (var i=0; i<custom_options.length; i++) {
|
|
478
|
+
for (var i = 0; i < custom_options.length; i++) {
|
|
335
479
|
(function() {
|
|
336
480
|
// wrapped in function to prevent scope issues
|
|
337
481
|
var option = custom_options[i];
|
|
338
482
|
if (option.separator) {
|
|
339
|
-
$dropdown.append(
|
|
483
|
+
$dropdown.append(
|
|
484
|
+
OncoprintTrackOptionsView.$makeDropdownSeparator()
|
|
485
|
+
);
|
|
340
486
|
} else {
|
|
341
|
-
$dropdown.append(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
487
|
+
$dropdown.append(
|
|
488
|
+
OncoprintTrackOptionsView.$makeDropdownOption(
|
|
489
|
+
option.label || '',
|
|
490
|
+
option.weight || 'normal',
|
|
491
|
+
option.disabled,
|
|
492
|
+
option.onClick &&
|
|
493
|
+
function(evt) {
|
|
494
|
+
evt.stopPropagation();
|
|
495
|
+
option.onClick(track_id);
|
|
496
|
+
}
|
|
497
|
+
)
|
|
498
|
+
);
|
|
345
499
|
}
|
|
346
|
-
})()
|
|
500
|
+
})();
|
|
347
501
|
}
|
|
348
502
|
}
|
|
349
503
|
|
|
350
|
-
if ($dropdown.is(
|
|
504
|
+
if ($dropdown.is(':empty')) {
|
|
351
505
|
// if no options, then delete elements
|
|
352
506
|
$div.remove();
|
|
353
507
|
$dropdown.remove();
|
|
@@ -363,78 +517,91 @@ export default class OncoprintTrackOptionsView {
|
|
|
363
517
|
public suppressRendering() {
|
|
364
518
|
this.rendering_suppressed = true;
|
|
365
519
|
}
|
|
366
|
-
public releaseRendering(
|
|
520
|
+
public releaseRendering(
|
|
521
|
+
model: OncoprintModel,
|
|
522
|
+
getCellViewHeight: () => number
|
|
523
|
+
) {
|
|
367
524
|
this.rendering_suppressed = false;
|
|
368
525
|
this.renderAllOptions(model);
|
|
369
526
|
this.resize(model, getCellViewHeight);
|
|
370
527
|
this.scroll(model.getVertScroll());
|
|
371
528
|
}
|
|
372
|
-
public setScroll(model:OncoprintModel) {
|
|
529
|
+
public setScroll(model: OncoprintModel) {
|
|
373
530
|
this.setVertScroll(model);
|
|
374
531
|
}
|
|
375
|
-
public setHorzScroll(model:OncoprintModel) {
|
|
376
|
-
|
|
377
|
-
public setVertScroll(model:OncoprintModel) {
|
|
532
|
+
public setHorzScroll(model: OncoprintModel) {}
|
|
533
|
+
public setVertScroll(model: OncoprintModel) {
|
|
378
534
|
this.scroll(model.getVertScroll());
|
|
379
535
|
}
|
|
380
|
-
public setZoom(model:OncoprintModel, getCellViewHeight:()=>number) {
|
|
536
|
+
public setZoom(model: OncoprintModel, getCellViewHeight: () => number) {
|
|
381
537
|
this.setVertZoom(model, getCellViewHeight);
|
|
382
538
|
}
|
|
383
|
-
public setVertZoom(model:OncoprintModel, getCellViewHeight:()=>number) {
|
|
539
|
+
public setVertZoom(model: OncoprintModel, getCellViewHeight: () => number) {
|
|
384
540
|
this.renderAllOptions(model);
|
|
385
541
|
this.resize(model, getCellViewHeight);
|
|
386
542
|
}
|
|
387
|
-
public setTrackGroupHeader(
|
|
543
|
+
public setTrackGroupHeader(
|
|
544
|
+
model: OncoprintModel,
|
|
545
|
+
getCellViewHeight: () => number
|
|
546
|
+
) {
|
|
388
547
|
this.renderAllOptions(model);
|
|
389
548
|
this.resize(model, getCellViewHeight);
|
|
390
549
|
}
|
|
391
|
-
public sort(model:OncoprintModel, getCellViewHeight:()=>number) {
|
|
550
|
+
public sort(model: OncoprintModel, getCellViewHeight: () => number) {
|
|
392
551
|
this.renderAllOptions(model);
|
|
393
552
|
this.resize(model, getCellViewHeight);
|
|
394
553
|
}
|
|
395
|
-
public setViewport(model:OncoprintModel, getCellViewHeight:()=>number) {
|
|
554
|
+
public setViewport(model: OncoprintModel, getCellViewHeight: () => number) {
|
|
396
555
|
this.renderAllOptions(model);
|
|
397
556
|
this.resize(model, getCellViewHeight);
|
|
398
557
|
this.scroll(model.getVertScroll());
|
|
399
558
|
}
|
|
400
559
|
public getWidth() {
|
|
401
|
-
if (this.$buttons_ctr.is(
|
|
560
|
+
if (this.$buttons_ctr.is(':empty')) {
|
|
402
561
|
return 0;
|
|
403
562
|
} else {
|
|
404
563
|
return 18 + this.img_size;
|
|
405
564
|
}
|
|
406
565
|
}
|
|
407
|
-
public setTrackShowGaps(
|
|
566
|
+
public setTrackShowGaps(
|
|
567
|
+
model: OncoprintModel,
|
|
568
|
+
getCellViewHeight: () => number
|
|
569
|
+
) {
|
|
408
570
|
this.renderAllOptions(model);
|
|
409
571
|
this.resize(model, getCellViewHeight);
|
|
410
572
|
}
|
|
411
|
-
public addTracks(model:OncoprintModel, getCellViewHeight:()=>number) {
|
|
573
|
+
public addTracks(model: OncoprintModel, getCellViewHeight: () => number) {
|
|
574
|
+
this.setTrackShowGaps(model, getCellViewHeight);
|
|
412
575
|
this.renderAllOptions(model);
|
|
413
576
|
this.resize(model, getCellViewHeight);
|
|
414
577
|
}
|
|
415
|
-
public moveTrack(model:OncoprintModel, getCellViewHeight:()=>number) {
|
|
578
|
+
public moveTrack(model: OncoprintModel, getCellViewHeight: () => number) {
|
|
416
579
|
this.renderAllOptions(model);
|
|
417
580
|
this.resize(model, getCellViewHeight);
|
|
418
581
|
}
|
|
419
|
-
public setTrackGroupOrder(model:OncoprintModel) {
|
|
582
|
+
public setTrackGroupOrder(model: OncoprintModel) {
|
|
420
583
|
this.renderAllOptions(model);
|
|
421
584
|
}
|
|
422
|
-
public setSortConfig(model:OncoprintModel) {
|
|
585
|
+
public setSortConfig(model: OncoprintModel) {
|
|
423
586
|
this.renderAllOptions(model);
|
|
424
587
|
}
|
|
425
|
-
public removeTrack(
|
|
588
|
+
public removeTrack(
|
|
589
|
+
model: OncoprintModel,
|
|
590
|
+
track_id: TrackId,
|
|
591
|
+
getCellViewHeight: () => number
|
|
592
|
+
) {
|
|
426
593
|
delete this.track_options_$elts[track_id];
|
|
427
594
|
this.renderAllOptions(model);
|
|
428
595
|
this.resize(model, getCellViewHeight);
|
|
429
596
|
}
|
|
430
597
|
public destroy() {
|
|
431
|
-
$(document).off(
|
|
598
|
+
$(document).off('click', this.clickHandler);
|
|
432
599
|
$(document).off(CLOSE_MENUS_EVENT);
|
|
433
|
-
}
|
|
434
|
-
public setTrackCustomOptions(model:OncoprintModel) {
|
|
600
|
+
}
|
|
601
|
+
public setTrackCustomOptions(model: OncoprintModel) {
|
|
435
602
|
this.renderAllOptions(model);
|
|
436
|
-
}
|
|
437
|
-
public setTrackMovable(model:OncoprintModel) {
|
|
603
|
+
}
|
|
604
|
+
public setTrackMovable(model: OncoprintModel) {
|
|
438
605
|
this.renderAllOptions(model);
|
|
439
606
|
}
|
|
440
607
|
}
|