@aics/vole-app 2.15.0 → 3.1.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/es/aics-image-viewer/components/App/ChannelUpdater.js +21 -3
- package/es/aics-image-viewer/components/App/index.js +156 -199
- package/es/aics-image-viewer/components/CellViewerCanvasWrapper/index.js +10 -9
- package/es/aics-image-viewer/components/ChannelsWidget.js +35 -22
- package/es/aics-image-viewer/components/ChannelsWidgetRow/index.js +27 -71
- package/es/aics-image-viewer/components/ChannelsWidgetRow/styles.css +0 -6
- package/es/aics-image-viewer/components/ColorPicker.js +1 -1
- package/es/aics-image-viewer/components/ControlPanel/index.js +5 -4
- package/es/aics-image-viewer/components/CustomizeWidget.js +12 -8
- package/es/aics-image-viewer/components/ErrorAlert/index.js +4 -4
- package/es/aics-image-viewer/components/GlobalVolumeControls.js +12 -10
- package/es/aics-image-viewer/components/StyleProvider/index.js +4 -2
- package/es/aics-image-viewer/components/TfEditor/index.js +304 -154
- package/es/aics-image-viewer/components/TfEditor/styles.css +53 -31
- package/es/aics-image-viewer/components/Toolbar/DownloadButton.js +1 -1
- package/es/aics-image-viewer/components/Toolbar/index.js +18 -16
- package/es/aics-image-viewer/components/shared/SharedCheckBox.js +1 -1
- package/es/aics-image-viewer/components/shared/SliderRow/styles.css +1 -0
- package/es/aics-image-viewer/components/shared/SmarterSlider.js +1 -1
- package/es/aics-image-viewer/components/shared/ViewerIcon.js +1 -1
- package/es/aics-image-viewer/components/useVolume.js +68 -59
- package/es/aics-image-viewer/shared/constants.js +2 -2
- package/es/aics-image-viewer/shared/utils/controlPointsToLut.js +57 -24
- package/es/aics-image-viewer/shared/utils/sceneStore.js +14 -4
- package/es/aics-image-viewer/shared/utils/storage.js +238 -0
- package/es/aics-image-viewer/shared/utils/test/storage.test.js +264 -0
- package/es/aics-image-viewer/shared/utils/test/urlParsing.test.js +249 -109
- package/es/aics-image-viewer/shared/utils/test/viewerChannelSettings.test.js +1 -1
- package/es/aics-image-viewer/shared/utils/urlParsing.js +287 -154
- package/es/aics-image-viewer/shared/utils/viewerState.js +4 -24
- package/es/aics-image-viewer/state/reset.js +111 -0
- package/es/aics-image-viewer/state/store.js +90 -0
- package/es/aics-image-viewer/state/subscribers.js +153 -0
- package/es/aics-image-viewer/state/test/reset.test.js +247 -0
- package/es/aics-image-viewer/state/util.js +71 -0
- package/es/index.js +3 -3
- package/package.json +18 -11
- package/type-declarations/aics-image-viewer/components/App/ChannelUpdater.d.ts +2 -4
- package/type-declarations/aics-image-viewer/components/App/types.d.ts +3 -3
- package/type-declarations/aics-image-viewer/components/AxisClipSliders/index.d.ts +6 -6
- package/type-declarations/aics-image-viewer/components/CellViewerCanvasWrapper/index.d.ts +5 -14
- package/type-declarations/aics-image-viewer/components/ChannelsWidget.d.ts +3 -6
- package/type-declarations/aics-image-viewer/components/ChannelsWidgetRow/index.d.ts +3 -6
- package/type-declarations/aics-image-viewer/components/ColorPicker.d.ts +1 -1
- package/type-declarations/aics-image-viewer/components/ControlPanel/index.d.ts +6 -7
- package/type-declarations/aics-image-viewer/components/CustomizeWidget.d.ts +2 -8
- package/type-declarations/aics-image-viewer/components/ErrorAlert/index.d.ts +4 -0
- package/type-declarations/aics-image-viewer/components/GlobalVolumeControls.d.ts +2 -9
- package/type-declarations/aics-image-viewer/components/MetadataViewer/index.d.ts +1 -1
- package/type-declarations/aics-image-viewer/components/StyleProvider/index.d.ts +1 -1
- package/type-declarations/aics-image-viewer/components/TfEditor/index.d.ts +10 -3
- package/type-declarations/aics-image-viewer/components/Toolbar/index.d.ts +3 -12
- package/type-declarations/aics-image-viewer/components/shared/SliderRow/index.d.ts +1 -1
- package/type-declarations/aics-image-viewer/components/shared/SmarterSlider.d.ts +1 -1
- package/type-declarations/aics-image-viewer/components/shared/ViewerIcon.d.ts +1 -1
- package/type-declarations/aics-image-viewer/components/useVolume.d.ts +7 -4
- package/type-declarations/aics-image-viewer/shared/constants.d.ts +5 -5
- package/type-declarations/aics-image-viewer/shared/types.d.ts +1 -1
- package/type-declarations/aics-image-viewer/shared/utils/controlPointsToLut.d.ts +9 -5
- package/type-declarations/aics-image-viewer/shared/utils/firebase/index.d.ts +1 -1
- package/type-declarations/aics-image-viewer/shared/utils/hooks.d.ts +1 -1
- package/type-declarations/aics-image-viewer/shared/utils/playControls.d.ts +1 -1
- package/type-declarations/aics-image-viewer/shared/utils/sceneStore.d.ts +8 -4
- package/type-declarations/aics-image-viewer/shared/utils/storage.d.ts +15 -0
- package/type-declarations/aics-image-viewer/shared/utils/urlParsing.d.ts +94 -31
- package/type-declarations/aics-image-viewer/shared/utils/viewerChannelSettings.d.ts +39 -1
- package/type-declarations/aics-image-viewer/shared/utils/viewerState.d.ts +3 -6
- package/type-declarations/aics-image-viewer/state/reset.d.ts +29 -0
- package/type-declarations/aics-image-viewer/state/store.d.ts +30 -0
- package/type-declarations/aics-image-viewer/state/subscribers.d.ts +4 -0
- package/type-declarations/aics-image-viewer/state/types.d.ts +46 -0
- package/type-declarations/aics-image-viewer/state/util.d.ts +8 -0
- package/type-declarations/index.d.ts +4 -4
- package/es/aics-image-viewer/components/ViewerStateProvider/ResetStateProvider.js +0 -163
- package/es/aics-image-viewer/components/ViewerStateProvider/index.js +0 -259
- package/type-declarations/aics-image-viewer/components/ViewerStateProvider/ResetStateProvider.d.ts +0 -34
- package/type-declarations/aics-image-viewer/components/ViewerStateProvider/index.d.ts +0 -33
- package/type-declarations/aics-image-viewer/components/ViewerStateProvider/types.d.ts +0 -107
- /package/es/aics-image-viewer/{components/ViewerStateProvider → state}/types.js +0 -0
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
function
|
|
2
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
3
|
+
function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
|
|
4
|
+
function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
|
|
5
|
+
function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
|
|
6
|
+
function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
|
|
7
|
+
function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || Promise); }
|
|
8
|
+
function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
|
|
9
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
10
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
11
|
+
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
3
12
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
4
13
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
5
14
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
@@ -230,7 +239,8 @@ describe("Channel state serialization", function () {
|
|
|
230
239
|
}],
|
|
231
240
|
ramp: [0, 255],
|
|
232
241
|
plotMin: 0,
|
|
233
|
-
plotMax: 255
|
|
242
|
+
plotMax: 255,
|
|
243
|
+
keepIntensityRange: false
|
|
234
244
|
};
|
|
235
245
|
var DEFAULT_SERIALIZED_CHANNEL_STATE = {
|
|
236
246
|
col: "ff0000",
|
|
@@ -241,8 +251,9 @@ describe("Channel state serialization", function () {
|
|
|
241
251
|
clz: "1",
|
|
242
252
|
cza: "0.5",
|
|
243
253
|
cpe: "0",
|
|
244
|
-
|
|
245
|
-
|
|
254
|
+
cpt: "0:0.5:1:255:1:1",
|
|
255
|
+
ram: "0:255",
|
|
256
|
+
pin: "0"
|
|
246
257
|
};
|
|
247
258
|
|
|
248
259
|
// Note that the serialization + deserialization are NOT direct inverses.
|
|
@@ -291,13 +302,16 @@ describe("Channel state serialization", function () {
|
|
|
291
302
|
surfaceOpacity: 0.75,
|
|
292
303
|
colorizeEnabled: true,
|
|
293
304
|
colorizeAlpha: 0.5,
|
|
294
|
-
|
|
305
|
+
intensity: {
|
|
306
|
+
lut: ["0", "255"]
|
|
307
|
+
}
|
|
295
308
|
});
|
|
296
309
|
});
|
|
297
310
|
it("handles expected lut formatting", function () {
|
|
298
311
|
var luts = [["autoij:0", ["autoij", "0"]], ["0:autoij", ["0", "autoij"]], [":autoij", ["", "autoij"]], ["autoij:", ["autoij", ""]], ["0:255", ["0", "255"]], ["0.5:1.0", ["0.5", "1.0"]], ["0.50:1.00", ["0.50", "1.00"]], ["m99:m100", ["m99", "m100"]], ["p10:p90", ["p10", "p90"]], ["p10: p90", ["p10", "p90"]] // handle spaces
|
|
299
312
|
];
|
|
300
313
|
for (var _i = 0, _luts = luts; _i < _luts.length; _i++) {
|
|
314
|
+
var _result$intensity;
|
|
301
315
|
var _luts$_i = _slicedToArray(_luts[_i], 2),
|
|
302
316
|
encodedLut = _luts$_i[0],
|
|
303
317
|
decodedLut = _luts$_i[1];
|
|
@@ -305,7 +319,7 @@ describe("Channel state serialization", function () {
|
|
|
305
319
|
lut: encodedLut
|
|
306
320
|
};
|
|
307
321
|
var result = deserializeViewerChannelSetting(0, data);
|
|
308
|
-
expect(result.lut).toEqual(decodedLut);
|
|
322
|
+
expect((_result$intensity = result.intensity) === null || _result$intensity === void 0 ? void 0 : _result$intensity.lut).toEqual(decodedLut);
|
|
309
323
|
}
|
|
310
324
|
});
|
|
311
325
|
it("ignores unexpected lut formats", function () {
|
|
@@ -373,7 +387,8 @@ describe("Channel state serialization", function () {
|
|
|
373
387
|
ramp: [0, 255],
|
|
374
388
|
// TODO: the settings below are not serialized. should they be? (see #384)
|
|
375
389
|
plotMin: 0,
|
|
376
|
-
plotMax: 255
|
|
390
|
+
plotMax: 255,
|
|
391
|
+
keepIntensityRange: false
|
|
377
392
|
};
|
|
378
393
|
var serializedCustomChannelState = {
|
|
379
394
|
col: "03ff9d",
|
|
@@ -384,8 +399,9 @@ describe("Channel state serialization", function () {
|
|
|
384
399
|
clz: "0",
|
|
385
400
|
cza: "1",
|
|
386
401
|
cpe: "0",
|
|
387
|
-
|
|
388
|
-
|
|
402
|
+
cpt: "",
|
|
403
|
+
ram: "0:255",
|
|
404
|
+
pin: "0"
|
|
389
405
|
};
|
|
390
406
|
expect(serializeViewerChannelSetting(customChannelState, false)).toEqual(serializedCustomChannelState);
|
|
391
407
|
});
|
|
@@ -616,23 +632,54 @@ describe("Channel state deserialization", function () {
|
|
|
616
632
|
opacity: 1,
|
|
617
633
|
color: [0, 255, 180]
|
|
618
634
|
}];
|
|
635
|
+
describe("legacy control points", function () {
|
|
636
|
+
it("parses comma-separated control points", function () {
|
|
637
|
+
var result = deserializeViewerChannelSetting(0, {
|
|
638
|
+
cps: "-10:0:000000,50:0:000000,100:0.3:0010ff,140:0.8:00ffff,260:1:00ffb4"
|
|
639
|
+
});
|
|
640
|
+
expect(result.controlPoints).toEqual(DEFAULT_CONTROL_POINTS);
|
|
641
|
+
});
|
|
642
|
+
it("parses colon-separated control points", function () {
|
|
643
|
+
var result = deserializeViewerChannelSetting(0, {
|
|
644
|
+
cps: "-10:0:000000:50:0:000000:100:0.3:0010ff:140:0.8:00ffff:260:1:00ffb4"
|
|
645
|
+
});
|
|
646
|
+
expect(result.controlPoints).toEqual(DEFAULT_CONTROL_POINTS);
|
|
647
|
+
});
|
|
648
|
+
it("replaces '1' color strings with default color #ffffff", function () {
|
|
649
|
+
var result = deserializeViewerChannelSetting(0, {
|
|
650
|
+
cps: "0:0:1:50:1:1"
|
|
651
|
+
});
|
|
652
|
+
expect(result.controlPoints).toEqual([{
|
|
653
|
+
x: 0,
|
|
654
|
+
opacity: 0,
|
|
655
|
+
color: [255, 255, 255]
|
|
656
|
+
}, {
|
|
657
|
+
x: 50,
|
|
658
|
+
opacity: 1,
|
|
659
|
+
color: [255, 255, 255]
|
|
660
|
+
}]);
|
|
661
|
+
});
|
|
662
|
+
});
|
|
619
663
|
it("parses comma-separated control points", function () {
|
|
664
|
+
var _result$intensity2;
|
|
620
665
|
var result = deserializeViewerChannelSetting(0, {
|
|
621
|
-
|
|
666
|
+
cpt: "-10:0:000000,50:0:000000,100:0.3:0010ff,140:0.8:00ffff,260:1:00ffb4"
|
|
622
667
|
});
|
|
623
|
-
expect(result.controlPoints).toEqual(DEFAULT_CONTROL_POINTS);
|
|
668
|
+
expect((_result$intensity2 = result.intensity) === null || _result$intensity2 === void 0 ? void 0 : _result$intensity2.controlPoints).toEqual(DEFAULT_CONTROL_POINTS);
|
|
624
669
|
});
|
|
625
670
|
it("parses colon-separated control points", function () {
|
|
671
|
+
var _result$intensity3;
|
|
626
672
|
var result = deserializeViewerChannelSetting(0, {
|
|
627
|
-
|
|
673
|
+
cpt: "-10:0:000000:50:0:000000:100:0.3:0010ff:140:0.8:00ffff:260:1:00ffb4"
|
|
628
674
|
});
|
|
629
|
-
expect(result.controlPoints).toEqual(DEFAULT_CONTROL_POINTS);
|
|
675
|
+
expect((_result$intensity3 = result.intensity) === null || _result$intensity3 === void 0 ? void 0 : _result$intensity3.controlPoints).toEqual(DEFAULT_CONTROL_POINTS);
|
|
630
676
|
});
|
|
631
677
|
it("replaces '1' color strings with default color #ffffff", function () {
|
|
678
|
+
var _result$intensity4;
|
|
632
679
|
var result = deserializeViewerChannelSetting(0, {
|
|
633
|
-
|
|
680
|
+
cpt: "0:0:1:50:1:1"
|
|
634
681
|
});
|
|
635
|
-
expect(result.controlPoints).toEqual([{
|
|
682
|
+
expect((_result$intensity4 = result.intensity) === null || _result$intensity4 === void 0 ? void 0 : _result$intensity4.controlPoints).toEqual([{
|
|
636
683
|
x: 0,
|
|
637
684
|
opacity: 0,
|
|
638
685
|
color: [255, 255, 255]
|
|
@@ -658,7 +705,9 @@ describe("parseViewerUrlParams", function () {
|
|
|
658
705
|
colorizeEnabled: false,
|
|
659
706
|
colorizeAlpha: 0.9,
|
|
660
707
|
isovalue: 129,
|
|
661
|
-
|
|
708
|
+
intensity: {
|
|
709
|
+
lut: ["p50", "p99"]
|
|
710
|
+
}
|
|
662
711
|
}], ["c1=ven:0,col:ff0000,clz:1,cza:0.5,isa:0.75,lut:0:255,sen:0,isv:0", "c1=ven%3A0%2Ccol%3Aff0000%2Cclz%3A1%2Ccza%3A0.5%2Cisa%3A0.75%2Clut%3A0%3A255%2Csen%3A0%2Cisv%3A0", {
|
|
663
712
|
color: "ff0000",
|
|
664
713
|
name: undefined,
|
|
@@ -669,7 +718,9 @@ describe("parseViewerUrlParams", function () {
|
|
|
669
718
|
surfaceEnabled: false,
|
|
670
719
|
enabled: false,
|
|
671
720
|
isovalue: 0,
|
|
672
|
-
|
|
721
|
+
intensity: {
|
|
722
|
+
lut: ["0", "255"]
|
|
723
|
+
}
|
|
673
724
|
}], ["c5=ven:0,col:00ff00,clz:0,cza:0,isa:1,lut:autoij:,sen:1,isv:100", "c5=ven%3A0%2Ccol%3A00ff00%2Cclz%3A0%2Ccza%3A0%2Cisa%3A1%2Clut%3Aautoij%3A%2Csen%3A1%2Cisv%3A100", {
|
|
674
725
|
color: "00ff00",
|
|
675
726
|
name: undefined,
|
|
@@ -680,111 +731,109 @@ describe("parseViewerUrlParams", function () {
|
|
|
680
731
|
surfaceEnabled: true,
|
|
681
732
|
enabled: false,
|
|
682
733
|
isovalue: 100,
|
|
683
|
-
|
|
734
|
+
intensity: {
|
|
735
|
+
lut: ["autoij", ""]
|
|
736
|
+
}
|
|
684
737
|
}]];
|
|
685
738
|
it("parses unencoded per-channel setting", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
686
|
-
var _i7, _channelParamToSettin, _args$viewerChannelSe, _channelParamToSettin2, queryString, expected,
|
|
739
|
+
var _i7, _channelParamToSettin, _args$viewerChannelSe, _channelParamToSettin2, queryString, expected, _yield$parseViewerUrl, args, channelSetting;
|
|
687
740
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
688
741
|
while (1) switch (_context.prev = _context.next) {
|
|
689
742
|
case 0:
|
|
690
743
|
_i7 = 0, _channelParamToSettin = channelParamToSetting;
|
|
691
744
|
case 1:
|
|
692
745
|
if (!(_i7 < _channelParamToSettin.length)) {
|
|
693
|
-
_context.next =
|
|
746
|
+
_context.next = 12;
|
|
694
747
|
break;
|
|
695
748
|
}
|
|
696
749
|
_channelParamToSettin2 = _slicedToArray(_channelParamToSettin[_i7], 3), queryString = _channelParamToSettin2[0], expected = _channelParamToSettin2[2];
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
case 6:
|
|
750
|
+
_context.next = 5;
|
|
751
|
+
return parseViewerUrlParams(queryString);
|
|
752
|
+
case 5:
|
|
701
753
|
_yield$parseViewerUrl = _context.sent;
|
|
702
754
|
args = _yield$parseViewerUrl.args;
|
|
703
755
|
channelSetting = (_args$viewerChannelSe = args.viewerChannelSettings) === null || _args$viewerChannelSe === void 0 ? void 0 : _args$viewerChannelSe.groups[0].channels[0];
|
|
704
756
|
expect(channelSetting).toEqual(expected);
|
|
705
|
-
case
|
|
757
|
+
case 9:
|
|
706
758
|
_i7++;
|
|
707
759
|
_context.next = 1;
|
|
708
760
|
break;
|
|
709
|
-
case
|
|
761
|
+
case 12:
|
|
710
762
|
case "end":
|
|
711
763
|
return _context.stop();
|
|
712
764
|
}
|
|
713
765
|
}, _callee);
|
|
714
766
|
})));
|
|
715
767
|
it("parses encoded per-channel settings", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
716
|
-
var _i8, _channelParamToSettin3, _args$viewerChannelSe2, _channelParamToSettin4, queryString, expected,
|
|
768
|
+
var _i8, _channelParamToSettin3, _args$viewerChannelSe2, _channelParamToSettin4, queryString, expected, _yield$parseViewerUrl2, args, channelSetting;
|
|
717
769
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
718
770
|
while (1) switch (_context2.prev = _context2.next) {
|
|
719
771
|
case 0:
|
|
720
772
|
_i8 = 0, _channelParamToSettin3 = channelParamToSetting;
|
|
721
773
|
case 1:
|
|
722
774
|
if (!(_i8 < _channelParamToSettin3.length)) {
|
|
723
|
-
_context2.next =
|
|
775
|
+
_context2.next = 12;
|
|
724
776
|
break;
|
|
725
777
|
}
|
|
726
778
|
_channelParamToSettin4 = _slicedToArray(_channelParamToSettin3[_i8], 3), queryString = _channelParamToSettin4[1], expected = _channelParamToSettin4[2];
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
case 6:
|
|
779
|
+
_context2.next = 5;
|
|
780
|
+
return parseViewerUrlParams(queryString);
|
|
781
|
+
case 5:
|
|
731
782
|
_yield$parseViewerUrl2 = _context2.sent;
|
|
732
783
|
args = _yield$parseViewerUrl2.args;
|
|
733
784
|
channelSetting = (_args$viewerChannelSe2 = args.viewerChannelSettings) === null || _args$viewerChannelSe2 === void 0 ? void 0 : _args$viewerChannelSe2.groups[0].channels[0];
|
|
734
785
|
expect(channelSetting).toEqual(expected);
|
|
735
|
-
case
|
|
786
|
+
case 9:
|
|
736
787
|
_i8++;
|
|
737
788
|
_context2.next = 1;
|
|
738
789
|
break;
|
|
739
|
-
case
|
|
790
|
+
case 12:
|
|
740
791
|
case "end":
|
|
741
792
|
return _context2.stop();
|
|
742
793
|
}
|
|
743
794
|
}, _callee2);
|
|
744
795
|
})));
|
|
745
796
|
it("parses multiple per-channel settings", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
746
|
-
var i, _args$viewerChannelSe3, queryString,
|
|
797
|
+
var i, _args$viewerChannelSe3, queryString, _yield$parseViewerUrl3, args, channelSettings;
|
|
747
798
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
748
799
|
while (1) switch (_context3.prev = _context3.next) {
|
|
749
800
|
case 0:
|
|
750
801
|
i = 0;
|
|
751
802
|
case 1:
|
|
752
803
|
if (!(i < 2)) {
|
|
753
|
-
_context3.next =
|
|
804
|
+
_context3.next = 14;
|
|
754
805
|
break;
|
|
755
806
|
}
|
|
756
807
|
queryString = channelParamToSetting[0][i] + "&" + channelParamToSetting[1][i] + "&" + channelParamToSetting[2][i];
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
case 6:
|
|
808
|
+
_context3.next = 5;
|
|
809
|
+
return parseViewerUrlParams(queryString);
|
|
810
|
+
case 5:
|
|
761
811
|
_yield$parseViewerUrl3 = _context3.sent;
|
|
762
812
|
args = _yield$parseViewerUrl3.args;
|
|
763
813
|
channelSettings = (_args$viewerChannelSe3 = args.viewerChannelSettings) === null || _args$viewerChannelSe3 === void 0 ? void 0 : _args$viewerChannelSe3.groups[0].channels; // Order is not guaranteed, so check if any of the expected settings are present
|
|
764
814
|
expect(channelSettings).toContainEqual(channelParamToSetting[0][2]);
|
|
765
815
|
expect(channelSettings).toContainEqual(channelParamToSetting[1][2]);
|
|
766
816
|
expect(channelSettings).toContainEqual(channelParamToSetting[2][2]);
|
|
767
|
-
case
|
|
817
|
+
case 11:
|
|
768
818
|
i++;
|
|
769
819
|
_context3.next = 1;
|
|
770
820
|
break;
|
|
771
|
-
case
|
|
821
|
+
case 14:
|
|
772
822
|
case "end":
|
|
773
823
|
return _context3.stop();
|
|
774
824
|
}
|
|
775
825
|
}, _callee3);
|
|
776
826
|
})));
|
|
777
827
|
it("overrides ch settings when per-channel settings are included", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
|
|
778
|
-
var _args$viewerChannelSe4;
|
|
779
|
-
var queryString,
|
|
828
|
+
var _args$viewerChannelSe4, _channelSetting$inten;
|
|
829
|
+
var queryString, _yield$parseViewerUrl4, args, groups, channelSetting;
|
|
780
830
|
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
781
831
|
while (1) switch (_context4.prev = _context4.next) {
|
|
782
832
|
case 0:
|
|
783
833
|
queryString = "?ch=0&lut=1,2&c1=ven:1,lut:4:5";
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
case 4:
|
|
834
|
+
_context4.next = 3;
|
|
835
|
+
return parseViewerUrlParams(queryString);
|
|
836
|
+
case 3:
|
|
788
837
|
_yield$parseViewerUrl4 = _context4.sent;
|
|
789
838
|
args = _yield$parseViewerUrl4.args;
|
|
790
839
|
groups = (_args$viewerChannelSe4 = args.viewerChannelSettings) === null || _args$viewerChannelSe4 === void 0 ? void 0 : _args$viewerChannelSe4.groups[0];
|
|
@@ -792,24 +841,23 @@ describe("parseViewerUrlParams", function () {
|
|
|
792
841
|
channelSetting = groups.channels[0];
|
|
793
842
|
expect(channelSetting.match).toEqual(1);
|
|
794
843
|
expect(channelSetting.enabled).toEqual(true);
|
|
795
|
-
expect(channelSetting.lut).toEqual(["4", "5"]);
|
|
796
|
-
case
|
|
844
|
+
expect((_channelSetting$inten = channelSetting.intensity) === null || _channelSetting$inten === void 0 ? void 0 : _channelSetting$inten.lut).toEqual(["4", "5"]);
|
|
845
|
+
case 11:
|
|
797
846
|
case "end":
|
|
798
847
|
return _context4.stop();
|
|
799
848
|
}
|
|
800
849
|
}, _callee4);
|
|
801
850
|
})));
|
|
802
851
|
it("skips missing channel indices", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
|
|
803
|
-
var _args$viewerChannelSe5;
|
|
804
|
-
var queryString,
|
|
852
|
+
var _args$viewerChannelSe5, _channelSetting2$inte;
|
|
853
|
+
var queryString, _yield$parseViewerUrl5, args, groups, channelSetting1, channelSetting2;
|
|
805
854
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
806
855
|
while (1) switch (_context5.prev = _context5.next) {
|
|
807
856
|
case 0:
|
|
808
857
|
queryString = "?c0=ven:1&c15=ven:1,lut:4:5";
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
case 4:
|
|
858
|
+
_context5.next = 3;
|
|
859
|
+
return parseViewerUrlParams(queryString);
|
|
860
|
+
case 3:
|
|
813
861
|
_yield$parseViewerUrl5 = _context5.sent;
|
|
814
862
|
args = _yield$parseViewerUrl5.args;
|
|
815
863
|
groups = (_args$viewerChannelSe5 = args.viewerChannelSettings) === null || _args$viewerChannelSe5 === void 0 ? void 0 : _args$viewerChannelSe5.groups[0];
|
|
@@ -820,8 +868,8 @@ describe("parseViewerUrlParams", function () {
|
|
|
820
868
|
expect(channelSetting1.enabled).toEqual(true);
|
|
821
869
|
expect(channelSetting2.match).toEqual(15);
|
|
822
870
|
expect(channelSetting2.enabled).toEqual(true);
|
|
823
|
-
expect(channelSetting2.lut).toEqual(["4", "5"]);
|
|
824
|
-
case
|
|
871
|
+
expect((_channelSetting2$inte = channelSetting2.intensity) === null || _channelSetting2$inte === void 0 ? void 0 : _channelSetting2$inte.lut).toEqual(["4", "5"]);
|
|
872
|
+
case 14:
|
|
825
873
|
case "end":
|
|
826
874
|
return _context5.stop();
|
|
827
875
|
}
|
|
@@ -829,15 +877,14 @@ describe("parseViewerUrlParams", function () {
|
|
|
829
877
|
})));
|
|
830
878
|
it("creates empty default data for bad per-channel setting formats", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
|
|
831
879
|
var _args$viewerChannelSe6;
|
|
832
|
-
var queryString,
|
|
880
|
+
var queryString, _yield$parseViewerUrl6, args, channelSettings, i, channelSetting;
|
|
833
881
|
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
834
882
|
while (1) switch (_context6.prev = _context6.next) {
|
|
835
883
|
case 0:
|
|
836
884
|
queryString = "c1=bad&c0=ultrabad:bad&c2=,,,,,,";
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
case 4:
|
|
885
|
+
_context6.next = 3;
|
|
886
|
+
return parseViewerUrlParams(queryString);
|
|
887
|
+
case 3:
|
|
841
888
|
_yield$parseViewerUrl6 = _context6.sent;
|
|
842
889
|
args = _yield$parseViewerUrl6.args;
|
|
843
890
|
channelSettings = (_args$viewerChannelSe6 = args.viewerChannelSettings) === null || _args$viewerChannelSe6 === void 0 ? void 0 : _args$viewerChannelSe6.groups[0].channels;
|
|
@@ -848,7 +895,7 @@ describe("parseViewerUrlParams", function () {
|
|
|
848
895
|
match: channelSetting.match
|
|
849
896
|
}));
|
|
850
897
|
}
|
|
851
|
-
case
|
|
898
|
+
case 8:
|
|
852
899
|
case "end":
|
|
853
900
|
return _context6.stop();
|
|
854
901
|
}
|
|
@@ -856,15 +903,14 @@ describe("parseViewerUrlParams", function () {
|
|
|
856
903
|
})));
|
|
857
904
|
it("enables first three channels by default if no channel settings are provided", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
|
|
858
905
|
var _args$viewerChannelSe7;
|
|
859
|
-
var queryString,
|
|
906
|
+
var queryString, _yield$parseViewerUrl7, args, channelSettingsGroups, channelSettings;
|
|
860
907
|
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
861
908
|
while (1) switch (_context7.prev = _context7.next) {
|
|
862
909
|
case 0:
|
|
863
910
|
queryString = "url=https://example.com/image.tiff";
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
case 4:
|
|
911
|
+
_context7.next = 3;
|
|
912
|
+
return parseViewerUrlParams(queryString);
|
|
913
|
+
case 3:
|
|
868
914
|
_yield$parseViewerUrl7 = _context7.sent;
|
|
869
915
|
args = _yield$parseViewerUrl7.args;
|
|
870
916
|
// Should have one group
|
|
@@ -879,23 +925,22 @@ describe("parseViewerUrlParams", function () {
|
|
|
879
925
|
match: "(.+)",
|
|
880
926
|
enabled: false
|
|
881
927
|
});
|
|
882
|
-
case
|
|
928
|
+
case 10:
|
|
883
929
|
case "end":
|
|
884
930
|
return _context7.stop();
|
|
885
931
|
}
|
|
886
932
|
}, _callee7);
|
|
887
933
|
})));
|
|
888
934
|
it("parses default nucmorph settings", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
|
|
889
|
-
var _args$viewerChannelSe8;
|
|
890
|
-
var queryString,
|
|
935
|
+
var _args$viewerChannelSe8, _channelSettings$chan;
|
|
936
|
+
var queryString, _yield$parseViewerUrl8, args, viewerSettings, channelSettings;
|
|
891
937
|
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
892
938
|
while (1) switch (_context8.prev = _context8.next) {
|
|
893
939
|
case 0:
|
|
894
940
|
queryString = "url=https://example.com/image1.ome.zarr,https://example.com/image2.ome.zarr&c0=ven:0&c1=ven:1,lut:autoij:&c2=ven:1,clz:1&view=Z";
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
case 4:
|
|
941
|
+
_context8.next = 3;
|
|
942
|
+
return parseViewerUrlParams(queryString);
|
|
943
|
+
case 3:
|
|
899
944
|
_yield$parseViewerUrl8 = _context8.sent;
|
|
900
945
|
args = _yield$parseViewerUrl8.args;
|
|
901
946
|
viewerSettings = _yield$parseViewerUrl8.viewerSettings;
|
|
@@ -914,58 +959,149 @@ describe("parseViewerUrlParams", function () {
|
|
|
914
959
|
expect(channelSettings.channels[0].enabled).toEqual(false);
|
|
915
960
|
expect(channelSettings.channels[1].match).toEqual(1);
|
|
916
961
|
expect(channelSettings.channels[1].enabled).toEqual(true);
|
|
917
|
-
expect(channelSettings.channels[1].lut).toEqual(["autoij", ""]);
|
|
962
|
+
expect((_channelSettings$chan = channelSettings.channels[1].intensity) === null || _channelSettings$chan === void 0 ? void 0 : _channelSettings$chan.lut).toEqual(["autoij", ""]);
|
|
918
963
|
expect(channelSettings.channels[2].match).toEqual(2);
|
|
919
964
|
expect(channelSettings.channels[2].enabled).toEqual(true);
|
|
920
965
|
expect(channelSettings.channels[2].colorizeEnabled).toEqual(true);
|
|
921
|
-
case
|
|
966
|
+
case 20:
|
|
922
967
|
case "end":
|
|
923
968
|
return _context8.stop();
|
|
924
969
|
}
|
|
925
970
|
}, _callee8);
|
|
926
971
|
})));
|
|
927
|
-
it("
|
|
928
|
-
var
|
|
972
|
+
it("can handle arbitrary levels of URL encoding", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
|
|
973
|
+
var scenes, _allEncodingCombinations, encodings, _iterator3, _step3, encoding, _yield$parseViewerUrl9, args;
|
|
929
974
|
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
930
975
|
while (1) switch (_context9.prev = _context9.next) {
|
|
931
976
|
case 0:
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
977
|
+
// GOAL: no matter how, where, or how many times URL encoding is applied when concatenating
|
|
978
|
+
// these scene URLs into one param, they should decode back to the same URLs.
|
|
979
|
+
scenes = [["https://example.com/image1.ome.zarr"], ["https://example.com/image2.ome.zarr", "https://example.com/image3.ome.zarr?foo=1%2C2%2C3"]]; // Recursively generate combinations of encoded and unencoded URLs
|
|
980
|
+
_allEncodingCombinations = function allEncodingCombinations(urls, delims) {
|
|
981
|
+
// BASE CASE: generate an unencoded and encoded variant of a single URL
|
|
982
|
+
if (typeof urls === "string") {
|
|
983
|
+
return [urls, encodeURIComponent(urls)];
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
// Recursively generate combinations for all array elements
|
|
987
|
+
var nextDelims = delims.slice(1);
|
|
988
|
+
var encoded = urls.map(function (url) {
|
|
989
|
+
return _allEncodingCombinations(url, nextDelims);
|
|
990
|
+
});
|
|
991
|
+
|
|
992
|
+
// Concatenate those together in all possible combinations
|
|
993
|
+
var combined = encoded.reduce(function (accum, next) {
|
|
994
|
+
var result = [];
|
|
995
|
+
var _iterator = _createForOfIteratorHelper(accum),
|
|
996
|
+
_step;
|
|
997
|
+
try {
|
|
998
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
999
|
+
var a = _step.value;
|
|
1000
|
+
var _iterator2 = _createForOfIteratorHelper(next),
|
|
1001
|
+
_step2;
|
|
1002
|
+
try {
|
|
1003
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
1004
|
+
var n = _step2.value;
|
|
1005
|
+
result.push(a + delims[0] + n);
|
|
1006
|
+
}
|
|
1007
|
+
} catch (err) {
|
|
1008
|
+
_iterator2.e(err);
|
|
1009
|
+
} finally {
|
|
1010
|
+
_iterator2.f();
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
} catch (err) {
|
|
1014
|
+
_iterator.e(err);
|
|
1015
|
+
} finally {
|
|
1016
|
+
_iterator.f();
|
|
1017
|
+
}
|
|
1018
|
+
return result;
|
|
1019
|
+
});
|
|
1020
|
+
|
|
1021
|
+
// Generate unencoded, encoded, and double-encoded variants of all those concatenated strings
|
|
1022
|
+
return combined.flatMap(function (url) {
|
|
1023
|
+
var encodedOnce = encodeURIComponent(url);
|
|
1024
|
+
return [url, encodedOnce, encodeURIComponent(encodedOnce)];
|
|
1025
|
+
});
|
|
1026
|
+
};
|
|
1027
|
+
encodings = _allEncodingCombinations(scenes, ["+", ","]);
|
|
1028
|
+
_iterator3 = _createForOfIteratorHelper(encodings);
|
|
1029
|
+
_context9.prev = 4;
|
|
1030
|
+
_iterator3.s();
|
|
1031
|
+
case 6:
|
|
1032
|
+
if ((_step3 = _iterator3.n()).done) {
|
|
1033
|
+
_context9.next = 15;
|
|
1034
|
+
break;
|
|
1035
|
+
}
|
|
1036
|
+
encoding = _step3.value;
|
|
1037
|
+
_context9.next = 10;
|
|
1038
|
+
return parseViewerUrlParams("url=".concat(encoding));
|
|
1039
|
+
case 10:
|
|
937
1040
|
_yield$parseViewerUrl9 = _context9.sent;
|
|
938
|
-
|
|
939
|
-
expect(
|
|
940
|
-
|
|
941
|
-
|
|
1041
|
+
args = _yield$parseViewerUrl9.args;
|
|
1042
|
+
expect(args.imageUrl).toEqual({
|
|
1043
|
+
scenes: scenes
|
|
1044
|
+
});
|
|
1045
|
+
case 13:
|
|
1046
|
+
_context9.next = 6;
|
|
1047
|
+
break;
|
|
1048
|
+
case 15:
|
|
1049
|
+
_context9.next = 20;
|
|
1050
|
+
break;
|
|
1051
|
+
case 17:
|
|
1052
|
+
_context9.prev = 17;
|
|
1053
|
+
_context9.t0 = _context9["catch"](4);
|
|
1054
|
+
_iterator3.e(_context9.t0);
|
|
1055
|
+
case 20:
|
|
1056
|
+
_context9.prev = 20;
|
|
1057
|
+
_iterator3.f();
|
|
1058
|
+
return _context9.finish(20);
|
|
1059
|
+
case 23:
|
|
942
1060
|
case "end":
|
|
943
1061
|
return _context9.stop();
|
|
944
1062
|
}
|
|
945
|
-
}, _callee9);
|
|
1063
|
+
}, _callee9, null, [[4, 17, 20, 23]]);
|
|
946
1064
|
})));
|
|
947
|
-
it("
|
|
948
|
-
var queryString,
|
|
1065
|
+
it("parses viewer settings", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
|
|
1066
|
+
var queryString, _yield$parseViewerUrl10, viewerSettings;
|
|
949
1067
|
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
950
1068
|
while (1) switch (_context10.prev = _context10.next) {
|
|
951
1069
|
case 0:
|
|
952
|
-
queryString = "";
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
case 4:
|
|
1070
|
+
queryString = "mask=30&view=X";
|
|
1071
|
+
_context10.next = 3;
|
|
1072
|
+
return parseViewerUrlParams(queryString);
|
|
1073
|
+
case 3:
|
|
957
1074
|
_yield$parseViewerUrl10 = _context10.sent;
|
|
958
|
-
args = _yield$parseViewerUrl10.args;
|
|
959
1075
|
viewerSettings = _yield$parseViewerUrl10.viewerSettings;
|
|
1076
|
+
expect(viewerSettings.viewMode).toEqual(ViewMode.yz);
|
|
1077
|
+
expect(viewerSettings.maskAlpha).toEqual(30);
|
|
1078
|
+
case 7:
|
|
1079
|
+
case "end":
|
|
1080
|
+
return _context10.stop();
|
|
1081
|
+
}
|
|
1082
|
+
}, _callee10);
|
|
1083
|
+
})));
|
|
1084
|
+
it("returns an empty object when no params are passed in", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
|
|
1085
|
+
var queryString, _yield$parseViewerUrl11, args, viewerSettings;
|
|
1086
|
+
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
1087
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
1088
|
+
case 0:
|
|
1089
|
+
queryString = "";
|
|
1090
|
+
_context11.next = 3;
|
|
1091
|
+
return parseViewerUrlParams(queryString);
|
|
1092
|
+
case 3:
|
|
1093
|
+
_yield$parseViewerUrl11 = _context11.sent;
|
|
1094
|
+
args = _yield$parseViewerUrl11.args;
|
|
1095
|
+
viewerSettings = _yield$parseViewerUrl11.viewerSettings;
|
|
960
1096
|
expect(Object.keys(args).length === 0);
|
|
961
1097
|
expect(args).toEqual({});
|
|
962
1098
|
expect(Object.keys(viewerSettings).length === 0);
|
|
963
1099
|
expect(viewerSettings).toEqual({});
|
|
964
|
-
case
|
|
1100
|
+
case 10:
|
|
965
1101
|
case "end":
|
|
966
|
-
return
|
|
1102
|
+
return _context11.stop();
|
|
967
1103
|
}
|
|
968
|
-
},
|
|
1104
|
+
}, _callee11);
|
|
969
1105
|
})));
|
|
970
1106
|
});
|
|
971
1107
|
describe("serializeViewerUrlParams", function () {
|
|
@@ -992,7 +1128,8 @@ describe("serializeViewerUrlParams", function () {
|
|
|
992
1128
|
}],
|
|
993
1129
|
ramp: [-10, 260.1],
|
|
994
1130
|
plotMin: 0,
|
|
995
|
-
plotMax: 255
|
|
1131
|
+
plotMax: 255,
|
|
1132
|
+
keepIntensityRange: true
|
|
996
1133
|
}, {
|
|
997
1134
|
name: "channel1",
|
|
998
1135
|
displayName: "channel1",
|
|
@@ -1027,7 +1164,8 @@ describe("serializeViewerUrlParams", function () {
|
|
|
1027
1164
|
}],
|
|
1028
1165
|
ramp: [50, 140],
|
|
1029
1166
|
plotMin: 0,
|
|
1030
|
-
plotMax: 255
|
|
1167
|
+
plotMax: 255,
|
|
1168
|
+
keepIntensityRange: false
|
|
1031
1169
|
}];
|
|
1032
1170
|
var serialized = serializeViewerUrlParams({
|
|
1033
1171
|
channelSettings: channelStates
|
|
@@ -1043,9 +1181,10 @@ describe("serializeViewerUrlParams", function () {
|
|
|
1043
1181
|
isa: "0.75",
|
|
1044
1182
|
sen: "1",
|
|
1045
1183
|
isv: "128",
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
cpe: "0"
|
|
1184
|
+
ram: "-10:260.1",
|
|
1185
|
+
cpt: "0:0:808080:1:1:ff0000",
|
|
1186
|
+
cpe: "0",
|
|
1187
|
+
pin: "1"
|
|
1049
1188
|
};
|
|
1050
1189
|
var expectedChannel1 = {
|
|
1051
1190
|
ven: "0",
|
|
@@ -1055,9 +1194,10 @@ describe("serializeViewerUrlParams", function () {
|
|
|
1055
1194
|
isa: "0",
|
|
1056
1195
|
sen: "0",
|
|
1057
1196
|
isv: "57",
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
cpe: "1"
|
|
1197
|
+
ram: "50:140",
|
|
1198
|
+
cpt: "-10:0:000000:50:0:000000:100:0.3:0010ff:140:0.8:00ffff:260:1:00ffb4",
|
|
1199
|
+
cpe: "1",
|
|
1200
|
+
pin: "0"
|
|
1061
1201
|
};
|
|
1062
1202
|
expect(serialized["c0"]).toBeDefined();
|
|
1063
1203
|
expect(parseKeyValueList(serialized["c0"])).toEqual(expectedChannel0);
|