@ohif/app 3.8.0-beta.43 → 3.8.0-beta.45
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/dist/{738.bundle.f5179d74c16cb154c759.js → 738.bundle.5842b81d54371825d781.js} +148 -50
- package/dist/{app.bundle.ab96a3986fbf883f78ea.js → app.bundle.67bbe7910a730e982a28.js} +91 -37
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/package.json +17 -17
- /package/dist/{12.bundle.e97b1190673797a03d1a.js → 12.bundle.40a66318189b9d077880.js} +0 -0
- /package/dist/{170.bundle.5632b1b6fab9906388e2.js → 170.bundle.83a5019554b04230cda3.js} +0 -0
- /package/dist/{185.bundle.6311718cd457884f813a.js → 185.bundle.02ded91a2ed1cc51df6c.js} +0 -0
- /package/dist/{19.bundle.2fa92040006123dc9251.js → 19.bundle.5deb3e67de1c828ce247.js} +0 -0
- /package/dist/{199.bundle.8a5e36ae7e18dd2de580.js → 199.bundle.9a12097c2666e0132afa.js} +0 -0
- /package/dist/{281.bundle.5eddac45a51ce75f55c4.js → 281.bundle.bb71140105c7a024252b.js} +0 -0
- /package/dist/{359.bundle.bb663da51cbd0b8d1eff.js → 359.bundle.b0606bd7dac37d4e1538.js} +0 -0
- /package/dist/{410.bundle.bd04d9a698385a43f682.js → 410.bundle.bb49d9044c24ae92517e.js} +0 -0
- /package/dist/{456.bundle.00c2bac49511bea54b5c.js → 456.bundle.9deaf3d7218e5daf29ed.js} +0 -0
- /package/dist/{466.bundle.8cdd9c3bcc81fe4cb8c6.js → 466.bundle.93a5c6c1911033287d0a.js} +0 -0
- /package/dist/{483.bundle.7a8402a110f9f42fdc94.js → 483.bundle.964610a9035ad21ba49e.js} +0 -0
- /package/dist/{506.bundle.4bcf51e2946dab485d2b.js → 506.bundle.bcb1411e2b52140dd368.js} +0 -0
- /package/dist/{613.bundle.a54c8cdf616a799bcf4b.js → 613.bundle.e161ed4732180b99b014.js} +0 -0
- /package/dist/{687.bundle.e798aa93251dc9bc87ef.js → 687.bundle.35d354a804ed3351f2b0.js} +0 -0
- /package/dist/{814.bundle.198efdffbe64f60e38ef.js → 814.bundle.611a6ebcf4df4ab71d06.js} +0 -0
- /package/dist/{965.bundle.254019aafbf9c9d3d800.js → 965.bundle.06d53a7fc8a88702b7f2.js} +0 -0
|
@@ -393,10 +393,11 @@ class RetrieveMetadataLoader {
|
|
|
393
393
|
* @param {Object} client The dicomweb-client.
|
|
394
394
|
* @param {Array} studyInstanceUID Study instance ui to be retrieved
|
|
395
395
|
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
|
|
396
|
-
* @param {string} [
|
|
397
|
-
* @param {
|
|
396
|
+
* @param {string} [filters.seriesInstanceUID] - series instance uid to filter results against
|
|
397
|
+
* @param {Object} [sortCriteria] - Custom sort criteria used for series
|
|
398
|
+
* @param {Function} [sortFunction] - Custom sort function for series
|
|
398
399
|
*/
|
|
399
|
-
constructor(client, studyInstanceUID, filters = {}, sortCriteria, sortFunction) {
|
|
400
|
+
constructor(client, studyInstanceUID, filters = {}, sortCriteria = undefined, sortFunction = undefined) {
|
|
400
401
|
this.client = client;
|
|
401
402
|
this.studyInstanceUID = studyInstanceUID;
|
|
402
403
|
this.filters = filters;
|
|
@@ -417,13 +418,9 @@ class RetrieveMetadataLoader {
|
|
|
417
418
|
async runLoaders(loaders) {
|
|
418
419
|
let result;
|
|
419
420
|
for (const loader of loaders) {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
break; // closes iterator in case data is retrieved successfully
|
|
424
|
-
}
|
|
425
|
-
} catch (e) {
|
|
426
|
-
throw e;
|
|
421
|
+
result = await loader();
|
|
422
|
+
if (result && result.length) {
|
|
423
|
+
break; // closes iterator in case data is retrieved successfully
|
|
427
424
|
}
|
|
428
425
|
}
|
|
429
426
|
if (loaders.next().done && !result) {
|
|
@@ -506,6 +503,57 @@ class RetrieveMetadataLoaderSync extends RetrieveMetadataLoader {
|
|
|
506
503
|
|
|
507
504
|
|
|
508
505
|
|
|
506
|
+
// Series Date, Series Time, Series Description and Series Number to be included
|
|
507
|
+
// in the series metadata query result
|
|
508
|
+
const includeField = ['00080021', '00080031', '0008103E', '00200011'].join(',');
|
|
509
|
+
class DeferredPromise {
|
|
510
|
+
constructor() {
|
|
511
|
+
this.metadata = undefined;
|
|
512
|
+
this.processFunction = undefined;
|
|
513
|
+
this.internalPromise = undefined;
|
|
514
|
+
this.thenFunction = undefined;
|
|
515
|
+
this.rejectFunction = undefined;
|
|
516
|
+
}
|
|
517
|
+
setMetadata(metadata) {
|
|
518
|
+
this.metadata = metadata;
|
|
519
|
+
}
|
|
520
|
+
setProcessFunction(func) {
|
|
521
|
+
this.processFunction = func;
|
|
522
|
+
}
|
|
523
|
+
getPromise() {
|
|
524
|
+
return this.start();
|
|
525
|
+
}
|
|
526
|
+
start() {
|
|
527
|
+
if (this.internalPromise) {
|
|
528
|
+
return this.internalPromise;
|
|
529
|
+
}
|
|
530
|
+
this.internalPromise = this.processFunction();
|
|
531
|
+
// in case then and reject functions called before start
|
|
532
|
+
if (this.thenFunction) {
|
|
533
|
+
this.then(this.thenFunction);
|
|
534
|
+
this.thenFunction = undefined;
|
|
535
|
+
}
|
|
536
|
+
if (this.rejectFunction) {
|
|
537
|
+
this.reject(this.rejectFunction);
|
|
538
|
+
this.rejectFunction = undefined;
|
|
539
|
+
}
|
|
540
|
+
return this.internalPromise;
|
|
541
|
+
}
|
|
542
|
+
then(func) {
|
|
543
|
+
if (this.internalPromise) {
|
|
544
|
+
return this.internalPromise.then(func);
|
|
545
|
+
} else {
|
|
546
|
+
this.thenFunction = func;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
reject(func) {
|
|
550
|
+
if (this.internalPromise) {
|
|
551
|
+
return this.internalPromise.reject(func);
|
|
552
|
+
} else {
|
|
553
|
+
this.rejectFunction = func;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
509
557
|
/**
|
|
510
558
|
* Creates an immutable series loader object which loads each series sequentially using the iterator interface.
|
|
511
559
|
*
|
|
@@ -520,12 +568,20 @@ function makeSeriesAsyncLoader(client, studyInstanceUID, seriesInstanceUIDList)
|
|
|
520
568
|
hasNext() {
|
|
521
569
|
return seriesInstanceUIDList.length > 0;
|
|
522
570
|
},
|
|
523
|
-
|
|
524
|
-
const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
571
|
+
next() {
|
|
572
|
+
const {
|
|
573
|
+
seriesInstanceUID,
|
|
574
|
+
metadata
|
|
575
|
+
} = seriesInstanceUIDList.shift();
|
|
576
|
+
const promise = new DeferredPromise();
|
|
577
|
+
promise.setMetadata(metadata);
|
|
578
|
+
promise.setProcessFunction(() => {
|
|
579
|
+
return client.retrieveSeriesMetadata({
|
|
580
|
+
studyInstanceUID,
|
|
581
|
+
seriesInstanceUID
|
|
582
|
+
});
|
|
528
583
|
});
|
|
584
|
+
return promise;
|
|
529
585
|
}
|
|
530
586
|
});
|
|
531
587
|
}
|
|
@@ -549,19 +605,22 @@ class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader {
|
|
|
549
605
|
} = {},
|
|
550
606
|
client
|
|
551
607
|
} = this;
|
|
608
|
+
|
|
609
|
+
// asking to include Series Date, Series Time, Series Description
|
|
610
|
+
// and Series Number in the series metadata returned to better sort series
|
|
611
|
+
// in preLoad function
|
|
612
|
+
let options = {
|
|
613
|
+
studyInstanceUID,
|
|
614
|
+
queryParams: {
|
|
615
|
+
includefield: includeField
|
|
616
|
+
}
|
|
617
|
+
};
|
|
552
618
|
if (seriesInstanceUID) {
|
|
553
|
-
|
|
554
|
-
studyInstanceUID,
|
|
555
|
-
queryParams: {
|
|
556
|
-
SeriesInstanceUID: seriesInstanceUID
|
|
557
|
-
}
|
|
558
|
-
};
|
|
619
|
+
options.queryParams.SeriesInstanceUID = seriesInstanceUID;
|
|
559
620
|
preLoaders.push(client.searchForSeries.bind(client, options));
|
|
560
621
|
}
|
|
561
622
|
// Fallback preloader
|
|
562
|
-
preLoaders.push(client.searchForSeries.bind(client,
|
|
563
|
-
studyInstanceUID
|
|
564
|
-
}));
|
|
623
|
+
preLoaders.push(client.searchForSeries.bind(client, options));
|
|
565
624
|
yield* preLoaders;
|
|
566
625
|
}
|
|
567
626
|
async preLoad() {
|
|
@@ -573,18 +632,24 @@ class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader {
|
|
|
573
632
|
naturalizeDataset
|
|
574
633
|
} = dcmjs_es["default"].data.DicomMetaDictionary;
|
|
575
634
|
const naturalized = result.map(naturalizeDataset);
|
|
576
|
-
return (0,sortStudy/* sortStudySeries */.IO)(naturalized, sortCriteria
|
|
635
|
+
return (0,sortStudy/* sortStudySeries */.IO)(naturalized, sortCriteria, sortFunction);
|
|
577
636
|
}
|
|
578
637
|
async load(preLoadData) {
|
|
579
638
|
const {
|
|
580
639
|
client,
|
|
581
640
|
studyInstanceUID
|
|
582
641
|
} = this;
|
|
583
|
-
const seriesInstanceUIDs = preLoadData.map(
|
|
642
|
+
const seriesInstanceUIDs = preLoadData.map(seriesMetadata => {
|
|
643
|
+
return {
|
|
644
|
+
seriesInstanceUID: seriesMetadata.SeriesInstanceUID,
|
|
645
|
+
metadata: seriesMetadata
|
|
646
|
+
};
|
|
647
|
+
});
|
|
584
648
|
const seriesAsyncLoader = makeSeriesAsyncLoader(client, studyInstanceUID, seriesInstanceUIDs);
|
|
585
649
|
const promises = [];
|
|
586
650
|
while (seriesAsyncLoader.hasNext()) {
|
|
587
|
-
|
|
651
|
+
const promise = seriesAsyncLoader.next();
|
|
652
|
+
promises.push(promise);
|
|
588
653
|
}
|
|
589
654
|
return {
|
|
590
655
|
preLoadData,
|
|
@@ -748,6 +813,7 @@ function deleteStudyMetadataPromise(StudyInstanceUID) {
|
|
|
748
813
|
* performing searches doesn't work. This version fixes the query issue
|
|
749
814
|
* by manually implementing a query option.
|
|
750
815
|
*/
|
|
816
|
+
|
|
751
817
|
class StaticWadoClient extends dicomweb_client_es.api.DICOMwebClient {
|
|
752
818
|
constructor(qidoConfig) {
|
|
753
819
|
super(qidoConfig);
|
|
@@ -1060,17 +1126,35 @@ const EXPLICIT_VR_LITTLE_ENDIAN = '1.2.840.10008.1.2.1';
|
|
|
1060
1126
|
const metadataProvider = src.classes.MetadataProvider;
|
|
1061
1127
|
|
|
1062
1128
|
/**
|
|
1129
|
+
* Creates a DICOM Web API based on the provided configuration.
|
|
1063
1130
|
*
|
|
1064
|
-
* @param {
|
|
1065
|
-
* @param {string}
|
|
1066
|
-
* @param {string}
|
|
1067
|
-
* @param {string}
|
|
1068
|
-
* @param {
|
|
1069
|
-
* @param {string}
|
|
1070
|
-
* @param {
|
|
1071
|
-
* @param {
|
|
1072
|
-
* @param {
|
|
1073
|
-
* @param {
|
|
1131
|
+
* @param {object} dicomWebConfig - Configuration for the DICOM Web API
|
|
1132
|
+
* @param {string} dicomWebConfig.name - Data source name
|
|
1133
|
+
* @param {string} dicomWebConfig.wadoUriRoot - Legacy? (potentially unused/replaced)
|
|
1134
|
+
* @param {string} dicomWebConfig.qidoRoot - Base URL to use for QIDO requests
|
|
1135
|
+
* @param {string} dicomWebConfig.wadoRoot - Base URL to use for WADO requests
|
|
1136
|
+
* @param {string} dicomWebConfig.wadoUri - Base URL to use for WADO URI requests
|
|
1137
|
+
* @param {boolean} dicomWebConfig.qidoSupportsIncludeField - Whether QIDO supports the "Include" option to request additional fields in response
|
|
1138
|
+
* @param {string} dicomWebConfig.imageRendering - wadors | ? (unsure of where/how this is used)
|
|
1139
|
+
* @param {string} dicomWebConfig.thumbnailRendering - wadors | ? (unsure of where/how this is used)
|
|
1140
|
+
* @param {boolean} dicomWebConfig.supportsReject - Whether the server supports reject calls (i.e. DCM4CHEE)
|
|
1141
|
+
* @param {boolean} dicomWebConfig.lazyLoadStudy - "enableStudyLazyLoad"; Request series meta async instead of blocking
|
|
1142
|
+
* @param {string|boolean} dicomWebConfig.singlepart - indicates if the retrieves can fetch singlepart. Options are bulkdata, video, image, or boolean true
|
|
1143
|
+
* @param {string} dicomWebConfig.requestTransferSyntaxUID - Transfer syntax to request from the server
|
|
1144
|
+
* @param {object} dicomWebConfig.acceptHeader - Accept header to use for requests
|
|
1145
|
+
* @param {boolean} dicomWebConfig.omitQuotationForMultipartRequest - Whether to omit quotation marks for multipart requests
|
|
1146
|
+
* @param {boolean} dicomWebConfig.supportsFuzzyMatching - Whether the server supports fuzzy matching
|
|
1147
|
+
* @param {boolean} dicomWebConfig.supportsWildcard - Whether the server supports wildcard matching
|
|
1148
|
+
* @param {boolean} dicomWebConfig.supportsNativeDICOMModel - Whether the server supports the native DICOM model
|
|
1149
|
+
* @param {boolean} dicomWebConfig.enableStudyLazyLoad - Whether to enable study lazy loading
|
|
1150
|
+
* @param {boolean} dicomWebConfig.enableRequestTag - Whether to enable request tag
|
|
1151
|
+
* @param {boolean} dicomWebConfig.enableStudyLazyLoad - Whether to enable study lazy loading
|
|
1152
|
+
* @param {boolean} dicomWebConfig.bulkDataURI - Whether to enable bulkDataURI
|
|
1153
|
+
* @param {function} dicomWebConfig.onConfiguration - Function that is called after the configuration is initialized
|
|
1154
|
+
* @param {boolean} dicomWebConfig.staticWado - Whether to use the static WADO client
|
|
1155
|
+
* @param {object} userAuthenticationService - User authentication service
|
|
1156
|
+
* @param {object} userAuthenticationService.getAuthorizationHeader - Function that returns the authorization header
|
|
1157
|
+
* @returns {object} - DICOM Web API object
|
|
1074
1158
|
*/
|
|
1075
1159
|
function createDicomWebApi(dicomWebConfig, servicesManager) {
|
|
1076
1160
|
const {
|
|
@@ -1200,13 +1284,14 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
|
|
|
1200
1284
|
filters,
|
|
1201
1285
|
sortCriteria,
|
|
1202
1286
|
sortFunction,
|
|
1203
|
-
madeInClient = false
|
|
1287
|
+
madeInClient = false,
|
|
1288
|
+
returnPromises = false
|
|
1204
1289
|
} = {}) => {
|
|
1205
1290
|
if (!StudyInstanceUID) {
|
|
1206
1291
|
throw new Error('Unable to query for SeriesMetadata without StudyInstanceUID');
|
|
1207
1292
|
}
|
|
1208
1293
|
if (dicomWebConfig.enableStudyLazyLoad) {
|
|
1209
|
-
return implementation._retrieveSeriesMetadataAsync(StudyInstanceUID, filters, sortCriteria, sortFunction, madeInClient);
|
|
1294
|
+
return implementation._retrieveSeriesMetadataAsync(StudyInstanceUID, filters, sortCriteria, sortFunction, madeInClient, returnPromises);
|
|
1210
1295
|
}
|
|
1211
1296
|
return implementation._retrieveSeriesMetadataSync(StudyInstanceUID, filters, sortCriteria, sortFunction, madeInClient);
|
|
1212
1297
|
}
|
|
@@ -1293,7 +1378,7 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
|
|
|
1293
1378
|
Object.keys(instancesPerSeries).forEach(seriesInstanceUID => src.DicomMetadataStore.addInstances(instancesPerSeries[seriesInstanceUID], madeInClient));
|
|
1294
1379
|
return seriesSummaryMetadata;
|
|
1295
1380
|
},
|
|
1296
|
-
_retrieveSeriesMetadataAsync: async (StudyInstanceUID, filters, sortCriteria, sortFunction, madeInClient = false) => {
|
|
1381
|
+
_retrieveSeriesMetadataAsync: async (StudyInstanceUID, filters, sortCriteria, sortFunction, madeInClient = false, returnPromises = false) => {
|
|
1297
1382
|
const enableStudyLazyLoad = true;
|
|
1298
1383
|
wadoDicomWebClient.headers = generateWadoHeader();
|
|
1299
1384
|
// Get Series
|
|
@@ -1366,7 +1451,7 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
|
|
|
1366
1451
|
const naturalizedInstances = instances.map(addRetrieveBulkData);
|
|
1367
1452
|
|
|
1368
1453
|
// Adding instanceMetadata to OHIF MetadataProvider
|
|
1369
|
-
naturalizedInstances.forEach(
|
|
1454
|
+
naturalizedInstances.forEach(instance => {
|
|
1370
1455
|
instance.wadoRoot = dicomWebConfig.wadoRoot;
|
|
1371
1456
|
instance.wadoUri = dicomWebConfig.wadoUri;
|
|
1372
1457
|
const imageId = implementation.getImageIdsForInstance({
|
|
@@ -1390,7 +1475,7 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
|
|
|
1390
1475
|
src.DicomMetadataStore.addInstances(naturalizedInstances, madeInClient);
|
|
1391
1476
|
}
|
|
1392
1477
|
function setSuccessFlag() {
|
|
1393
|
-
const study = src.DicomMetadataStore.getStudy(StudyInstanceUID
|
|
1478
|
+
const study = src.DicomMetadataStore.getStudy(StudyInstanceUID);
|
|
1394
1479
|
if (!study) {
|
|
1395
1480
|
return;
|
|
1396
1481
|
}
|
|
@@ -1403,11 +1488,21 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
|
|
|
1403
1488
|
aSeries.StudyInstanceUID = StudyInstanceUID;
|
|
1404
1489
|
});
|
|
1405
1490
|
src.DicomMetadataStore.addSeriesMetadata(seriesSummaryMetadata, madeInClient);
|
|
1406
|
-
const seriesDeliveredPromises = seriesPromises.map(promise =>
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1491
|
+
const seriesDeliveredPromises = seriesPromises.map(promise => {
|
|
1492
|
+
if (!returnPromises) {
|
|
1493
|
+
promise?.start();
|
|
1494
|
+
}
|
|
1495
|
+
return promise.then(instances => {
|
|
1496
|
+
storeInstances(instances);
|
|
1497
|
+
});
|
|
1498
|
+
});
|
|
1499
|
+
if (returnPromises) {
|
|
1500
|
+
Promise.all(seriesDeliveredPromises).then(() => setSuccessFlag());
|
|
1501
|
+
return seriesPromises;
|
|
1502
|
+
} else {
|
|
1503
|
+
await Promise.all(seriesDeliveredPromises);
|
|
1504
|
+
setSuccessFlag();
|
|
1505
|
+
}
|
|
1411
1506
|
return seriesSummaryMetadata;
|
|
1412
1507
|
},
|
|
1413
1508
|
deleteStudyMetadataPromise: deleteStudyMetadataPromise,
|
|
@@ -1438,7 +1533,7 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
|
|
|
1438
1533
|
},
|
|
1439
1534
|
getImageIdsForInstance({
|
|
1440
1535
|
instance,
|
|
1441
|
-
frame
|
|
1536
|
+
frame = undefined
|
|
1442
1537
|
}) {
|
|
1443
1538
|
const imageIds = getImageId({
|
|
1444
1539
|
instance,
|
|
@@ -2475,8 +2570,8 @@ function ViewerHeader({
|
|
|
2475
2570
|
hotkeyDefinitions,
|
|
2476
2571
|
hotkeyDefaults
|
|
2477
2572
|
} = hotkeysManager;
|
|
2478
|
-
const versionNumber = "3.8.0-beta.
|
|
2479
|
-
const commitHash = "
|
|
2573
|
+
const versionNumber = "3.8.0-beta.45";
|
|
2574
|
+
const commitHash = "0049f4c0303f0b6ea995972326fc8784259f5a47";
|
|
2480
2575
|
const menuOptions = [{
|
|
2481
2576
|
title: t('Header:About'),
|
|
2482
2577
|
icon: 'info',
|
|
@@ -6748,6 +6843,9 @@ const defaultProtocol = {
|
|
|
6748
6843
|
editableBy: {},
|
|
6749
6844
|
protocolMatchingRules: [],
|
|
6750
6845
|
toolGroupIds: ['default'],
|
|
6846
|
+
hpInitiationCriteria: {
|
|
6847
|
+
minSeriesLoaded: 1
|
|
6848
|
+
},
|
|
6751
6849
|
// -1 would be used to indicate active only, whereas other values are
|
|
6752
6850
|
// the number of required priors referenced - so 0 means active with
|
|
6753
6851
|
// 0 or more priors.
|
|
@@ -987,8 +987,8 @@ function WorkList({
|
|
|
987
987
|
};
|
|
988
988
|
});
|
|
989
989
|
const hasStudies = numOfStudies > 0;
|
|
990
|
-
const versionNumber = "3.8.0-beta.
|
|
991
|
-
const commitHash = "
|
|
990
|
+
const versionNumber = "3.8.0-beta.45";
|
|
991
|
+
const commitHash = "0049f4c0303f0b6ea995972326fc8784259f5a47";
|
|
992
992
|
const menuOptions = [{
|
|
993
993
|
title: t('Header:About'),
|
|
994
994
|
icon: 'info',
|
|
@@ -2039,7 +2039,8 @@ function isSeriesFilterUsed(instances, filters) {
|
|
|
2039
2039
|
|
|
2040
2040
|
|
|
2041
2041
|
const {
|
|
2042
|
-
getSplitParam
|
|
2042
|
+
getSplitParam,
|
|
2043
|
+
sortingCriteria
|
|
2043
2044
|
} = core_src.utils;
|
|
2044
2045
|
const {
|
|
2045
2046
|
TimingEnum: Mode_TimingEnum
|
|
@@ -2058,13 +2059,40 @@ function defaultRouteInit({
|
|
|
2058
2059
|
servicesManager,
|
|
2059
2060
|
studyInstanceUIDs,
|
|
2060
2061
|
dataSource,
|
|
2061
|
-
filters
|
|
2062
|
+
filters,
|
|
2063
|
+
appConfig
|
|
2062
2064
|
}, hangingProtocolId) {
|
|
2063
2065
|
const {
|
|
2064
2066
|
displaySetService,
|
|
2065
2067
|
hangingProtocolService,
|
|
2066
|
-
uiNotificationService
|
|
2068
|
+
uiNotificationService,
|
|
2069
|
+
customizationService
|
|
2067
2070
|
} = servicesManager.services;
|
|
2071
|
+
/**
|
|
2072
|
+
* Function to apply the hanging protocol when the minimum number of display sets were
|
|
2073
|
+
* received or all display sets retrieval were completed
|
|
2074
|
+
* @returns
|
|
2075
|
+
*/
|
|
2076
|
+
function applyHangingProtocol() {
|
|
2077
|
+
const displaySets = displaySetService.getActiveDisplaySets();
|
|
2078
|
+
if (!displaySets || !displaySets.length) {
|
|
2079
|
+
return;
|
|
2080
|
+
}
|
|
2081
|
+
|
|
2082
|
+
// Gets the studies list to use
|
|
2083
|
+
const studies = studiesList(studyInstanceUIDs, displaySets);
|
|
2084
|
+
|
|
2085
|
+
// study being displayed, and is thus the "active" study.
|
|
2086
|
+
const activeStudy = studies[0];
|
|
2087
|
+
|
|
2088
|
+
// run the hanging protocol matching on the displaySets with the predefined
|
|
2089
|
+
// hanging protocol in the mode configuration
|
|
2090
|
+
hangingProtocolService.run({
|
|
2091
|
+
studies,
|
|
2092
|
+
activeStudy,
|
|
2093
|
+
displaySets
|
|
2094
|
+
}, hangingProtocolId);
|
|
2095
|
+
}
|
|
2068
2096
|
const unsubscriptions = [];
|
|
2069
2097
|
const issuedWarningSeries = [];
|
|
2070
2098
|
const {
|
|
@@ -2095,7 +2123,9 @@ function defaultRouteInit({
|
|
|
2095
2123
|
core_src/* log */.cM.time(Mode_TimingEnum.STUDY_TO_FIRST_IMAGE);
|
|
2096
2124
|
const allRetrieves = studyInstanceUIDs.map(StudyInstanceUID => dataSource.retrieve.series.metadata({
|
|
2097
2125
|
StudyInstanceUID,
|
|
2098
|
-
filters
|
|
2126
|
+
filters,
|
|
2127
|
+
returnPromises: true,
|
|
2128
|
+
sortCriteria: customizationService.get('sortingCriteria') || sortingCriteria.seriesSortCriteria.seriesInfoSortingCriteria
|
|
2099
2129
|
}));
|
|
2100
2130
|
|
|
2101
2131
|
// log the error if this fails, otherwise it's so difficult to tell what went wrong...
|
|
@@ -2104,35 +2134,30 @@ function defaultRouteInit({
|
|
|
2104
2134
|
console.error(error);
|
|
2105
2135
|
});
|
|
2106
2136
|
});
|
|
2107
|
-
|
|
2108
|
-
// The hanging protocol matching service is fairly expensive to run multiple
|
|
2109
|
-
// times, and doesn't allow partial matches to be made (it will simply fail
|
|
2110
|
-
// to display anything if a required match fails), so we wait here until all metadata
|
|
2111
|
-
// is retrieved (which will synchronously trigger the display set creation)
|
|
2112
|
-
// until we run the hanging protocol matching service.
|
|
2113
|
-
|
|
2114
|
-
Promise.allSettled(allRetrieves).then(() => {
|
|
2137
|
+
Promise.allSettled(allRetrieves).then(promises => {
|
|
2115
2138
|
core_src/* log */.cM.timeEnd(Mode_TimingEnum.STUDY_TO_DISPLAY_SETS);
|
|
2116
2139
|
core_src/* log */.cM.time(Mode_TimingEnum.DISPLAY_SETS_TO_FIRST_IMAGE);
|
|
2117
2140
|
core_src/* log */.cM.time(Mode_TimingEnum.DISPLAY_SETS_TO_ALL_IMAGES);
|
|
2118
|
-
const
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2141
|
+
const allPromises = [];
|
|
2142
|
+
const remainingPromises = [];
|
|
2143
|
+
function startRemainingPromises(remainingPromises) {
|
|
2144
|
+
remainingPromises.forEach(p => p.forEach(p => p.start()));
|
|
2145
|
+
}
|
|
2146
|
+
promises.forEach(promise => {
|
|
2147
|
+
const retrieveSeriesMetadataPromise = promise.value;
|
|
2148
|
+
if (Array.isArray(retrieveSeriesMetadataPromise)) {
|
|
2149
|
+
const {
|
|
2150
|
+
requiredSeries,
|
|
2151
|
+
remaining
|
|
2152
|
+
} = hangingProtocolService.filterSeriesRequiredForRun(hangingProtocolId, retrieveSeriesMetadataPromise);
|
|
2153
|
+
const requiredSeriesPromises = requiredSeries.map(promise => promise.start());
|
|
2154
|
+
allPromises.push(Promise.allSettled(requiredSeriesPromises));
|
|
2155
|
+
remainingPromises.push(remaining);
|
|
2156
|
+
}
|
|
2157
|
+
});
|
|
2158
|
+
Promise.allSettled(allPromises).then(applyHangingProtocol);
|
|
2159
|
+
startRemainingPromises(remainingPromises);
|
|
2160
|
+
applyHangingProtocol();
|
|
2136
2161
|
});
|
|
2137
2162
|
return unsubscriptions;
|
|
2138
2163
|
}
|
|
@@ -2408,7 +2433,8 @@ function ModeRoute({
|
|
|
2408
2433
|
servicesManager,
|
|
2409
2434
|
studyInstanceUIDs,
|
|
2410
2435
|
dataSource,
|
|
2411
|
-
filters
|
|
2436
|
+
filters,
|
|
2437
|
+
appConfig
|
|
2412
2438
|
}, hangingProtocolIdToUse);
|
|
2413
2439
|
};
|
|
2414
2440
|
let unsubscriptions;
|
|
@@ -2458,7 +2484,8 @@ ModeRoute.propTypes = {
|
|
|
2458
2484
|
dataSourceName: (prop_types_default()).string,
|
|
2459
2485
|
extensionManager: (prop_types_default()).object,
|
|
2460
2486
|
servicesManager: (prop_types_default()).object,
|
|
2461
|
-
hotkeysManager: (prop_types_default()).object
|
|
2487
|
+
hotkeysManager: (prop_types_default()).object,
|
|
2488
|
+
commandsManager: (prop_types_default()).object
|
|
2462
2489
|
};
|
|
2463
2490
|
;// CONCATENATED MODULE: ./routes/Mode/index.js
|
|
2464
2491
|
|
|
@@ -3964,7 +3991,9 @@ function formatPN(name) {
|
|
|
3964
3991
|
return cleaned.trim();
|
|
3965
3992
|
}
|
|
3966
3993
|
;// CONCATENATED MODULE: ../../core/src/utils/generateAcceptHeader.ts
|
|
3967
|
-
const generateAcceptHeader = (configAcceptHeader = [], requestTransferSyntaxUID =
|
|
3994
|
+
const generateAcceptHeader = (configAcceptHeader = [], requestTransferSyntaxUID = '*',
|
|
3995
|
+
//default to accept all transfer syntax
|
|
3996
|
+
omitQuotationForMultipartRequest = false) => {
|
|
3968
3997
|
//if acceptedHeader is passed by config use it as it.
|
|
3969
3998
|
if (configAcceptHeader.length > 0) {
|
|
3970
3999
|
return configAcceptHeader;
|
|
@@ -3977,6 +4006,7 @@ const generateAcceptHeader = (configAcceptHeader = [], requestTransferSyntaxUID
|
|
|
3977
4006
|
} else {
|
|
3978
4007
|
acceptHeader.push('type=application/octet-stream');
|
|
3979
4008
|
}
|
|
4009
|
+
acceptHeader.push('transfer-syntax=*');
|
|
3980
4010
|
if (!omitQuotationForMultipartRequest) {
|
|
3981
4011
|
//need to add quotation for each mime type of each accept entry
|
|
3982
4012
|
acceptHeader = acceptHeader.map(mime => {
|
|
@@ -6427,7 +6457,7 @@ const detectionOptions = {
|
|
|
6427
6457
|
}
|
|
6428
6458
|
});
|
|
6429
6459
|
;// CONCATENATED MODULE: ../../i18n/package.json
|
|
6430
|
-
const package_namespaceObject = JSON.parse('{"i8":"3.8.0-beta.
|
|
6460
|
+
const package_namespaceObject = JSON.parse('{"i8":"3.8.0-beta.44"}');
|
|
6431
6461
|
;// CONCATENATED MODULE: ../../i18n/src/utils.js
|
|
6432
6462
|
const languagesMap = {
|
|
6433
6463
|
ar: 'Arabic',
|
|
@@ -53227,6 +53257,30 @@ class HangingProtocolService extends pubSubServiceInterface/* PubSubService */.h
|
|
|
53227
53257
|
};
|
|
53228
53258
|
}
|
|
53229
53259
|
|
|
53260
|
+
/**
|
|
53261
|
+
* Filters the series required for running a hanging protocol.
|
|
53262
|
+
*
|
|
53263
|
+
* This can be extended in the future with more complex selection rules e.g.
|
|
53264
|
+
* N series of a given type, and M of a different type, such as all CT series,
|
|
53265
|
+
* and all SR, and then everything else.
|
|
53266
|
+
*
|
|
53267
|
+
* @param protocolId - The ID of the hanging protocol.
|
|
53268
|
+
* @param seriesPromises - An array of promises representing the series.
|
|
53269
|
+
* @returns An object containing the required series and the remaining series.
|
|
53270
|
+
*/
|
|
53271
|
+
filterSeriesRequiredForRun(protocolId, seriesPromises) {
|
|
53272
|
+
if (Array.isArray(protocolId)) {
|
|
53273
|
+
protocolId = protocolId[0];
|
|
53274
|
+
}
|
|
53275
|
+
const minSeriesLoadedToRunHP = this.getProtocolById(protocolId)?.hpInitiationCriteria?.minSeriesLoaded || seriesPromises.length;
|
|
53276
|
+
const requiredSeries = seriesPromises.slice(0, minSeriesLoadedToRunHP);
|
|
53277
|
+
const remaining = seriesPromises.slice(minSeriesLoadedToRunHP);
|
|
53278
|
+
return {
|
|
53279
|
+
requiredSeries,
|
|
53280
|
+
remaining
|
|
53281
|
+
};
|
|
53282
|
+
}
|
|
53283
|
+
|
|
53230
53284
|
/** Gets the protocol with id 'default' */
|
|
53231
53285
|
getDefaultProtocol() {
|
|
53232
53286
|
return this.getProtocolById('default');
|
|
@@ -282854,7 +282908,7 @@ var selectOrdinal = function selectOrdinal() {
|
|
|
282854
282908
|
/******/ // This function allow to reference async chunks
|
|
282855
282909
|
/******/ __webpack_require__.u = (chunkId) => {
|
|
282856
282910
|
/******/ // return url for filenames based on template
|
|
282857
|
-
/******/ return "" + (chunkId === 18 ? "dicom-microscopy-viewer" : chunkId) + ".bundle." + {"12":"
|
|
282911
|
+
/******/ return "" + (chunkId === 18 ? "dicom-microscopy-viewer" : chunkId) + ".bundle." + {"12":"40a66318189b9d077880","18":"a7d5060eead13771e784","19":"5deb3e67de1c828ce247","23":"9d989522a6e4fdcb9c72","95":"644c927d99988ff60b36","125":"df666cb677e5a8982157","170":"83a5019554b04230cda3","181":"a2d7b26d73467d2ce8cd","185":"02ded91a2ed1cc51df6c","199":"9a12097c2666e0132afa","202":"c7c412d83b745f890834","223":"d4ac6ef2cfe47a9c4afc","250":"96a47756a15efbdf78af","281":"bb71140105c7a024252b","359":"b0606bd7dac37d4e1538","410":"bb49d9044c24ae92517e","417":"5c66801d23d0e98c00e6","451":"9b9abf9ca8967a46fa93","456":"9deaf3d7218e5daf29ed","466":"93a5c6c1911033287d0a","471":"a646b0616732bbc945b4","483":"964610a9035ad21ba49e","506":"bcb1411e2b52140dd368","530":"f904325ef4195d69ac0e","579":"8c45043bf461a6808b54","613":"e161ed4732180b99b014","661":"949c984fe2f9f753b65c","686":"62c827fe4f0d054c164e","687":"35d354a804ed3351f2b0","738":"5842b81d54371825d781","814":"611a6ebcf4df4ab71d06","822":"2092dbfefbc1b5834965","831":"127a3064e8844d6d2c82","886":"69f07c567a3dc69b060f","965":"06d53a7fc8a88702b7f2"}[chunkId] + ".js";
|
|
282858
282912
|
/******/ };
|
|
282859
282913
|
/******/ })();
|
|
282860
282914
|
/******/
|
package/dist/index.html
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><meta name="mobile-web-app-capable" content="yes"/><meta name="application-name" content="OHIF Viewer"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta name="apple-mobile-web-app-title" content="@ohif/app"/><meta name="msapplication-TileColor" content="#fff"/><meta name="msapplication-TileImage" content="/assets/mstile-144x144.png"/><meta name="msapplication-config" content="/assets/browserconfig.xml"/><script>console.time('scriptToView');
|
|
2
|
-
window.PUBLIC_URL = '/';</script><link rel="manifest" href="/manifest.json"/><link rel="shortcut icon" href="/assets/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"/><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"/><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"/><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"/><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"/><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-320x460.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x920.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x1096.png"/><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-750x1294.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1182x2208.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1242x2148.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-748x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-768x1004.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1496x2048.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1536x2008.png"/><link rel="icon" type="image/png" sizes="228x228" href="/assets/coast-228x228.png"/><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"/><script rel="preload" as="script" src="/app-config.js"></script><script rel="preload" as="script" type="module" src="/init-service-worker.js"></script><title>OHIF Viewer</title><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/><link href="https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap" rel="stylesheet" rel="preload" as="style"/><script defer="defer" src="/app.bundle.
|
|
2
|
+
window.PUBLIC_URL = '/';</script><link rel="manifest" href="/manifest.json"/><link rel="shortcut icon" href="/assets/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"/><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"/><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"/><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"/><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"/><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-320x460.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x920.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x1096.png"/><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-750x1294.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1182x2208.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1242x2148.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-748x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-768x1004.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1496x2048.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1536x2008.png"/><link rel="icon" type="image/png" sizes="228x228" href="/assets/coast-228x228.png"/><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"/><script rel="preload" as="script" src="/app-config.js"></script><script rel="preload" as="script" type="module" src="/init-service-worker.js"></script><title>OHIF Viewer</title><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/><link href="https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap" rel="stylesheet" rel="preload" as="style"/><script defer="defer" src="/app.bundle.67bbe7910a730e982a28.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
package/dist/sw.js
CHANGED
|
@@ -51,7 +51,7 @@ self.addEventListener('message', event => {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
|
-
workbox.precaching.precacheAndRoute([{'revision':null,'url':'/12.bundle.
|
|
54
|
+
workbox.precaching.precacheAndRoute([{'revision':null,'url':'/12.bundle.40a66318189b9d077880.js'},{'revision':null,'url':'/125.bundle.df666cb677e5a8982157.js'},{'revision':null,'url':'/170.bundle.83a5019554b04230cda3.js'},{'revision':null,'url':'/181.bundle.a2d7b26d73467d2ce8cd.js'},{'revision':'a04a2f233dc569826f5f6e21b65bc87b','url':'/181.css'},{'revision':null,'url':'/185.bundle.02ded91a2ed1cc51df6c.js'},{'revision':null,'url':'/19.bundle.5deb3e67de1c828ce247.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/19.css'},{'revision':null,'url':'/199.bundle.9a12097c2666e0132afa.js'},{'revision':null,'url':'/202.bundle.c7c412d83b745f890834.js'},{'revision':'d32549aa3716d55d525e59e31e2f6591','url':'/20fc4c659b85ccd2a9c0.wasm'},{'revision':null,'url':'/223.bundle.d4ac6ef2cfe47a9c4afc.js'},{'revision':null,'url':'/23.bundle.9d989522a6e4fdcb9c72.js'},{'revision':null,'url':'/250.bundle.96a47756a15efbdf78af.js'},{'revision':'0afb25509c7f072fbd7eda42c6895dbf','url':'/250.css'},{'revision':null,'url':'/281.bundle.bb71140105c7a024252b.js'},{'revision':null,'url':'/359.bundle.b0606bd7dac37d4e1538.js'},{'revision':'c4ea120c6da08aa75348edfa3e57ece9','url':'/36785fbd89b0e17f6099.wasm'},{'revision':null,'url':'/410.bundle.bb49d9044c24ae92517e.js'},{'revision':null,'url':'/417.bundle.5c66801d23d0e98c00e6.js'},{'revision':null,'url':'/451.bundle.9b9abf9ca8967a46fa93.js'},{'revision':null,'url':'/456.bundle.9deaf3d7218e5daf29ed.js'},{'revision':'185e5e0a10fa6ab2fc7b3c38e63d550b','url':'/456.css'},{'revision':null,'url':'/466.bundle.93a5c6c1911033287d0a.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/466.css'},{'revision':null,'url':'/471.bundle.a646b0616732bbc945b4.js'},{'revision':null,'url':'/483.bundle.964610a9035ad21ba49e.js'},{'revision':'c377e1f5fe4a207d270c3f7a8dd3e3ca','url':'/5004fdc02f329ce53b69.wasm'},{'revision':null,'url':'/506.bundle.bcb1411e2b52140dd368.js'},{'revision':null,'url':'/530.bundle.f904325ef4195d69ac0e.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/579.css'},{'revision':'62b4ae8445d191d5aab5503ce475724d','url':'/610.min.worker.js'},{'revision':'3c2206525c18cd87dd28082949a4e43e','url':'/610.min.worker.js.map'},{'revision':null,'url':'/613.bundle.e161ed4732180b99b014.js'},{'revision':'5800265b6831396572fb5d32c6bd8eef','url':'/62ab5d58a2bea7b5a1dc.wasm'},{'revision':'ce10eced3ce34e663d86569b27f5bffb','url':'/65916ef3def695744bda.wasm'},{'revision':null,'url':'/661.bundle.949c984fe2f9f753b65c.js'},{'revision':null,'url':'/686.bundle.62c827fe4f0d054c164e.js'},{'revision':null,'url':'/687.bundle.35d354a804ed3351f2b0.js'},{'revision':null,'url':'/738.bundle.5842b81d54371825d781.js'},{'revision':'cc4a3a4da4ac1b863a714f93c66c6ef2','url':'/75a0c2dfe07b824c7d21.wasm'},{'revision':null,'url':'/814.bundle.611a6ebcf4df4ab71d06.js'},{'revision':null,'url':'/822.bundle.2092dbfefbc1b5834965.js'},{'revision':null,'url':'/831.bundle.127a3064e8844d6d2c82.js'},{'revision':null,'url':'/886.bundle.69f07c567a3dc69b060f.js'},{'revision':'74c9647440e51f149ad12923d6ead952','url':'/945.min.worker.js'},{'revision':'cdf6f0457d4af2cef04fc41816241bc1','url':'/945.min.worker.js.map'},{'revision':null,'url':'/95.bundle.644c927d99988ff60b36.js'},{'revision':null,'url':'/965.bundle.06d53a7fc8a88702b7f2.js'},{'revision':'d1895aa7a4595dc279c382e5a31ef9f4','url':'/_headers'},{'revision':'e3bf0f3e9c34f51ad59836ae8e8eaf43','url':'/_redirects'},{'revision':'41bb4b36a914c2db5c383a627162b3da','url':'/app-config.js'},{'revision':null,'url':'/app.bundle.67bbe7910a730e982a28.js'},{'revision':'768881741792bf8d96b04e00da8ad850','url':'/app.bundle.css'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/android-chrome-144x144.png'},{'revision':'5cde390de8a619ebe55a669d2ac3effd','url':'/assets/android-chrome-192x192.png'},{'revision':'e7466a67e90471de05401e53b8fe20be','url':'/assets/android-chrome-256x256.png'},{'revision':'9bbe9b80156e930d19a4e1725aa9ddae','url':'/assets/android-chrome-36x36.png'},{'revision':'5698b2ac0c82fe06d84521fc5482df04','url':'/assets/android-chrome-384x384.png'},{'revision':'56bef3fceec344d9747f8abe9c0bba27','url':'/assets/android-chrome-48x48.png'},{'revision':'3e8b8a01290992e82c242557417b0596','url':'/assets/android-chrome-512x512.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/android-chrome-72x72.png'},{'revision':'4c3289bc690f8519012686888e08da71','url':'/assets/android-chrome-96x96.png'},{'revision':'cf464289183184df09292f581df0fb4f','url':'/assets/apple-touch-icon-1024x1024.png'},{'revision':'0857c5282c594e4900e8b31e3bade912','url':'/assets/apple-touch-icon-114x114.png'},{'revision':'4208f41a28130a67e9392a9dfcee6011','url':'/assets/apple-touch-icon-120x120.png'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/apple-touch-icon-144x144.png'},{'revision':'977d293982af7e9064ba20806b45cf35','url':'/assets/apple-touch-icon-152x152.png'},{'revision':'6de91b4d2a30600b410758405cb567b4','url':'/assets/apple-touch-icon-167x167.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-180x180.png'},{'revision':'647386c34e75f1213830ea9a38913525','url':'/assets/apple-touch-icon-57x57.png'},{'revision':'0c200fe83953738b330ea431083e7a86','url':'/assets/apple-touch-icon-60x60.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/apple-touch-icon-72x72.png'},{'revision':'c9989a807bb18633f6dcf254b5b56124','url':'/assets/apple-touch-icon-76x76.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-precomposed.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon.png'},{'revision':'05fa74ea9c1c0c3931ba96467999081d','url':'/assets/apple-touch-startup-image-1182x2208.png'},{'revision':'9e2cd03e1e6fd0520eea6846f4278018','url':'/assets/apple-touch-startup-image-1242x2148.png'},{'revision':'5591e3a1822cbc8439b99c1a40d53425','url':'/assets/apple-touch-startup-image-1496x2048.png'},{'revision':'337de578c5ca04bd7d2be19d24d83821','url':'/assets/apple-touch-startup-image-1536x2008.png'},{'revision':'cafb4ab4eafe6ef946bd229a1d88e7de','url':'/assets/apple-touch-startup-image-320x460.png'},{'revision':'d9bb9e558d729eeac5efb8be8d6111cc','url':'/assets/apple-touch-startup-image-640x1096.png'},{'revision':'038b5b02bac8b82444bf9a87602ac216','url':'/assets/apple-touch-startup-image-640x920.png'},{'revision':'2177076eb07b1d64d663d7c03268be00','url':'/assets/apple-touch-startup-image-748x1024.png'},{'revision':'4fc097443815fe92503584c4bd73c630','url':'/assets/apple-touch-startup-image-750x1294.png'},{'revision':'2e29914062dce5c5141ab47eea2fc5d9','url':'/assets/apple-touch-startup-image-768x1004.png'},{'revision':'f692ec286b3a332c17985f4ed38b1076','url':'/assets/browserconfig.xml'},{'revision':'f3d9a3b647853c45b0e132e4acd0cc4a','url':'/assets/coast-228x228.png'},{'revision':'ad6e1def5c66193d649a31474bbfe45d','url':'/assets/favicon-16x16.png'},{'revision':'84d1dcdb6cdfa55e2f46be0c80fa5698','url':'/assets/favicon-32x32.png'},{'revision':'95fb44c4998a46109e49d724c060db24','url':'/assets/favicon.ico'},{'revision':'5df2a5b0cee399ac0bc40af74ba3c2cb','url':'/assets/firefox_app_128x128.png'},{'revision':'11fd9098c4b07c8a07e1d2a1e309e046','url':'/assets/firefox_app_512x512.png'},{'revision':'27cddfc922dca3bfa27b4a00fc2f5e36','url':'/assets/firefox_app_60x60.png'},{'revision':'2017d95fae79dcf34b5a5b52586d4763','url':'/assets/manifest.webapp'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/mstile-144x144.png'},{'revision':'334895225e16a7777e45d81964725a97','url':'/assets/mstile-150x150.png'},{'revision':'e295cca4af6ed0365cf7b014d91b0e9d','url':'/assets/mstile-310x150.png'},{'revision':'cbefa8c42250e5f2443819fe2c69d91e','url':'/assets/mstile-310x310.png'},{'revision':'aa411a69df2b33a1362fa38d1257fa9d','url':'/assets/mstile-70x70.png'},{'revision':'5609af4f69e40e33471aee770ea1d802','url':'/assets/yandex-browser-50x50.png'},{'revision':'dd001f21b3970d5a7f3e245cc10d21df','url':'/assets/yandex-browser-manifest.json'},{'revision':'52b9a07fe0541fe8c313d9788550bf51','url':'/b6b803111e2d06a825bd.wasm'},{'revision':'7edb59d2be7c993050cb31ded36afa31','url':'/c22b37c3488e1d6c3aa4.wasm'},{'revision':'17975bfd8614e2483aa78a523f21c484','url':'/cornerstoneDICOMImageLoader.min.js'},{'revision':'234568117b86fd4526187ca7fa69ee91','url':'/cornerstoneDICOMImageLoader.min.js.map'},{'revision':null,'url':'/dicom-microscopy-viewer.bundle.a7d5060eead13771e784.js'},{'revision':'9d8c85b42d04bb117a3b583d654fbb08','url':'/dicomMicroscopyViewer.min.js'},{'revision':'450494c199cf8dd8e8c34d5e98bf5334','url':'/dicomMicroscopyViewer.min.js.LICENSE.txt'},{'revision':'4acdd19a35d759ec2669f1ba9490937d','url':'/es6-shim.min.js'},{'revision':'791565db341e8852807303918f5f9939','url':'/google.js'},{'revision':'b98d9aedd2740617d2cc95cd55a44bff','url':'/index.html'},{'revision':'df70845c6ce2109b2bc2c1bf14bd65a0','url':'/index.worker.64c896c4316fcd506666.worker.js'},{'revision':'143490b997e10b23c1debfa35afeb9e4','url':'/index.worker.64c896c4316fcd506666.worker.js.map'},{'revision':'71cec55513e051f0778ad89be760c11a','url':'/index.worker.min.worker.js'},{'revision':'fd1116add443fee52a935df926396e0f','url':'/index.worker.min.worker.js.map'},{'revision':'31c0367ca4160b2c6373e905739c5719','url':'/init-service-worker.js'},{'revision':'74fc9658b62903be2048c1f82a22b4d4','url':'/manifest.json'},{'revision':'3fa71aa0af3e34b4ebd9a71eee0f4bdd','url':'/ohif-logo-light.svg'},{'revision':'7e81da785c63e75650101db6c5d7560e','url':'/ohif-logo.svg'},{'revision':'eadf8bf1d85032a029e2c0df4b8938b0','url':'/oidc-client.min.js'},{'revision':'a1aef5311245f5864315443d12246c37','url':'/polyfill.min.js'},{'revision':'af9346d3e597071ba9ee8cd32f8cc0ea','url':'/serve.json'},{'revision':'b1e488d9955b62bd2858874df11d5223','url':'/silent-refresh.html'}]);
|
|
55
55
|
|
|
56
56
|
// TODO: Cache API
|
|
57
57
|
// https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/cache-api
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohif/app",
|
|
3
|
-
"version": "3.8.0-beta.
|
|
3
|
+
"version": "3.8.0-beta.45",
|
|
4
4
|
"productVersion": "3.4.0",
|
|
5
5
|
"description": "OHIF Viewer",
|
|
6
6
|
"author": "OHIF Contributors",
|
|
@@ -52,22 +52,22 @@
|
|
|
52
52
|
"@cornerstonejs/codec-openjpeg": "^1.2.2",
|
|
53
53
|
"@cornerstonejs/codec-openjph": "^2.4.5",
|
|
54
54
|
"@cornerstonejs/dicom-image-loader": "^1.43.7",
|
|
55
|
-
"@ohif/core": "3.8.0-beta.
|
|
56
|
-
"@ohif/extension-cornerstone": "3.8.0-beta.
|
|
57
|
-
"@ohif/extension-cornerstone-dicom-rt": "3.8.0-beta.
|
|
58
|
-
"@ohif/extension-cornerstone-dicom-seg": "3.8.0-beta.
|
|
59
|
-
"@ohif/extension-cornerstone-dicom-sr": "3.8.0-beta.
|
|
60
|
-
"@ohif/extension-default": "3.8.0-beta.
|
|
61
|
-
"@ohif/extension-dicom-microscopy": "3.8.0-beta.
|
|
62
|
-
"@ohif/extension-dicom-pdf": "3.8.0-beta.
|
|
63
|
-
"@ohif/extension-dicom-video": "3.8.0-beta.
|
|
64
|
-
"@ohif/extension-test": "3.8.0-beta.
|
|
65
|
-
"@ohif/i18n": "3.8.0-beta.
|
|
66
|
-
"@ohif/mode-basic-dev-mode": "3.8.0-beta.
|
|
67
|
-
"@ohif/mode-longitudinal": "3.8.0-beta.
|
|
68
|
-
"@ohif/mode-microscopy": "3.8.0-beta.
|
|
69
|
-
"@ohif/mode-test": "3.8.0-beta.
|
|
70
|
-
"@ohif/ui": "3.8.0-beta.
|
|
55
|
+
"@ohif/core": "3.8.0-beta.45",
|
|
56
|
+
"@ohif/extension-cornerstone": "3.8.0-beta.45",
|
|
57
|
+
"@ohif/extension-cornerstone-dicom-rt": "3.8.0-beta.45",
|
|
58
|
+
"@ohif/extension-cornerstone-dicom-seg": "3.8.0-beta.45",
|
|
59
|
+
"@ohif/extension-cornerstone-dicom-sr": "3.8.0-beta.45",
|
|
60
|
+
"@ohif/extension-default": "3.8.0-beta.45",
|
|
61
|
+
"@ohif/extension-dicom-microscopy": "3.8.0-beta.45",
|
|
62
|
+
"@ohif/extension-dicom-pdf": "3.8.0-beta.45",
|
|
63
|
+
"@ohif/extension-dicom-video": "3.8.0-beta.45",
|
|
64
|
+
"@ohif/extension-test": "3.8.0-beta.45",
|
|
65
|
+
"@ohif/i18n": "3.8.0-beta.45",
|
|
66
|
+
"@ohif/mode-basic-dev-mode": "3.8.0-beta.45",
|
|
67
|
+
"@ohif/mode-longitudinal": "3.8.0-beta.45",
|
|
68
|
+
"@ohif/mode-microscopy": "3.8.0-beta.45",
|
|
69
|
+
"@ohif/mode-test": "3.8.0-beta.45",
|
|
70
|
+
"@ohif/ui": "3.8.0-beta.45",
|
|
71
71
|
"@types/react": "^17.0.38",
|
|
72
72
|
"classnames": "^2.3.2",
|
|
73
73
|
"core-js": "^3.16.1",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|