618 lines
22 KiB
HTML
618 lines
22 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta
|
|
name="viewport"
|
|
content="width=device-width, initial-scale=1, shrink-to-fit=no"
|
|
/>
|
|
<meta
|
|
name="theme-color"
|
|
content="#000000"
|
|
/>
|
|
<meta
|
|
name="mobile-web-app-capable"
|
|
content="yes"
|
|
/>
|
|
<meta
|
|
property="og:title"
|
|
content="SAS Dicom Viewer"
|
|
/>
|
|
<meta
|
|
property="og:description"
|
|
content="Web-based Cloud DICOM Viewer by SAS for viewing and analyzing DICOM images. Powered by Open Health Imaging Foundation and Google Cloud Healthcare."
|
|
/>
|
|
<meta
|
|
property="og:image"
|
|
content="<%= PUBLIC_URL %>assets/logo-sismedika.png"
|
|
/>
|
|
<meta
|
|
name="application-name"
|
|
content="SAS Dicom Viewer"
|
|
/>
|
|
<meta
|
|
name="apple-mobile-web-app-capable"
|
|
content="yes"
|
|
/>
|
|
<meta
|
|
name="apple-mobile-web-app-status-bar-style"
|
|
content="black-translucent"
|
|
/>
|
|
<meta
|
|
name="apple-mobile-web-app-title"
|
|
content="@ohif/app"
|
|
/>
|
|
<meta
|
|
name="msapplication-TileColor"
|
|
content="#fff"
|
|
/>
|
|
<meta
|
|
name="msapplication-TileImage"
|
|
content="<%= PUBLIC_URL %>assets/mstile-144x144.png"
|
|
/>
|
|
<meta
|
|
name="msapplication-config"
|
|
content="<%= PUBLIC_URL %>assets/browserconfig.xml"
|
|
/>
|
|
<link
|
|
rel="manifest"
|
|
href="<%= PUBLIC_URL %>manifest.json"
|
|
/>
|
|
|
|
<link
|
|
rel="shortcut icon"
|
|
href="<%= PUBLIC_URL %>assets/favicon.ico"
|
|
/>
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
sizes="16x16"
|
|
href="<%= PUBLIC_URL %>assets/favicon-16x16.png"
|
|
/>
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
sizes="32x32"
|
|
href="<%= PUBLIC_URL %>assets/favicon-32x32.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="57x57"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-57x57.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="60x60"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-60x60.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="72x72"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-72x72.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="76x76"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-76x76.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="114x114"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-114x114.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="120x120"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-120x120.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="144x144"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-144x144.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="152x152"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-152x152.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="167x167"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-167x167.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="180x180"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-180x180.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="1024x1024"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-icon-1024x1024.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-320x460.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-640x920.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-640x1096.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-750x1294.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1182x2208.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1242x2148.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-748x1024.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-768x1004.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1496x2048.png"
|
|
/>
|
|
<link
|
|
rel="apple-touch-startup-image"
|
|
media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)"
|
|
href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1536x2008.png"
|
|
/>
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
sizes="228x228"
|
|
href="<%= PUBLIC_URL %>assets/coast-228x228.png"
|
|
/>
|
|
<link
|
|
rel="yandex-tableau-widget"
|
|
href="<%= PUBLIC_URL %>assets/yandex-browser-manifest.json"
|
|
/>
|
|
|
|
<script type="text/javascript">
|
|
window.PUBLIC_URL = '<%= PUBLIC_URL %>';
|
|
</script>
|
|
<script
|
|
type="text/javascript"
|
|
src="<%= PUBLIC_URL %>app-config.js"
|
|
></script>
|
|
<script
|
|
type="module"
|
|
src="<%= PUBLIC_URL %>init-service-worker.js"
|
|
></script>
|
|
|
|
<title>SAS Dicom Viewer</title>
|
|
|
|
<!-- WEB FONTS -->
|
|
<link
|
|
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
|
|
<!-- EXTENSIONS -->
|
|
<!-- <script type="text/javascript" src="path/to/some-extension.js"></script>
|
|
|
|
<script>
|
|
// If configuration file is a JS Object:
|
|
window.config.extensions = [SomeExtension];
|
|
|
|
// If configuration file is a JS Function:
|
|
window.config = () => {
|
|
return {
|
|
extensions: [SomeExtension]
|
|
};
|
|
};
|
|
</script> -->
|
|
</head>
|
|
|
|
<body>
|
|
<noscript> You need to enable JavaScript to run this app. </noscript>
|
|
|
|
<div id="root"></div>
|
|
|
|
<script>
|
|
// Note: This is a client access token so there is no issue with having it publicly available
|
|
var _rollbarConfig = {
|
|
accessToken: '739c64cd39e84592ba062bc29aac9769',
|
|
captureUncaught: true,
|
|
captureUnhandledRejections: true,
|
|
payload: {
|
|
environment: 'viewer.ohif.org',
|
|
},
|
|
};
|
|
// Rollbar Snippet
|
|
!(function (r) {
|
|
var e = {};
|
|
function o(n) {
|
|
if (e[n]) return e[n].exports;
|
|
var t = (e[n] = { i: n, l: !1, exports: {} });
|
|
return r[n].call(t.exports, t, t.exports, o), (t.l = !0), t.exports;
|
|
}
|
|
(o.m = r),
|
|
(o.c = e),
|
|
(o.d = function (r, e, n) {
|
|
o.o(r, e) || Object.defineProperty(r, e, { enumerable: !0, get: n });
|
|
}),
|
|
(o.r = function (r) {
|
|
'undefined' != typeof Symbol &&
|
|
Symbol.toStringTag &&
|
|
Object.defineProperty(r, Symbol.toStringTag, { value: 'Module' }),
|
|
Object.defineProperty(r, '__esModule', { value: !0 });
|
|
}),
|
|
(o.t = function (r, e) {
|
|
if ((1 & e && (r = o(r)), 8 & e)) return r;
|
|
if (4 & e && 'object' == typeof r && r && r.__esModule) return r;
|
|
var n = Object.create(null);
|
|
if (
|
|
(o.r(n),
|
|
Object.defineProperty(n, 'default', { enumerable: !0, value: r }),
|
|
2 & e && 'string' != typeof r)
|
|
)
|
|
for (var t in r)
|
|
o.d(
|
|
n,
|
|
t,
|
|
function (e) {
|
|
return r[e];
|
|
}.bind(null, t)
|
|
);
|
|
return n;
|
|
}),
|
|
(o.n = function (r) {
|
|
var e =
|
|
r && r.__esModule
|
|
? function () {
|
|
return r.default;
|
|
}
|
|
: function () {
|
|
return r;
|
|
};
|
|
return o.d(e, 'a', e), e;
|
|
}),
|
|
(o.o = function (r, e) {
|
|
return Object.prototype.hasOwnProperty.call(r, e);
|
|
}),
|
|
(o.p = ''),
|
|
o((o.s = 0));
|
|
})([
|
|
function (r, e, o) {
|
|
var n = o(1),
|
|
t = o(4);
|
|
(_rollbarConfig = _rollbarConfig || {}),
|
|
(_rollbarConfig.rollbarJsUrl =
|
|
_rollbarConfig.rollbarJsUrl ||
|
|
'https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.7.1/rollbar.min.js'),
|
|
(_rollbarConfig.async = void 0 === _rollbarConfig.async || _rollbarConfig.async);
|
|
var a = n.setupShim(window, _rollbarConfig),
|
|
l = t(_rollbarConfig);
|
|
(window.rollbar = n.Rollbar),
|
|
a.loadFull(window, document, !_rollbarConfig.async, _rollbarConfig, l);
|
|
},
|
|
function (r, e, o) {
|
|
var n = o(2);
|
|
function t(r) {
|
|
return function () {
|
|
try {
|
|
return r.apply(this, arguments);
|
|
} catch (r) {
|
|
try {
|
|
console.error('[Rollbar]: Internal error', r);
|
|
} catch (r) {}
|
|
}
|
|
};
|
|
}
|
|
var a = 0;
|
|
function l(r, e) {
|
|
(this.options = r), (this._rollbarOldOnError = null);
|
|
var o = a++;
|
|
(this.shimId = function () {
|
|
return o;
|
|
}),
|
|
'undefined' != typeof window &&
|
|
window._rollbarShims &&
|
|
(window._rollbarShims[o] = { handler: e, messages: [] });
|
|
}
|
|
var i = o(3),
|
|
d = function (r, e) {
|
|
return new l(r, e);
|
|
},
|
|
c = function (r) {
|
|
return new i(d, r);
|
|
};
|
|
function s(r) {
|
|
return t(function () {
|
|
var e = Array.prototype.slice.call(arguments, 0),
|
|
o = { shim: this, method: r, args: e, ts: new Date() };
|
|
window._rollbarShims[this.shimId()].messages.push(o);
|
|
});
|
|
}
|
|
(l.prototype.loadFull = function (r, e, o, n, a) {
|
|
var l = !1,
|
|
i = e.createElement('script'),
|
|
d = e.getElementsByTagName('script')[0],
|
|
c = d.parentNode;
|
|
(i.crossOrigin = ''),
|
|
(i.src = n.rollbarJsUrl),
|
|
o || (i.async = !0),
|
|
(i.onload = i.onreadystatechange =
|
|
t(function () {
|
|
if (
|
|
!(
|
|
l ||
|
|
(this.readyState &&
|
|
'loaded' !== this.readyState &&
|
|
'complete' !== this.readyState)
|
|
)
|
|
) {
|
|
i.onload = i.onreadystatechange = null;
|
|
try {
|
|
c.removeChild(i);
|
|
} catch (r) {}
|
|
(l = !0),
|
|
(function () {
|
|
var e;
|
|
if (void 0 === r._rollbarDidLoad) {
|
|
e = new Error('rollbar.js did not load');
|
|
for (var o, n, t, l, i = 0; (o = r._rollbarShims[i++]); )
|
|
for (o = o.messages || []; (n = o.shift()); )
|
|
for (t = n.args || [], i = 0; i < t.length; ++i)
|
|
if ('function' == typeof (l = t[i])) {
|
|
l(e);
|
|
break;
|
|
}
|
|
}
|
|
'function' == typeof a && a(e);
|
|
})();
|
|
}
|
|
})),
|
|
c.insertBefore(i, d);
|
|
}),
|
|
(l.prototype.wrap = function (r, e, o) {
|
|
try {
|
|
var n;
|
|
if (
|
|
((n =
|
|
'function' == typeof e
|
|
? e
|
|
: function () {
|
|
return e || {};
|
|
}),
|
|
'function' != typeof r)
|
|
)
|
|
return r;
|
|
if (r._isWrap) return r;
|
|
if (
|
|
!r._rollbar_wrapped &&
|
|
((r._rollbar_wrapped = function () {
|
|
o && 'function' == typeof o && o.apply(this, arguments);
|
|
try {
|
|
return r.apply(this, arguments);
|
|
} catch (o) {
|
|
var e = o;
|
|
throw (
|
|
(e &&
|
|
('string' == typeof e && (e = new String(e)),
|
|
(e._rollbarContext = n() || {}),
|
|
(e._rollbarContext._wrappedSource = r.toString()),
|
|
(window._rollbarWrappedError = e)),
|
|
e)
|
|
);
|
|
}
|
|
}),
|
|
(r._rollbar_wrapped._isWrap = !0),
|
|
r.hasOwnProperty)
|
|
)
|
|
for (var t in r) r.hasOwnProperty(t) && (r._rollbar_wrapped[t] = r[t]);
|
|
return r._rollbar_wrapped;
|
|
} catch (e) {
|
|
return r;
|
|
}
|
|
});
|
|
for (
|
|
var p =
|
|
'log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad'.split(
|
|
','
|
|
),
|
|
u = 0;
|
|
u < p.length;
|
|
++u
|
|
)
|
|
l.prototype[p[u]] = s(p[u]);
|
|
r.exports = {
|
|
setupShim: function (r, e) {
|
|
if (r) {
|
|
var o = e.globalAlias || 'Rollbar';
|
|
if ('object' == typeof r[o]) return r[o];
|
|
(r._rollbarShims = {}), (r._rollbarWrappedError = null);
|
|
var a = new c(e);
|
|
return t(function () {
|
|
e.captureUncaught &&
|
|
((a._rollbarOldOnError = r.onerror),
|
|
n.captureUncaughtExceptions(r, a, !0),
|
|
n.wrapGlobals(r, a, !0)),
|
|
e.captureUnhandledRejections && n.captureUnhandledRejections(r, a, !0);
|
|
var t = e.autoInstrument;
|
|
return (
|
|
!1 !== e.enabled &&
|
|
(void 0 === t || !0 === t || ('object' == typeof t && t.network)) &&
|
|
r.addEventListener &&
|
|
(r.addEventListener('load', a.captureLoad.bind(a)),
|
|
r.addEventListener('DOMContentLoaded', a.captureDomContentLoaded.bind(a))),
|
|
(r[o] = a),
|
|
a
|
|
);
|
|
})();
|
|
}
|
|
},
|
|
Rollbar: c,
|
|
};
|
|
},
|
|
function (r, e) {
|
|
function o(r, e, o) {
|
|
if (e.hasOwnProperty && e.hasOwnProperty('addEventListener')) {
|
|
for (var n = e.addEventListener; n._rollbarOldAdd && n.belongsToShim; )
|
|
n = n._rollbarOldAdd;
|
|
var t = function (e, o, t) {
|
|
n.call(this, e, r.wrap(o), t);
|
|
};
|
|
(t._rollbarOldAdd = n), (t.belongsToShim = o), (e.addEventListener = t);
|
|
for (var a = e.removeEventListener; a._rollbarOldRemove && a.belongsToShim; )
|
|
a = a._rollbarOldRemove;
|
|
var l = function (r, e, o) {
|
|
a.call(this, r, (e && e._rollbar_wrapped) || e, o);
|
|
};
|
|
(l._rollbarOldRemove = a), (l.belongsToShim = o), (e.removeEventListener = l);
|
|
}
|
|
}
|
|
r.exports = {
|
|
captureUncaughtExceptions: function (r, e, o) {
|
|
if (r) {
|
|
var n;
|
|
if ('function' == typeof e._rollbarOldOnError) n = e._rollbarOldOnError;
|
|
else if (r.onerror) {
|
|
for (n = r.onerror; n._rollbarOldOnError; ) n = n._rollbarOldOnError;
|
|
e._rollbarOldOnError = n;
|
|
}
|
|
var t = function () {
|
|
var o = Array.prototype.slice.call(arguments, 0);
|
|
!(function (r, e, o, n) {
|
|
r._rollbarWrappedError &&
|
|
(n[4] || (n[4] = r._rollbarWrappedError),
|
|
n[5] || (n[5] = r._rollbarWrappedError._rollbarContext),
|
|
(r._rollbarWrappedError = null)),
|
|
e.handleUncaughtException.apply(e, n),
|
|
o && o.apply(r, n);
|
|
})(r, e, n, o);
|
|
};
|
|
o && (t._rollbarOldOnError = n), (r.onerror = t);
|
|
}
|
|
},
|
|
captureUnhandledRejections: function (r, e, o) {
|
|
if (r) {
|
|
'function' == typeof r._rollbarURH &&
|
|
r._rollbarURH.belongsToShim &&
|
|
r.removeEventListener('unhandledrejection', r._rollbarURH);
|
|
var n = function (r) {
|
|
var o, n, t;
|
|
try {
|
|
o = r.reason;
|
|
} catch (r) {
|
|
o = void 0;
|
|
}
|
|
try {
|
|
n = r.promise;
|
|
} catch (r) {
|
|
n = '[unhandledrejection] error getting `promise` from event';
|
|
}
|
|
try {
|
|
(t = r.detail), !o && t && ((o = t.reason), (n = t.promise));
|
|
} catch (r) {}
|
|
o || (o = '[unhandledrejection] error getting `reason` from event'),
|
|
e && e.handleUnhandledRejection && e.handleUnhandledRejection(o, n);
|
|
};
|
|
(n.belongsToShim = o),
|
|
(r._rollbarURH = n),
|
|
r.addEventListener('unhandledrejection', n);
|
|
}
|
|
},
|
|
wrapGlobals: function (r, e, n) {
|
|
if (r) {
|
|
var t,
|
|
a,
|
|
l =
|
|
'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(
|
|
','
|
|
);
|
|
for (t = 0; t < l.length; ++t)
|
|
r[(a = l[t])] && r[a].prototype && o(e, r[a].prototype, n);
|
|
}
|
|
},
|
|
};
|
|
},
|
|
function (r, e) {
|
|
function o(r, e) {
|
|
(this.impl = r(e, this)),
|
|
(this.options = e),
|
|
(function (r) {
|
|
for (
|
|
var e = function (r) {
|
|
return function () {
|
|
var e = Array.prototype.slice.call(arguments, 0);
|
|
if (this.impl[r]) return this.impl[r].apply(this.impl, e);
|
|
};
|
|
},
|
|
o =
|
|
'log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad'.split(
|
|
','
|
|
),
|
|
n = 0;
|
|
n < o.length;
|
|
n++
|
|
)
|
|
r[o[n]] = e(o[n]);
|
|
})(o.prototype);
|
|
}
|
|
(o.prototype._swapAndProcessMessages = function (r, e) {
|
|
var o, n, t;
|
|
for (this.impl = r(this.options); (o = e.shift()); )
|
|
(n = o.method),
|
|
(t = o.args),
|
|
this[n] &&
|
|
'function' == typeof this[n] &&
|
|
('captureDomContentLoaded' === n || 'captureLoad' === n
|
|
? this[n].apply(this, [t[0], o.ts])
|
|
: this[n].apply(this, t));
|
|
return this;
|
|
}),
|
|
(r.exports = o);
|
|
},
|
|
function (r, e) {
|
|
r.exports = function (r) {
|
|
return function (e) {
|
|
if (!e && !window._rollbarInitialized) {
|
|
for (
|
|
var o,
|
|
n,
|
|
t = (r = r || {}).globalAlias || 'Rollbar',
|
|
a = window.rollbar,
|
|
l = function (r) {
|
|
return new a(r);
|
|
},
|
|
i = 0;
|
|
(o = window._rollbarShims[i++]);
|
|
|
|
)
|
|
n || (n = o.handler), o.handler._swapAndProcessMessages(l, o.messages);
|
|
(window[t] = n), (window._rollbarInitialized = !0);
|
|
}
|
|
};
|
|
};
|
|
},
|
|
]);
|
|
// End Rollbar Snippet
|
|
</script>
|
|
</body>
|
|
</html>
|