@datagrok/bio 2.12.22 → 2.13.2
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/.eslintrc.json +1 -0
- package/CHANGELOG.md +36 -0
- package/dist/231.js +1 -1
- package/dist/231.js.map +1 -1
- package/dist/286.js.map +1 -1
- package/dist/545.js +1 -1
- package/dist/545.js.map +1 -1
- package/dist/package-test.js +2 -2
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +3 -3
- package/dist/package.js.map +1 -1
- package/files/monomer-libraries/sample-lib-Aca-colored.json +37 -0
- package/files/samples/FASTA_UN.csv +4 -0
- package/files/samples/FASTA_UN_MSA.csv +4 -0
- package/package.json +17 -5
- package/src/package-types.ts +11 -0
- package/src/package.ts +13 -14
- package/src/tests/renderers-monomer-placer-tests.ts +10 -12
- package/src/utils/cell-renderer-consts.ts +1 -1
- package/src/utils/cell-renderer.ts +25 -14
- package/src/utils/helm-to-molfile/converter/mol-atoms-v3k.ts +9 -0
- package/src/utils/monomer-cell-renderer.ts +1 -1
- package/src/utils/monomer-lib/library-file-manager/file-validator.ts +13 -7
- package/src/utils/monomer-lib/library-file-manager/ui.ts +16 -10
- package/src/utils/monomer-lib/monomer-lib.ts +23 -10
- package/src/utils/split-to-monomers.ts +1 -1
- package/src/viewers/web-logo-viewer.ts +36 -30
- package/src/widgets/bio-substructure-filter-helm.ts +2 -3
- package/src/widgets/package-settings-editor-widget.ts +11 -1
- package/src/widgets/representations.ts +30 -18
- package/webpack.config.js +2 -8
- package/files/polytool-rules/rules_template.csv +0 -1
|
@@ -452,12 +452,12 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
452
452
|
private static viewerCounter: number = -1;
|
|
453
453
|
private readonly viewerId: number = ++WebLogoViewer.viewerCounter;
|
|
454
454
|
|
|
455
|
-
private
|
|
455
|
+
private toLog(): string { return `WebLogoViewer<${this.viewerId}>`; }
|
|
456
456
|
|
|
457
457
|
// -- Data --
|
|
458
458
|
|
|
459
459
|
setData(): void {
|
|
460
|
-
const logPrefix = `${this.
|
|
460
|
+
const logPrefix = `${this.toLog()}.setData()`;
|
|
461
461
|
_package.logger.debug(`${logPrefix}, in`);
|
|
462
462
|
this.viewSyncer.sync(`${logPrefix}`, async () => { // setData
|
|
463
463
|
if (!this.setDataInProgress) this.setDataInProgress = true; else return; // check setDataInProgress synced
|
|
@@ -493,18 +493,18 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
493
493
|
this.viewSubs = [];
|
|
494
494
|
|
|
495
495
|
const dataFrameTxt = `${this.dataFrame ? 'data' : 'null'}`;
|
|
496
|
-
_package.logger.debug(
|
|
496
|
+
_package.logger.debug(`${this.toLog()}.destroyView( dataFrame = ${dataFrameTxt} ) start`);
|
|
497
497
|
|
|
498
498
|
this.host!.remove();
|
|
499
499
|
this.msgHost = undefined;
|
|
500
500
|
this.host = undefined;
|
|
501
501
|
|
|
502
|
-
_package.logger.debug(
|
|
502
|
+
_package.logger.debug(`${this.toLog()}.destroyView() end`);
|
|
503
503
|
}
|
|
504
504
|
|
|
505
505
|
private async buildView(): Promise<void> {
|
|
506
506
|
const dataFrameTxt: string = this.dataFrame ? 'data' : 'null';
|
|
507
|
-
_package.logger.debug(
|
|
507
|
+
_package.logger.debug(`${this.toLog()}.buildView( dataFrame = ${dataFrameTxt} ) start`);
|
|
508
508
|
const dpr = window.devicePixelRatio;
|
|
509
509
|
this.viewSubs.push(DG.debounce(this.renderRequest, Debounces.render)
|
|
510
510
|
.subscribe(this.renderRequestOnDebounce.bind(this)));
|
|
@@ -559,14 +559,20 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
559
559
|
fromEvent<WheelEvent>(this.canvas, 'wheel').subscribe(this.canvasOnWheel.bind(this)));
|
|
560
560
|
|
|
561
561
|
this.render(WlRenderLevel.Freqs, 'buildView');
|
|
562
|
-
_package.logger.debug(
|
|
562
|
+
_package.logger.debug(`${this.toLog()}.buildView() end`);
|
|
563
563
|
}
|
|
564
564
|
|
|
565
|
-
|
|
566
|
-
private rootOnSizeChanged(): void {
|
|
567
|
-
_package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.rootOnSizeChanged(), start `);
|
|
565
|
+
private lastSize: { width: number, height: number } = {width: -1, height: -1};
|
|
568
566
|
|
|
569
|
-
|
|
567
|
+
/** Handler of changing size WebLogo */
|
|
568
|
+
private rootOnSizeChanged(value: ResizeObserverEntry): void {
|
|
569
|
+
const size = {width: value.target.clientWidth, height: value.target.clientHeight};
|
|
570
|
+
if (this.lastSize.width != size.width || this.lastSize.height != size.height) {
|
|
571
|
+
_package.logger.debug(
|
|
572
|
+
`${this.toLog()}.rootOnSizeChanged(), ${JSON.stringify(size)}, start `);
|
|
573
|
+
this.render(WlRenderLevel.Layout, 'rootOnSizeChanged');
|
|
574
|
+
}
|
|
575
|
+
this.lastSize = size;
|
|
570
576
|
}
|
|
571
577
|
|
|
572
578
|
private updateEditors(): void {
|
|
@@ -853,7 +859,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
853
859
|
|
|
854
860
|
/** Add filter handlers when table is a attached */
|
|
855
861
|
public override onTableAttached() {
|
|
856
|
-
_package.logger.debug(
|
|
862
|
+
_package.logger.debug(`${this.toLog()}.onTableAttached(), `);
|
|
857
863
|
|
|
858
864
|
super.onTableAttached();
|
|
859
865
|
this.setData();
|
|
@@ -861,7 +867,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
861
867
|
|
|
862
868
|
/** Remove all handlers when table is a detach */
|
|
863
869
|
public override detach() {
|
|
864
|
-
const logPrefix = `${this.
|
|
870
|
+
const logPrefix = `${this.toLog()}.detach()`;
|
|
865
871
|
_package.logger.debug(`${logPrefix}, in`);
|
|
866
872
|
|
|
867
873
|
const superDetach = super.detach.bind(this);
|
|
@@ -933,7 +939,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
933
939
|
|
|
934
940
|
/** Renders requested repeatedly will be performed once on window.requestAnimationFrame() */
|
|
935
941
|
render(renderLevel: WlRenderLevel, reason: string): void {
|
|
936
|
-
_package.logger.debug(
|
|
942
|
+
_package.logger.debug(`${this.toLog()}` +
|
|
937
943
|
`.render( recalcLevelVal=${renderLevel}, reason='${reason}' )`);
|
|
938
944
|
this.requestedRenderLevel = Math.max(this.requestedRenderLevel, renderLevel);
|
|
939
945
|
this.renderRequest.next(this.requestedRenderLevel);
|
|
@@ -943,12 +949,12 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
943
949
|
*@param {WlRenderLevel} renderLevel - indicates that need to recalculate data for rendering
|
|
944
950
|
*/
|
|
945
951
|
protected async renderInt(renderLevel: WlRenderLevel): Promise<void> {
|
|
946
|
-
_package.logger.debug(
|
|
952
|
+
_package.logger.debug(`${this.toLog()}.render.renderInt( renderLevel=${renderLevel} ), ` +
|
|
947
953
|
`start `);
|
|
948
954
|
|
|
949
955
|
/** Calculate freqs of monomers */
|
|
950
956
|
const calculateFreqsInt = (): void => {
|
|
951
|
-
_package.logger.debug(
|
|
957
|
+
_package.logger.debug(`${this.toLog()}.render.calculateFreqsInt(), start `);
|
|
952
958
|
if (!this.host || !this.seqCol || !this.dataFrame) return;
|
|
953
959
|
|
|
954
960
|
// region updatePositions
|
|
@@ -1050,7 +1056,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1050
1056
|
|
|
1051
1057
|
/** Calculate layout of monomers on screen (canvas) based on freqs, required to handle mouse events */
|
|
1052
1058
|
const calculateLayoutInt = (firstPos: number, lastPos: number, dpr: number, positionLabelsHeight: number): void => {
|
|
1053
|
-
_package.logger.debug(
|
|
1059
|
+
_package.logger.debug(`${this.toLog()}.render.calculateLayoutInt(), start `);
|
|
1054
1060
|
|
|
1055
1061
|
const absoluteMaxHeight: number = this.canvas.height - positionLabelsHeight * dpr;
|
|
1056
1062
|
let alphabetSizeLog: number;
|
|
@@ -1066,7 +1072,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1066
1072
|
|
|
1067
1073
|
for (let jPos = firstPos; jPos <= lastPos; ++jPos) {
|
|
1068
1074
|
if (!(jPos in this.positions)) {
|
|
1069
|
-
_package.logger.warning(
|
|
1075
|
+
_package.logger.warning(`${this.toLog()}.render.calculateLayoutInt() ` +
|
|
1070
1076
|
`this.positions.length = ${this.positions.length}, jPos = ${jPos}`);
|
|
1071
1077
|
continue;
|
|
1072
1078
|
}
|
|
@@ -1074,7 +1080,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1074
1080
|
jPos, this.slider.min, absoluteMaxHeight, this.positionHeight,
|
|
1075
1081
|
alphabetSizeLog, this._positionWidthWithMargin, this._positionWidth, dpr, positionLabelsHeight);
|
|
1076
1082
|
}
|
|
1077
|
-
_package.logger.debug(
|
|
1083
|
+
_package.logger.debug(`${this.toLog()}.render.calculateLayoutInt(), end `);
|
|
1078
1084
|
this._onLayoutCalculated.next();
|
|
1079
1085
|
};
|
|
1080
1086
|
|
|
@@ -1132,11 +1138,11 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1132
1138
|
g.restore();
|
|
1133
1139
|
}
|
|
1134
1140
|
|
|
1135
|
-
_package.logger.debug(
|
|
1141
|
+
_package.logger.debug(`${this.toLog()}.render.renderInt( recalcLevel=${renderLevel} ), end`);
|
|
1136
1142
|
}
|
|
1137
1143
|
|
|
1138
1144
|
private renderRequestOnDebounce(renderLevel: WlRenderLevel): void {
|
|
1139
|
-
const logPrefix = `${this.
|
|
1145
|
+
const logPrefix = `${this.toLog()}.renderRequestOnDebounce()`;
|
|
1140
1146
|
if ($(this.root).offsetParent().get()[0]?.tagName === 'HTML') {
|
|
1141
1147
|
_package.logger.warning(`${logPrefix}, $(this.root).offsetParent() is the 'HTML' tag.`);
|
|
1142
1148
|
return;
|
|
@@ -1167,35 +1173,35 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1167
1173
|
maxRange: this.slider.maxRange
|
|
1168
1174
|
};
|
|
1169
1175
|
_package.logger.debug(
|
|
1170
|
-
|
|
1176
|
+
`${this.toLog()}.sliderOnValuesChanged( ${JSON.stringify(val)} ), start`);
|
|
1171
1177
|
this.render(WlRenderLevel.Layout, 'sliderOnValuesChanged');
|
|
1172
1178
|
} catch (err: any) {
|
|
1173
1179
|
const errMsg = errorToConsole(err);
|
|
1174
|
-
_package.logger.error(
|
|
1180
|
+
_package.logger.error(`${this.toLog()}.sliderOnValuesChanged() error:\n` + errMsg);
|
|
1175
1181
|
//throw err; // Do not throw to prevent disabling event handler
|
|
1176
1182
|
}
|
|
1177
1183
|
}
|
|
1178
1184
|
|
|
1179
1185
|
private dataFrameFilterOnChanged(_value: any): void {
|
|
1180
|
-
_package.logger.debug(
|
|
1186
|
+
_package.logger.debug(`${this.toLog()}.dataFrameFilterChanged()`);
|
|
1181
1187
|
try {
|
|
1182
1188
|
if (this.filterSource === FilterSources.Filtered)
|
|
1183
1189
|
this.render(WlRenderLevel.Freqs, 'dataFrameFilterOnChanged');
|
|
1184
1190
|
} catch (err: any) {
|
|
1185
1191
|
const errMsg = errorToConsole(err);
|
|
1186
|
-
_package.logger.error(
|
|
1192
|
+
_package.logger.error(`${this.toLog()}.dataFrameFilterOnChanged() error:\n` + errMsg);
|
|
1187
1193
|
//throw err; // Do not throw to prevent disabling event handler
|
|
1188
1194
|
}
|
|
1189
1195
|
}
|
|
1190
1196
|
|
|
1191
1197
|
private dataFrameSelectionOnChanged(_value: any): void {
|
|
1192
|
-
_package.logger.debug(
|
|
1198
|
+
_package.logger.debug(`${this.toLog()}.dataFrameSelectionOnChanged()`);
|
|
1193
1199
|
try {
|
|
1194
1200
|
if (this.filterSource === FilterSources.Selected)
|
|
1195
1201
|
this.render(WlRenderLevel.Freqs, 'dataFrameSelectionOnChanged');
|
|
1196
1202
|
} catch (err: any) {
|
|
1197
1203
|
const errMsg = errorToConsole(err);
|
|
1198
|
-
_package.logger.error(
|
|
1204
|
+
_package.logger.error(`${this.toLog()}.dataFrameSelectionOnChanged() error:\n` + errMsg);
|
|
1199
1205
|
//throw err; // Do not throw to prevent disabling event handler
|
|
1200
1206
|
}
|
|
1201
1207
|
}
|
|
@@ -1236,7 +1242,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1236
1242
|
ui.tooltip.hide();
|
|
1237
1243
|
} catch (err: any) {
|
|
1238
1244
|
const errMsg = errorToConsole(err);
|
|
1239
|
-
_package.logger.error(
|
|
1245
|
+
_package.logger.error(`${this.toLog()}.canvasOnMouseMove() error:\n` + errMsg);
|
|
1240
1246
|
//throw err; // Do not throw to prevent disabling event handler
|
|
1241
1247
|
}
|
|
1242
1248
|
}
|
|
@@ -1257,7 +1263,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1257
1263
|
}
|
|
1258
1264
|
} catch (err: any) {
|
|
1259
1265
|
const errMsg = errorToConsole(err);
|
|
1260
|
-
_package.logger.error(
|
|
1266
|
+
_package.logger.error(`${this.toLog()}.canvasOnMouseDown() error:\n` + errMsg);
|
|
1261
1267
|
//throw err; // Do not throw to prevent disabling event handler
|
|
1262
1268
|
}
|
|
1263
1269
|
}
|
|
@@ -1271,7 +1277,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1271
1277
|
this.slider.scrollBy(this.slider.min + countOfScrollPositions);
|
|
1272
1278
|
} catch (err: any) {
|
|
1273
1279
|
const errMsg = errorToConsole(err);
|
|
1274
|
-
_package.logger.error(
|
|
1280
|
+
_package.logger.error(`${this.toLog()}.canvasOnWheel() error:\n` + errMsg);
|
|
1275
1281
|
//throw err; // Do not throw to prevent disabling event handler
|
|
1276
1282
|
}
|
|
1277
1283
|
}
|
|
@@ -1284,7 +1290,7 @@ export class WebLogoViewer extends DG.JsViewer implements IWebLogoViewer {
|
|
|
1284
1290
|
|
|
1285
1291
|
invalidate(caller?: string): void {
|
|
1286
1292
|
const callLog = `invalidate(${caller ? ` <- ${caller} ` : ''})`;
|
|
1287
|
-
const logPrefix = `${this.
|
|
1293
|
+
const logPrefix = `${this.toLog()}.${callLog}`;
|
|
1288
1294
|
// Put the event trigger in the tail of the synced calls queue.
|
|
1289
1295
|
this.render(WlRenderLevel.None, callLog); // Put render request to the syncer
|
|
1290
1296
|
this.viewSyncer.sync(`${logPrefix}`, async () => {
|
|
@@ -2,11 +2,10 @@ import * as grok from 'datagrok-api/grok';
|
|
|
2
2
|
import * as ui from 'datagrok-api/ui';
|
|
3
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
4
|
|
|
5
|
-
import * as org from 'org';
|
|
6
5
|
import $ from 'cash-dom';
|
|
7
6
|
import {fromEvent, Unsubscribable} from 'rxjs';
|
|
8
7
|
|
|
9
|
-
import {IHelmWebEditor} from '@datagrok-libraries/bio/src/helm/types';
|
|
8
|
+
import {App, IHelmWebEditor} from '@datagrok-libraries/bio/src/helm/types';
|
|
10
9
|
import {getHelmHelper} from '@datagrok-libraries/bio/src/helm/helm-helper';
|
|
11
10
|
import {ILogger} from '@datagrok-libraries/bio/src/utils/logger';
|
|
12
11
|
import {errInfo} from '@datagrok-libraries/bio/src/utils/err-info';
|
|
@@ -55,7 +54,7 @@ export class HelmBioFilter extends BioFilterBase<BioFilterProps> /* implements I
|
|
|
55
54
|
this.logger.warning('TEST: HelmBioFilter.init().sync() waitForElementInDom ready');
|
|
56
55
|
this.updateFilterPanel();
|
|
57
56
|
let webEditorHost: HTMLDivElement | null;
|
|
58
|
-
let webEditorApp:
|
|
57
|
+
let webEditorApp: App | null;
|
|
59
58
|
// TODO: Unsubscribe 'click' and 'sizeChanged'
|
|
60
59
|
this.viewSubs.push(fromEvent(this._filterPanel, 'click').subscribe(() => {
|
|
61
60
|
webEditorHost = ui.div();
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import * as grok from 'datagrok-api/grok';
|
|
2
1
|
import * as ui from 'datagrok-api/ui';
|
|
3
2
|
import * as DG from 'datagrok-api/dg';
|
|
3
|
+
|
|
4
|
+
import {MonomerWidthMode} from '../utils/cell-renderer-consts';
|
|
5
|
+
|
|
4
6
|
import {_package} from '../package';
|
|
5
7
|
|
|
6
8
|
export class PackageSettingsEditorWidget extends DG.Widget {
|
|
@@ -20,6 +22,13 @@ export class PackageSettingsEditorWidget extends DG.Widget {
|
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
async init(): Promise<void> {
|
|
25
|
+
const monomerWidthModeInput = ui.choiceInput('Monomer width mode',
|
|
26
|
+
_package.properties.MonomerWidthMode,
|
|
27
|
+
[MonomerWidthMode.short, MonomerWidthMode.long],
|
|
28
|
+
(value: MonomerWidthMode) => {
|
|
29
|
+
_package.properties.MonomerWidthMode = value;
|
|
30
|
+
});
|
|
31
|
+
|
|
23
32
|
const maxMonomerLengthInput = ui.intInput('Max monomer length',
|
|
24
33
|
_package.properties.MaxMonomerLength,
|
|
25
34
|
(value: number) => {
|
|
@@ -40,6 +49,7 @@ export class PackageSettingsEditorWidget extends DG.Widget {
|
|
|
40
49
|
});
|
|
41
50
|
|
|
42
51
|
this.root.appendChild(ui.form([
|
|
52
|
+
monomerWidthModeInput,
|
|
43
53
|
maxMonomerLengthInput,
|
|
44
54
|
tooltipWebLogoInput,
|
|
45
55
|
defaultSeparatorInput,
|
|
@@ -25,29 +25,41 @@ export function getMacromoleculeColumnPropertyPanel(col: DG.Column): DG.Widget {
|
|
|
25
25
|
const columnsSet = new Set(columnsList);
|
|
26
26
|
columnsSet.delete(col.name);
|
|
27
27
|
|
|
28
|
-
const
|
|
29
|
-
(col?.temp[tempTAGS.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
const monomerWidthModeInput = ui.input.choice('Monomer width', {
|
|
29
|
+
value: (col?.temp[tempTAGS.monomerWidthMode] != null) ? col.temp[tempTAGS.monomerWidthMode] :
|
|
30
|
+
(_package.properties?.MonomerWidthMode ?? MonomerWidthMode.short),
|
|
31
|
+
items: [MonomerWidthMode.short, MonomerWidthMode.long],
|
|
32
|
+
onValueChanged: () => {
|
|
33
|
+
const s = monomerWidthModeInput.value;
|
|
34
|
+
col.temp[tempTAGS.monomerWidthMode] = s;
|
|
33
35
|
col.setTag(mmcrTags.RendererSettingsChanged, rendererSettingsChangedState.true);
|
|
34
36
|
col.dataFrame.fireValuesChanged();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
);
|
|
37
|
+
|
|
38
|
+
maxMonomerLengthInput.enabled = monomerWidthModeInput.value === MonomerWidthMode.short;
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
monomerWidthModeInput.setTooltip(
|
|
42
|
+
`In short mode, only the 'Max monomer length' characters are displayed, followed by .. if there are more`);
|
|
39
43
|
|
|
40
44
|
const tagMaxMonomerLength: number = parseInt(col.getTag(mmcrTAGS.maxMonomerLength));
|
|
41
|
-
const
|
|
42
|
-
!isNaN(tagMaxMonomerLength) ? tagMaxMonomerLength :
|
|
43
|
-
|
|
45
|
+
const maxMonomerLengthInput = ui.input.slider('Max monomer length', {
|
|
46
|
+
value: !isNaN(tagMaxMonomerLength) ? tagMaxMonomerLength :
|
|
47
|
+
(_package.properties?.MaxMonomerLength ?? 4),
|
|
48
|
+
min: 1, max: 16, step: 1,
|
|
49
|
+
onValueChanged: () => {
|
|
50
|
+
const value = maxMonomerLengthInput.value;
|
|
51
|
+
maxMonomerLengthValueDiv.innerText = maxMonomerLengthInput.stringValue;
|
|
44
52
|
col.setTag(mmcrTAGS.maxMonomerLength, value.toString());
|
|
45
53
|
col.setTag(mmcrTags.RendererSettingsChanged, rendererSettingsChangedState.true);
|
|
46
54
|
col.dataFrame.fireValuesChanged();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
);
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const maxMonomerLengthValueDiv = ui.divText(maxMonomerLengthInput.stringValue, 'ui-input-description');
|
|
58
|
+
maxMonomerLengthInput.addOptions(maxMonomerLengthValueDiv);
|
|
59
|
+
maxMonomerLengthInput.setTooltip(
|
|
60
|
+
`The max length of monomer name displayed without shortening ` +
|
|
61
|
+
` in '${MonomerWidthMode.short}' monomer width mode.`);
|
|
62
|
+
maxMonomerLengthInput.enabled = monomerWidthModeInput.value === MonomerWidthMode.short;
|
|
51
63
|
|
|
52
64
|
const gapLengthInput = ui.intInput('Monomer margin', col.temp[mmcrTemps.gapLength] ?? 0,
|
|
53
65
|
(value: number) => {
|
|
@@ -82,8 +94,8 @@ export function getMacromoleculeColumnPropertyPanel(col: DG.Column): DG.Widget {
|
|
|
82
94
|
compareWithCurrent.setTooltip('When on, all sequences get rendered in the "diff" mode');
|
|
83
95
|
|
|
84
96
|
const rdKitInputs = ui.inputs([
|
|
85
|
-
|
|
86
|
-
|
|
97
|
+
monomerWidthModeInput,
|
|
98
|
+
maxMonomerLengthInput,
|
|
87
99
|
gapLengthInput,
|
|
88
100
|
referenceSequence,
|
|
89
101
|
colorCode,
|
package/webpack.config.js
CHANGED
|
@@ -3,14 +3,11 @@ const FuncGeneratorPlugin = require('datagrok-tools/plugins/func-gen-plugin');
|
|
|
3
3
|
const packageName = path.parse(require('./package.json').name).name.toLowerCase().replace(/-/g, '');
|
|
4
4
|
|
|
5
5
|
const mode = process.env.NODE_ENV ?? 'production';
|
|
6
|
-
if (mode !== 'production')
|
|
6
|
+
if (mode !== 'production')
|
|
7
7
|
console.warn(`Building Bio in '${mode}' mode.`);
|
|
8
|
-
}
|
|
9
8
|
|
|
10
9
|
module.exports = {
|
|
11
|
-
cache: {
|
|
12
|
-
type: 'filesystem',
|
|
13
|
-
},
|
|
10
|
+
...(mode === 'production' ? {cache: {type: 'filesystem'}} : {}),
|
|
14
11
|
mode: mode,
|
|
15
12
|
entry: {
|
|
16
13
|
package: ['./src/package.ts'],
|
|
@@ -45,9 +42,6 @@ module.exports = {
|
|
|
45
42
|
'cash-dom': '$',
|
|
46
43
|
'dayjs': 'dayjs',
|
|
47
44
|
'wu': 'wu',
|
|
48
|
-
'scil': 'scil',
|
|
49
|
-
'org': 'org',
|
|
50
|
-
// 'JSDraw2': 'JSDraw2',
|
|
51
45
|
},
|
|
52
46
|
output: {
|
|
53
47
|
filename: '[name].js',
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
code,monomer1,monomer2,modification1,modification2,R1,R2
|