Merge OHIFViewer-react into Packages-react\ohif-viewer (#342)
* Added public directory and debug run code in index.js * Different entry points for development and publish * Add port to start debug script * Merge in progress * Merge in progress * Merge in progress * Merged last components
This commit is contained in:
1 parent
80df33f4fd
commit
84c949f2e6
52 files changed
+1350
-230
No files matched your search
@@ -13,5 +13,6 @@ body {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
font-family: Roboto,OpenSans,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;
|
font-family: Roboto, OpenSans, HelveticaNeue-Light, Helvetica Neue Light,
|
||||||
|
Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { Component } from "react";
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
class ExampleViewportPlugin extends Component {
|
class ExampleViewportPlugin extends Component {
|
||||||
@@ -14,7 +14,8 @@ class ExampleViewportPlugin extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (<div className="ExampleViewportPlugin">
|
return (
|
||||||
|
<div className="ExampleViewportPlugin">
|
||||||
<p>StudyInstanceUid: {this.props.studyInstanceUid}</p>
|
<p>StudyInstanceUid: {this.props.studyInstanceUid}</p>
|
||||||
<p>SeriesInstanceUid: {this.props.seriesInstanceUid}</p>
|
<p>SeriesInstanceUid: {this.props.seriesInstanceUid}</p>
|
||||||
{JSON.stringify(this.props.displaySet)}
|
{JSON.stringify(this.props.displaySet)}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class ToolbarRow extends Component {
|
|||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
leftSidebarOpen: false,
|
leftSidebarOpen: false,
|
||||||
rightSidebarOpen: false,
|
rightSidebarOpen: false
|
||||||
};
|
};
|
||||||
|
|
||||||
onLeftSidebarValueChanged = (value) => {
|
onLeftSidebarValueChanged = (value) => {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import PropTypes from "prop-types";
|
|||||||
|
|
||||||
import Header from '../components/Header'
|
import Header from '../components/Header'
|
||||||
import ConnectedFlexboxLayout from './ConnectedFlexboxLayout.js';
|
import ConnectedFlexboxLayout from './ConnectedFlexboxLayout.js';
|
||||||
import ConnectedToolbarRow from "./ConnectedToolbarRow";
|
import ConnectedToolbarRow from './ConnectedToolbarRow';
|
||||||
import ConnectedStudyLoadingMonitor from './ConnectedStudyLoadingMonitor.js';
|
import ConnectedStudyLoadingMonitor from './ConnectedStudyLoadingMonitor.js';
|
||||||
import StudyPrefetcher from '../components/StudyPrefetcher.js';
|
import StudyPrefetcher from '../components/StudyPrefetcher.js';
|
||||||
import './Viewer.css';
|
import './Viewer.css';
|
||||||
@@ -46,9 +46,9 @@ OHIF.viewer.functionList = {
|
|||||||
};*/
|
};*/
|
||||||
|
|
||||||
class Viewer extends Component {
|
class Viewer extends Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
studies: PropTypes.array,
|
studies: PropTypes.array
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (<>
|
return (<>
|
||||||
|
|||||||
@@ -105,7 +105,7 @@
|
|||||||
/* Example config without OIDC */
|
/* Example config without OIDC */
|
||||||
// Try going to:
|
// Try going to:
|
||||||
// http://localhost:5000/viewer/1.3.6.1.4.1.14519.5.2.1.1706.4996.216859690032335293073513900362
|
// http://localhost:5000/viewer/1.3.6.1.4.1.14519.5.2.1.1706.4996.216859690032335293073513900362
|
||||||
/*props.servers = {
|
/* props.servers = {
|
||||||
"dicomWeb": [
|
"dicomWeb": [
|
||||||
{
|
{
|
||||||
"name": "DCM4CHEE",
|
"name": "DCM4CHEE",
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};*/
|
}; */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
"browser": "dist/index.umd.js",
|
"browser": "dist/index.umd.js",
|
||||||
"module": "dist/index.es.js",
|
"module": "dist/index.es.js",
|
||||||
"jsnext:main": "dist/index.es.js",
|
"jsnext:main": "dist/index.es.js",
|
||||||
|
"homepage": "http://localhost:3000",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8",
|
"node": ">=8",
|
||||||
"npm": ">=5"
|
"npm": ">=5"
|
||||||
@@ -22,7 +23,13 @@
|
|||||||
"prepare": "npm run build",
|
"prepare": "npm run build",
|
||||||
"predeploy": "cd example && npm install && npm run build",
|
"predeploy": "cd example && npm install && npm run build",
|
||||||
"deploy": "gh-pages -d example/build",
|
"deploy": "gh-pages -d example/build",
|
||||||
"generateStaticSite": "./generateStaticSite.sh"
|
"generateStaticSite": "./generateStaticSite.sh",
|
||||||
|
"copy:webworkers": "cp node_modules/cornerstone-wado-image-loader/dist/*.min.js* public",
|
||||||
|
"version": "node -p -e \"'export default \\'' + require('./package.json').version + '\\';'\" > src/version.js",
|
||||||
|
"sha": "echo \"export default '\"$(git rev-parse HEAD)\"';\" > src/sha.js",
|
||||||
|
"details": "npm run version && npm run sha",
|
||||||
|
"prep": "npm run details && npm run copy:webworkers",
|
||||||
|
"start:debug": "npm run prep && cross-env PORT=5000 react-scripts start"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^15.0.0 || ^16.0.0",
|
"react": "^15.0.0 || ^16.0.0",
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
/*! cornerstone-wado-image-loader - 2.2.2 - 2018-12-05 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstoneWADOImageLoader */
|
||||||
|
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("cornerstoneWADOImageLoader",[],t):"object"==typeof exports?exports.cornerstoneWADOImageLoader=t():e.cornerstoneWADOImageLoader=t()}(this,function(){return function(r){var a={};function n(e){if(a[e])return a[e].exports;var t=a[e]={i:e,l:!1,exports:{}};return r[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}return n.m=r,n.c=a,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(r,a,function(e){return t[e]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t,r){"use strict";t.a=function(e){for(var t,r=e[0],a=e[0],n=e.length,o=1;o<n;o++)t=e[o],r=Math.min(r,t),a=Math.max(a,t);return{min:r,max:a}}},function(e,t,r){"use strict";var m;function a(){if("undefined"==typeof CharLS)throw new Error("No JPEG-LS decoder loaded");if(!(m||(m=CharLS())&&m._jpegls_decode))throw new Error("JPEG-LS failed to initialize")}r.d(t,"b",function(){return a}),t.a=function(e,t){a();var r=function(e,t){var r=m._malloc(e.length);m.writeArrayToMemory(e,r);var a=m._malloc(4),n=m._malloc(4),o=m._malloc(4),i=m._malloc(4),l=m._malloc(4),s=m._malloc(4),u=m._malloc(4),c=m._malloc(4),f=m._malloc(4),d={result:m.ccall("jpegls_decode","number",["number","number","number","number","number","number","number","number","number","number","number"],[r,e.length,a,n,o,i,l,s,c,u,f]),width:m.getValue(o,"i32"),height:m.getValue(i,"i32"),bitsPerSample:m.getValue(l,"i32"),stride:m.getValue(s,"i32"),components:m.getValue(c,"i32"),allowedLossyError:m.getValue(u,"i32"),interleaveMode:m.getValue(f,"i32"),pixelData:void 0},p=m.getValue(a,"*");return d.bitsPerSample<=8?(d.pixelData=new Uint8Array(d.width*d.height*d.components),d.pixelData.set(new Uint8Array(m.HEAP8.buffer,p,d.pixelData.length))):t?(d.pixelData=new Int16Array(d.width*d.height*d.components),d.pixelData.set(new Int16Array(m.HEAP16.buffer,p,d.pixelData.length))):(d.pixelData=new Uint16Array(d.width*d.height*d.components),d.pixelData.set(new Uint16Array(m.HEAP16.buffer,p,d.pixelData.length))),m._free(r),m._free(p),m._free(a),m._free(n),m._free(o),m._free(i),m._free(l),m._free(s),m._free(c),m._free(f),d}(t,1===e.pixelRepresentation);if(0!==r.result&&6!==r.result)throw new Error("JPEG-LS decoder failed to decode frame (error code ".concat(r.result,")"));return e.columns=r.width,e.rows=r.height,e.pixelData=r.pixelData,e}},function(e,t,r){"use strict";var h;function n(e,t){var r=function(e,t,r){var a=h._malloc(e.length);h.writeArrayToMemory(e,a);var n=h._malloc(4),o=h._malloc(4),i=h._malloc(4),l=h._malloc(4),s=h._malloc(4),u=(new Date).getTime();if(0!==h.ccall("jp2_decode","number",["number","number","number","number","number","number","number"],[a,e.length,n,o,i,l,s]))return console.log("[opj_decode] decoding failed!"),h._free(a),h._free(h.getValue(n,"*")),h._free(i),h._free(l),h._free(o),void h._free(s);var c=h.getValue(n,"*"),f={length:h.getValue(o,"i32"),sx:h.getValue(i,"i32"),sy:h.getValue(l,"i32"),nbChannels:h.getValue(s,"i32"),perf_timetodecode:void 0,pixelData:void 0},d=f.sx*f.sy*f.nbChannels,p=new Int32Array(h.HEAP32.buffer,c,d);if(1===t)if(Uint8Array.from)f.pixelData=Uint8Array.from(p);else{f.pixelData=new Uint8Array(d);for(var m=0;m<d;m++)f.pixelData[m]=p[m]}else if(r)if(Int16Array.from)f.pixelData=Int16Array.from(p);else{f.pixelData=new Int16Array(d);for(var g=0;g<d;g++)f.pixelData[g]=p[g]}else if(Uint16Array.from)f.pixelData=Uint16Array.from(p);else{f.pixelData=new Uint16Array(d);for(var v=0;v<d;v++)f.pixelData[v]=p[v]}var x=(new Date).getTime();return f.perf_timetodecode=x-u,h._free(a),h._free(n),h._free(c),h._free(o),h._free(i),h._free(l),h._free(s),f}(t,e.bitsAllocated<=8?1:2,1===e.pixelRepresentation);return e.columns=r.sx,e.rows=r.sy,e.pixelData=r.pixelData,1<r.nbChannels&&(e.photometricInterpretation="RGB"),e}function o(e){if(!e.usePDFJS&&"undefined"==typeof OpenJPEG)throw new Error("OpenJPEG decoder not loaded");if(!(h||(h=OpenJPEG())&&h._jp2_decode))throw new Error("OpenJPEG failed to initialize")}r.d(t,"b",function(){return o}),t.a=function(e,t,r){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};return o(r),a.usePDFJS||r.usePDFJS?function(e,t){var r=new JpxImage;r.parse(t);var a=r.tiles.length;if(1!==a)throw new Error("JPEG2000 decoder returned a tileCount of ".concat(a,", when 1 is expected"));return e.columns=r.width,e.rows=r.heiLine truncated
|
||||||
|
//# sourceMappingURL=cornerstoneWADOImageLoader.min.js.map
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/./shared/getMinMax.js","webpack://[name]/./shared/decoders/decodeJPEGLS.js","webpack://[name]/./shared/decoders/decodeJPEG2000.js","webpack://[name]/./version.js","webpack://[name]/./shared/calculateMinMax.js","webpack://[name]/./shared/decoders/decodeLittleEndian.js","webpack://[name]/./shared/decoders/decodeBigEndian.js","webpack://[name]/./shared/decoders/decodeRLE.js","webpack://[name]/./shared/decoders/decodeJPEGBaseline.js","webpack://[name]/./shared/decoders/decodeJPEGLossless.js","webpack://[name]/./shared/decodeImageFrame.js","webpack://[name]/./imageLoader/colorSpaceConverters/convertRGBColorByPixel.js","webpack://[name]/./imageLoader/colorSpaceConverters/convertRGBColorByPlane.js","webpack://[name]/./imageLoader/colorSpaceConverters/convertYBRFullByPixel.js","webpack://[name]/./imageLoader/colorSpaceConverters/convertYBRFullByPlane.js","webpack://[name]/./imageLoader/colorSpaceConverters/convertPALETTECOLOR.js","webpack://[name]/./imageLoader/wadouri/metaData/getImagePixelModule.js","webpack://[name]/./imageLoader/wadouri/metaData/getLUTs.js","webpack://[name]/./imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js","webpack://[name]/./imageLoader/wadouri/metaData/getNumberValues.js","webpack://[name]/./imageLoader/wadors/metaData/getValue.js","webpack://[name]/./imageLoader/wadors/metaData/getNumberString.js","webpack://[name]/./imageLoader/wadors/metaData/getNumberValue.js","webpack://[name]/./imageLoader/wadors/metaData/getNumberValues.js","webpack://[name]/./imageLoader/wadors/metaDataManager.js","webpack://[name]/./imageLoader/wadors/metaData/metaDataProvider.js","webpack://[name]/./imageLoader/wadors/findIndexOfString.js","webpack://[name]/./imageLoader/internal/options.js","webpack://[name]/./imageLoader/internal/xhrRequest.js","webpack://[name]/./imageLoader/internal/index.js","webpack://[name]/./imageLoader/wadors/getPixelData.js","webpack://[name]/./imageLoader/getImageFrame.js","webpack://[name]/./imageLoader/webWorkerManager.js","webpack://[name]/./imageLoader/decodeJPEGBaseline8BitColor.js","webpack://[name]/./imageLoader/decodeImageFrame.js","webpack://[name]/./imageLoader/isColorImage.js","webpack://[name]/./imageLoader/convertColorSpace.js","webpack://[name]/./imageLoader/isJPEGBaseline8BitColor.js","webpack://[name]/./imageLoader/createImage.js","webpack://[name]/./imageLoader/wadors/loadImage.js","webpack://[name]/./imageLoader/wadors/index.js","webpack://[name]/./imageLoader/wadors/register.js","webpack://[name]/./imageLoader/registerLoaders.js","webpack://[name]/./externalModules.js","webpack://[name]/./imageLoader/wadouri/parseImageId.js","webpack://[name]/./imageLoader/wadouri/dataSetCacheManager.js","webpack://[name]/./imageLoader/wadouri/metaData/metaDataProvider.js","webpack://[name]/./imageLoader/wadouri/fileManager.js","webpack://[name]/./imageLoader/wadouri/getEncapsulatedImageFrame.js","webpack://[name]/./imageLoader/wadouri/unpackBinaryFrame.js","webpack://[name]/./imageLoader/wadouri/getUncompressedImageFrame.js","webpack://[name]/./imageLoader/wadouri/loadFileRequest.js","webpack://[name]/./imageLoader/wadouri/getPixelData.js","webpack://[name]/./imageLoader/wadouri/loadImage.js","webpack://[name]/./imageLoader/wadouri/register.js","webpack://[name]/./imageLoader/wadouri/index.js","webpack://[name]/./imageLoader/configure.js","webpack://[name]/./imageLoader/index.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","getMinMax","storedPixelData","storedPixel","min","max","numPixels","length","index","Math","charLS","initializeJPEGLS","CharLS","Error","_jpegls_decode","__webpack_exports__","decodeJPEGLS","imageFrame","pixelData","image","data","isSigned","dataPtr","_malloc","writeArrayToMemory","imagePtrPtr","imageSizePtr","widthPtr","heightPtr","bitsPerSamplePtr","stridePtr","allowedLossyErrorPtr","componentsPtr","interleaveModePtr","result","ccall","width","getValue","height","bitsPerSample","stride","components","allowedLossyError","interleaveMode","undefined","imagePtr","Uint8Array","set","HEAP8","buffer","Int16Array","HEAP16","Uint16Array","_free","jpegLSDecode","pixelRepresentation","concat","columns","rows","openJPEG","decodeOpenJpeg2000","bytesPerPixel","signed","imageSizeXPtr","imageSizeYPtr","imageSizeCompPtr","t0","Date","getTime","console","log","sx","sy","nbChannels","perf_timetodecode","src32","Int32Array","HEAP32","from","t1","decodeOpenJPEG","bitsAllocated","photometricInterpretation","initializeJPEG2000","decodeConfig","usePDFJS","OpenJPEG","_jp2_decode","decodeJPEG2000","options","argumeLine truncated
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
/*! CharLS.js - v2.0.1 - 2016-06-08 | (c) 2016 Chris Hafey | https://github.com/chafey/charls */
|
||||||
|
var CharLS=function(Module){Module=Module||{};var Module;if(!Module)Module=(typeof CharLS!=="undefined"?CharLS:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?function(x){dump(x)}:function(x){}}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=function(title){document.title=title}}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=function(){}}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:function(value){tempRet0=value},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(stackTop){STACKTOP=stackTop},getNativeTypeSize:function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}},getNativeFieldSize:function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr},getAlignSize:function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)},dynCall:function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}},functionPointers:[],addFunction:function(func){for(var i=0;i<Runtime.funLine truncated
|
||||||
|
/*! image-JPEG2000 - v0.3.1 - 2015-08-26 | https://github.com/OHIF/image-JPEG2000 */"use strict";function info(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.infos&&console.log("Info: "+a)}function warn(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.warnings&&console.log("Warning: "+a)}function error(a){if(arguments.length>1){var b=["Error:"];b.push.apply(b,arguments),console.log.apply(console,b),a=[].join.call(arguments," ")}else console.log("Error: "+a);throw console.log(backtrace()),UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown),new Error(a)}function backtrace(){try{throw new Error}catch(a){return a.stack?a.stack.split("\n").slice(2).join("\n"):""}}function assert(a,b){a||error(b)}function combineUrl(a,b){if(!b)return a;if(/^[a-z][a-z0-9+\-.]*:/i.test(b))return b;var c;if("/"===b.charAt(0))return c=a.indexOf("://"),"/"===b.charAt(1)?++c:c=a.indexOf("/",c+3),a.substring(0,c)+b;var d=a.length;c=a.lastIndexOf("#"),d=c>=0?c:d,c=a.lastIndexOf("?",d),d=c>=0?c:d;var e=a.lastIndexOf("/",d);return a.substring(0,e+1)+b}function isValidUrl(a,b){if(!a)return!1;var c=/^[a-z][a-z0-9+\-.]*(?=:)/i.exec(a);if(!c)return b;switch(c=c[0].toLowerCase()){case"http":case"https":case"ftp":case"mailto":case"tel":return!0;default:return!1}}function shadow(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!1}),c}function bytesToString(a){assert(null!==a&&"object"==typeof a&&void 0!==a.length,"Invalid argument for bytesToString");var b=a.length,c=8192;if(c>b)return String.fromCharCode.apply(null,a);for(var d=[],e=0;b>e;e+=c){var f=Math.min(e+c,b),g=a.subarray(e,f);d.push(String.fromCharCode.apply(null,g))}return d.join("")}function stringToBytes(a){assert("string"==typeof a,"Invalid argument for stringToBytes");for(var b=a.length,c=new Uint8Array(b),d=0;b>d;++d)c[d]=255&a.charCodeAt(d);return c}function string32(a){return String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)}function log2(a){for(var b=1,c=0;a>b;)b<<=1,c++;return c}function readInt8(a,b){return a[b]<<24>>24}function readUint16(a,b){return a[b]<<8|a[b+1]}function readUint32(a,b){return(a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3])>>>0}function isLittleEndian(){var a=new Uint8Array(2);a[0]=1;var b=new Uint16Array(a.buffer);return 1===b[0]}function hasCanvasTypedArrays(){var a=document.createElement("canvas");a.width=a.height=1;var b=a.getContext("2d"),c=b.createImageData(1,1);return"undefined"!=typeof c.data.buffer}function stringToPDFString(a){var b,c=a.length,d=[];if("þ"===a[0]&&"ÿ"===a[1])for(b=2;c>b;b+=2)d.push(String.fromCharCode(a.charCodeAt(b)<<8|a.charCodeAt(b+1)));else for(b=0;c>b;++b){var e=PDFStringTranslateTable[a.charCodeAt(b)];d.push(e?String.fromCharCode(e):a.charAt(b))}return d.join("")}function stringToUTF8String(a){return decodeURIComponent(escape(a))}function isEmptyObj(a){for(var b in a)return!1;return!0}function isBool(a){return"boolean"==typeof a}function isInt(a){return"number"==typeof a&&(0|a)===a}function isNum(a){return"number"==typeof a}function isString(a){return"string"==typeof a}function isNull(a){return null===a}function isName(a){return a instanceof Name}function isCmd(a,b){return a instanceof Cmd&&(void 0===b||a.cmd===b)}function isDict(a,b){if(!(a instanceof Dict))return!1;if(!b)return!0;var c=a.get("Type");return isName(c)&&c.name===b}function isArray(a){return a instanceof Array}function isStream(a){return"object"==typeof a&&null!==a&&void 0!==a.getBytes}function isArrayBuffer(a){return"object"==typeof a&&null!==a&&void 0!==a.byteLength}function isRef(a){return a instanceof Ref}function createPromiseCapability(){var a={};return a.promise=new Promise(function(b,c){a.resolve=b,a.reject=c}),a}function MessageHandler(a,b){this.name=a,this.comObj=b,this.callbackIndex=1,this.postMessageTransfers=!0;var c=this.callbacksCapabilities={},d=this.actionHandler={};d.console_log=[function(a){console.log.apply(console,a)}],d.console_error=[function(a){console.error.apply(console,a)}],d._unsupported_feature=[function(a){UnsupportedManager.notify(a)}],b.onmessage=function(a){var e=a.data;if(e.isReply){var f=e.callbackId;if(e.callbackId in c){var g=c[f];delete c[f],"error"in e?g.reject(e.error):g.resolve(e.data)}else error("Cannot resolve callback "+f)}else if(e.action in d){var h=d[e.action];e.callbackId?Promise.resolve().then(function(){return h[0].call(h[1],e.data)}).then(function(a){b.postMessage({isReply:!0,callbackId:e.callbackId,data:a})},function(a){b.postMessage({isReply:!0,callbackId:e.callbackId,error:a})}):h[0].call(h[1],e.data)}else error("Unknown action from worker: "+e.action)}}function loadJpegStream(a,b,c){var d=new Image;d.onload=function(){c.resolve(a,d)},d.onerror=function(){c.resolve(a,null),warn("Error during JPEG image loading")},d.src=b}var JpxImage=function(){function a(){this.failOnCorruptedImage=!1}function b(a,b){a.x0=Math.ceil(b.XOsiz/a.XRsiz),a.x1=Math.ceil(b.Xsiz/a.XRsiz),a.y0=Math.ceil(b.YOsiz/a.YRsiz),a.y1=Math.ceil(b.Ysiz/a.YRsiz),a.width=a.x1-a.x0,a.height=a.y1-a.y0}function c(a,bLine truncated
|
||||||
|
/*! OpenJPEG.js - v0.2.0 - 2016-06-07 | (c) 2016 Chris Hafey | https://github.com/chafey/openjpeg */var OpenJPEG=function(Module){Module=Module||{};var Module;if(!Module)Module=(typeof OpenJPEG!=="undefined"?OpenJPEG:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?function(x){dump(x)}:function(x){}}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=function(title){document.title=title}}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=function(){}}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:function(value){tempRet0=value},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(stackTop){STACKTOP=stackTop},getNativeTypeSize:function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}},getNativeFieldSize:function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr},getAlignSize:function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)},dynCall:function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return ModuleLine truncated
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
/*! cornerstone-wado-image-loader - 2.2.2 - 2018-12-05 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstoneWADOImageLoader */
|
||||||
|
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("cornerstoneWADOImageLoaderWebWorker",[],t):"object"==typeof exports?exports.cornerstoneWADOImageLoaderWebWorker=t():e.cornerstoneWADOImageLoaderWebWorker=t()}(this,function(){return function(r){var a={};function n(e){if(a[e])return a[e].exports;var t=a[e]={i:e,l:!1,exports:{}};return r[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}return n.m=r,n.c=a,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(r,a,function(e){return t[e]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t,r){"use strict";t.a=function(e){for(var t,r=e[0],a=e[0],n=e.length,i=1;i<n;i++)t=e[i],r=Math.min(r,t),a=Math.max(a,t);return{min:r,max:a}}},function(e,t,r){"use strict";var m;function a(){if("undefined"==typeof CharLS)throw new Error("No JPEG-LS decoder loaded");if(!(m||(m=CharLS())&&m._jpegls_decode))throw new Error("JPEG-LS failed to initialize")}r.d(t,"b",function(){return a}),t.a=function(e,t){a();var r=function(e,t){var r=m._malloc(e.length);m.writeArrayToMemory(e,r);var a=m._malloc(4),n=m._malloc(4),i=m._malloc(4),o=m._malloc(4),l=m._malloc(4),s=m._malloc(4),f=m._malloc(4),u=m._malloc(4),c=m._malloc(4),d={result:m.ccall("jpegls_decode","number",["number","number","number","number","number","number","number","number","number","number","number"],[r,e.length,a,n,i,o,l,s,u,f,c]),width:m.getValue(i,"i32"),height:m.getValue(o,"i32"),bitsPerSample:m.getValue(l,"i32"),stride:m.getValue(s,"i32"),components:m.getValue(u,"i32"),allowedLossyError:m.getValue(f,"i32"),interleaveMode:m.getValue(c,"i32"),pixelData:void 0},p=m.getValue(a,"*");return d.bitsPerSample<=8?(d.pixelData=new Uint8Array(d.width*d.height*d.components),d.pixelData.set(new Uint8Array(m.HEAP8.buffer,p,d.pixelData.length))):t?(d.pixelData=new Int16Array(d.width*d.height*d.components),d.pixelData.set(new Int16Array(m.HEAP16.buffer,p,d.pixelData.length))):(d.pixelData=new Uint16Array(d.width*d.height*d.components),d.pixelData.set(new Uint16Array(m.HEAP16.buffer,p,d.pixelData.length))),m._free(r),m._free(p),m._free(a),m._free(n),m._free(i),m._free(o),m._free(l),m._free(s),m._free(u),m._free(c),d}(t,1===e.pixelRepresentation);if(0!==r.result&&6!==r.result)throw new Error("JPEG-LS decoder failed to decode frame (error code ".concat(r.result,")"));return e.columns=r.width,e.rows=r.height,e.pixelData=r.pixelData,e}},function(e,t,r){"use strict";var w;function n(e,t){var r=function(e,t,r){var a=w._malloc(e.length);w.writeArrayToMemory(e,a);var n=w._malloc(4),i=w._malloc(4),o=w._malloc(4),l=w._malloc(4),s=w._malloc(4),f=(new Date).getTime();if(0!==w.ccall("jp2_decode","number",["number","number","number","number","number","number","number"],[a,e.length,n,i,o,l,s]))return console.log("[opj_decode] decoding failed!"),w._free(a),w._free(w.getValue(n,"*")),w._free(o),w._free(l),w._free(i),void w._free(s);var u=w.getValue(n,"*"),c={length:w.getValue(i,"i32"),sx:w.getValue(o,"i32"),sy:w.getValue(l,"i32"),nbChannels:w.getValue(s,"i32"),perf_timetodecode:void 0,pixelData:void 0},d=c.sx*c.sy*c.nbChannels,p=new Int32Array(w.HEAP32.buffer,u,d);if(1===t)if(Uint8Array.from)c.pixelData=Uint8Array.from(p);else{c.pixelData=new Uint8Array(d);for(var m=0;m<d;m++)c.pixelData[m]=p[m]}else if(r)if(Int16Array.from)c.pixelData=Int16Array.from(p);else{c.pixelData=new Int16Array(d);for(var g=0;g<d;g++)c.pixelData[g]=p[g]}else if(Uint16Array.from)c.pixelData=Uint16Array.from(p);else{c.pixelData=new Uint16Array(d);for(var b=0;b<d;b++)c.pixelData[b]=p[b]}var x=(new Date).getTime();return c.perf_timetodecode=x-f,w._free(a),w._free(n),w._free(u),w._free(i),w._free(o),w._free(l),w._free(s),c}(t,e.bitsAllocated<=8?1:2,1===e.pixelRepresentation);return e.columns=r.sx,e.rows=r.sy,e.pixelData=r.pixelData,1<r.nbChannels&&(e.photometricInterpretation="RGB"),e}function i(e){if(!e.usePDFJS&&"undefined"==typeof OpenJPEG)throw new Error("OpenJPEG decoder not loaded");if(!(w||(w=OpenJPEG())&&w._jp2_decode))throw new Error("OpenJPEG failed to initialize")}r.d(t,"b",function(){return i}),t.a=function(e,t,r){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};return i(r),a.usePDFJS||r.usePDFJS?function(e,t){var r=new JpxImage;r.parse(t);var a=r.tiles.length;if(1!==a)throw new Error("JPEG2000 decoder returned a tileCount of ".concat(a,", when 1 is expected"));return e.cLine truncated
|
||||||
|
//# sourceMappingURL=cornerstoneWADOImageLoaderWebWorker.min.js.map
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/./shared/getMinMax.js","webpack://[name]/./shared/decoders/decodeJPEGLS.js","webpack://[name]/./shared/decoders/decodeJPEG2000.js","webpack://[name]/./version.js","webpack://[name]/./shared/calculateMinMax.js","webpack://[name]/./shared/decoders/decodeLittleEndian.js","webpack://[name]/./shared/decoders/decodeBigEndian.js","webpack://[name]/./shared/decoders/decodeRLE.js","webpack://[name]/./shared/decoders/decodeJPEGBaseline.js","webpack://[name]/./shared/decoders/decodeJPEGLossless.js","webpack://[name]/./shared/decodeImageFrame.js","webpack://[name]/./webWorker/webWorker.js","webpack://[name]/./webWorker/decodeTask/decodeTask.js","webpack://[name]/./webWorker/index.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","getMinMax","storedPixelData","storedPixel","min","max","numPixels","length","index","Math","charLS","initializeJPEGLS","CharLS","Error","_jpegls_decode","__webpack_exports__","decodeJPEGLS","imageFrame","pixelData","image","data","isSigned","dataPtr","_malloc","writeArrayToMemory","imagePtrPtr","imageSizePtr","widthPtr","heightPtr","bitsPerSamplePtr","stridePtr","allowedLossyErrorPtr","componentsPtr","interleaveModePtr","result","ccall","width","getValue","height","bitsPerSample","stride","components","allowedLossyError","interleaveMode","undefined","imagePtr","Uint8Array","set","HEAP8","buffer","Int16Array","HEAP16","Uint16Array","_free","jpegLSDecode","pixelRepresentation","concat","columns","rows","openJPEG","decodeOpenJpeg2000","bytesPerPixel","signed","imageSizeXPtr","imageSizeYPtr","imageSizeCompPtr","t0","Date","getTime","console","log","sx","sy","nbChannels","perf_timetodecode","src32","Int32Array","HEAP32","from","t1","decodeOpenJPEG","bitsAllocated","photometricInterpretation","initializeJPEG2000","decodeConfig","usePDFJS","OpenJPEG","_jp2_decode","decodeJPEG2000","options","arguments","jpxImage","JpxImage","parse","tileCount","tiles","items","decodeJpx","calculateMinMax","_getMinMax_js__WEBPACK_IMPORTED_MODULE_0__","strict","minMax","mustAssign","isNumber","smallestPixelValue","largestPixelValue","warn","numValue","decodeLittleEndian","arrayBuffer","offset","byteOffset","slice","Float32Array","decodeBigEndian","val","decodeRLE","planarConfiguration","frameData","frameSize","outFrame","ArrayBuffer","samplesPerPixel","header","DataView","Int8Array","out","outIndex","numSegments","getInt32","inIndex","maxIndex","endOfSegment","j","decode8Planar","decode8","highByte","decode16","decodeJPEGBaseline","JpegImage","jpeg","colorTransform","getData","getData16","decodeJPEGLossless","lossless","Decoder","byteOutput","decompressedData","decode","decodeImageFrame","transferSyntax","start","shouldShift","shift","bitsStored","end","decodeTimeInMS","config","taskHandlers","initialized","registerTaskHandler","taskHandler","taskType","initialize","taskConfiguration","self","onmessage","msg","importScripts","sourcePath","handler","transferList","postMessage","status","workerIndex","webWorkerTaskPaths","keys","forEach","codecsLoaded","loadCodecs","decodeTask","codecsPath","initializeCodecsOnStartup","doneCallback","loadCodecsOnStartup","version","cornerstoneWADOImageLoaderWebWorker"],"mappings":";CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,IACA,mBAAAG,eAAAC,IACAD,OAAA,yCAAAH,GACA,iBAAAC,QACAA,QAAA,oCAAAD,IAEAD,EAAA,oCAAAC,IARA,CASCK,KAAA,WACD,mBCTA,IAAAC,EAAA,GAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAP,QAGA,IAAAC,EAAAI,EAAAE,GAAA,CACAC,EAAAD,EACAE,GAAA,EACAT,QAAA,IAUA,OANAU,EAAAH,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAQ,GAAA,EAGAR,EAAAD,QA0DA,OArDAM,EAAAM,EAAAF,EAGAJ,EAAAO,EAAAR,EAGAC,EAAAQ,EAAA,SAAAd,EAAAe,EAAAC,GACAV,EAAAW,EAAAjB,EAAAe,IACAG,OAAAC,eAAAnB,EAAAe,EAAA,CAA0CK,YAAA,EAAAC,IAAAL,KAK1CV,EAAAgB,EAAA,SAAAtB,GACA,oBAAAuB,eAAAC,aACAN,OAAAC,eAAAnB,EAAAuB,OAAAC,YAAA,CAAwDC,MAAA,WAExDP,OAAAC,eAAAnB,EAAA,cAAiDyB,OAAA,KAQjDnB,EAAAoB,EAAA,SAAAD,EAAAE,GAEA,GADA,EAAAA,IAAAF,EAAAnB,EAAAmB,IACA,EAAAE,EAAA,OAAAF,EACA,KAAAE,GAAA,iBAAAF,QAAAG,WAAA,OAAAH,EACA,IAAAI,EAAAX,OAAAY,OAAA,MAGA,GAFAxB,EAAAgB,EAAAO,GACAX,OAAAC,eAAAU,EAAA,WAAyCT,YAAA,EAAAK,UACzC,EAAAE,GAAA,iBAAAF,EAAA,QAAAM,KAAAN,EAAAnB,EAAAQ,EAAAe,EAAAE,EAAA,SAAAA,GAAgH,OAAAN,EAAAM,IAAqBC,KAAA,KAAAD,IACrI,OAAAF,GAIAvB,EAAA2B,EAAA,SAAAhC,GACA,IAAAe,EAAAf,KAAA2B,WACA,WAA2B,OAAA3B,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAK,EAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAiB,EAAAC,GAAsD,OAAAjB,OAAAkB,UAAAC,eAAA1B,KAAAuB,EAAAC,IAGtD7B,EAAAgC,EAAA,GAIAhC,IAAAiC,EAAA,kCCvDeC,IArBf,SAAoBC,GASlB,IALA,IAEIC,EAFAC,EAAMF,EAAgB,GACtBG,EAAMH,EAAgB,GAEpBI,EAAYJ,EAAgBK,OAEzBC,EAAQ,EAAGA,EAAQFLine truncated
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/*!
|
||||||
|
* https://github.com/paulmillr/es6-shim
|
||||||
|
* @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
|
||||||
|
* and contributors, MIT License
|
||||||
|
* es6-shim: v0.35.4
|
||||||
|
* see https://github.com/paulmillr/es6-shim/blob/0.35.3/LICENSE
|
||||||
|
* Details and documentation:
|
||||||
|
* https://github.com/paulmillr/es6-shim/
|
||||||
|
*/
|
||||||
|
(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{return e()}catch(t){return false}};var u=o(i);var f=function(){return!i(function(){return Object.defineProperty({},"x",{get:function(){}})})};var s=!!Object.defineProperty&&f();var c=function foo(){}.name==="foo";var l=Function.call.bind(Array.prototype.forEach);var p=Function.call.bind(Array.prototype.reduce);var v=Function.call.bind(Array.prototype.filter);var y=Function.call.bind(Array.prototype.some);var h=function(e,t,r,n){if(!n&&t in e){return}if(s){Object.defineProperty(e,t,{configurable:true,enumerable:false,writable:true,value:r})}else{e[t]=r}};var b=function(e,t,r){l(n(t),function(n){var o=t[n];h(e,n,o,!!r)})};var g=Function.call.bind(Object.prototype.toString);var d=typeof/abc/==="function"?function IsCallableSlow(e){return typeof e==="function"&&g(e)==="[object Function]"}:function IsCallableFast(e){return typeof e==="function"};var m={getter:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}Object.defineProperty(e,t,{configurable:true,enumerable:false,get:r})},proxy:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,{configurable:n.configurable,enumerable:n.enumerable,get:function getKey(){return e[t]},set:function setKey(r){e[t]=r}})},redefine:function(e,t,r){if(s){var n=Object.getOwnPropertyDescriptor(e,t);n.value=r;Object.defineProperty(e,t,n)}else{e[t]=r}},defineByDescriptor:function(e,t,r){if(s){Object.defineProperty(e,t,r)}else if("value"in r){e[t]=r.value}},preserveToString:function(e,t){if(t&&d(t.toString)){h(e,"toString",t.toString.bind(t),true)}}};var O=Object.create||function(e,t){var r=function Prototype(){};r.prototype=e;var o=new r;if(typeof t!=="undefined"){n(t).forEach(function(e){m.defineByDescriptor(o,e,t[e])})}return o};var w=function(e,t){if(!Object.setPrototypeOf){return false}return a(function(){var r=function Subclass(t){var r=new e(t);Object.setPrototypeOf(r,Subclass.prototype);return r};Object.setPrototypeOf(r,e);r.prototype=O(e.prototype,{constructor:{value:r}});return t(r)})};var j=function(){if(typeof self!=="undefined"){return self}if(typeof window!=="undefined"){return window}if(typeof global!=="undefined"){return global}throw new Error("unable to locate global object")};var S=j();var T=S.isFinite;var I=Function.call.bind(String.prototype.indexOf);var E=Function.apply.bind(Array.prototype.indexOf);var P=Function.call.bind(Array.prototype.concat);var C=Function.call.bind(String.prototype.slice);var M=Function.call.bind(Array.prototype.push);var x=Function.apply.bind(Array.prototype.push);var N=Function.call.bind(Array.prototype.shift);var A=Math.max;var R=Math.min;var _=Math.floor;var k=Math.abs;var L=Math.exp;var F=Math.log;var D=Math.sqrt;var z=Function.call.bind(Object.prototype.hasOwnProperty);var q;var W=function(){};var G=S.Map;var H=G&&G.prototype["delete"];var V=G&&G.prototype.get;var B=G&&G.prototype.has;var U=G&&G.prototype.set;var $=S.Symbol||{};var J=$.species||"@@species";var X=Number.isNaN||function isNaN(e){return e!==e};var K=Number.isFinite||function isFinite(e){return typeof e==="number"&&T(e)};var Z=d(Math.sign)?Math.sign:function sign(e){var t=Number(e);if(t===0){return t}if(X(t)){return t}return t<0?-1:1};var Y=function log1p(e){var t=Number(e);if(t<-1||X(t)){return NaN}if(t===0||t===Infinity){return t}if(t===-1){return-Infinity}return 1+t-1===0?t:t*(F(1+t)/(1+t-1))};var Q=function isArguments(e){return g(e)==="[object Arguments]"};var ee=function isArguments(e){return e!==null&&typeof e==="object"&&typeof e.length==="number"&&e.length>=0&&g(e)!=="[object Array]"&&g(e.callee)==="[object Function]"};var te=Q(arguments)?Q:ee;var re={primitive:function(e){return e===null||typeof e!=="function"&&typeof e!=="object"},string:function(e){return g(e)==="[object String]"},regex:function(e){return g(e)==="[object RegExp]"},symbol:function(e){return typeof S.Symbol==="function"&&typeof e==="symbol"}};var ne=function overrideNative(e,t,r){var n=e[t];h(e,t,r,true);m.preserveToString(e[t],n)};var oe=typeof $==="function"&&typeof $["for"]==="function"&&re.symbol($());var ie=re.symbol($.iterator)?$.iterator:"_es6-shim iterator_";if(S.Set&&typeof(new S.Set)["@@iterator"]==="function"){ie="@@iterator"}if(!S.Reflect){h(S,"Reflect",{},true)}var ae=S.Reflect;var ue=String;var fe=typeof document==="undefined"||!document?null:document.all;var se=fe==null?function isNullOrUndefined(e){return e==null}:function isNullOrUndefinedAndNotDocumentAll(e){return e==null&&e!=Line truncated
|
||||||
|
h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].every(function(e){return Math.round(e)===e});h(Math,"round",function round(e){var t=_(e);var r=t===-1?-0:t+1;return e-t<.5?t:r},!Ar||!kr);m.preserveToString(Math.round,Nr);var Lr=Math.imul;if(Math.imul(4294967295,5)!==-5){Math.imul=Cr.imul;m.preserveToString(Math.imul,Lr)}if(Math.imul.length!==2){ne(Math,"imul",function imul(e,t){return ce.Call(Lr,Math,arguments)})}var Fr=function(){var e=S.setTimeout;if(typeof e!=="function"&&typeof e!=="object"){return}ce.IsPromise=function(e){if(!ce.TypeIsObject(e)){return false}if(typeof e._promise==="undefined"){return false}return true};var r=function(e){if(!ce.IsConstructor(e)){throw new TypeError("Bad promise constructor")}var t=this;var r=function(e,r){if(t.resolve!==void 0||t.reject!==void 0){throw new TypeError("Bad Promise implementation!")}t.resolve=e;t.reject=r};t.resolve=void 0;t.reject=void 0;t.promise=new e(r);if(!(ce.IsCallable(t.resolve)&&ce.IsCallable(t.reject))){throw new TypeError("Bad promise constructor")}};var n;if(typeof window!=="undefined"&&ce.IsCallable(window.postMessage)){n=function(){var e=[];var t="zero-timeout-message";var r=function(r){M(e,r);window.postMessage(t,"*")};var n=function(r){if(r.source===window&&r.data===t){r.stopPropagation();if(e.length===0){return}var n=N(e);n()}};window.addEventListener("message",n,true);return r}}var o=function(){var e=S.Promise;var t=e&&e.resolve&&e.resolve();return t&&function(e){return t.then(e)}};var i=ce.IsCallable(S.setImmediate)?S.setImmediate:typeof process==="object"&&process.nextTick?process.nextTick:o()||(ce.IsCallable(n)?n():function(t){e(t,0)});var a=function(e){return e};var u=function(e){throw e};var f=0;var s=1;var c=2;var l=0;var p=1;var v=2;var y={};var h=function(e,t,r){i(function(){g(e,t,r)})};var g=function(e,t,r){var n,o;if(t===y){return e(r)}try{n=e(r);o=t.resolve}catch(i){n=i;o=t.reject}o(n)};var d=function(e,t){var r=e._promise;var n=r.reactionLength;if(n>0){h(r.fulfillReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o<n;o++,i+=3){h(r[i+l],r[i+v],t);e[i+l]=void 0;e[i+p]=void 0;e[i+v]=void 0}}}r.result=t;r.state=s;r.reactionLength=0};var m=function(e,t){var r=e._promise;var n=r.reactionLength;if(n>0){h(r.rejectReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o<n;o++,i+=3){h(r[i+p],r[i+v],t);e[i+l]=void 0;e[i+p]=void 0;e[i+v]=void 0}}}r.result=t;r.state=c;r.reactionLength=0};var O=function(e){var t=false;var r=function(r){var n;if(t){return}t=true;if(r===e){return m(e,new TypeError("Self resolution"))}if(!ce.TypeIsObject(r)){return d(e,r)}try{n=r.then}catch(o){return m(e,o)}if(!ce.IsCallable(n)){return d(e,r)}i(function(){j(e,r,n)})};var n=function(r){if(t){return}t=true;return m(e,r)};return{resolve:r,reject:n}};var w=function(e,r,n,o){if(e===I){t(e,r,n,o,y)}else{t(e,r,n,o)}};var j=function(e,t,r){var n=O(e);var o=n.resolve;var i=n.reject;try{w(r,t,o,i)}catch(a){i(a)}};var T,I;var E=function(){var e=function Promise(t){if(!(this instanceof e)){throw new TypeError('Constructor Promise requires "new"')}if(this&&this._promise){throw new TypeError("Bad construction")}if(!ce.IsCallable(t)){throw new TypeError("not a valid resolver")}var r=Ae(this,e,T,{_promise:{result:void 0,state:f,reactionLength:0,fulfillReactionHandler0:void 0,rejectReactionHandler0:void 0,reactionCapability0:void 0}});var n=O(r);var o=n.reject;try{t(n.resolve,o)}catch(i){o(i)}return r};return e}();T=E.prototype;var P=function(e,t,r,n){var o=false;return function(i){if(o){return}o=true;t[e]=i;if(--n.count===0){var a=r.resolve;a(t)}}};var C=function(e,t,r){var n=e.iterator;var o=[];var i={count:1};var a,u;var f=0;while(true){try{a=ce.IteratorStep(n);if(a===false){e.done=true;break}u=a.value}catch(s){e.done=true;throw s}o[f]=void 0;var c=t.resolve(u);var l=P(f,o,r,i);i.count+=1;w(c.then,c,l,r.reject);f+=1}if(--i.count===0){var p=r.resolve;p(o)}return r.promise};var x=function(e,t,r){var n=e.iterator;var o,i,a;while(true){try{o=ce.IteratorStep(n);if(o===false){e.done=true;break}i=o.value}catch(u){e.done=true;throw u}a=t.resolve(i);w(a.then,a,r.resolve,r.reject)}return r.promise};b(E,{all:function all(e){var t=this;if(!ce.TypeIsObject(t)){throw new TypeError("Promise is not object")}var n=new r(t);var o,i;try{o=ce.GetIterator(e);i={iterator:o,done:false};return C(i,t,n)}catch(a){var u=a;if(i&&!i.done){try{ce.IteratorClose(o,true)}cLine truncated
|
||||||
|
//# sourceMappingURL=es6-shim.map
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<symbol id="icon-hud" viewBox="0 0 20 22">
|
||||||
|
<title>HUD</title>
|
||||||
|
<g id="icon-hud-group" fill="none" stroke-width="1" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path id="icon-hud-dashes" d="m14.5,2.75 2,0 a2.5 2.5 0 0 1 2.5 2.5 l0,13.25 a2.5 2.5 0 0 1 -2.5 2.5 l-11.5,0 a2.5 2.5 0 0 1 -2.5 -2.5 l0,-1" stroke-dasharray="1,3" />
|
||||||
|
<path id="icon-hud-box" d="m0.5,2 0,14 a1.5 1.5 0 0 0 1.5 1.5 l12,0 a1.5 1.5 0 0 0 1.5 -1.5 l0,-14" />
|
||||||
|
<path id="icon-hud-top" d="m2,2 12,0" stroke-width="4" />
|
||||||
|
<path id="icon-hud-paralel" d="m4.4,7.5 7.2,0 m0,3 -7.2,0 m0,3 7.2,0" stroke-linecap="square" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-measurements-additional" viewBox="0 0 16 16">
|
||||||
|
<title>Additional Measurements</title>
|
||||||
|
<g id="icon-measurements-additional-group" stroke="none">
|
||||||
|
<path id="icon-measurements-additional-boxes" d="M11,2 l1.85,-1.85 a1 1 0 0 1 1,0 l2,2 a1 1 0 0 1 0,1 l-1.85,1.85Z M10,3 l-10,10 0,3 3,0 10,-10Z M16,16 l0,-2 -9,0 -2,2Z" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-measurements-lesions" viewBox="0 0 18 10">
|
||||||
|
<title>Lesions</title>
|
||||||
|
<g id="icon-measurements-lesions-group" stroke="none">
|
||||||
|
<path id="icon-measurements-lesions-boxes" d="M0,0 2,0 2,2 0,2Z M4,0 18,0 18,2 4,2Z M0,4 2,4 2,6 0,6Z M4,4 18,4 18,6 4,6Z M0,8 2,8 2,10 0,10Z M4,8 18,8 18,10 4,10Z" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-settings" viewBox="0 0 15 15">
|
||||||
|
<title>Settings</title>
|
||||||
|
<path d="M12.85 8.25C12.85 8.03 12.93 7.8 12.93 7.5 12.93 7.2 12.93 6.98 12.85 6.75L14.43 5.48C14.58 5.33 14.58 5.18 14.5 5.03L13 2.4C12.93 2.33 12.78 2.25 12.55 2.33L10.68 3.08C10.3 2.78 9.85 2.55 9.4 2.33L9.1 0.38C9.18 0.15 8.95 0 8.8 0L5.8 0C5.65 0 5.43 0.15 5.43 0.3L5.13 2.33C4.68 2.48 4.3 2.78 3.85 3.08L2.05 2.33C1.83 2.25 1.68 2.33 1.53 2.48L0.03 5.1C-0.05 5.18 0.03 5.4 0.18 5.55L1.75 6.75C1.75 6.98 1.68 7.2 1.68 7.5 1.68 7.8 1.68 8.03 1.75 8.25L0.18 9.53C0.03 9.68 0.03 9.82 0.1 9.98L1.6 12.6C1.68 12.68 1.83 12.75 2.05 12.68L3.93 11.93C4.3 12.23 4.75 12.45 5.2 12.68L5.5 14.63C5.5 14.78 5.65 14.93 5.88 14.93L8.88 14.93C9.03 14.93 9.25 14.78 9.25 14.63L9.55 12.68C10 12.45 10.45 12.23 10.83 11.93L12.7 12.68C12.85 12.75 13.08 12.68 13.15 12.53L14.65 9.9C14.73 9.75 14.73 9.53 14.58 9.45L12.85 8.25 12.85 8.25ZM7.3 10.13C5.88 10.13 4.68 8.93 4.68 7.5 4.68 6.08 5.88 4.88 7.3 4.88 8.73 4.88 9.93 6.08 9.93 7.5 9.93 8.93 8.73 10.13 7.3 10.13L7.3 10.13Z" id="Shape"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-status-complete" viewBox="0 0 27 27">
|
||||||
|
<title>Complete</title>
|
||||||
|
<g id="icon-status-complete-group" stroke="none">
|
||||||
|
<path id="icon-status-complete-circle" d="M13.5,0 a13.5 13.5 0 0 1 0 27 a13.5 13.5 0 0 1 0 -27 M23,8 l-2,-2 -10,10, -5,-5 -2,2 7,7Z" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-status-lock" viewBox="0 0 16 21">
|
||||||
|
<title>Locked</title>
|
||||||
|
<path d="M14 7L13 7 13 5C13 2.2 10.8 0 8 0 5.2 0 3 2.2 3 5L3 7 2 7C0.9 7 0 7.9 0 9L0 19C0 20.1 0.9 21 2 21L14 21C15.1 21 16 20.1 16 19L16 9C16 7.9 15.1 7 14 7L14 7ZM11.1 7L4.9 7 4.9 5C4.9 3.3 6.3 1.9 8 1.9 9.7 1.9 11.1 3.3 11.1 5L11.1 7 11.1 7Z"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-studies" viewBox="0 0 15 13">
|
||||||
|
<title>Studies</title>
|
||||||
|
<g id="icon-studies-group" stroke="none">
|
||||||
|
<path id="icon-studies-boxes" d="M0,0 7,0 7,6 0,6Z M8,0 15,0 15,6 8,6Z M0,7 7,7 7,13 0,13Z M8,7 15,7 15,13 8,13Z" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-levels" viewBox="0 0 18 18">
|
||||||
|
<title>Window / Level</title>
|
||||||
|
<g id="icon-tools-levels-group">
|
||||||
|
<path id="icon-tools-levels-path" d="M14.5,3.5 a1 1 0 0 1 -11,11 Z" stroke="none" opacity="0.8" />
|
||||||
|
<circle id="icon-tools-levels-circle" cx="9" cy="9" r="8" fill="none" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-link" viewBox="0 0 23 15">
|
||||||
|
<title>Link</title>
|
||||||
|
<g id="icon-tools-link-group" stroke="none">
|
||||||
|
<circle id="icon-tools-link-circle-l" opacity="0.8" cx="7.5" cy="7.5" r="7.5" />
|
||||||
|
<circle id="icon-tools-link-circle-r" opacity="0.6" cx="15.5" cy="7.5" r="7.5" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-measure-non-target" viewBox="0 0 24 24">
|
||||||
|
<title>Non-Target Measurement</title>
|
||||||
|
<g id="icon-tools-measure-non-target-group" fill="none" stroke-width="1" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<circle id="icon-tools-measure-non-target-circle" cx="6.5" cy="6.5" r="6" />
|
||||||
|
<path id="icon-tools-measure-non-target-plus" d="M6.5,3 l0,7 M3,6.5 l7,0"></path>
|
||||||
|
<path id="icon-tools-measure-non-target-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-measure-target" viewBox="0 0 26 26">
|
||||||
|
<title>Target Measurement</title>
|
||||||
|
<g id="icon-tools-measure-target-group" stroke-width="0">
|
||||||
|
<path id="icon-tools-measure-target-ruler" d="m9.5,26 2,-2 -1.5,-1.5 0.5,-0.5 1.5,1.5 1.5,-1.5 -2.5,-2.5 0.5,-0.5 2.5,2.5 1.5,-1.5 -1.5,-1.5 0.5,-0.5 1.5,1.5 1.5,-1.5 -2.5,-2.5 0.5,-0.5 2.5,2.5 1.5,-1.5 -1.5,-1.5 0.5,-0.5 1.5,1.5 1.5,-1.5 -2.5,-2.5 0.5,-0.5 2.5,2.5 1.5,-1.5 -1.5,-1.5 0.5,-0.5 1.5,1.5 2,-2 -4,-4 a2 2 0 0 0 -2.5 0 l-14 14 a2 2 0 0 0 0 2.5 l4,4 Z" />
|
||||||
|
<path id="icon-tools-measure-target-plus" d="m6,0 a6 6 0 0 1 0 12 a6 6 0 0 1 0 -12 m0.5,3 a0.5 0.5 0 0 0 -1 0 l0,2.5 -2.5,0 a0.5 0.5 0 0 0 0 1 l2.5,0 0,2.5 a0.5 0.5 0 0 0 1 0 l0,-2.5 2.5,0 a0.5 0.5 0 0 0 0 -1 l-2.5,0 z" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-measure-target-cr" viewBox="0 0 24 24">
|
||||||
|
<title>Target CR Measurement</title>
|
||||||
|
<g id="icon-tools-measure-target-cr-group" fill="none" stroke-width="1" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<text id="icon-tools-measure-target-cr-text" fill="#000000" x="0" y="8" style="font-size:10px; font-family:sans-serif">CR</text>
|
||||||
|
<path id="icon-tools-measure-target-cr-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-measure-target-un" viewBox="0 0 24 24">
|
||||||
|
<title>Target UN Measurement</title>
|
||||||
|
<g id="icon-tools-measure-target-un-group" fill="none" stroke-width="1" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<text id="icon-tools-measure-target-un-text" fill="#000000" x="0" y="8" style="font-size:10px; font-family:sans-serif">UN</text>
|
||||||
|
<path id="icon-tools-measure-target-un-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-measure-temp" viewBox="0 0 24 24">
|
||||||
|
<title>Temporary Measurement</title>
|
||||||
|
<g id="icon-tools-measure-temp-group" fill="none" stroke-width="1" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<circle id="icon-tools-measure-temp-circle" cx="6.5" cy="6.5" r="6" />
|
||||||
|
<path id="icon-tools-measure-temp-plus" d="M6.5,3 l0,7 M3,6.5 l7,0"></path>
|
||||||
|
<path id="icon-tools-measure-temp-dashes" d="m22.5,6 -16.5,16.5" stroke-width="3" stroke-dasharray="0.6666,5" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-more" viewBox="0 0 18 18">
|
||||||
|
<title>More</title>
|
||||||
|
<g id="icon-tools-more-group" stroke="none">
|
||||||
|
<path id="icon-tools-more-circle" d="M9,0 a9 9 0 0 1 0 18 a9 9 0 0 1 0 -18 M4.5,8 a1.5 1.5 0 0 0 0 3 a1.5 1.5 0 0 0 0 -3 M9,8 a1.5 1.5 0 0 0 0 3 a1.5 1.5 0 0 0 0 -3 M13.5,8 a1.5 1.5 0 0 0 0 3 a1.5 1.5 0 0 0 0 -3" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-pan" viewBox="0 0 18 18">
|
||||||
|
<title>Pan</title>
|
||||||
|
<g id="icon-tools-pan-group" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path id="icon-tools-pan-line-v" d="M9,1 L9,17"></path>
|
||||||
|
<path id="icon-tools-pan-line-h" d="M1,9 L17,9"></path>
|
||||||
|
<polyline id="icon-tools-pan-caret-t" points="7 3 9 1 11 3"></polyline>
|
||||||
|
<polyline id="icon-tools-pan-caret-r" points="15 11 17 9 15 7"></polyline>
|
||||||
|
<polyline id="icon-tools-pan-caret-b" points="11 15 9 17 7 15"></polyline>
|
||||||
|
<polyline id="icon-tools-pan-caret-l" points="3 7 1 9 3 11"></polyline>
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-zoom" viewBox="0 0 17 17">
|
||||||
|
<title>Zoom</title>
|
||||||
|
<g id="icon-tools-zoom-group" fill="none" stroke-width="2" stroke-linecap="round">
|
||||||
|
<path id="icon-tools-zoom-path" d="m11.5,11.5 4.5,4.5" />
|
||||||
|
<circle id="icon-tools-zoom-circle" cx="7" cy="7" r="6" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-invert" viewBox="0 0 24 28">
|
||||||
|
<title>Invert</title>
|
||||||
|
<path d="M12 22.5v-17c-4.688 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-stack-scroll" viewBox="0 0 24 28">
|
||||||
|
<title>Stack Scroll</title>
|
||||||
|
<path d="M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-elliptical-roi" viewBox="0 0 24 28">
|
||||||
|
<title>Elliptical ROI</title>
|
||||||
|
<path d="M12 5.5c-4.688 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5-3.813-8.5-8.5-8.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12v0c6.625 0 12 5.375 12 12z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-magnify" viewBox="0 0 24 28">
|
||||||
|
<title>Magnify</title>
|
||||||
|
<path d="M24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-reset" viewBox="0 0 24 28">
|
||||||
|
<title>Reset</title>
|
||||||
|
<path d="M24 14c0 6.609-5.391 12-12 12-3.578 0-6.953-1.578-9.234-4.328-0.156-0.203-0.141-0.5 0.031-0.672l2.141-2.156c0.109-0.094 0.25-0.141 0.391-0.141 0.141 0.016 0.281 0.078 0.359 0.187 1.531 1.984 3.828 3.109 6.312 3.109 4.406 0 8-3.594 8-8s-3.594-8-8-8c-2.047 0-3.984 0.781-5.437 2.141l2.141 2.156c0.297 0.281 0.375 0.719 0.219 1.078-0.156 0.375-0.516 0.625-0.922 0.625h-7c-0.547 0-1-0.453-1-1v-7c0-0.406 0.25-0.766 0.625-0.922 0.359-0.156 0.797-0.078 1.078 0.219l2.031 2.016c2.203-2.078 5.187-3.313 8.266-3.313 6.609 0 12 5.391 12 12z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-rotate" viewBox="0 0 24 28">
|
||||||
|
<title>Rotate</title>
|
||||||
|
<path d="M24 4v7c0 0.547-0.453 1-1 1h-7c-0.406 0-0.766-0.25-0.922-0.625-0.156-0.359-0.078-0.797 0.219-1.078l2.156-2.156c-1.469-1.359-3.406-2.141-5.453-2.141-4.406 0-8 3.594-8 8s3.594 8 8 8c2.484 0 4.781-1.125 6.312-3.109 0.078-0.109 0.219-0.172 0.359-0.187 0.141 0 0.281 0.047 0.391 0.141l2.141 2.156c0.187 0.172 0.187 0.469 0.031 0.672-2.281 2.75-5.656 4.328-9.234 4.328-6.609 0-12-5.391-12-12s5.391-12 12-12c3.078 0 6.062 1.234 8.266 3.313l2.031-2.016c0.281-0.297 0.719-0.375 1.094-0.219 0.359 0.156 0.609 0.516 0.609 0.922z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-rotate-right" viewBox="0 0 24 24">
|
||||||
|
<title>Rotate Right</title>
|
||||||
|
<path d="M16.875 15.469c0.563-0.75 0.891-1.594 1.031-2.484h2.016c-0.188 1.406-0.703 2.719-1.594 3.891zM12.984 17.906c0.891-0.141 1.734-0.469 2.484-1.031l1.453 1.453c-1.172 0.891-2.531 1.406-3.938 1.594v-2.016zM19.922 11.016h-2.016c-0.141-0.891-0.469-1.734-1.031-2.484l1.453-1.406c0.891 1.172 1.406 2.484 1.594 3.891zM15.563 5.531l-4.547 4.453v-3.891c-2.859 0.469-5.016 2.953-5.016 5.906s2.156 5.438 5.016 5.906v2.016c-3.938-0.469-7.031-3.844-7.031-7.922s3.094-7.453 7.031-7.922v-3.094z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-cineplay-toggle" viewBox="0 0 28 28">
|
||||||
|
<title>Cineplay Toggle</title>
|
||||||
|
<path d="M11.109 17.625l7.562-3.906-7.562-3.953v7.859zM14 4.156c5.891 0 9.797 0.281 9.797 0.281 0.547 0.063 1.75 0.063 2.812 1.188 0 0 0.859 0.844 1.109 2.781 0.297 2.266 0.281 4.531 0.281 4.531v2.125s0.016 2.266-0.281 4.531c-0.25 1.922-1.109 2.781-1.109 2.781-1.062 1.109-2.266 1.109-2.812 1.172 0 0-3.906 0.297-9.797 0.297v0c-7.281-0.063-9.516-0.281-9.516-0.281-0.625-0.109-2.031-0.078-3.094-1.188 0 0-0.859-0.859-1.109-2.781-0.297-2.266-0.281-4.531-0.281-4.531v-2.125s-0.016-2.266 0.281-4.531c0.25-1.937 1.109-2.781 1.109-2.781 1.062-1.125 2.266-1.125 2.812-1.188 0 0 3.906-0.281 9.797-0.281v0z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-flip-vertical" viewBox="0 0 6 28">
|
||||||
|
<title>Vertical</title>
|
||||||
|
<path d="M6 19.5v3c0 0.828-0.672 1.5-1.5 1.5h-3c-0.828 0-1.5-0.672-1.5-1.5v-3c0-0.828 0.672-1.5 1.5-1.5h3c0.828 0 1.5 0.672 1.5 1.5zM6 11.5v3c0 0.828-0.672 1.5-1.5 1.5h-3c-0.828 0-1.5-0.672-1.5-1.5v-3c0-0.828 0.672-1.5 1.5-1.5h3c0.828 0 1.5 0.672 1.5 1.5zM6 3.5v3c0 0.828-0.672 1.5-1.5 1.5h-3c-0.828 0-1.5-0.672-1.5-1.5v-3c0-0.828 0.672-1.5 1.5-1.5h3c0.828 0 1.5 0.672 1.5 1.5z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-tools-flip-horizontal" viewBox="0 0 22 28">
|
||||||
|
<title>Horizontal</title>
|
||||||
|
<path d="M6 11.5v3c0 0.828-0.672 1.5-1.5 1.5h-3c-0.828 0-1.5-0.672-1.5-1.5v-3c0-0.828 0.672-1.5 1.5-1.5h3c0.828 0 1.5 0.672 1.5 1.5zM14 11.5v3c0 0.828-0.672 1.5-1.5 1.5h-3c-0.828 0-1.5-0.672-1.5-1.5v-3c0-0.828 0.672-1.5 1.5-1.5h3c0.828 0 1.5 0.672 1.5 1.5zM22 11.5v3c0 0.828-0.672 1.5-1.5 1.5h-3c-0.828 0-1.5-0.672-1.5-1.5v-3c0-0.828 0.672-1.5 1.5-1.5h3c0.828 0 1.5 0.672 1.5 1.5z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-trial-info" viewBox="0 0 20 20">
|
||||||
|
<title>Trial Information</title>
|
||||||
|
<g id="icon-trial-info-group" fill="none" stroke-width="2">
|
||||||
|
<path id="icon-trial-info-circle" d="M10,1 a9 9 0 0 1 0 18 a9 9 0 0 1 0 -18 M10,5 l0,2 m0,2 0,6" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-ui-accordion-expand" viewBox="0 0 12 8">
|
||||||
|
<title>Expand</title>
|
||||||
|
<polygon transform="translate(6.000000, 3.700000) rotate(-270.000000) translate(-6.000000, -3.700000) " points="3.7 -2.3 2.3 -0.9 6.9 3.7 2.3 8.3 3.7 9.7 9.7 3.7"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-ui-add" viewBox="0 0 12 13">
|
||||||
|
<title>Add</title>
|
||||||
|
<path d="M6.5 7L6.5 12C6.5 12.28 6.28 12.5 6 12.5 5.72 12.5 5.5 12.28 5.5 12L5.5 7 0.5 7C0.22 7 0 6.78 0 6.5 0 6.22 0.22 6 0.5 6L5.5 6 5.5 1C5.5 0.72 5.72 0.5 6 0.5 6.28 0.5 6.5 0.72 6.5 1L6.5 6 11.5 6C11.78 6 12 6.22 12 6.5 12 6.78 11.78 7 11.5 7L6.5 7Z" id="Combined-Shape"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-ui-close" viewBox="0 0 14 14">
|
||||||
|
<title>Close</title>
|
||||||
|
<g id="icon-ui-close-group" stroke-width="1.75">
|
||||||
|
<path id="icon-ui-close-path" d="M1,1 13,13 M1,13 13,1" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-create-comment" viewBox="0 0 37 34">
|
||||||
|
<title>Comment</title>
|
||||||
|
<path fill="#94a8b3" d="M22.32 14L35 14C36.1 14 37 14.9 37 16L37 28C37 29.1 36.1 30 35 30L21 30 17 34 17 20.39C19.45 18.97 21.36 16.71 22.32 14Z" id="Combined-Shape"/>
|
||||||
|
<path d="M10 0C4.5 0 0 4.5 0 10 0 15.5 4.5 20 10 20 15.5 20 20 15.5 20 10 20 4.5 15.5 0 10 0L10 0ZM15 11L11 11 11 15 9 15 9 11 5 11 5 9 9 9 9 5 11 5 11 9 15 9 15 11 15 11Z" id="Shape"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-create-screen-capture" viewBox="0 0 37 35">
|
||||||
|
<title>Capture Screen</title>
|
||||||
|
<g id="camera-alt" transform="translate(17.000000, 17.000000)" fill="#94a8b3">
|
||||||
|
<path d="M10 13C11.66 13 13 11.66 13 10 13 8.34 11.66 7 10 7 8.34 7 7 8.34 7 10 7 11.66 8.34 13 10 13Z" id="Oval"/>
|
||||||
|
<path d="M7 0L5.2 2 2 2C0.9 2 0 2.9 0 4L0 16C0 17.1 0.9 18 2 18L18 18C19.1 18 20 17.1 20 16L20 4C20 2.9 19.1 2 18 2L14.8 2 13 0 7 0 7 0ZM10 15C7.2 15 5 12.8 5 10 5 7.2 7.2 5 10 5 12.8 5 15 7.2 15 10 15 12.8 12.8 15 10 15L10 15Z" id="Shape"/>
|
||||||
|
</g>
|
||||||
|
<path d="M10 0C4.5 0 0 4.5 0 10 0 15.5 4.5 20 10 20 15.5 20 20 15.5 20 10 20 4.5 15.5 0 10 0L10 0ZM15 11L11 11 11 15 9 15 9 11 5 11 5 9 9 9 9 5 11 5 11 9 15 9 15 11 15 11Z" id="Shape"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-ui-warning" viewBox="0 0 22 20">
|
||||||
|
<title>Warning</title>
|
||||||
|
<g id="icon-ui-warning-group" stroke="none">
|
||||||
|
<path d="m11,0 11,20 -22,0Z m1,7 -2,0 0,6 2,0Z m0,8 -2,0 0,2 2,0Z" />
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-ohif-logo" viewBox="0 0 47 47">
|
||||||
|
<title>Open Health Imaging Foundation</title>
|
||||||
|
<g id="icon-ohif-logo" stroke="#fff" stroke-width="2.5" stroke-miterlimit="10">
|
||||||
|
<rect x="1.25" y="1.25" width="18.8" height="18.8" rx="1" ry="1"/>
|
||||||
|
<rect x="26" y="1.25" width="18.8" height="18.8" rx="1" ry="1"/>
|
||||||
|
<rect x="1.25" y="26" width="18.8" height="18.8" rx="1" ry="1"/>
|
||||||
|
<rect x="26" y="26" width="18.8" height="18.8" rx="1" ry="1"/>
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-viewport-link" viewBox="0 0 32 32">
|
||||||
|
<title>Viewport Link</title>
|
||||||
|
<g id="icon-viewport-link-group" stroke="none">
|
||||||
|
<path d="m5.364 28.917c1.047 1.046 2.422 1.57 3.797 1.57 1.376 0 2.751-0.523 3.798-1.572l7.552-7.554c1.016-1.014 1.574-2.361 1.574-3.797 -0.001-1.432-0.558-2.781-1.574-3.796l-2.297-2.298 -2.009 2.009 2.297 2.298c0.478 0.478 0.741 1.113 0.741 1.788 0 0.674-0.264 1.309-0.741 1.786l-7.553 7.555c-0.987 0.985-2.59 0.985-3.576 0l-2.297-2.298c-0.987-0.985-0.987-2.589 0-3.576l3.775-3.776 -2.009-2.009 -3.776 3.776c-2.094 2.096-2.092 5.502 0 7.595l2.299 2.3zM26.695 2.992"/>
|
||||||
|
<path d="m26.695 2.992c-1.014-1.016-2.362-1.575-3.797-1.575 -0.001 0-0.001 0-0.002 0 -1.435 0-2.784 0.56-3.798 1.573l-7.551 7.553c-1.017 1.016-1.576 2.363-1.576 3.799 0 1.434 0.558 2.784 1.574 3.797l2.297 2.297 2.01-2.009 -2.298-2.297c-0.477-0.477-0.741-1.113-0.741-1.788 0-0.676 0.265-1.311 0.742-1.788l7.553-7.555c0.477-0.477 1.111-0.74 1.789-0.74 0 0 0 0 0.001 0 0.674 0 1.309 0.264 1.786 0.74l2.297 2.299c0.477 0.477 0.74 1.111 0.74 1.788 0 0.674-0.264 1.311-0.74 1.788l-3.776 3.777 2.009 2.009 3.776-3.777c1.014-1.013 1.573-2.363 1.574-3.797 0-1.435-0.56-2.784-1.574-3.797l-2.295-2.296z"/>
|
||||||
|
</g>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="theme" viewBox="0 0 24 24">
|
||||||
|
<title>Theme</title>
|
||||||
|
<path d="M17.484 12c0.844 0 1.5-0.656 1.5-1.5s-0.656-1.5-1.5-1.5-1.5 0.656-1.5 1.5 0.656 1.5 1.5 1.5zM14.484 8.016c0.844 0 1.5-0.656 1.5-1.5s-0.656-1.5-1.5-1.5-1.5 0.656-1.5 1.5 0.656 1.5 1.5 1.5zM9.516 8.016c0.844 0 1.5-0.656 1.5-1.5s-0.656-1.5-1.5-1.5-1.5 0.656-1.5 1.5 0.656 1.5 1.5 1.5zM6.516 12c0.844 0 1.5-0.656 1.5-1.5s-0.656-1.5-1.5-1.5-1.5 0.656-1.5 1.5 0.656 1.5 1.5 1.5zM12 3c4.969 0 9 3.609 9 8.016 0 2.766-2.25 4.969-5.016 4.969h-1.734c-0.844 0-1.5 0.656-1.5 1.5 0 0.375 0.141 0.703 0.375 0.984s0.375 0.656 0.375 1.031c0 0.844-0.656 1.5-1.5 1.5-4.969 0-9-4.031-9-9s4.031-9 9-9z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="log" viewBox="0 0 24 24">
|
||||||
|
<title>Log</title>
|
||||||
|
<path d="M9.516 14.016c2.484 0 4.5-2.016 4.5-4.5s-2.016-4.5-4.5-4.5-4.5 2.016-4.5 4.5 2.016 4.5 4.5 4.5zM15.516 14.016l4.969 4.969-1.5 1.5-4.969-4.969v-0.797l-0.281-0.281c-1.125 0.984-2.625 1.547-4.219 1.547-3.609 0-6.516-2.859-6.516-6.469s2.906-6.516 6.516-6.516 6.469 2.906 6.469 6.516c0 1.594-0.563 3.094-1.547 4.219l0.281 0.281h0.797z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="server" viewBox="0 0 24 28">
|
||||||
|
<title>Server</title>
|
||||||
|
<path d="M12 12c4.703 0 9.422-0.844 12-2.656v2.656c0 2.203-5.375 4-12 4s-12-1.797-12-4v-2.656c2.578 1.813 7.297 2.656 12 2.656zM12 24c4.703 0 9.422-0.844 12-2.656v2.656c0 2.203-5.375 4-12 4s-12-1.797-12-4v-2.656c2.578 1.813 7.297 2.656 12 2.656zM12 18c4.703 0 9.422-0.844 12-2.656v2.656c0 2.203-5.375 4-12 4s-12-1.797-12-4v-2.656c2.578 1.813 7.297 2.656 12 2.656zM12 0c6.625 0 12 1.797 12 4v2c0 2.203-5.375 4-12 4s-12-1.797-12-4v-2c0-2.203 5.375-4 12-4z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="study-list" viewBox="0 0 24 24">
|
||||||
|
<title>Study List</title>
|
||||||
|
<path d="M9 5.016h12v3.984h-12v-3.984zM9 18.984v-3.984h12v3.984h-12zM9 14.016v-4.031h12v4.031h-12zM3.984 9v-3.984h4.031v3.984h-4.031zM3.984 18.984v-3.984h4.031v3.984h-4.031zM3.984 14.016v-4.031h4.031v4.031h-4.031z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="logout" viewBox="0 0 24 28">
|
||||||
|
<title>Logout</title>
|
||||||
|
<path d="M24 14c0 6.609-5.391 12-12 12s-12-5.391-12-12c0-3.797 1.75-7.297 4.797-9.578 0.891-0.672 2.141-0.5 2.797 0.391 0.672 0.875 0.484 2.141-0.391 2.797-2.031 1.531-3.203 3.859-3.203 6.391 0 4.406 3.594 8 8 8s8-3.594 8-8c0-2.531-1.172-4.859-3.203-6.391-0.875-0.656-1.062-1.922-0.391-2.797 0.656-0.891 1.922-1.062 2.797-0.391 3.047 2.281 4.797 5.781 4.797 9.578zM14 2v10c0 1.094-0.906 2-2 2s-2-0.906-2-2v-10c0-1.094 0.906-2 2-2s2 0.906 2 2z"></path>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="password" viewBox="0 0 18 28">
|
||||||
|
<title>Password</title>
|
||||||
|
<path d="M5 12h8v-3c0-2.203-1.797-4-4-4s-4 1.797-4 4v3zM18 13.5v9c0 0.828-0.672 1.5-1.5 1.5h-15c-0.828 0-1.5-0.672-1.5-1.5v-9c0-0.828 0.672-1.5 1.5-1.5h0.5v-3c0-3.844 3.156-7 7-7s7 3.156 7 7v3h0.5c0.828 0 1.5 0.672 1.5 1.5z"></path>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 21 KiB |
@@ -0,0 +1,30 @@
|
|||||||
|
<!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">
|
||||||
|
|
||||||
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
||||||
|
|
||||||
|
<title>OHIF Viewer</title>
|
||||||
|
|
||||||
|
<!-- Latest compiled and minified CSS -->
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<!-- WEB FONTS -->
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Sanchez" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/"
|
||||||
|
crossorigin="anonymous">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
You need to enable JavaScript to run this app.
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
<div id="root"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>OpenID Connect Logout Redirect Page</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.7/es5-shim.min.js"></script>
|
||||||
|
<script type="text/javascript" src='es6-shim.min.js'></script>
|
||||||
|
<script type="text/javascript" src='oidc-client.min.js'></script>
|
||||||
|
<script type="text/javascript" src='polyfill.min.js'></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
// TODO: I think this is actually not necessary anymore
|
||||||
|
new UserManager().signoutRedirectCallback().then(function() {
|
||||||
|
// TODO: Keycloak + Auth0 is not properly logging out both sessions?
|
||||||
|
// This is a hacky hardcoded workaround. This could also be added as a component to the React application rather than a static page.
|
||||||
|
var path = 'https://www.crowds-cure.org';
|
||||||
|
var client_id = 'z5cXMPTxeFOdB3i4xRA8JyhTonQmqMKM';
|
||||||
|
var url = 'https://auth.crowds-cure.org/v2/logout?client_id=' + client_id + '&returnTo=' + path;
|
||||||
|
window.location.href = url;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"short_name": "react-cornerstone-viewport",
|
||||||
|
"name": "react-cornerstone-viewport",
|
||||||
|
"start_url": "./index.html",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": "#000000",
|
||||||
|
"background_color": "#ffffff"
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
!function webpackUniversalModuleDefinition(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,function(){return function(e){var t={};function __webpack_require__(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,__webpack_require__),n.l=!0,n.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,r){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(__webpack_require__.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)__webpack_require__.d(r,n,function(t){return e[t]}.bind(null,n));return r},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=45)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(e,t,r){return t&&defineProperties(e.prototype,t),r&&defineProperties(e,r),e}}();var i={debug:function debug(){},info:function info(){},warn:function warn(){},error:function error(){}},o=void 0,s=void 0;(t.Log=function(){function Log(){!function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Log)}return Log.reset=function reset(){s=3,o=i},Log.debug=function debug(){if(s>=4){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];o.debug.apply(o,Array.from(t))}},Log.info=function info(){if(s>=3){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];o.info.apply(o,Array.from(t))}},Log.warn=function warn(){if(s>=2){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];o.warn.apply(o,Array.from(t))}},Log.error=function error(){if(s>=1){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];o.error.apply(o,Array.from(t))}},n(Log,null,[{key:"NONE",get:function get(){return 0}},{key:"ERROR",get:function get(){return 1}},{key:"WARN",get:function get(){return 2}},{key:"INFO",get:function get(){return 3}},{key:"DEBUG",get:function get(){return 4}},{key:"level",get:function get(){return s},set:function set(e){if(!(0<=e&&e<=4))throw new Error("Invalid log level");s=e}},{key:"logger",get:function get(){return o},set:function set(e){if(!e.debug&&e.info&&(e.debug=e.info),!(e.debug&&e.info&&e.warn&&e.error))throw new Error("Invalid logger");o=e}}]),Log}()).reset()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(e,t,r){return t&&defineProperties(e.prototype,t),r&&defineProperties(e,r),e}}();var i={setInterval:function(e){function setInterval(t,r){return e.apply(this,arguments)}return setInterval.toString=function(){return e.toString()},setInterval}(function(e,t){return setInterval(e,t)}),clearInterval:function(e){function clearInterval(t){return e.apply(this,arguments)}return clearInterval.toString=function(){return e.toString()},clearInterval}(function(e){return clearInterval(e)})},o=!1,s=null;t.Global=function(){function Global(){!function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Global)}return Global._testing=function _testing(){o=!0},Global.setXMLHttpRequest=function setXMLHttpRequest(e){s=e},n(Global,null,[{key:"location",get:function get(){if(!o)return location}},{key:"localStorage",get:function get(){if(!o&&"undefined"!=typeof window)return localStorage}},{key:"sessionStorage",get:function get(){if(!o&&"undefined"!=typeof window)return sessionStorage}},{key:"XMLHttpRequest",get:function get(){if(!o&&"undefined"!=typeof window)return s||XMLHttpRequest}},{key:"timer",get:function get(){if(!o)return i}}]),Global}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UrlUtility=void 0;var n=r(0),i=r(1);t.UrlUtility=function(){function UrlUtility(){!function _classCallCheck(e,t){if(!(e instaLine truncated
|
||||||
|
// @preserve Copyright (c) Microsoft Open Technologies, Inc.
|
||||||
|
function random(){for(var e="xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx",t="0123456789abcdef",r=0,n="",i=0;i<e.length;i++)"-"!==e[i]&&"4"!==e[i]&&(r=16*Math.random()|0),"x"===e[i]?n+=t[r]:"y"===e[i]?(r&=3,n+=t[r|=8]):n+=e[i];return n},e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninState=void 0;var n=function(){function defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(e,t,r){return t&&defineProperties(e.prototype,t),r&&defineProperties(e,r),e}}(),i=r(0),o=r(4),s=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(r(14));t.SigninState=function(e){function SigninState(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.nonce,n=t.authority,i=t.client_id;!function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,SigninState);var o=function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,arguments[0]));return!0===r?o._nonce=(0,s.default)():r&&(o._nonce=r),o._authority=n,o._client_id=i,o}return function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(SigninState,e),SigninState.prototype.toStorageString=function toStorageString(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,nonce:this.nonce,authority:this.authority,client_id:this.client_id})},SigninState.fromStorageString=function fromStorageString(e){return i.Log.debug("SigninState.fromStorageString"),new SigninState(JSON.parse(e))},n(SigninState,[{key:"nonce",get:function get(){return this._nonce}},{key:"authority",get:function get(){return this._authority}},{key:"client_id",get:function get(){return this._client_id}}]),SigninState}(o.State)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ErrorResponse=void 0;var n=r(0);t.ErrorResponse=function(e){function ErrorResponse(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.error,i=t.error_description,o=t.error_uri,s=t.state;if(function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,ErrorResponse),!r)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var a=function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,i||r));return a.name="ErrorResponse",a.error=r,a.error_description=i,a.error_uri=o,a.state=s,a}return function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(ErrorResponse,e),ErrorResponse}(Error)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JsonService=void 0;var n=r(0),i=r(1);t.JsonService=function(){function JsonService(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest;!function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,JsonService),e&&Array.isArray(e)?this._contentTypes=e.slice():this._contentTypes=[],this._contentTypes.push("application/json"),this._XMLHttpRequest=t}return JsonService.prototype.getJson=function getJson(e,t){var r=this;if(!e)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",e),new Promise(function(i,o){var s=new r._XMLHttpRequest;s.open("GET",e);var a=r._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var t=s.getResponseHeader("Content-Type");if(t)if(a.find(function(e){if(t.startsWith(e))return!0}))try{return void i(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.getJson: Error parsing JSON response",e.message),void o(e)}o(Error("Invalid response Content-Type: "+t+", from URL: "+e))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},t&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("AutLine truncated
|
||||||
|
/*!
|
||||||
|
* The buffer module from node.js, for the browser.
|
||||||
|
*
|
||||||
|
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
var n=r(38),i=r(37),o=r(36);function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function createBuffer(e,t){if(kMaxLength()<t)throw new RangeError("Invalid typed array length");return Buffer.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=Buffer.prototype:(null===e&&(e=new Buffer(t)),e.length=t),e}function Buffer(e,t,r){if(!(Buffer.TYPED_ARRAY_SUPPORT||this instanceof Buffer))return new Buffer(e,t,r);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return allocUnsafe(this,e)}return from(this,e,t,r)}function from(e,t,r,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function fromArrayBuffer(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError("'offset' is out of bounds");if(t.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);Buffer.TYPED_ARRAY_SUPPORT?(e=t).__proto__=Buffer.prototype:e=fromArrayLike(e,t);return e}(e,t,r,n):"string"==typeof t?function fromString(e,t,r){"string"==typeof r&&""!==r||(r="utf8");if(!Buffer.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|byteLength(t,r),i=(e=createBuffer(e,n)).write(t,r);i!==n&&(e=e.slice(0,i));return e}(e,t,r):function fromObject(e,t){if(Buffer.isBuffer(t)){var r=0|checked(t.length);return 0===(e=createBuffer(e,r)).length?e:(t.copy(e,0,0,r),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||function isnan(e){return e!=e}(t.length)?createBuffer(e,0):fromArrayLike(e,t);if("Buffer"===t.type&&o(t.data))return fromArrayLike(e,t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function assertSize(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function allocUnsafe(e,t){if(assertSize(t),e=createBuffer(e,t<0?0:0|checked(t)),!Buffer.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function fromArrayLike(e,t){var r=t.length<0?0:0|checked(t.length);e=createBuffer(e,r);for(var n=0;n<r;n+=1)e[n]=255&t[n];return e}function checked(e){if(e>=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|e}function byteLength(e,t){if(Buffer.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return utf8ToBytes(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(e).length;default:if(n)return utf8ToBytes(e).length;t=(""+t).toLowerCase(),n=!0}}function swap(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function bidirectionalIndexOf(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=Buffer.from(t,n)),Buffer.isBuffer(t))return 0===t.length?-1:arrayIndexOf(e,t,r,n,i);if("number"==typeof t)return t&=255,Buffer.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):arrayIndexOf(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(e,t,r,n,i){var o,s=1,a=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,u/=2,r/=2}function read(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var c=-1;for(o=r;o<a;o++)if(read(e,o)===read(t,-1===c?0:o-c)){if(-1===c&&(c=o),o-c+1===u)return c*s}else-1!==c&&(o-=o-c),c=-1}else for(r+u>a&&(r=a-u),o=r;o>=0;o--){for(var h=!0,f=0;f<u;f++)if(read(e,o+f)!==read(t,f)){h=!1;break}if(h)return o}return-1}function hexWrite(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s<n;++s){var a=parseInt(t.substr(2*s,2),16);if(isNaN(a))return s;e[r+s]=a}return s}function utf8Write(e,t,r,n){return blitBuffer(utf8ToBytes(t,e.length-r),e,r,n)}function asciiWrite(e,t,r,n){return blitBuffer(function asciiToBytes(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function latin1Write(e,t,r,n){return asciiWrite(e,t,r,n)}functioLine truncated
|
||||||
|
/*!
|
||||||
|
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
|
||||||
|
Code licensed under the BSD License:
|
||||||
|
http://developer.yahoo.com/yui/license.html
|
||||||
|
version: 2.9.0
|
||||||
|
*/
|
||||||
|
if(void 0===v)var v={};v.lang={extend:function extend(t,r,n){if(!r||!t)throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");var i=function d(){};if(i.prototype=r.prototype,t.prototype=new i,t.prototype.constructor=t,t.superclass=r.prototype,r.prototype.constructor==Object.prototype.constructor&&(r.prototype.constructor=r),n){var o;for(o in n)t.prototype[o]=n[o];var s=function e(){},a=["toString","valueOf"];try{/MSIE/.test(u.userAgent)&&(s=function e(t,r){for(o=0;o<a.length;o+=1){var n=a[o],i=r[n];"function"==typeof i&&i!=Object.prototype[n]&&(t[n]=i)}})}catch(e){}s(t.prototype,n)}}};
|
||||||
|
/*! CryptoJS v3.1.2 core-fix.js
|
||||||
|
* code.google.com/p/crypto-js
|
||||||
|
* (c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||||
|
* code.google.com/p/crypto-js/wiki/License
|
||||||
|
* THIS IS FIX of 'core.js' to fix Hmac issue.
|
||||||
|
* https://code.google.com/p/crypto-js/issues/detail?id=84
|
||||||
|
* https://crypto-js.googlecode.com/svn-history/r667/branches/3.x/src/core.js
|
||||||
|
*/
|
||||||
|
var y=y||function(e,t){var r={},n=r.lib={},i=n.Base=function(){function n(){}return{extend:function extend(e){n.prototype=this;var t=new n;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function create(){var e=this.extend();return e.init.apply(e,arguments),e},init:function init(){},mixIn:function mixIn(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function clone(){return this.init.prototype.extend(this)}}}(),o=n.WordArray=i.extend({init:function init(e,t){e=this.words=e||[],this.sigBytes=void 0!=t?t:4*e.length},toString:function toString(e){return(e||a).stringify(this)},concat:function concat(e){var t=this.words,r=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var o=0;o<i;o++){var s=r[o>>>2]>>>24-o%4*8&255;t[n+o>>>2]|=s<<24-(n+o)%4*8}else for(o=0;o<i;o+=4)t[n+o>>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function clamp(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function clone(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function random(t){for(var r=[],n=0;n<t;n+=4)r.push(4294967296*e.random()|0);return new o.init(r,t)}}),s=r.enc={},a=s.Hex={stringify:function stringify(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i<r;i++){var o=t[i>>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function parse(e){for(var t=e.length,r=[],n=0;n<t;n+=2)r[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new o.init(r,t/2)}},u=s.Latin1={stringify:function stringify(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i<r;i++){var o=t[i>>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function parse(e){for(var t=e.length,r=[],n=0;n<t;n++)r[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new o.init(r,t)}},c=s.Utf8={stringify:function stringify(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function parse(e){return u.parse(unescape(encodeURIComponent(e)))}},h=n.BufferedBlockAlgorithm=i.extend({reset:function reset(){this._data=new o.init,this._nDataBytes=0},_append:function _append(e){"string"==typeof e&&(e=c.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function _process(t){var r=this._data,n=r.words,i=r.sigBytes,s=this.blockSize,a=i/(4*s),u=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*s,c=e.min(4*u,i);if(u){for(var h=0;h<u;h+=s)this._doProcessBlock(n,h);var f=n.splice(0,u);r.sigBytes-=c}return new o.init(f,c)},clone:function clone(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0}),f=(n.Hasher=h.extend({cfg:i.extend(),init:function init(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function reset(){h.reset.call(this),this._doReset()},update:function update(e){return this._append(e),this._process(),this},finalize:function finalize(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function _createHelper(e){return function(t,r){return new e.init(r).finalize(t)}},_createHmacHelper:function _createHmacHelper(e){return function(t,r){return new f.HMAC.init(e,r).finalize(t)}}}),r.algo={});return r}(Math);!function(e){var t,r=(t=y).lib,n=r.Base,i=r.WordArray;(t=t.x64={}).Word=n.extend({init:function init(e,t){this.high=e,this.low=t}}),t.WordArray=n.extend({init:function init(e,t){e=this.words=e||[],this.sigBytes=void 0!=t?t:8*e.length},toX32:function toX32(){for(var e=this.words,t=e.length,r=[],n=0;n<t;n++){var o=e[n];r.push(o.high),r.push(o.low)}return i.create(r,this.sigBytes)},clone:function clone(){for(var e=n.clone.call(this),t=e.words=this.words.slice(0),r=t.length,i=0;i<r;i++)t[i]=t[i].clone();return e}})}(),function(){var e=y,t=e.lib.WordArray;e.enc.Base64={stringify:function stringify(e){var t=e.words,r=e.sigBytes,n=this._map;e.clamp(),e=[];for(var i=0;i<r;i+=3)for(var o=(t[i>>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;4>s&&i+.75*s<r;s++)e.push(n.charAt(o>>>6*(3-s)&63));if(t=n.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function parse(e){var r=e.length,n=this._map;(i=n.charAt(64))&&(-1!=(i=e.indexOf(i))&&(r=i));for(var i=[],o=0,s=0;s<r;s++)if(s%4){var a=n.indexOf(e.charAt(s-1))<<s%4*2,u=n.indexOf(e.charAt(s))>>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){for(var t=y,r=(i=t.lib).WordArray,n=i.Hasher,i=t.algo,o=[],s=[],a=function u(e){return 4294967296*(e-(0|e))|0},u=2,c=0;64>c;){var h;e:{h=u;for(var f=e.sqrt(h),l=2;l<=f;l++)if(!(h%l)){h=!1;break e}h=!0}h&&(8>c&&(o[c]=a(e.pow(u,.5))),s[c]=a(e.pow(u,1/3)),c++),u++}var g=[];i=i.SHA256=n.extend({_doReset:function _doReset(){this._hash=new r.init(o.slice(0))},_doProcessBlock:function _doProcessBlock(e,t){for(var r=this._Line truncated
|
||||||
|
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||||
|
*/
|
||||||
|
var S,F="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",_="=";function hex2b64(e){var t,r,n="";for(t=0;t+3<=e.length;t+=3)r=parseInt(e.substring(t,t+3),16),n+=F.charAt(r>>6)+F.charAt(63&r);if(t+1==e.length?(r=parseInt(e.substring(t,t+1),16),n+=F.charAt(r<<2)):t+2==e.length&&(r=parseInt(e.substring(t,t+2),16),n+=F.charAt(r>>2)+F.charAt((3&r)<<4)),_)for(;(3&n.length)>0;)n+=_;return n}function b64tohex(e){var t,r,n,i="",o=0;for(t=0;t<e.length&&e.charAt(t)!=_;++t)(n=F.indexOf(e.charAt(t)))<0||(0==o?(i+=int2char(n>>2),r=3&n,o=1):1==o?(i+=int2char(r<<2|n>>4),r=15&n,o=2):2==o?(i+=int2char(r),i+=int2char(n>>2),r=3&n,o=3):(i+=int2char(r<<2|n>>4),i+=int2char(15&n),o=0));return 1==o&&(i+=int2char(r<<2)),i}function b64toBA(e){var t,r=b64tohex(e),n=new Array;for(t=0;2*t<r.length;++t)n[t]=parseInt(r.substring(2*t,2*t+2),16);return n}function BigInteger(e,t,r){null!=e&&("number"==typeof e?this.fromNumber(e,t,r):null==t&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,t))}function nbi(){return new BigInteger(null)}"Microsoft Internet Explorer"==u.appName?(BigInteger.prototype.am=function am2(e,t,r,n,i,o){for(var s=32767&t,a=t>>15;--o>=0;){var u=32767&this[e],c=this[e++]>>15,h=a*u+c*s;i=((u=s*u+((32767&h)<<15)+r[n]+(1073741823&i))>>>30)+(h>>>15)+a*c+(i>>>30),r[n++]=1073741823&u}return i},S=30):"Netscape"!=u.appName?(BigInteger.prototype.am=function am1(e,t,r,n,i,o){for(;--o>=0;){var s=t*this[e++]+r[n]+i;i=Math.floor(s/67108864),r[n++]=67108863&s}return i},S=26):(BigInteger.prototype.am=function am3(e,t,r,n,i,o){for(var s=16383&t,a=t>>14;--o>=0;){var u=16383&this[e],c=this[e++]>>14,h=a*u+c*s;i=((u=s*u+((16383&h)<<14)+r[n]+i)>>28)+(h>>14)+a*c,r[n++]=268435455&u}return i},S=28),BigInteger.prototype.DB=S,BigInteger.prototype.DM=(1<<S)-1,BigInteger.prototype.DV=1<<S;BigInteger.prototype.FV=Math.pow(2,52),BigInteger.prototype.F1=52-S,BigInteger.prototype.F2=2*S-52;var w,E,C="0123456789abcdefghijklmnopqrstuvwxyz",P=new Array;for(w="0".charCodeAt(0),E=0;E<=9;++E)P[w++]=E;for(w="a".charCodeAt(0),E=10;E<36;++E)P[w++]=E;for(w="A".charCodeAt(0),E=10;E<36;++E)P[w++]=E;function int2char(e){return C.charAt(e)}function intAt(e,t){var r=P[e.charCodeAt(t)];return null==r?-1:r}function nbv(e){var t=nbi();return t.fromInt(e),t}function nbits(e){var t,r=1;return 0!=(t=e>>>16)&&(e=t,r+=16),0!=(t=e>>8)&&(e=t,r+=8),0!=(t=e>>4)&&(e=t,r+=4),0!=(t=e>>2)&&(e=t,r+=2),0!=(t=e>>1)&&(e=t,r+=1),r}function Classic(e){this.m=e}function Montgomery(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<e.DB-15)-1,this.mt2=2*e.t}function op_and(e,t){return e&t}function op_or(e,t){return e|t}function op_xor(e,t){return e^t}function op_andnot(e,t){return e&~t}function lbit(e){if(0==e)return-1;var t=0;return 0==(65535&e)&&(e>>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function cbit(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function NullExp(){}function nNop(e){return e}function Barrett(e){this.r2=nbi(),this.q3=nbi(),BigInteger.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}Classic.prototype.convert=function cConvert(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},Classic.prototype.revert=function cRevert(e){return e},Classic.prototype.reduce=function cReduce(e){e.divRemTo(this.m,null,e)},Classic.prototype.mulTo=function cMulTo(e,t,r){e.multiplyTo(t,r),this.reduce(r)},Classic.prototype.sqrTo=function cSqrTo(e,t){e.squareTo(t),this.reduce(t)},Montgomery.prototype.convert=function montConvert(e){var t=nbi();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(BigInteger.ZERO)>0&&this.m.subTo(t,t),t},Montgomery.prototype.revert=function montRevert(e){var t=nbi();return e.copyTo(t),this.reduce(t),t},Montgomery.prototype.reduce=function montReduce(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t<this.m.t;++t){var r=32767&e[t],n=r*this.mpl+((r*this.mph+(e[t]>>15)*this.mpl&this.um)<<15)&e.DM;for(e[r=t+this.m.t]+=this.m.am(0,n,e,t,0,this.m.t);e[r]>=e.DV;)e[r]-=e.DV,e[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},Montgomery.prototype.mulTo=function montMulTo(e,t,r){e.multiplyTo(t,r),this.reduce(r)},Montgomery.prototype.sqrTo=function montSqrTo(e,t){e.squareTo(t),this.reduce(t)},BigInteger.prototype.copyTo=function bnpCopyTo(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},BigInteger.prototype.fromInt=function bnpFromInt(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},BigInteger.prototype.fromString=function bnpFromString(e,t){var r;if(16==t)r=4;else if(8==t)r=3;else if(256==t)r=8;else if(2==t)r=1;else if(32==t)r=5;else{if(4!=t)return void this.fromRadix(e,t);r=2}this.t=0,this.s=0;for(var n=e.length,i=!1,o=0;--n>=0;){var s=8==r?255&e[n]:intAt(e,n);s<0?"-"==e.charAt(n)&&(i=!0):(i=!1,0==o?this[this.t++]=s:o+r>this.DB?(this[this.t-1]|=(s&(1<<this.DB-o)-1)<<o,this[this.t++]=s>>this.DB-o):this[this.t-1]|=s<<o,(o+=r)>=this.DLine truncated
|
||||||
|
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||||
|
*/
|
||||||
|
function Arcfour(){this.i=0,this.j=0,this.S=new Array}BigInteger.prototype.chunkSize=function bnpChunkSize(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},BigInteger.prototype.toRadix=function bnpToRadix(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),r=Math.pow(e,t),n=nbv(r),i=nbi(),o=nbi(),s="";for(this.divRemTo(n,i,o);i.signum()>0;)s=(r+o.intValue()).toString(e).substr(1)+s,i.divRemTo(n,i,o);return o.intValue().toString(e)+s},BigInteger.prototype.fromRadix=function bnpFromRadix(e,t){this.fromInt(0),null==t&&(t=10);for(var r=this.chunkSize(t),n=Math.pow(t,r),i=!1,o=0,s=0,a=0;a<e.length;++a){var u=intAt(e,a);u<0?"-"==e.charAt(a)&&0==this.signum()&&(i=!0):(s=t*s+u,++o>=r&&(this.dMultiply(n),this.dAddOffset(s,0),o=0,s=0))}o>0&&(this.dMultiply(Math.pow(t,o)),this.dAddOffset(s,0)),i&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.fromNumber=function bnpFromNumber(e,t,r){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,r),this.testBit(e-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(e-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(BigInteger.ONE.shiftLeft(e-1),this);else{var n=new Array,i=7&e;n.length=1+(e>>3),t.nextBytes(n),i>0?n[0]&=(1<<i)-1:n[0]=0,this.fromString(n,256)}},BigInteger.prototype.bitwiseTo=function bnpBitwiseTo(e,t,r){var n,i,o=Math.min(e.t,this.t);for(n=0;n<o;++n)r[n]=t(this[n],e[n]);if(e.t<this.t){for(i=e.s&this.DM,n=o;n<this.t;++n)r[n]=t(this[n],i);r.t=this.t}else{for(i=this.s&this.DM,n=o;n<e.t;++n)r[n]=t(i,e[n]);r.t=e.t}r.s=t(this.s,e.s),r.clamp()},BigInteger.prototype.changeBit=function bnpChangeBit(e,t){var r=BigInteger.ONE.shiftLeft(e);return this.bitwiseTo(r,t,r),r},BigInteger.prototype.addTo=function bnpAddTo(e,t){for(var r=0,n=0,i=Math.min(e.t,this.t);r<i;)n+=this[r]+e[r],t[r++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n+=e.s;r<this.t;)n+=this[r],t[r++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;r<e.t;)n+=e[r],t[r++]=n&this.DM,n>>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t[r++]=n:n<-1&&(t[r++]=this.DV+n),t.t=r,t.clamp()},BigInteger.prototype.dMultiply=function bnpDMultiply(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},BigInteger.prototype.dAddOffset=function bnpDAddOffset(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},BigInteger.prototype.multiplyLowerTo=function bnpMultiplyLowerTo(e,t,r){var n,i=Math.min(this.t+e.t,t);for(r.s=0,r.t=i;i>0;)r[--i]=0;for(n=r.t-this.t;i<n;++i)r[i+this.t]=this.am(0,e[i],r,i,0,this.t);for(n=Math.min(e.t,t);i<n;++i)this.am(0,e[i],r,i,0,t-i);r.clamp()},BigInteger.prototype.multiplyUpperTo=function bnpMultiplyUpperTo(e,t,r){--t;var n=r.t=this.t+e.t-t;for(r.s=0;--n>=0;)r[n]=0;for(n=Math.max(t-this.t,0);n<e.t;++n)r[this.t+n-t]=this.am(t-n,e[n],r,0,0,this.t+n-t);r.clamp(),r.drShiftTo(1,r)},BigInteger.prototype.modInt=function bnpModInt(e){if(e<=0)return 0;var t=this.DV%e,r=this.s<0?e-1:0;if(this.t>0)if(0==t)r=this[0]%e;else for(var n=this.t-1;n>=0;--n)r=(t*r+this[n])%e;return r},BigInteger.prototype.millerRabin=function bnpMillerRabin(e){var t=this.subtract(BigInteger.ONE),r=t.getLowestSetBit();if(r<=0)return!1;var n=t.shiftRight(r);(e=e+1>>1)>I.length&&(e=I.length);for(var i=nbi(),o=0;o<e;++o){i.fromInt(I[Math.floor(Math.random()*I.length)]);var s=i.modPow(n,this);if(0!=s.compareTo(BigInteger.ONE)&&0!=s.compareTo(t)){for(var a=1;a++<r&&0!=s.compareTo(t);)if(0==(s=s.modPowInt(2,this)).compareTo(BigInteger.ONE))return!1;if(0!=s.compareTo(t))return!1}}return!0},BigInteger.prototype.clone=
|
||||||
|
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||||
|
*/
|
||||||
|
function bnClone(){var e=nbi();return this.copyTo(e),e},BigInteger.prototype.intValue=function bnIntValue(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]},BigInteger.prototype.byteValue=function bnByteValue(){return 0==this.t?this.s:this[0]<<24>>24},BigInteger.prototype.shortValue=function bnShortValue(){return 0==this.t?this.s:this[0]<<16>>16},BigInteger.prototype.signum=function bnSigNum(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},BigInteger.prototype.toByteArray=function bnToByteArray(){var e=this.t,t=new Array;t[0]=this.s;var r,n=this.DB-e*this.DB%8,i=0;if(e-- >0)for(n<this.DB&&(r=this[e]>>n)!=(this.s&this.DM)>>n&&(t[i++]=r|this.s<<this.DB-n);e>=0;)n<8?(r=(this[e]&(1<<n)-1)<<8-n,r|=this[--e]>>(n+=this.DB-8)):(r=this[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),0!=(128&r)&&(r|=-256),0==i&&(128&this.s)!=(128&r)&&++i,(i>0||r!=this.s)&&(t[i++]=r);return t},BigInteger.prototype.equals=function bnEquals(e){return 0==this.compareTo(e)},BigInteger.prototype.min=function bnMin(e){return this.compareTo(e)<0?this:e},BigInteger.prototype.max=function bnMax(e){return this.compareTo(e)>0?this:e},BigInteger.prototype.and=function bnAnd(e){var t=nbi();return this.bitwiseTo(e,op_and,t),t},BigInteger.prototype.or=function bnOr(e){var t=nbi();return this.bitwiseTo(e,op_or,t),t},BigInteger.prototype.xor=function bnXor(e){var t=nbi();return this.bitwiseTo(e,op_xor,t),t},BigInteger.prototype.andNot=function bnAndNot(e){var t=nbi();return this.bitwiseTo(e,op_andnot,t),t},BigInteger.prototype.not=function bnNot(){for(var e=nbi(),t=0;t<this.t;++t)e[t]=this.DM&~this[t];return e.t=this.t,e.s=~this.s,e},BigInteger.prototype.shiftLeft=function bnShiftLeft(e){var t=nbi();return e<0?this.rShiftTo(-e,t):this.lShiftTo(e,t),t},BigInteger.prototype.shiftRight=function bnShiftRight(e){var t=nbi();return e<0?this.lShiftTo(-e,t):this.rShiftTo(e,t),t},BigInteger.prototype.getLowestSetBit=function bnGetLowestSetBit(){for(var e=0;e<this.t;++e)if(0!=this[e])return e*this.DB+lbit(this[e]);return this.s<0?this.t*this.DB:-1},BigInteger.prototype.bitCount=function bnBitCount(){for(var e=0,t=this.s&this.DM,r=0;r<this.t;++r)e+=cbit(this[r]^t);return e},BigInteger.prototype.testBit=function bnTestBit(e){var t=Math.floor(e/this.DB);return t>=this.t?0!=this.s:0!=(this[t]&1<<e%this.DB)},BigInteger.prototype.setBit=function bnSetBit(e){return this.changeBit(e,op_or)},BigInteger.prototype.clearBit=function bnClearBit(e){return this.changeBit(e,op_andnot)},BigInteger.prototype.flipBit=function bnFlipBit(e){return this.changeBit(e,op_xor)},BigInteger.prototype.add=function bnAdd(e){var t=nbi();return this.addTo(e,t),t},BigInteger.prototype.subtract=function bnSubtract(e){var t=nbi();return this.subTo(e,t),t},BigInteger.prototype.multiply=function bnMultiply(e){var t=nbi();return this.multiplyTo(e,t),t},BigInteger.prototype.divide=function bnDivide(e){var t=nbi();return this.divRemTo(e,t,null),t},BigInteger.prototype.remainder=function bnRemainder(e){var t=nbi();return this.divRemTo(e,null,t),t},BigInteger.prototype.divideAndRemainder=function bnDivideAndRemainder(e){var t=nbi(),r=nbi();return this.divRemTo(e,t,r),new Array(t,r)},BigInteger.prototype.modPow=function bnModPow(e,t){var r,n,i=e.bitLength(),o=nbv(1);if(i<=0)return o;r=i<18?1:i<48?3:i<144?4:i<768?5:6,n=i<8?new Classic(t):t.isEven()?new Barrett(t):new Montgomery(t);var s=new Array,a=3,u=r-1,c=(1<<r)-1;if(s[1]=n.convert(this),r>1){var h=nbi();for(n.sqrTo(s[1],h);a<=c;)s[a]=nbi(),n.mulTo(h,s[a-2],s[a]),a+=2}var f,l,g=e.t-1,p=!0,d=nbi();for(i=nbits(e[g])-1;g>=0;){for(i>=u?f=e[g]>>i-u&c:(f=(e[g]&(1<<i+1)-1)<<u-i,g>0&&(f|=e[g-1]>>this.DB+i-u)),a=r;0==(1&f);)f>>=1,--a;if((i-=a)<0&&(i+=this.DB,--g),p)s[f].copyTo(o),p=!1;else{for(;a>1;)n.sqrTo(o,d),n.sqrTo(d,o),a-=2;a>0?n.sqrTo(o,d):(l=o,o=d,d=l),n.mulTo(d,s[f],o)}for(;g>=0&&0==(e[g]&1<<i);)n.sqrTo(o,d),l=o,o=d,d=l,--i<0&&(i=this.DB-1,--g)}return n.revert(o)},BigInteger.prototype.modInverse=function bnModInverse(e){var t=e.isEven();if(this.isEven()&&t||0==e.signum())return BigInteger.ZERO;for(var r=e.clone(),n=this.clone(),i=nbv(1),o=nbv(0),s=nbv(0),a=nbv(1);0!=r.signum();){for(;r.isEven();)r.rShiftTo(1,r),t?(i.isEven()&&o.isEven()||(i.addTo(this,i),o.subTo(e,o)),i.rShiftTo(1,i)):o.isEven()||o.subTo(e,o),o.rShiftTo(1,o);for(;n.isEven();)n.rShiftTo(1,n),t?(s.isEven()&&a.isEven()||(s.addTo(this,s),a.subTo(e,a)),s.rShiftTo(1,s)):a.isEven()||a.subTo(e,a),a.rShiftTo(1,a);r.compareTo(n)>=0?(r.subTo(n,r),t&&i.subTo(s,i),o.subTo(a,o)):(n.subTo(r,n),t&&s.subTo(i,s),a.subTo(o,a))}return 0!=n.compareTo(BigInteger.ONE)?BigInteger.ZERO:a.compareTo(e)>=0?a.subtract(e):a.signum()<0?(a.addTo(e,a),a.signum()<0?a.add(e):a):a},BigInteger.prototype.pow=function bnPow(e){return this.exp(e,new NullExp)},BigInteger.prototype.gcd=function bnGCD(e){var t=this.s<0?this.negate():this.clone(),r=e.s<0?e.negate():e.clone();if(t.compareTo(rLine truncated
|
||||||
|
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||||
|
*/function rng_seed_time(){!function rng_seed_int(e){U[M++]^=255&e,U[M++]^=e>>8&255,U[M++]^=e>>16&255,U[M++]^=e>>24&255,M>=L&&(M-=L)}((new Date).getTime())}if(null==U){var D;if(U=new Array,M=0,void 0!==p&&(void 0!==p.crypto||void 0!==p.msCrypto)){var N=p.crypto||p.msCrypto;if(N.getRandomValues){var O=new Uint8Array(32);for(N.getRandomValues(O),D=0;D<32;++D)U[M++]=O[D]}else if("Netscape"==u.appName&&u.appVersion<"5"){var H=p.crypto.random(32);for(D=0;D<H.length;++D)U[M++]=255&H.charCodeAt(D)}}for(;M<L;)D=Math.floor(65536*Math.random()),U[M++]=D>>>8,U[M++]=255&D;M=0,rng_seed_time()}function rng_get_byte(){if(null==T){for(rng_seed_time(),(T=function prng_newstate(){return new Arcfour}()).init(U),M=0;M<U.length;++M)U[M]=0;M=0}return T.next()}function SecureRandom(){}
|
||||||
|
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||||
|
*/
|
||||||
|
function parseBigInt(e,t){return new BigInteger(e,t)}function oaep_mgf1_arr(e,t,r){for(var n="",i=0;n.length<t;)n+=r(String.fromCharCode.apply(String,e.concat([(4278190080&i)>>24,(16711680&i)>>16,(65280&i)>>8,255&i]))),i+=1;return n}function RSAKey(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}
|
||||||
|
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||||
|
*/
|
||||||
|
function ECFieldElementFp(e,t){this.x=t,this.q=e}function ECPointFp(e,t,r,n){this.curve=e,this.x=t,this.y=r,this.z=null==n?BigInteger.ONE:n,this.zinv=null}function ECCurveFp(e,t,r){this.q=e,this.a=this.fromBigInteger(t),this.b=this.fromBigInteger(r),this.infinity=new ECPointFp(this,null,null)}SecureRandom.prototype.nextBytes=function rng_get_bytes(e){var t;for(t=0;t<e.length;++t)e[t]=rng_get_byte()},RSAKey.prototype.doPublic=function RSADoPublic(e){return e.modPowInt(this.e,this.n)},RSAKey.prototype.setPublic=function RSASetPublic(e,t){if(this.isPublic=!0,this.isPrivate=!1,"string"!=typeof e)this.n=e,this.e=t;else{if(!(null!=e&&null!=t&&e.length>0&&t.length>0))throw"Invalid RSA public key";this.n=parseBigInt(e,16),this.e=parseInt(t,16)}},RSAKey.prototype.encrypt=function RSAEncrypt(e){var t=function pkcs1pad2(e,t){if(t<e.length+11)throw"Message too long for RSA";for(var r=new Array,n=e.length-1;n>=0&&t>0;){var i=e.charCodeAt(n--);i<128?r[--t]=i:i>127&&i<2048?(r[--t]=63&i|128,r[--t]=i>>6|192):(r[--t]=63&i|128,r[--t]=i>>6&63|128,r[--t]=i>>12|224)}r[--t]=0;for(var o=new SecureRandom,s=new Array;t>2;){for(s[0]=0;0==s[0];)o.nextBytes(s);r[--t]=s[0]}return r[--t]=2,r[--t]=0,new BigInteger(r)}(e,this.n.bitLength()+7>>3);if(null==t)return null;var r=this.doPublic(t);if(null==r)return null;var n=r.toString(16);return 0==(1&n.length)?n:"0"+n},RSAKey.prototype.encryptOAEP=function RSAEncryptOAEP(e,t,r){var n=function oaep_pad(e,t,r,n){var i=K.crypto.MessageDigest,o=K.crypto.Util,s=null;if(r||(r="sha1"),"string"==typeof r&&(s=i.getCanonicalAlgName(r),n=i.getHashLength(s),r=function f(e){return hextorstr(o.hashHex(rstrtohex(e),s))}),e.length+2*n+2>t)throw"Message too long for RSA";var a,u="";for(a=0;a<t-e.length-2*n-2;a+=1)u+="\0";var c=r("")+u+""+e,h=new Array(n);(new SecureRandom).nextBytes(h);var l=oaep_mgf1_arr(h,c.length,r),g=[];for(a=0;a<c.length;a+=1)g[a]=c.charCodeAt(a)^l.charCodeAt(a);var p=oaep_mgf1_arr(g,h.length,r),d=[0];for(a=0;a<h.length;a+=1)d[a+1]=h[a]^p.charCodeAt(a);return new BigInteger(d.concat(g))}(e,this.n.bitLength()+7>>3,t,r);if(null==n)return null;var i=this.doPublic(n);if(null==i)return null;var o=i.toString(16);return 0==(1&o.length)?o:"0"+o},RSAKey.prototype.type="RSA",ECFieldElementFp.prototype.equals=function feFpEquals(e){return e==this||this.q.equals(e.q)&&this.x.equals(e.x)},ECFieldElementFp.prototype.toBigInteger=function feFpToBigInteger(){return this.x},ECFieldElementFp.prototype.negate=function feFpNegate(){return new ECFieldElementFp(this.q,this.x.negate().mod(this.q))},ECFieldElementFp.prototype.add=function feFpAdd(e){return new ECFieldElementFp(this.q,this.x.add(e.toBigInteger()).mod(this.q))},ECFieldElementFp.prototype.subtract=function feFpSubtract(e){return new ECFieldElementFp(this.q,this.x.subtract(e.toBigInteger()).mod(this.q))},ECFieldElementFp.prototype.multiply=function feFpMultiply(e){return new ECFieldElementFp(this.q,this.x.multiply(e.toBigInteger()).mod(this.q))},ECFieldElementFp.prototype.square=function feFpSquare(){return new ECFieldElementFp(this.q,this.x.square().mod(this.q))},ECFieldElementFp.prototype.divide=function feFpDivide(e){return new ECFieldElementFp(this.q,this.x.multiply(e.toBigInteger().modInverse(this.q)).mod(this.q))},ECPointFp.prototype.getX=function pointFpGetX(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))},ECPointFp.prototype.getY=function pointFpGetY(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))},ECPointFp.prototype.equals=function pointFpEquals(e){return e==this||(this.isInfinity()?e.isInfinity():e.isInfinity()?this.isInfinity():!!e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q).equals(BigInteger.ZERO)&&e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q).equals(BigInteger.ZERO))},ECPointFp.prototype.isInfinity=function pointFpIsInfinity(){return null==this.x&&null==this.y||this.z.equals(BigInteger.ZERO)&&!this.y.toBigInteger().equals(BigInteger.ZERO)},ECPointFp.prototype.negate=function pointFpNegate(){return new ECPointFp(this.curve,this.x,this.y.negate(),this.z)},ECPointFp.prototype.add=function pointFpAdd(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q),r=e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q);if(BigInteger.ZERO.equals(r))return BigInteger.ZERO.equals(t)?this.twice():this.curve.getInfinity();var n=new BigInteger("3"),i=this.x.toBigInteger(),o=this.y.toBigInteger(),s=(e.x.toBigInteger(),e.y.toBigInteger(),r.square()),a=s.multiply(r),u=i.multiply(s),c=t.square().multiply(this.z),h=c.subtract(u.shiftLeft(1)).multiply(e.z).subtract(a).multiply(rLine truncated
|
||||||
|
/*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval
|
||||||
|
*/
|
||||||
|
var K,q,W,V=function(){var e=new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)|(?:"(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))*"))',"g"),t=new RegExp("\\\\(?:([^u])|u(.{4}))","g"),r={'"':'"',"/":"/","\\":"\\",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};function h(e,t,n){return t?r[t]:String.fromCharCode(parseInt(n,16))}var n=new String(""),o=(Object,Array,Object.hasOwnProperty);return function(r,a){var u,c,f=r.match(e),l=f[0],g=!1;"{"===l?u={}:"["===l?u=[]:(u=[],g=!0);for(var p=[u],d=1-g,v=f.length;d<v;++d){var y;switch((l=f[d]).charCodeAt(0)){default:(y=p[0])[c||y.length]=+l,c=void 0;break;case 34:if(-1!==(l=l.substring(1,l.length-1)).indexOf("\\")&&(l=l.replace(t,h)),y=p[0],!c){if(!(y instanceof Array)){c=l||n;break}c=y.length}y[c]=l,c=void 0;break;case 91:y=p[0],p.unshift(y[c||y.length]=[]),c=void 0;break;case 93:p.shift();break;case 102:(y=p[0])[c||y.length]=!1,c=void 0;break;case 110:(y=p[0])[c||y.length]=null,c=void 0;break;case 116:(y=p[0])[c||y.length]=!0,c=void 0;break;case 123:y=p[0],p.unshift(y[c||y.length]={}),c=void 0;break;case 125:p.shift()}}if(g){if(1!==p.length)throw new Error;u=u[0]}else if(p.length)throw new Error;if(a){u=function s(e,t){var r=e[t];if(r&&"object"===(void 0===r?"undefined":i(r))){var n=null;for(var u in r)if(o.call(r,u)&&r!==e){var c=s(r,u);void 0!==c?r[u]=c:(n||(n=[]),n.push(u))}if(n)for(var h=n.length;--h>=0;)delete r[n[h]]}return a.call(e,t,r)}({"":u},"")}return u}}(),J=new function(){};function stoBA(e){for(var t=new Array,r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function BAtos(e){for(var t="",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t}function BAtohex(e){for(var t="",r=0;r<e.length;r++){var n=e[r].toString(16);1==n.length&&(n="0"+n),t+=n}return t}function stohex(e){return BAtohex(stoBA(e))}function b64tob64u(e){return e=(e=(e=e.replace(/\=/g,"")).replace(/\+/g,"-")).replace(/\//g,"_")}function b64utob64(e){return e.length%4==2?e+="==":e.length%4==3&&(e+="="),e=(e=e.replace(/-/g,"+")).replace(/_/g,"/")}function hextob64u(e){return e.length%2==1&&(e="0"+e),b64tob64u(hex2b64(e))}function b64utohex(e){return b64tohex(b64utob64(e))}function utf8tohex(e){return uricmptohex(encodeURIComponentAll(e))}function hextoutf8(e){return decodeURIComponent(hextouricmp(e))}function hextorstr(e){for(var t="",r=0;r<e.length-1;r+=2)t+=String.fromCharCode(parseInt(e.substr(r,2),16));return t}function rstrtohex(e){for(var t="",r=0;r<e.length;r++)t+=("0"+e.charCodeAt(r).toString(16)).slice(-2);return t}function hextob64(e){return hex2b64(e)}function hextob64nl(e){var t=hextob64(e).replace(/(.{64})/g,"$1\r\n");return t=t.replace(/\r\n$/,"")}function b64nltohex(e){return b64tohex(e.replace(/[^0-9A-Za-z\/+=]*/g,""))}function hextopem(e,t){return"-----BEGIN "+t+"-----\r\n"+hextob64nl(e)+"\r\n-----END "+t+"-----\r\n"}function pemtohex(e,t){if(-1==e.indexOf("-----BEGIN "))throw"can't find PEM header: "+t;return b64nltohex(e=void 0!==t?(e=e.replace("-----BEGIN "+t+"-----","")).replace("-----END "+t+"-----",""):(e=e.replace(/-----BEGIN [^-]+-----/,"")).replace(/-----END [^-]+-----/,""))}function zulutomsec(e){var t,r,n,i,o,s,a,u,c,h,f;if(f=e.match(/^(\d{2}|\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(|\.\d+)Z$/))return u=f[1],t=parseInt(u),2===u.length&&(50<=t&&t<100?t=1900+t:0<=t&&t<50&&(t=2e3+t)),r=parseInt(f[2])-1,n=parseInt(f[3]),i=parseInt(f[4]),o=parseInt(f[5]),s=parseInt(f[6]),a=0,""!==(c=f[7])&&(h=(c.substr(1)+"00").substr(0,3),a=parseInt(h)),Date.UTC(t,r,n,i,o,s,a);throw"unsupported zulu format: "+e}function zulutosec(e){return~~(zulutomsec(e)/1e3)}function uricmptohex(e){return e.replace(/%/g,"")}function hextouricmp(e){return e.replace(/(..)/g,"%$1")}function ipv6tohex(e){var t="malformed IPv6 address";if(!e.match(/^[0-9A-Fa-f:]+$/))throw t;var r=(e=e.toLowerCase()).split(":").length-1;if(r<2)throw t;var n=":".repeat(7-r+2),i=(e=e.replace("::",n)).split(":");if(8!=i.length)throw t;for(var o=0;o<8;o++)i[o]=("0000"+i[o]).slice(-4);return i.join("")}function hextoipv6(e){if(!e.match(/^[0-9A-Fa-f]{32}$/))throw"malformed IPv6 address octet";for(var t=(e=e.toLowerCase()).match(/.{1,4}/g),r=0;r<8;r++)t[r]=t[r].replace(/^0+/,""),""==t[r]&&(t[r]="0");var n=(e=":"+t.join(":")+":").match(/:(0:){2,}/g);if(null===n)return e.slice(1,-1);var i="";for(r=0;r<n.length;r++)n[r].length>i.length&&(i=n[r]);return(e=e.replace(i,"::")).slice(1,-1)}function hextoip(e){var t="malformed hex value";if(!e.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/))throw t;if(8!=e.length)return 32==e.length?hextoipv6(e):e;try{return parseInt(e.substr(0,2),16)+"."+parseInt(e.substr(2,2),16)+"."+parseInt(e.substr(4,2),16)+"."+parseInt(e.substr(6,2),16)}catch(e){throw t}}function encodeURIComponentAll(e){for(var t=encodeURIComponent(e),r="",n=0;n<t.length;n++)"%"==t[n]?(r+=t.substr(n,3),n+=2):r=r+"%"+stohex(t[n]);return r}function hextoposhex(e){return e.length%2==1?"0"+e:e.substr(0,1)>"7"?"00"+e:e}J.getLblen=function(e,t){if("8"!=e.substr(t+2,Line truncated
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n():"function"==typeof define&&define.amd?define(n):n()}(0,function(){"use strict";function e(e){var n=this.constructor;return this.then(function(t){return n.resolve(e()).then(function(){return t})},function(t){return n.resolve(e()).then(function(){return n.reject(t)})})}function n(){}function t(e){if(!(this instanceof t))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],u(e,this)}function o(e,n){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,t._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null!==t){var o;try{o=t(e._value)}catch(f){return void i(n.promise,f)}r(n.promise,o)}else(1===e._state?r:i)(n.promise,e._value)})):e._deferreds.push(n)}function r(e,n){try{if(n===e)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var o=n.then;if(n instanceof t)return e._state=3,e._value=n,void f(e);if("function"==typeof o)return void u(function(e,n){return function(){e.apply(n,arguments)}}(o,n),e)}e._state=1,e._value=n,f(e)}catch(r){i(e,r)}}function i(e,n){e._state=2,e._value=n,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&t._immediateFn(function(){e._handled||t._unhandledRejectionFn(e._value)});for(var n=0,r=e._deferreds.length;r>n;n++)o(e,e._deferreds[n]);e._deferreds=null}function u(e,n){var t=!1;try{e(function(e){t||(t=!0,r(n,e))},function(e){t||(t=!0,i(n,e))})}catch(o){if(t)return;t=!0,i(n,o)}}var c=setTimeout;t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,t){var r=new this.constructor(n);return o(this,new function(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}(e,t,r)),r},t.prototype["finally"]=e,t.all=function(e){return new t(function(n,t){function o(e,f){try{if(f&&("object"==typeof f||"function"==typeof f)){var u=f.then;if("function"==typeof u)return void u.call(f,function(n){o(e,n)},t)}r[e]=f,0==--i&&n(r)}catch(c){t(c)}}if(!e||"undefined"==typeof e.length)throw new TypeError("Promise.all accepts an array");var r=Array.prototype.slice.call(e);if(0===r.length)return n([]);for(var i=r.length,f=0;r.length>f;f++)o(f,r[f])})},t.resolve=function(e){return e&&"object"==typeof e&&e.constructor===t?e:new t(function(n){n(e)})},t.reject=function(e){return new t(function(n,t){t(e)})},t.race=function(e){return new t(function(n,t){for(var o=0,r=e.length;r>o;o++)e[o].then(n,t)})},t._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){c(e,0)},t._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var l=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"Promise"in l?l.Promise.prototype["finally"]||(l.Promise.prototype["finally"]=e):l.Promise=t});
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Silent OpenID Connect Token Refresh Page</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.7/es5-shim.min.js"></script>
|
||||||
|
<script type="text/javascript" src='es6-shim.min.js'></script>
|
||||||
|
<script type="text/javascript" src="oidc-client.min.js"></script>
|
||||||
|
<script type="text/javascript" src='polyfill.min.js'></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
new UserManager().signinSilentCallback().catch(console.error);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -12,7 +12,7 @@ import builtins from 'rollup-plugin-node-builtins';
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
external: ['react', 'react-dom'],
|
external: ['react', 'react-dom'],
|
||||||
input: 'src/index.js',
|
input: 'src/index_publish.js',
|
||||||
output: [
|
output: [
|
||||||
{
|
{
|
||||||
file: pkg.main,
|
file: pkg.main,
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
html,
|
||||||
|
body,
|
||||||
|
#root {
|
||||||
|
background-color: black;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
font-family: Roboto, OpenSans, HelveticaNeue-Light, Helvetica Neue Light,
|
||||||
|
Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;
|
||||||
|
}
|
||||||
@@ -10,6 +10,8 @@ import ui from './redux/ui.js';
|
|||||||
import OHIFStandaloneViewer from './OHIFStandaloneViewer';
|
import OHIFStandaloneViewer from './OHIFStandaloneViewer';
|
||||||
import OHIFCornerstoneViewportPlugin from './connectedComponents/OHIFCornerstoneViewportPlugin/OHIFCornerstoneViewportPlugin.js';
|
import OHIFCornerstoneViewportPlugin from './connectedComponents/OHIFCornerstoneViewportPlugin/OHIFCornerstoneViewportPlugin.js';
|
||||||
import WhiteLabellingContext from './WhiteLabellingContext';
|
import WhiteLabellingContext from './WhiteLabellingContext';
|
||||||
|
import OHIFDicomPDFViewportPlugin from './connectedComponents/OHIFDicomPDFViewportPlugin/OHIFDicomPDFViewportPlugin.js';
|
||||||
|
import OHIFDicomPDFSopClassHandlerPlugin from './connectedComponents/OHIFDicomPDFViewportPlugin/OHIFDicomPDFSopClassHandlerPlugin.js';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
loadUser,
|
loadUser,
|
||||||
@@ -101,13 +103,31 @@ const buttonsAction = OHIF.redux.actions.setAvailableButtons(defaultButtons);
|
|||||||
|
|
||||||
store.dispatch(buttonsAction);
|
store.dispatch(buttonsAction);
|
||||||
|
|
||||||
const pluginAction = OHIF.redux.actions.addPlugin({
|
|
||||||
|
const { plugins } = OHIF;
|
||||||
|
const { PLUGIN_TYPES } = plugins;
|
||||||
|
|
||||||
|
const cornerstonePluginAction = OHIF.redux.actions.addPlugin({
|
||||||
id: 'cornerstone',
|
id: 'cornerstone',
|
||||||
type: 'viewport',
|
type: 'viewport',
|
||||||
component: OHIFCornerstoneViewportPlugin
|
component: OHIFCornerstoneViewportPlugin
|
||||||
});
|
});
|
||||||
|
|
||||||
store.dispatch(pluginAction);
|
const pdfPluginAction = OHIF.redux.actions.addPlugin({
|
||||||
|
id: 'pdf',
|
||||||
|
type: PLUGIN_TYPES.VIEWPORT,
|
||||||
|
component: OHIFDicomPDFViewportPlugin
|
||||||
|
});
|
||||||
|
|
||||||
|
const pdfPluginActionSopClass = OHIF.redux.actions.addPlugin({
|
||||||
|
id: 'pdf_sopClassHandler',
|
||||||
|
type: PLUGIN_TYPES.SOP_CLASS_HANDLER,
|
||||||
|
component: OHIFDicomPDFSopClassHandlerPlugin
|
||||||
|
});
|
||||||
|
|
||||||
|
store.dispatch(cornerstonePluginAction);
|
||||||
|
store.dispatch(pdfPluginAction);
|
||||||
|
store.dispatch(pdfPluginActionSopClass);
|
||||||
|
|
||||||
// TODO[react] Use a provider when the whole tree is React
|
// TODO[react] Use a provider when the whole tree is React
|
||||||
window.store = store;
|
window.store = store;
|
||||||
@@ -168,7 +188,7 @@ function handleWebWorkerInit(basename) {
|
|||||||
|
|
||||||
class App extends Component {
|
class App extends Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
servers: PropTypes.array,
|
servers: PropTypes.object,
|
||||||
oidc: PropTypes.array,
|
oidc: PropTypes.array,
|
||||||
routerBasename: PropTypes.string
|
routerBasename: PropTypes.string
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CallbackPage extends Component {
|
|||||||
this.props.history.push(pathname);
|
this.props.history.push(pathname);
|
||||||
}}
|
}}
|
||||||
errorCallback={error => {
|
errorCallback={error => {
|
||||||
this.props.history.push('/');
|
//this.props.history.push("/");
|
||||||
throw new Error(error);
|
throw new Error(error);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { Route, Switch } from 'react-router-dom';
|
|||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { ViewerbaseDragDropContext } from 'react-viewerbase';
|
import { ViewerbaseDragDropContext } from 'react-viewerbase';
|
||||||
import ViewerRouting from './routes/ViewerRouting.js';
|
import ViewerRouting from './routes/ViewerRouting.js';
|
||||||
|
import StudyListRouting from './studylist/StudyListRouting.js'
|
||||||
import StandaloneRouting from './routes/StandaloneRouting.js';
|
import StandaloneRouting from './routes/StandaloneRouting.js';
|
||||||
import IHEInvokeImageDisplay from './routes/IHEInvokeImageDisplay.js';
|
import IHEInvokeImageDisplay from './routes/IHEInvokeImageDisplay.js';
|
||||||
import CallbackPage from './CallbackPage.js';
|
import CallbackPage from './CallbackPage.js';
|
||||||
@@ -67,7 +68,12 @@ class OHIFStandaloneViewer extends Component {
|
|||||||
<Switch>
|
<Switch>
|
||||||
<Route exact path="/silent-refresh.html" onEnter={reload} />
|
<Route exact path="/silent-refresh.html" onEnter={reload} />
|
||||||
<Route exact path="/logout-redirect.html" onEnter={reload} />
|
<Route exact path="/logout-redirect.html" onEnter={reload} />
|
||||||
<Route exact path="/" component={StandaloneRouting} />
|
<Route
|
||||||
|
exact
|
||||||
|
path="/studylist"
|
||||||
|
component={StudyListRouting}
|
||||||
|
/>
|
||||||
|
<Route exact path="/" component={StudyListRouting} />
|
||||||
<Route exact path="/viewer" component={StandaloneRouting} />
|
<Route exact path="/viewer" component={StandaloneRouting} />
|
||||||
<Route path="/viewer/:studyInstanceUids" component={ViewerRouting} />
|
<Route path="/viewer/:studyInstanceUids" component={ViewerRouting} />
|
||||||
<Route
|
<Route
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import OHIFLogo from './components/OHIFLogo/OHIFLogo.js';
|
import OHIFLogo from './components/OHIFLogo/OHIFLogo.js';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
const defaultContextValues = {
|
const defaultContextValues = {
|
||||||
logoComponent: OHIFLogo()
|
logoComponent: OHIFLogo()
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
studyInstanceUid,
|
studyInstanceUid,
|
||||||
seriesInstanceUid
|
seriesInstanceUid,
|
||||||
|
displaySet
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import React, { Component } from "react";
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
class ExampleViewportPlugin extends Component {
|
class ExampleViewportPlugin extends Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
studyInstanceUid: PropTypes.string.isRequired,
|
studyInstanceUid: PropTypes.string.isRequired,
|
||||||
seriesInstanceUid: PropTypes.string.isRequired
|
seriesInstanceUid: PropTypes.string.isRequired,
|
||||||
|
displaySet: PropTypes.object
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
@@ -13,9 +14,11 @@ class ExampleViewportPlugin extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (<div className="ExampleViewportPlugin">
|
return (
|
||||||
|
<div className="ExampleViewportPlugin">
|
||||||
<p>StudyInstanceUid: {this.props.studyInstanceUid}</p>
|
<p>StudyInstanceUid: {this.props.studyInstanceUid}</p>
|
||||||
<p>SeriesInstanceUid: {this.props.seriesInstanceUid}</p>
|
<p>SeriesInstanceUid: {this.props.seriesInstanceUid}</p>
|
||||||
|
{JSON.stringify(this.props.displaySet)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.entry-header.header-big {
|
.entry-header.header-big {
|
||||||
background: rgba(21, 25, 30, 0.7);
|
background: rgba(21,25,30,0.7);
|
||||||
padding: 10px var(--study-list-padding);
|
padding: 10px var(--study-list-padding);
|
||||||
height: auto;
|
height: auto;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -20,17 +20,42 @@
|
|||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-brand {
|
||||||
|
height: 30px;
|
||||||
|
text-decoration: none;
|
||||||
|
float: left;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
.entry-header.header-big .header-brand {
|
.entry-header.header-big .header-brand {
|
||||||
height: auto;
|
height: auto;
|
||||||
padding: 25px 0;
|
padding: 25px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.header-logo-image {
|
||||||
|
fill: transparent;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0 8px 0 0;
|
||||||
|
width: 30px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
.entry-header.header-big .header-logo-image {
|
.entry-header.header-big .header-logo-image {
|
||||||
margin: 0 20px 0 0;
|
margin: 0 20px 0 0;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-logo-text {
|
||||||
|
display: inline-block;
|
||||||
|
font-family: var(--logo-font-family);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: var(--logo-font-weight);
|
||||||
|
color: var(--text-primary-color);
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
.entry-header.header-big .header-logo-text {
|
.entry-header.header-big .header-logo-text {
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
line-height: 36px;
|
line-height: 36px;
|
||||||
|
|||||||
@@ -19,21 +19,21 @@ function Header({ home, location, children }) {
|
|||||||
return (
|
return (
|
||||||
<div className={`entry-header ${home ? 'header-big' : ''}`}>
|
<div className={`entry-header ${home ? 'header-big' : ''}`}>
|
||||||
<div className="header-left-box">
|
<div className="header-left-box">
|
||||||
{/*
|
{
|
||||||
state && state.studyLink &&
|
state && state.studyLink &&
|
||||||
<Link to={state.studyLink} className="header-btn header-viewerLink">
|
<Link to={state.studyLink} className="header-btn header-viewerLink">
|
||||||
Back to Viewer
|
Back to Viewer
|
||||||
</Link>
|
</Link>
|
||||||
*/}
|
}
|
||||||
|
|
||||||
{children}
|
{children}
|
||||||
|
|
||||||
{/*!home &&
|
{!home &&
|
||||||
<Link className='header-btn header-studyListLinkSection' to={{
|
<Link className='header-btn header-studyListLinkSection' to={{
|
||||||
pathname: "/",
|
pathname: "/",
|
||||||
state: { studyLink: location.pathname }
|
state: { studyLink: location.pathname }
|
||||||
}}>Study list</Link>
|
}}>Study list</Link>
|
||||||
*/}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="header-menu">
|
<div className="header-menu">
|
||||||
|
|||||||
@@ -2,67 +2,72 @@ import dicomParser from 'dicom-parser';
|
|||||||
import cornerstone from 'cornerstone-core';
|
import cornerstone from 'cornerstone-core';
|
||||||
import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';
|
import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';
|
||||||
import cornerstoneMath from 'cornerstone-math';
|
import cornerstoneMath from 'cornerstone-math';
|
||||||
import cornerstoneTools from 'cornerstone-tools';
|
|
||||||
import Hammer from 'hammerjs';
|
|
||||||
import OHIF from 'ohif-core';
|
import OHIF from 'ohif-core';
|
||||||
//import sha from './sha.js';
|
import sha from './sha.js';
|
||||||
//import version from './version.js';
|
import version from './version.js';
|
||||||
|
import { homepage } from '../package.json';
|
||||||
|
|
||||||
window.info = {
|
window.info = {
|
||||||
//sha,
|
sha,
|
||||||
//version,
|
version,
|
||||||
|
homepage
|
||||||
};
|
};
|
||||||
|
|
||||||
// For debugging
|
// For debugging
|
||||||
window.cornerstone = cornerstone;
|
window.cornerstone = cornerstone;
|
||||||
window.cornerstoneTools = cornerstoneTools;
|
|
||||||
window.cornerstoneWADOImageLoader = cornerstoneWADOImageLoader;
|
window.cornerstoneWADOImageLoader = cornerstoneWADOImageLoader;
|
||||||
|
|
||||||
cornerstoneTools.external.cornerstone = cornerstone;
|
|
||||||
cornerstoneTools.external.Hammer = Hammer;
|
|
||||||
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
|
|
||||||
cornerstoneTools.init();
|
|
||||||
|
|
||||||
cornerstoneWADOImageLoader.external.cornerstone = cornerstone;
|
cornerstoneWADOImageLoader.external.cornerstone = cornerstone;
|
||||||
cornerstoneWADOImageLoader.external.dicomParser = dicomParser;
|
cornerstoneWADOImageLoader.external.dicomParser = dicomParser;
|
||||||
|
|
||||||
OHIF.external.cornerstone = cornerstone;
|
OHIF.external.cornerstone = cornerstone;
|
||||||
OHIF.external.cornerstoneTools = cornerstoneTools;
|
|
||||||
OHIF.external.cornerstoneMath = cornerstoneMath;
|
OHIF.external.cornerstoneMath = cornerstoneMath;
|
||||||
OHIF.external.cornerstoneWADOImageLoader = cornerstoneWADOImageLoader;
|
OHIF.external.cornerstoneWADOImageLoader = cornerstoneWADOImageLoader;
|
||||||
|
|
||||||
OHIF.user.getAccessToken = () => {
|
// TODO: Is there a better way to guess ROOT_URL?
|
||||||
// TODO: Get the Redux store from somewhere else
|
let ROOT_URL = homepage;
|
||||||
const state = window.store.getState();
|
|
||||||
if (!state.oidc || !state.oidc.user) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return state.oidc.user.access_token;
|
// If the page we are on is not a subset of the expected homepage
|
||||||
|
// provided in the package.json file, we might be doing local development.
|
||||||
|
// In this case, set the base URL to the current location's origin.
|
||||||
|
/*if (homepage.includes(window.location.origin) === false) {
|
||||||
|
ROOT_URL = window.location.origin;
|
||||||
|
}
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
maxWebWorkers: Math.max(navigator.hardwareConcurrency - 1, 1),
|
||||||
|
startWebWorkersOnDemand: true,
|
||||||
|
webWorkerPath: ROOT_URL + '/cornerstoneWADOImageLoaderWebWorker.min.js',
|
||||||
|
taskConfiguration: {
|
||||||
|
decodeTask: {
|
||||||
|
loadCodecsOnStartup: true,
|
||||||
|
initializeCodecsOnStartup: false,
|
||||||
|
codecsPath: ROOT_URL + '/cornerstoneWADOImageLoaderCodecs.min.js',
|
||||||
|
usePDFJS: false,
|
||||||
|
strict: false
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
cornerstoneWADOImageLoader.configure({
|
cornerstoneWADOImageLoader.webWorkerManager.initialize(config);
|
||||||
beforeSend: function(xhr) {
|
*/
|
||||||
const headers = OHIF.DICOMWeb.getAuthorizationHeader();
|
|
||||||
|
|
||||||
if (headers.Authorization) {
|
OHIF.user.getAccessToken = () => {
|
||||||
xhr.setRequestHeader('Authorization', headers.Authorization);
|
// TODO: Get the Redux store from somewhere else
|
||||||
|
const state = window.store.getState();
|
||||||
|
if (!state.oidc || !state.oidc.user) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state.oidc.user.access_token;
|
||||||
|
}
|
||||||
|
|
||||||
|
cornerstoneWADOImageLoader.configure({
|
||||||
|
beforeSend: function(xhr) {
|
||||||
|
const headers = OHIF.DICOMWeb.getAuthorizationHeader();
|
||||||
|
|
||||||
|
if (headers.Authorization) {
|
||||||
|
xhr.setRequestHeader("Authorization", headers.Authorization);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Set the tool font and font size
|
|
||||||
// context.font = "[style] [variant] [weight] [size]/[line height] [font family]";
|
|
||||||
const fontFamily =
|
|
||||||
'Roboto, OpenSans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif';
|
|
||||||
cornerstoneTools.textStyle.setFont(`16px ${fontFamily}`);
|
|
||||||
|
|
||||||
// Set the tool width
|
|
||||||
cornerstoneTools.toolStyle.setToolWidth(2);
|
|
||||||
// Set color for inactive tools
|
|
||||||
cornerstoneTools.toolColors.setToolColor('rgb(255, 255, 0)');
|
|
||||||
|
|
||||||
// Set color for active tools
|
|
||||||
cornerstoneTools.toolColors.setActiveColor('rgb(0, 255, 0)');
|
|
||||||
|
|
||||||
cornerstoneTools.store.state.touchProximity = 40;
|
|
||||||
@@ -35,7 +35,13 @@ class FlexboxLayout extends Component {
|
|||||||
|
|
||||||
const thumbnails = study.displaySets.map((displaySet) => {
|
const thumbnails = study.displaySets.map((displaySet) => {
|
||||||
const { displaySetInstanceUid, seriesDescription, seriesNumber, instanceNumber, numImageFrames } = displaySet;
|
const { displaySetInstanceUid, seriesDescription, seriesNumber, instanceNumber, numImageFrames } = displaySet;
|
||||||
const imageId = displaySet.images[0].getImageId();
|
|
||||||
|
|
||||||
|
let imageId;
|
||||||
|
|
||||||
|
if (displaySet.images && displaySet.images.length) {
|
||||||
|
imageId = displaySet.images[0].getImageId();
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
imageId,
|
imageId,
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ OHIFComponentPlugin.propTypes = {
|
|||||||
id: PropTypes.string.isRequired,
|
id: PropTypes.string.isRequired,
|
||||||
init: PropTypes.func.isRequired,
|
init: PropTypes.func.isRequired,
|
||||||
destroy: PropTypes.func.isRequired,
|
destroy: PropTypes.func.isRequired,
|
||||||
children: PropTypes.node.isRequired
|
children: PropTypes.node
|
||||||
};
|
};
|
||||||
|
|
||||||
export default OHIFComponentPlugin;
|
export default OHIFComponentPlugin;
|
||||||
+14
-1
@@ -2,10 +2,23 @@ import React, { Component } from "react";
|
|||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
import OHIF from 'ohif-core';
|
import OHIF from 'ohif-core';
|
||||||
import ConnectedCornerstoneViewport from './ConnectedCornerstoneViewport';
|
import ConnectedCornerstoneViewport from './ConnectedCornerstoneViewport';
|
||||||
import OHIFComponentPlugin from './OHIFComponentPlugin.js';
|
import OHIFComponentPlugin from '../OHIFComponentPlugin.js';
|
||||||
|
import cornerstoneTools from "cornerstone-tools";
|
||||||
|
import cornerstone from "cornerstone-core";
|
||||||
|
import './config';
|
||||||
|
|
||||||
const { StackManager } = OHIF.utils;
|
const { StackManager } = OHIF.utils;
|
||||||
|
|
||||||
|
// Create the synchronizer used to update reference lines
|
||||||
|
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer('cornerstonenewimage', cornerstoneTools.updateImageSynchronizer);
|
||||||
|
|
||||||
|
// Metadata configuration
|
||||||
|
const metadataProvider = new OHIF.cornerstone.MetadataProvider();
|
||||||
|
|
||||||
|
cornerstone.metaData.addProvider(metadataProvider.provider.bind(metadataProvider));
|
||||||
|
|
||||||
|
StackManager.setMetadataProvider(metadataProvider);
|
||||||
|
|
||||||
class OHIFCornerstoneViewportPlugin extends Component {
|
class OHIFCornerstoneViewportPlugin extends Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
studies: PropTypes.object,
|
studies: PropTypes.object,
|
||||||
|
|||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
import cornerstone from 'cornerstone-core';
|
||||||
|
import cornerstoneMath from 'cornerstone-math';
|
||||||
|
import cornerstoneTools from 'cornerstone-tools';
|
||||||
|
import Hammer from 'hammerjs';
|
||||||
|
import OHIF from 'ohif-core';
|
||||||
|
|
||||||
|
// For debugging
|
||||||
|
window.cornerstoneTools = cornerstoneTools;
|
||||||
|
|
||||||
|
cornerstoneTools.external.cornerstone = cornerstone;
|
||||||
|
cornerstoneTools.external.Hammer = Hammer;
|
||||||
|
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
|
||||||
|
cornerstoneTools.init();
|
||||||
|
|
||||||
|
OHIF.external.cornerstoneTools = cornerstoneTools;
|
||||||
|
|
||||||
|
// Set the tool font and font size
|
||||||
|
// context.font = "[style] [variant] [weight] [size]/[line height] [font family]";
|
||||||
|
const fontFamily =
|
||||||
|
'Roboto, OpenSans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif';
|
||||||
|
cornerstoneTools.textStyle.setFont(`16px ${fontFamily}`);
|
||||||
|
|
||||||
|
// Set the tool width
|
||||||
|
cornerstoneTools.toolStyle.setToolWidth(2);
|
||||||
|
// Set color for inactive tools
|
||||||
|
cornerstoneTools.toolColors.setToolColor('rgb(255, 255, 0)');
|
||||||
|
|
||||||
|
// Set color for active tools
|
||||||
|
cornerstoneTools.toolColors.setActiveColor('rgb(0, 255, 0)');
|
||||||
|
|
||||||
|
cornerstoneTools.store.state.touchProximity = 40;
|
||||||
+80
@@ -0,0 +1,80 @@
|
|||||||
|
import React, { Component } from "react";
|
||||||
|
import dicomParser from 'dicom-parser';
|
||||||
|
import TypedArrayProp from './TypedArrayProp';
|
||||||
|
|
||||||
|
// TODO: Should probably use dcmjs for this
|
||||||
|
const SOP_CLASS_UIDS = {
|
||||||
|
ENCAPSULATED_PDF: '1.2.840.10008.5.1.4.1.1.104.1'
|
||||||
|
};
|
||||||
|
|
||||||
|
class DicomPDFViewport extends Component {
|
||||||
|
state = {
|
||||||
|
fileURL: null,
|
||||||
|
error: null
|
||||||
|
};
|
||||||
|
|
||||||
|
static propTypes = {
|
||||||
|
byteArray: TypedArrayProp.uint8,
|
||||||
|
};
|
||||||
|
|
||||||
|
renderPDF = (dataSet) => {
|
||||||
|
debugger;
|
||||||
|
const sopClassUid = dataSet.string('x00080016');
|
||||||
|
|
||||||
|
if (sopClassUid !== SOP_CLASS_UIDS.ENCAPSULATED_PDF) {
|
||||||
|
throw new Error('This is not a DICOM-encapsulated PDF');
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileTag = dataSet.elements.x00420011;
|
||||||
|
const offset = fileTag.dataOffset;
|
||||||
|
const remainder = offset + fileTag.length;
|
||||||
|
const pdfByteArray = dataSet.byteArray.slice(offset, remainder);
|
||||||
|
const PDF = new Blob([pdfByteArray], {type: 'application/pdf'});
|
||||||
|
const fileURL = URL.createObjectURL(PDF);
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
fileURL
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
parseByteArray = (byteArray) => {
|
||||||
|
const options = {
|
||||||
|
untilTag: ''
|
||||||
|
};
|
||||||
|
|
||||||
|
let dataSet;
|
||||||
|
|
||||||
|
try {
|
||||||
|
dataSet = dicomParser.parseDicom(byteArray, options);
|
||||||
|
} catch(error) {
|
||||||
|
this.setState({
|
||||||
|
error
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return dataSet
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
const dataSet = this.parseByteArray(this.props.byteArray);
|
||||||
|
|
||||||
|
this.renderPDF(dataSet);
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className={'DicomPDFViewport'} style={{width: '100%', height: '100%'}}>
|
||||||
|
{this.state.fileURL &&
|
||||||
|
<object data={this.state.fileURL} type="application/pdf" width="100%" height="100%">
|
||||||
|
</object>
|
||||||
|
}
|
||||||
|
{this.state.error &&
|
||||||
|
<h2>{JSON.stringify(this.state.error)}</h2>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default DicomPDFViewport;
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
import OHIF from "ohif-core";
|
||||||
|
|
||||||
|
const { plugins, utils } = OHIF;
|
||||||
|
const { PLUGIN_TYPES } = plugins;
|
||||||
|
|
||||||
|
// TODO: Should probably use dcmjs for this
|
||||||
|
const SOP_CLASS_UIDS = {
|
||||||
|
ENCAPSULATED_PDF: '1.2.840.10008.5.1.4.1.1.104.1'
|
||||||
|
};
|
||||||
|
|
||||||
|
const OHIFDicomPDFSopClassHandlerPlugin = {
|
||||||
|
id: 'OHIFDicomPDFSopClassHandlerPlugin',
|
||||||
|
type: PLUGIN_TYPES.SOP_CLASS_HANDLER,
|
||||||
|
sopClassUids: [
|
||||||
|
SOP_CLASS_UIDS.ENCAPSULATED_PDF
|
||||||
|
],
|
||||||
|
getDisplaySetFromSeries(series, study) {
|
||||||
|
const instance = series.getFirstInstance();
|
||||||
|
|
||||||
|
return {
|
||||||
|
plugin: 'pdf',
|
||||||
|
displaySetInstanceUid: utils.guid(),
|
||||||
|
wadoRoot: study.getData().wadoRoot,
|
||||||
|
wadoUri: instance.getData().wadouri,
|
||||||
|
sopInstanceUid: instance.getSOPInstanceUID(),
|
||||||
|
seriesInstanceUid: series.getSeriesInstanceUID(),
|
||||||
|
studyInstanceUid: study.getStudyInstanceUID()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default OHIFDicomPDFSopClassHandlerPlugin;
|
||||||
+77
@@ -0,0 +1,77 @@
|
|||||||
|
import React, { Component } from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import OHIF from 'ohif-core';
|
||||||
|
import OHIFComponentPlugin from '../OHIFComponentPlugin.js';
|
||||||
|
import DicomPDFViewport from './DicomPDFViewport';
|
||||||
|
|
||||||
|
const { DICOMWeb } = OHIF;
|
||||||
|
|
||||||
|
class OHIFDicomPDFViewportPlugin extends Component {
|
||||||
|
static propTypes = {
|
||||||
|
studies: PropTypes.object,
|
||||||
|
displaySet: PropTypes.object,
|
||||||
|
viewportIndex: PropTypes.number,
|
||||||
|
};
|
||||||
|
|
||||||
|
state = {
|
||||||
|
byteArray: null,
|
||||||
|
error: null
|
||||||
|
}
|
||||||
|
|
||||||
|
static id = 'DicomPDFViewportPlugin';
|
||||||
|
|
||||||
|
static init() {
|
||||||
|
console.log('DicomPDFViewportPlugin init()');
|
||||||
|
}
|
||||||
|
|
||||||
|
static destroy() {
|
||||||
|
console.log('DicomPDFViewportPlugin destroy()');
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
const { displaySet } = this.props.viewportData;
|
||||||
|
const { studyInstanceUid, seriesInstanceUid, sopInstanceUid, wadoRoot, wadoUri } = displaySet;
|
||||||
|
|
||||||
|
this.retrieveDicomData(studyInstanceUid, seriesInstanceUid, sopInstanceUid, wadoRoot, wadoUri).then(byteArray => {
|
||||||
|
this.setState({
|
||||||
|
byteArray
|
||||||
|
});
|
||||||
|
}, error => {
|
||||||
|
this.setState({
|
||||||
|
error
|
||||||
|
});
|
||||||
|
|
||||||
|
throw new Error(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
retrieveDicomData(studyInstanceUid, seriesInstanceUid, sopInstanceUid, wadoRoot, wadoUri) {
|
||||||
|
// TODO: Passing in a lot of data we aren't using
|
||||||
|
|
||||||
|
// TODO: Authorization header depends on the server. If we ever have multiple servers
|
||||||
|
// we will need to figure out how / when to pass this information in.
|
||||||
|
return fetch(wadoUri, {
|
||||||
|
headers: DICOMWeb.getAuthorizationHeader()
|
||||||
|
}).then(response => response.arrayBuffer()).then(arraybuffer => {
|
||||||
|
debugger;
|
||||||
|
return new Uint8Array(arraybuffer);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { id, init, destroy } = OHIFDicomPDFViewportPlugin;
|
||||||
|
const pluginProps = { id, init, destroy };
|
||||||
|
|
||||||
|
return (
|
||||||
|
<OHIFComponentPlugin {...pluginProps}>
|
||||||
|
{this.state.byteArray && <DicomPDFViewport byteArray={this.state.byteArray}/>}
|
||||||
|
{this.state.error &&
|
||||||
|
<h2>{JSON.stringify(this.state.error)}</h2>
|
||||||
|
}
|
||||||
|
</OHIFComponentPlugin>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default OHIFDicomPDFViewportPlugin;
|
||||||
+137
@@ -0,0 +1,137 @@
|
|||||||
|
// https://github.com/facebook/prop-types/issues/69
|
||||||
|
|
||||||
|
export const TypedArrayProp = {
|
||||||
|
any: (props, propName, componentName) => {
|
||||||
|
let obj = props[propName];
|
||||||
|
if (!(obj instanceof Float64Array ||
|
||||||
|
obj instanceof Float32Array ||
|
||||||
|
obj instanceof Int32Array ||
|
||||||
|
obj instanceof Int16Array ||
|
||||||
|
obj instanceof Int8Array ||
|
||||||
|
obj instanceof Uint32Array ||
|
||||||
|
obj instanceof Uint16Array ||
|
||||||
|
obj instanceof Uint8Array ||
|
||||||
|
obj instanceof Uint8ClampedArray)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a typed array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
float64: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Float64Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Float64Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
float32: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Float32Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Float32Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
float: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Float64Array ||
|
||||||
|
props[propName] instanceof Float32Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Float32Array or Float64Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
int32: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Int32Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected an Int32Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
int16: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Int16Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected an In16Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
int8: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Int8Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected an Int8Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
int: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Int32Array ||
|
||||||
|
props[propName] instanceof Int16Array ||
|
||||||
|
props[propName] instanceof Int8Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected an Int32Array, In16Array, or Int8Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
uint32: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Uint32Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Uint32Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
uint16: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Uint16Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Uint16Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
uint8: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Uint8Array)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Uint8Array.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
uint8clamped: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Uint8ClampedArray)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Uint8ClampedArray.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
uint: (props, propName, componentName) => {
|
||||||
|
if (!(props[propName] instanceof Uint32Array ||
|
||||||
|
props[propName] instanceof Uint16Array ||
|
||||||
|
props[propName] instanceof Uint8Array ||
|
||||||
|
props[propName] instanceof Uint8ClampedArray)) {
|
||||||
|
return new Error(
|
||||||
|
'Invalid prop `' + propName + '` supplied to' +
|
||||||
|
' `' + componentName + '`. Expected a Uint32Array, Uint16Array, Uint8Array, or Uint8ClampedArray.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export { TypedArrayProp as default };
|
||||||
@@ -2,12 +2,13 @@
|
|||||||
border-bottom: var(--ui-border-thickness) solid var(--ui-border-color);
|
border-bottom: var(--ui-border-thickness) solid var(--ui-border-color);
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
height: var(--toolbar-height);
|
height: var(--toolbar-height);
|
||||||
padding-top: 6px;
|
|
||||||
padding-left: 1rem;
|
padding-left: 1rem;
|
||||||
padding-right: 1rem;
|
padding-right: 1rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
transition: height 300ms ease;
|
transition: height 300ms ease;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolbarRow.expanded {
|
ToolbarRow.expanded {
|
||||||
|
|||||||
@@ -3,13 +3,17 @@ import ConnectedToolbarSection from './ConnectedToolbarSection';
|
|||||||
import ConnectedLayoutButton from './ConnectedLayoutButton';
|
import ConnectedLayoutButton from './ConnectedLayoutButton';
|
||||||
import ConnectedCineDialog from './ConnectedCineDialog.js';
|
import ConnectedCineDialog from './ConnectedCineDialog.js';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { RoundedButtonGroup } from 'react-viewerbase';
|
import { ToolbarButton, RoundedButtonGroup } from 'react-viewerbase';
|
||||||
import './ToolbarRow.css';
|
import './ToolbarRow.css';
|
||||||
//import Icons from "../images/icons.svg"
|
//import Icons from "../images/icons.svg"
|
||||||
|
|
||||||
const Icons = '/icons.svg';
|
const Icons = '/icons.svg';
|
||||||
|
|
||||||
class ToolbarRow extends Component {
|
class ToolbarRow extends Component {
|
||||||
|
state = {
|
||||||
|
cineDialogOpen: false
|
||||||
|
};
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
leftSidebarOpen: PropTypes.bool.isRequired,
|
leftSidebarOpen: PropTypes.bool.isRequired,
|
||||||
rightSidebarOpen: PropTypes.bool.isRequired,
|
rightSidebarOpen: PropTypes.bool.isRequired,
|
||||||
@@ -26,6 +30,12 @@ class ToolbarRow extends Component {
|
|||||||
this.props.setLeftSidebarOpen(!!value);
|
this.props.setLeftSidebarOpen(!!value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onClickCineToolbarButton = () => {
|
||||||
|
this.setState({
|
||||||
|
cineDialogOpen: !this.state.cineDialogOpen
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const leftSidebarToggle = [{
|
const leftSidebarToggle = [{
|
||||||
value: 'studies',
|
value: 'studies',
|
||||||
@@ -37,15 +47,24 @@ class ToolbarRow extends Component {
|
|||||||
|
|
||||||
const leftSidebarValue = this.props.leftSidebarOpen ? leftSidebarToggle[0].value : null;
|
const leftSidebarValue = this.props.leftSidebarOpen ? leftSidebarToggle[0].value : null;
|
||||||
|
|
||||||
|
const cineDialogContainerStyle = {
|
||||||
|
display: this.state.cineDialogOpen ? 'inline-block' : 'none'
|
||||||
|
}
|
||||||
|
|
||||||
return (<div className="ToolbarRow">
|
return (<div className="ToolbarRow">
|
||||||
<div className="pull-left m-t-1 p-y-1" style={{ padding: '10px' }}>
|
<div className="pull-left m-t-1 p-y-1" style={{ padding: '10px' }}>
|
||||||
<RoundedButtonGroup options={leftSidebarToggle} value={leftSidebarValue} onValueChanged={this.onLeftSidebarValueChanged}/>
|
<RoundedButtonGroup options={leftSidebarToggle} value={leftSidebarValue} onValueChanged={this.onLeftSidebarValueChanged}/>
|
||||||
</div>
|
</div>
|
||||||
<ConnectedToolbarSection/>
|
<ConnectedToolbarSection/>
|
||||||
<ConnectedLayoutButton/>
|
<ConnectedLayoutButton/>
|
||||||
{/* TODO: Putting cine dialog here for now */}
|
<ToolbarButton
|
||||||
<div style={{ marginLeft: '100px', display: 'inline-block'}}>
|
active={this.state.cineDialogOpen}
|
||||||
<ConnectedCineDialog/>
|
onClick={this.onClickCineToolbarButton}
|
||||||
|
text={'CINE'}
|
||||||
|
iconClasses={'fa fa-youtube'}
|
||||||
|
/>
|
||||||
|
<div className='CineDialogContainer' style={cineDialogContainerStyle}>
|
||||||
|
<ConnectedCineDialog/>
|
||||||
</div>
|
</div>
|
||||||
<div className="pull-right m-t-1 rm-x-1">
|
<div className="pull-right m-t-1 rm-x-1">
|
||||||
{/* > roundedButtonGroup rightSidebarToggleButtonData */}
|
{/* > roundedButtonGroup rightSidebarToggleButtonData */}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import ConnectedToolbarRow from './ConnectedToolbarRow';
|
|||||||
import ConnectedStudyLoadingMonitor from './ConnectedStudyLoadingMonitor.js';
|
import ConnectedStudyLoadingMonitor from './ConnectedStudyLoadingMonitor.js';
|
||||||
import StudyPrefetcher from '../components/StudyPrefetcher.js';
|
import StudyPrefetcher from '../components/StudyPrefetcher.js';
|
||||||
import './Viewer.css';
|
import './Viewer.css';
|
||||||
const { StackManager } = OHIF.utils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inits OHIF Hanging Protocol's onReady.
|
* Inits OHIF Hanging Protocol's onReady.
|
||||||
@@ -40,14 +39,6 @@ const { StackManager } = OHIF.utils;
|
|||||||
});
|
});
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
OHIF.viewer.defaultTool = {
|
|
||||||
left: 'wwwc',
|
|
||||||
right: 'zoom',
|
|
||||||
middle: 'pan'
|
|
||||||
};
|
|
||||||
|
|
||||||
OHIF.viewer.refLinesEnabled = true;
|
|
||||||
|
|
||||||
/*const viewportUtils = OHIF.viewerbase.viewportUtils;
|
/*const viewportUtils = OHIF.viewerbase.viewportUtils;
|
||||||
|
|
||||||
OHIF.viewer.functionList = {
|
OHIF.viewer.functionList = {
|
||||||
@@ -58,20 +49,6 @@ OHIF.viewer.functionList = {
|
|||||||
invert: viewportUtils.invert
|
invert: viewportUtils.invert
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
// Create the synchronizer used to update reference lines
|
|
||||||
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer(
|
|
||||||
'cornerstonenewimage',
|
|
||||||
cornerstoneTools.updateImageSynchronizer
|
|
||||||
);
|
|
||||||
|
|
||||||
// Metadata configuration
|
|
||||||
const metadataProvider = new OHIF.cornerstone.MetadataProvider();
|
|
||||||
cornerstone.metaData.addProvider(
|
|
||||||
metadataProvider.provider.bind(metadataProvider)
|
|
||||||
);
|
|
||||||
|
|
||||||
StackManager.setMetadataProvider(metadataProvider);
|
|
||||||
|
|
||||||
class Viewer extends Component {
|
class Viewer extends Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
studies: PropTypes.array
|
studies: PropTypes.array
|
||||||
@@ -85,7 +62,6 @@ class Viewer extends Component {
|
|||||||
<Header home={false}>{whiteLabelling.logoComponent}</Header>
|
<Header home={false}>{whiteLabelling.logoComponent}</Header>
|
||||||
)}
|
)}
|
||||||
</WhiteLabellingContext.Consumer>
|
</WhiteLabellingContext.Consumer>
|
||||||
<div className="viewerDialogs">{/*<CineDialog/>*/}</div>
|
|
||||||
<div id="viewer" className="Viewer">
|
<div id="viewer" className="Viewer">
|
||||||
<ConnectedToolbarRow />
|
<ConnectedToolbarRow />
|
||||||
<ConnectedStudyLoadingMonitor studies={this.props.studies} />
|
<ConnectedStudyLoadingMonitor studies={this.props.studies} />
|
||||||
|
|||||||
@@ -1,16 +1,10 @@
|
|||||||
import { Component } from 'react';
|
import { Component } from 'react';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import cornerstone from 'cornerstone-core';
|
|
||||||
import cornerstoneTools from 'cornerstone-tools';
|
|
||||||
import cornerstoneMath from "cornerstone-math";
|
|
||||||
import { OHIF } from 'ohif-core';
|
import { OHIF } from 'ohif-core';
|
||||||
import ConnectedLayoutManager from './ConnectedLayoutManager.js';
|
import ConnectedLayoutManager from './ConnectedLayoutManager.js';
|
||||||
import './ViewerMain.css';
|
import './ViewerMain.css';
|
||||||
|
|
||||||
// Attempt to fix weird undefined dep issue
|
|
||||||
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
|
|
||||||
|
|
||||||
class ViewerMain extends Component {
|
class ViewerMain extends Component {
|
||||||
state = {
|
state = {
|
||||||
viewportData: [],
|
viewportData: [],
|
||||||
@@ -20,13 +14,11 @@ class ViewerMain extends Component {
|
|||||||
studies: PropTypes.array.isRequired
|
studies: PropTypes.array.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
getDisplaySetsWithImages(studies) {
|
getDisplaySets(studies) {
|
||||||
const displaySets = [];
|
const displaySets = [];
|
||||||
studies.forEach((study) => {
|
studies.forEach((study) => {
|
||||||
study.displaySets.forEach(dSet => {
|
study.displaySets.forEach(dSet => {
|
||||||
if (dSet.images.length) {
|
displaySets.push(dSet);
|
||||||
displaySets.push(dSet);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -52,7 +44,7 @@ class ViewerMain extends Component {
|
|||||||
//window.addEventListener('beforeunload', unloadHandlers.beforeUnload);
|
//window.addEventListener('beforeunload', unloadHandlers.beforeUnload);
|
||||||
|
|
||||||
// Get all the display sets for the viewer studies
|
// Get all the display sets for the viewer studies
|
||||||
const displaySets = this.getDisplaySetsWithImages(this.props.studies);
|
const displaySets = this.getDisplaySets(this.props.studies);
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
viewportData: displaySets
|
viewportData: displaySets
|
||||||
@@ -65,14 +57,10 @@ class ViewerMain extends Component {
|
|||||||
|
|
||||||
// Note: Use Slice because React does a shallow equality check. Mutating the array
|
// Note: Use Slice because React does a shallow equality check. Mutating the array
|
||||||
// would not trigger a re-render. We have to create a copy.
|
// would not trigger a re-render. We have to create a copy.
|
||||||
debugger;
|
|
||||||
console.warn(item);
|
|
||||||
const updatedViewportData = this.state.viewportData.slice(0);
|
const updatedViewportData = this.state.viewportData.slice(0);
|
||||||
|
|
||||||
const displaySet = this.findDisplaySet(this.props.studies, item.studyInstanceUid, item.displaySetInstanceUid);
|
const displaySet = this.findDisplaySet(this.props.studies, item.studyInstanceUid, item.displaySetInstanceUid);
|
||||||
|
|
||||||
console.warn(displaySet);
|
|
||||||
|
|
||||||
updatedViewportData[viewportIndex] = Object.assign({}, displaySet);
|
updatedViewportData[viewportIndex] = Object.assign({}, displaySet);
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>OHIF Viewer</title>
|
||||||
|
<meta name="description" content="Open Health Imaging Foundation DICOM Viewer">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1,maximum-scale=1,user-scalable=no">
|
||||||
|
<link rel="shortcut icon" type="image/png" href="/images/logo.png" sizes="16x16 32x32 64x64">
|
||||||
|
<!--Best display for mobile devices-->
|
||||||
|
<meta http-equiv="cleartype" content="on">
|
||||||
|
<meta name="MobileOptimized" content="320">
|
||||||
|
<meta name="HandheldFriendly" content="True">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
</body>
|
||||||
@@ -1,6 +1,126 @@
|
|||||||
import App from './App.js';
|
/**
|
||||||
import routes from './routes/';
|
* Entry point index.js for development
|
||||||
|
*/
|
||||||
|
|
||||||
export {
|
|
||||||
App
|
import App from './App.js';
|
||||||
|
import React from 'react';
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
|
||||||
|
export { App };
|
||||||
|
|
||||||
|
var routerBasename = 'http://localhost:5000';
|
||||||
|
var props = {
|
||||||
|
routerBasename: routerBasename
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Example config with OIDC
|
||||||
|
*/
|
||||||
|
// Uncomment the next two blocks, comment out the config without OIDC
|
||||||
|
// Try going to:
|
||||||
|
// http://localhost:5000/viewer/1.3.6.1.4.1.25403.345050719074.3824.20170126082328.1
|
||||||
|
// http://ohif-viewer-react.s3-website-us-east-1.amazonaws.com/viewer/1.3.6.1.4.1.25403.345050719074.3824.20170126082328.1
|
||||||
|
props.servers = {
|
||||||
|
"dicomWeb": [{
|
||||||
|
"name": "DCM4CHEE",
|
||||||
|
"wadoUriRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||||
|
"qidoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||||
|
"wadoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||||
|
"qidoSupportsIncludeField": true,
|
||||||
|
"imageRendering": "wadors",
|
||||||
|
"thumbnailRendering": "wadors",
|
||||||
|
"requestOptions": {
|
||||||
|
"requestFromBrowser": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
props.oidc = [{
|
||||||
|
"authServerUrl": "https://cancer.crowds-cure.org/auth/realms/dcm4che",
|
||||||
|
"authRedirectUri": routerBasename + '/callback',
|
||||||
|
"postLogoutRedirectUri": routerBasename + '/logout-redirect.html',
|
||||||
|
"clientId": "crowds-cure-cancer",
|
||||||
|
"responseType": "id_token token",
|
||||||
|
"scope": "email profile openid",
|
||||||
|
"revokeAccessTokenOnSignout": true,
|
||||||
|
"extraQueryParams": {
|
||||||
|
"kc_idp_hint": "crowds-cure-cancer-auth0-oidc",
|
||||||
|
"client_id": "crowds-cure-cancer"
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
/* Example config without OIDC */
|
||||||
|
// Try going to:
|
||||||
|
// http://localhost:5000/viewer/1.3.6.1.4.1.14519.5.2.1.1706.4996.216859690032335293073513900362
|
||||||
|
/* props.servers = {
|
||||||
|
dicomWeb: [
|
||||||
|
{
|
||||||
|
name: 'DCM4CHEE',
|
||||||
|
wadoUriRoot: 'https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/wado',
|
||||||
|
qidoRoot: 'https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs',
|
||||||
|
wadoRoot: 'https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs',
|
||||||
|
qidoSupportsIncludeField: true,
|
||||||
|
imageRendering: 'wadors',
|
||||||
|
thumbnailRendering: 'wadors',
|
||||||
|
requestOptions: {
|
||||||
|
requestFromBrowser: true,
|
||||||
|
auth: 'cloud:healthcare'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}; */
|
||||||
|
|
||||||
|
/*
|
||||||
|
UI settings
|
||||||
|
Plugins
|
||||||
|
- Custom tools / buttons
|
||||||
|
- Custom Sidebar module thing
|
||||||
|
- Custom Viewports
|
||||||
|
- Custom Sop Class Interpreters
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*"PUBLIC_SETTINGS": {
|
||||||
|
"ui": {
|
||||||
|
"studyListFunctionsEnabled": true,
|
||||||
|
"leftSidebarOpen": false,
|
||||||
|
"displaySetNavigationLoopOverSeries": false,
|
||||||
|
"displaySetNavigationMultipleViewports": true,
|
||||||
|
"autoPositionMeasurementsTextCallOuts": "TRLB"
|
||||||
|
},
|
||||||
|
"prefetch": {
|
||||||
|
"order": "topdown",
|
||||||
|
"displaySetCount": 1
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
White labelling example
|
||||||
|
|
||||||
|
// Note that you can't write JSX here, so you can use the online JSX compiler:
|
||||||
|
// https://babeljs.io/repl/#?babili=false&browsers=&build=&builtIns=false&spec=false&loose=false&code_lz=GYVwdgxgLglg9mABACwKYBt1wBQEpEDeAUIogE6pQhlIA8AholPWQOaUC8ARAPoBG6emADWXchm5g4cAA6owqMoikVgiimTERBAZx0A5egFtU3NPQAmigLR8yQi2OSqzUKDIBcAei_2LMCHp0GCN6VhgwVgA6CDgjLgA-ElIU1LS02hDWRB0yCA4AcmQ3Tx8_AKCQsIjo2KMvAHcZa1iwKHkoLxAZLEsdLwAmAAYARgB2LxGRrwgyWTkLFrmZBetwMGNURYGomUiCxC8k9JOU2i96BIBuIgBfIiA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=react&prettier=false&targets=&version=6.26.0&envVersion=
|
||||||
|
*/
|
||||||
|
function RadicalImagingLogo() {
|
||||||
|
return React.createElement(
|
||||||
|
'a',
|
||||||
|
{
|
||||||
|
target: '_blank',
|
||||||
|
rel: 'noopener noreferrer',
|
||||||
|
className: 'header-brand',
|
||||||
|
href: 'http://radicalimaging.com'
|
||||||
|
},
|
||||||
|
React.createElement('h5', {}, 'RADICAL IMAGING')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
props.whiteLabelling = {
|
||||||
|
logoComponent: RadicalImagingLogo()
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: Why do we need to do this? Something is wrong with our rollup settings
|
||||||
|
//var Viewer = window.OHIFStandaloneViewer.App;
|
||||||
|
var app = React.createElement(App, props, null);
|
||||||
|
|
||||||
|
ReactDOM.render(app, document.getElementById('root'));
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Entry point index.js for rollup packaging
|
||||||
|
*/
|
||||||
|
|
||||||
|
import App from './App.js';
|
||||||
|
export { App };
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import loglevel from 'loglevel';
|
||||||
|
|
||||||
|
const log = loglevel.getLogger('OHIFViewer');
|
||||||
|
log.setLevel('info');
|
||||||
|
|
||||||
|
export default log;
|
||||||
@@ -1,126 +1,104 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from "react";
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from "prop-types";
|
||||||
import qs from 'query-string';
|
import qs from 'query-string'
|
||||||
import Viewer from '../connectedComponents/Viewer';
|
import Viewer from "../connectedComponents/Viewer";
|
||||||
import OHIF from 'ohif-core';
|
import OHIF from 'ohif-core';
|
||||||
|
|
||||||
const { createDisplaySets } = OHIF.utils;
|
const { createDisplaySets } = OHIF.utils;
|
||||||
|
|
||||||
function parseQueryAndFetchStudies(query) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const url = query.url;
|
|
||||||
|
|
||||||
if (!url) {
|
|
||||||
reject(new Error('No URL was specified. Use ?url=$yourURL'));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define a request to the server to retrieve the study data
|
|
||||||
// as JSON, given a URL that was in the Route
|
|
||||||
const oReq = new XMLHttpRequest();
|
|
||||||
|
|
||||||
// Add event listeners for request failure
|
|
||||||
oReq.addEventListener('error', error => {
|
|
||||||
OHIF.log.warn('An error occurred while retrieving the JSON data');
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
// When the JSON has been returned, parse it into a JavaScript Object
|
|
||||||
// and render the OHIF Viewer with this data
|
|
||||||
oReq.addEventListener('load', () => {
|
|
||||||
// Parse the response content
|
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText
|
|
||||||
if (!oReq.responseText) {
|
|
||||||
OHIF.log.warn('Response was undefined');
|
|
||||||
reject(new Error('Response was undefined'));
|
|
||||||
}
|
|
||||||
|
|
||||||
OHIF.log.info(JSON.stringify(oReq.responseText, null, 2));
|
|
||||||
|
|
||||||
const data = JSON.parse(oReq.responseText);
|
|
||||||
if (data.servers && query.studyInstanceUids) {
|
|
||||||
const server = data.servers.dicomWeb[0];
|
|
||||||
server.type = 'dicomWeb';
|
|
||||||
|
|
||||||
const studyInstanceUids = query.studyInstanceUids.split(';');
|
|
||||||
const seriesInstanceUids = [];
|
|
||||||
|
|
||||||
OHIF.studies
|
|
||||||
.retrieveStudiesMetadata(
|
|
||||||
server,
|
|
||||||
studyInstanceUids,
|
|
||||||
seriesInstanceUids
|
|
||||||
)
|
|
||||||
.then(
|
|
||||||
studies => {
|
|
||||||
resolve(studies);
|
|
||||||
},
|
|
||||||
error => {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
resolve(data.studies);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Open the Request to the server for the JSON data
|
|
||||||
// In this case we have a server-side route called /api/
|
|
||||||
// which responds to GET requests with the study data
|
|
||||||
OHIF.log.info(`Sending Request to: ${url}`);
|
|
||||||
oReq.open('GET', url);
|
|
||||||
oReq.setRequestHeader('Accept', 'application/json');
|
|
||||||
|
|
||||||
// Fire the request to the server
|
|
||||||
oReq.send();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
class StandaloneRouting extends Component {
|
class StandaloneRouting extends Component {
|
||||||
state = {
|
state = {
|
||||||
studies: null,
|
studies: null,
|
||||||
error: null
|
error: null
|
||||||
};
|
|
||||||
|
|
||||||
static propTypes = {
|
|
||||||
location: PropTypes.object,
|
|
||||||
store: PropTypes.object
|
|
||||||
};
|
|
||||||
|
|
||||||
componentDidMount() {
|
|
||||||
const search = this.props.location.search;
|
|
||||||
if (!search) {
|
|
||||||
console.warn('no search string!');
|
|
||||||
|
|
||||||
this.setState({
|
|
||||||
error: new Error('No query string provided.')
|
|
||||||
});
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const query = qs.parse(search);
|
static propTypes = {
|
||||||
|
location: PropTypes.object,
|
||||||
|
store: PropTypes.object
|
||||||
|
};
|
||||||
|
|
||||||
parseQueryAndFetchStudies(query).then(
|
static parseQueryAndFetchStudies(query) {
|
||||||
studies => {
|
return new Promise((resolve, reject) => {
|
||||||
const updatedStudies = createDisplaySets(studies);
|
const url = query.url;
|
||||||
|
|
||||||
this.setState({ studies: updatedStudies });
|
if (!url) {
|
||||||
},
|
reject(new Error('No URL was specified. Use ?url=$yourURL'));
|
||||||
error => {
|
}
|
||||||
this.setState({ error });
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
// Define a request to the server to retrieve the study data
|
||||||
if (this.state.error) {
|
// as JSON, given a URL that was in the Route
|
||||||
return <div>Error: {JSON.stringify(this.state.error)}</div>;
|
const oReq = new XMLHttpRequest();
|
||||||
} else if (!this.state.studies) {
|
|
||||||
return <div>Loading...</div>;
|
// Add event listeners for request failure
|
||||||
|
oReq.addEventListener('error', (error) => {
|
||||||
|
OHIF.log.warn('An error occurred while retrieving the JSON data');
|
||||||
|
reject(error)
|
||||||
|
});
|
||||||
|
|
||||||
|
// When the JSON has been returned, parse it into a JavaScript Object
|
||||||
|
// and render the OHIF Viewer with this data
|
||||||
|
oReq.addEventListener('load', () => {
|
||||||
|
// Parse the response content
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText
|
||||||
|
if (!oReq.responseText) {
|
||||||
|
OHIF.log.warn('Response was undefined');
|
||||||
|
reject(new Error('Response was undefined'));
|
||||||
|
}
|
||||||
|
|
||||||
|
OHIF.log.info(JSON.stringify(oReq.responseText, null, 2));
|
||||||
|
|
||||||
|
const data = JSON.parse(oReq.responseText);
|
||||||
|
if (data.servers && query.studyInstanceUids) {
|
||||||
|
const server = data.servers.dicomWeb[0];
|
||||||
|
server.type = 'dicomWeb';
|
||||||
|
|
||||||
|
const studyInstanceUids = query.studyInstanceUids.split(';');
|
||||||
|
const seriesInstanceUids = [];
|
||||||
|
|
||||||
|
OHIF.studies.retrieveStudiesMetadata(server, studyInstanceUids, seriesInstanceUids).then(studies => {
|
||||||
|
resolve(studies);
|
||||||
|
}, error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
resolve(data.studies);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Open the Request to the server for the JSON data
|
||||||
|
// In this case we have a server-side route called /api/
|
||||||
|
// which responds to GET requests with the study data
|
||||||
|
OHIF.log.info(`Sending Request to: ${url}`);
|
||||||
|
oReq.open('GET', url);
|
||||||
|
oReq.setRequestHeader('Accept', 'application/json')
|
||||||
|
|
||||||
|
// Fire the request to the server
|
||||||
|
oReq.send();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return <Viewer studies={this.state.studies} />;
|
componentDidMount() {
|
||||||
}
|
const query = qs.parse(this.props.location.search);
|
||||||
|
StandaloneRouting.parseQueryAndFetchStudies(query).then(studies => {
|
||||||
|
const updatedStudies = createDisplaySets(studies);
|
||||||
|
|
||||||
|
this.setState({ studies: updatedStudies });
|
||||||
|
}, error => {
|
||||||
|
this.setState({ error });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
if (this.state.error) {
|
||||||
|
return (<div>Error: {JSON.stringify(this.state.error)}</div>);
|
||||||
|
} else if (!this.state.studies) {
|
||||||
|
return (<div>Loading...</div>);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Viewer studies={this.state.studies}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default StandaloneRouting;
|
export default StandaloneRouting;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default '1242155351531';
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import { connect } from 'react-redux';
|
||||||
|
|
||||||
|
import StudyListWithData from './StudyListWithData.js';
|
||||||
|
|
||||||
|
const isActive = (a) => a.active === true;
|
||||||
|
|
||||||
|
const mapStateToProps = state => {
|
||||||
|
const activeServer = state.servers.servers.find(isActive);
|
||||||
|
|
||||||
|
return {
|
||||||
|
server: activeServer,
|
||||||
|
user: state.oidc.user,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const ConnectedStudyList = connect(
|
||||||
|
mapStateToProps,
|
||||||
|
null
|
||||||
|
)(StudyListWithData);
|
||||||
|
|
||||||
|
export default ConnectedStudyList;
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import React from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import ConnectedStudyList from "./ConnectedStudyList";
|
||||||
|
|
||||||
|
// TODO: Move to react-viewerbase
|
||||||
|
|
||||||
|
function StudyListRouting({ match }) {
|
||||||
|
// TODO: Figure out which filters we want to pass in via a URL
|
||||||
|
//const { patientId } = match.params;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ConnectedStudyList/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
StudyListRouting.propTypes = {
|
||||||
|
match: PropTypes.shape({
|
||||||
|
params: PropTypes.shape({
|
||||||
|
patientIds: PropTypes.string,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
export default StudyListRouting;
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
import React, { Component } from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import OHIF from 'ohif-core';
|
||||||
|
import { withRouter } from 'react-router-dom';
|
||||||
|
import { StudyList } from "react-viewerbase";
|
||||||
|
import Header from "../components/Header";
|
||||||
|
|
||||||
|
class StudyListWithData extends Component {
|
||||||
|
state = {
|
||||||
|
searchData: {},
|
||||||
|
studies: null,
|
||||||
|
error: null
|
||||||
|
};
|
||||||
|
|
||||||
|
static propTypes = {
|
||||||
|
patientId: PropTypes.string,
|
||||||
|
server: PropTypes.object,
|
||||||
|
user: PropTypes.object,
|
||||||
|
history: PropTypes.object
|
||||||
|
};
|
||||||
|
|
||||||
|
static rowsPerPage = 25;
|
||||||
|
static defaultSort = { field: 'patientName', order: 'desc' };
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
// TODO: Avoid using timepoints here
|
||||||
|
//const params = { studyInstanceUids, seriesInstanceUids, timepointId, timepointsFilter={} };
|
||||||
|
|
||||||
|
this.searchForStudies();
|
||||||
|
}
|
||||||
|
|
||||||
|
searchForStudies = (searchData = {
|
||||||
|
currentPage: 0,
|
||||||
|
rowsPerPage: StudyListWithData.rowsPerPage
|
||||||
|
}) => {
|
||||||
|
const { server } = this.props;
|
||||||
|
const filter = {
|
||||||
|
patientId: searchData.patientId,
|
||||||
|
patientName: searchData.patientName,
|
||||||
|
accessionNumber: searchData.accessionNumber,
|
||||||
|
studyDescription: searchData.studyDescription,
|
||||||
|
modalitiesInStudy: searchData.modalitiesInStudy,
|
||||||
|
limit: searchData.currentPage * searchData.rowsPerPage + searchData.rowsPerPage,
|
||||||
|
offset: searchData.currentPage * searchData.rowsPerPage
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: add sorting
|
||||||
|
const promise = OHIF.studies.searchStudies(server, filter)
|
||||||
|
|
||||||
|
// Render the viewer when the data is ready
|
||||||
|
promise.then(studies => {
|
||||||
|
if (!studies) {
|
||||||
|
studies = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Fix casing of this property!
|
||||||
|
const fixedStudies = studies.map(study => {
|
||||||
|
const fixedStudy = study;
|
||||||
|
fixedStudy.studyInstanceUID = study.studyInstanceUid;
|
||||||
|
|
||||||
|
return fixedStudy;
|
||||||
|
})
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
studies: fixedStudies,
|
||||||
|
});
|
||||||
|
}).catch(error => {
|
||||||
|
this.setState({
|
||||||
|
error: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
throw new Error(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onImport = () => {
|
||||||
|
//console.log('onImport');
|
||||||
|
}
|
||||||
|
|
||||||
|
onSelectItem = (studyInstanceUID) => {
|
||||||
|
this.props.history.push(`/viewer/${studyInstanceUID}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
onSearch = (searchData) => {
|
||||||
|
// TODO: Update search filters
|
||||||
|
this.searchForStudies(searchData);
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
if (this.state.error) {
|
||||||
|
return (<div>Error: {JSON.stringify(this.state.error)}</div>);
|
||||||
|
} else if (this.state.studies === null) {
|
||||||
|
return (<div>Loading...</div>);
|
||||||
|
}
|
||||||
|
|
||||||
|
const studyCount = this.state.studies ? this.state.studies.length : 0;
|
||||||
|
|
||||||
|
return (<>
|
||||||
|
<Header home={true} user={this.props.user}/>
|
||||||
|
<StudyList studies={this.state.studies}
|
||||||
|
studyCount={studyCount}
|
||||||
|
studyListFunctionsEnabled={false}
|
||||||
|
onImport={this.onImport}
|
||||||
|
onSelectItem={this.onSelectItem}
|
||||||
|
pageSize={this.rowsPerPage}
|
||||||
|
defaultSort={StudyListWithData.defaultSort}
|
||||||
|
onSearch={this.onSearch} />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default withRouter(StudyListWithData);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default '0.0.0';
|
||||||
Reference in new issue
Block a user