451 lines
17 KiB
HTML
451 lines
17 KiB
HTML
<!doctype html>
|
|
<html
|
|
xmlns="http://www.w3.org/1999/xhtml"
|
|
xml:lang="en"
|
|
class="no-touch"
|
|
lang="en"
|
|
>
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
|
<meta charset="UTF-8" />
|
|
<meta
|
|
name="viewport"
|
|
content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"
|
|
/>
|
|
<meta
|
|
name="viewport"
|
|
content="initial-scale=1.0, maximum-scale=1.0, width=device-width, height=device-height"
|
|
/>
|
|
<link type="text/css" rel="stylesheet" href="lib/jquery.modal.min.css" />
|
|
<link type="text/css" rel="stylesheet" href="lib/cornerstone.min.css" />
|
|
<link type="text/css" rel="stylesheet" href="css/main.css" />
|
|
<title>RTS</title>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="content">
|
|
<div class="content-panel">
|
|
<div class="nav-bar">
|
|
<button id="btn-review" class="navigation nav-right">
|
|
<b>☰</b><br />OVERVIEW
|
|
</button>
|
|
<button
|
|
id="btn-submit-nav"
|
|
class="submit-button navigation nav-right"
|
|
>
|
|
<b>FINISH</b>
|
|
</button>
|
|
<button
|
|
id="btn-review-overlay"
|
|
class="navigation nav-right"
|
|
title="click to finish exam and review answers"
|
|
>
|
|
REVIEW
|
|
</button>
|
|
<button
|
|
id="btn-fullscreen-overlay"
|
|
class="navigation nav-right"
|
|
title="click to toggle fullscreen"
|
|
>
|
|
FULLSCREEN
|
|
</button>
|
|
<div class="app-name nav-left">RTS</div>
|
|
<div id="sync-status" class="nav-left"></div>
|
|
<div id="timer" title="click to pause"></div>
|
|
<div class="exam-name" title="currently loaded packet"></div>
|
|
<button
|
|
class="navigation nav-left"
|
|
disabled="disabled"
|
|
data-nav="previous"
|
|
>
|
|
<svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
width="16"
|
|
height="16"
|
|
fill="currentColor"
|
|
class="bi bi-arrow-left-short"
|
|
viewBox="0 0 16 16"
|
|
>
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M12 8a.5.5 0 0 1-.5.5H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5a.5.5 0 0 1 .5.5"
|
|
/>
|
|
</svg>
|
|
<br />
|
|
<span>PREVIOUS</span>
|
|
</button>
|
|
<button class="navigation nav-left" data-nav="next">
|
|
<svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
width="16"
|
|
height="16"
|
|
fill="currentColor"
|
|
class="bi bi-arrow-right-short"
|
|
viewBox="0 0 16 16"
|
|
>
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8"
|
|
/>
|
|
</svg>
|
|
<br />
|
|
<span>NEXT</span>
|
|
</button>
|
|
</div>
|
|
<div class="main-panel">
|
|
<div class="question-list-panel" style="display: block"></div>
|
|
<div class="exam-panel">
|
|
<div class="exam-content-panel">
|
|
<div class="question">
|
|
<div class="title"><span style="font-weight: 700">1</span></div>
|
|
<div class="stem">
|
|
<div id="thumbnails"></div>
|
|
</div>
|
|
<div class="thumbs"></div>
|
|
</div>
|
|
<div class="answers">
|
|
<div class="answer-title">Answer</div>
|
|
<div class="answer-panel"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="logout-background"
|
|
role="dialog"
|
|
aria-modal="true"
|
|
aria-labelledby="finish-title"
|
|
>
|
|
<div class="finish-header">
|
|
<div class="login-risr-box">
|
|
<img
|
|
class="login-risr-logo"
|
|
draggable="false"
|
|
alt="Logo"
|
|
src="risr-assess-on-dark.png"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="logout-panel finish-dialog" id="finish-dialog-panel">
|
|
<div class="logout-title" id="finish-title">Ready to finish?</div>
|
|
<div class="logout-error info">
|
|
<p>
|
|
<strong
|
|
>Answers are submitted automatically. You can complete the
|
|
exam by clicking below.</strong
|
|
>
|
|
</p>
|
|
<p class="unanswered-line">
|
|
You have <span id="unanswered-count">0</span> unanswered
|
|
questions
|
|
</p>
|
|
</div>
|
|
<div class="logout-text">
|
|
Click “Submit exam” before closing the tab or window
|
|
</div>
|
|
<div class="logout-buttons">
|
|
<button class="logout-button danger" id="button-logout">
|
|
Submit exam
|
|
</button>
|
|
<button class="logout-button primary" id="button-continue">
|
|
Continue exam
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="options-panel" class="fullscreen-overlay">
|
|
<h1>RTS</h1>
|
|
<span id="user-details">
|
|
<span id="candidate-info">
|
|
<span id="candidate-details"></span>
|
|
</span>
|
|
<span id="user-actions">
|
|
<input
|
|
type="button"
|
|
id="btn-candidate-login"
|
|
class="login-button"
|
|
value="Enter candidate details"
|
|
onclick="void 0"
|
|
/>
|
|
<input
|
|
type="button"
|
|
id="btn-user-login"
|
|
class="login-button"
|
|
value="User log in"
|
|
/>
|
|
</span>
|
|
<!-- <a href="#" id="overlay-close" class="close"></a> -->
|
|
<div id="user" class="user-text"></div>
|
|
</span>
|
|
<div id="packets">
|
|
<div class="global-refresh-container">
|
|
<span id="load-exam-packet-instructions">
|
|
<span>Click buttons below to load an exam / packet</span>
|
|
</span>
|
|
<button
|
|
id="btn-refresh-all"
|
|
class="refresh-button"
|
|
title="Refresh all exams and packets"
|
|
>
|
|
Refresh All
|
|
</button>
|
|
</div>
|
|
<span class="exam-wrapper">
|
|
<h2>Exams:</h2>
|
|
<span id="exam-list"></span>
|
|
</span>
|
|
|
|
<span class="packet-wrapper">
|
|
<h2>
|
|
Packets:
|
|
<button
|
|
id="btn-refresh-packets"
|
|
class="refresh-button"
|
|
title="Refresh packets"
|
|
>
|
|
Refresh
|
|
</button>
|
|
</h2>
|
|
<span id="packet-list"></span>
|
|
</span>
|
|
</div>
|
|
<div id="options-link"></div>
|
|
<div id="storage-details" style="font-family: sans-serif; font-size: 13px; color: #aaa; margin: 15px 0 10px 0; padding-left: 5px;"></div>
|
|
<div id="cache-details">
|
|
<details class="cache-details-box">
|
|
<summary>Cached Exams / Questions</summary>
|
|
<ul style="margin: 10px 0 0 15px; padding: 0; font-size: 13px; color: #ccc;"></ul>
|
|
</details>
|
|
</div>
|
|
<details class="options-details">
|
|
<summary>Options</summary>
|
|
<div id="database-buttons" class="database-btn-group">
|
|
<input
|
|
type="button"
|
|
id="btn-delete-answer-databases"
|
|
value="Delete local answers"
|
|
/>
|
|
<input
|
|
type="button"
|
|
id="btn-delete-cached-questions"
|
|
value="Delete cached questions"
|
|
/>
|
|
<input
|
|
type="button"
|
|
id="btn-reset-local"
|
|
value="Clear all local data"
|
|
/>
|
|
<details style="width: 100%; margin-top: 10px; font-size: 12px; border: 1px solid #444; border-radius: 4px; padding: 10px; background: #111; font-family: sans-serif;">
|
|
<summary style="cursor: pointer; font-weight: bold; color: #aaa; outline: none; user-select: none;">Manual Reset Instructions</summary>
|
|
<div style="margin-top: 8px; color: #bbb; line-height: 1.5;">
|
|
<p style="margin: 0 0 8px 0;">If the automatic reset parameter fails, perform a manual reset in your browser:</p>
|
|
<ol style="margin: 0; padding-left: 18px;">
|
|
<li style="margin-bottom: 4px;">Open Developer Tools by pressing <strong>F12</strong> or <strong>Ctrl+Shift+I</strong> (Cmd+Option+I on Mac).</li>
|
|
<li style="margin-bottom: 4px;">Navigate to the <strong>Application</strong> tab (Chrome/Edge) or <strong>Storage</strong> tab (Firefox).</li>
|
|
<li style="margin-bottom: 4px;">Locate storage items and select <strong>Clear Site Data</strong> or delete entries under <em>IndexedDB</em>, <em>Local Storage</em>, and <em>Session Storage</em>.</li>
|
|
<li>Reload the page.</li>
|
|
</ol>
|
|
</div>
|
|
</details>
|
|
</div>
|
|
<div id="local-fileloader" class="local-loader-field">
|
|
<form
|
|
id="jsonFile"
|
|
name="jsonFile"
|
|
enctype="multipart/form-data"
|
|
method="post"
|
|
>
|
|
<fieldset style="border: none; padding: 0; margin: 0;">
|
|
<h2>Load local question set</h2>
|
|
<input type="file" id="fileinput" />
|
|
<input type="button" id="btn-local-file-load" value="Load" />
|
|
</fieldset>
|
|
</form>
|
|
</div>
|
|
<p style="margin: 15px 0;">
|
|
<button id="btn-view-local-answers" class="view-answers-btn">
|
|
View local saved answers
|
|
</button>
|
|
</p>
|
|
<div id="logging-controls" style="margin-top: 15px; border-top: 1px solid #333; padding-top: 15px; font-family: sans-serif; font-size: 13px;">
|
|
<label for="select-log-level" style="font-weight: bold; color: #ccc;">Logging Level:</label>
|
|
<select id="select-log-level" style="background:#222; color:#fff; border:1px solid #555; padding: 4px 8px; border-radius: 4px; font-size: 13px; margin-left: 5px; cursor: pointer; outline: none;">
|
|
<option value="silent">Disabled (Silent)</option>
|
|
<option value="error">Error</option>
|
|
<option value="warn">Warn</option>
|
|
<option value="info">Info</option>
|
|
<option value="debug">Debug</option>
|
|
</select>
|
|
</div>
|
|
</details>
|
|
</div>
|
|
<div id="review-overlay" class="fullscreen-overlay">
|
|
<a href="#" id="review-overlay-close" class="close"></a>
|
|
<div id="review-score"></div>
|
|
<div id="exam-stats">
|
|
<p>Performance breakdown:</p>
|
|
Unanswered questions: <span id="unanswered-number"></span><br />
|
|
Answered normal: <span id="normal-number"></span><br />
|
|
Answered abnormal: <span id="abnormal-number"></span><br />
|
|
<br />
|
|
Undercall: <span id="undercall-number"></span><br />
|
|
Overcall: <span id="overcall-number"></span><br />
|
|
Incorrect call: <span id="incorrectcall-number"></span><br />
|
|
</div>
|
|
<ul id="review-answer-list"></ul>
|
|
<table id="review-answer-table"></table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="finish-dialog" class="dialog modal">
|
|
<h3 class="dialog-title">Finish exam and review?</h3>
|
|
<div class="dialog-text">
|
|
<button id="finish-exam" class="navigation dialog-yes">
|
|
Finish and review
|
|
</button>
|
|
<button id="finish-cancel" class="navigation dialog-cancel">
|
|
Continue exam
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="start-dialog" class="dialog modal">
|
|
<h3 class="dialog-title">Start <span class="exam-name"></span></h3>
|
|
<div class="packet-database-options">
|
|
<input
|
|
type="button"
|
|
id="btn-delete-current"
|
|
value="Reset current packet answers"
|
|
/><br />
|
|
<input
|
|
type="button"
|
|
id="btn-delete-current-saved-answers"
|
|
value="Reset current packet saved answers"
|
|
/>
|
|
</div>
|
|
<div class="dialog-text">
|
|
Click to start exam.
|
|
<p>
|
|
You will have
|
|
<input type="number" size="2" class="exam-time" /> minutes.
|
|
</p>
|
|
</div>
|
|
<div id="exam-candidate-number" class="dialog-text hidden">
|
|
Check your below candidate number / user is correct.
|
|
<input type="text" size="10" id="candidate-number2" disabled />
|
|
</div>
|
|
<button class="start-packet-button navigation dialog-yes">Start</button>
|
|
</div>
|
|
|
|
<div id="time-up-dialog" class="dialog modal">
|
|
<h3 class="dialog-title">Time ended</h3>
|
|
<div class="dialog-text">
|
|
Allocated time has ended. You can review or continue.
|
|
</div>
|
|
<button id="btn-time-up-review" class="navigation dialog-review">
|
|
Review
|
|
</button>
|
|
<button id="time-up-continue-button" class="navigation dialog-yes">
|
|
Continue
|
|
</button>
|
|
<button
|
|
id="dialog-submit-button"
|
|
class="submit-button navigation dialog-review hidden"
|
|
>
|
|
<b>submit</b>
|
|
</button>
|
|
</div>
|
|
|
|
<div id="login-dialog" class="dialog modal noclose">
|
|
<h3 class="dialog-title">Enter Details</h3>
|
|
<div class="dialog-text">
|
|
Candidate number:
|
|
<input
|
|
type="number"
|
|
id="candidate-number"
|
|
name="candidate"
|
|
required
|
|
size="10"
|
|
/><br />
|
|
Passcode:
|
|
<input
|
|
type="text"
|
|
id="passcode"
|
|
name="passcode"
|
|
required
|
|
size="10"
|
|
/><br />
|
|
</div>
|
|
<button id="btn-login" class="navigation dialog-yes">Login</button>
|
|
</div>
|
|
|
|
<div id="resume-dialog" class="dialog modal noclose">
|
|
<h3 class="dialog-title">Resume Session?</h3>
|
|
<div class="dialog-text">
|
|
<p id="resume-text">Choose a previous session to continue, or start a new one:</p>
|
|
<div id="resume-sessions-list" style="margin: 15px 0; max-height: 200px; overflow-y: auto;">
|
|
<!-- Session options list -->
|
|
</div>
|
|
</div>
|
|
<div class="dialog-buttons" style="display: flex; gap: 10px; justify-content: flex-end; margin-top: 15px;">
|
|
<button id="btn-resume-start-new" class="navigation dialog-no" style="margin: 0;">Start New</button>
|
|
<button id="btn-resume-continue" class="navigation dialog-yes" style="margin: 0;" disabled>Continue</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="loading" class="fullscreen-overlay">
|
|
<div class="progress-block">
|
|
<div id="progress"></div>
|
|
<div class="sk-cube-grid full">
|
|
<div class="sk-cube sk-cube1"></div>
|
|
<div class="sk-cube sk-cube2"></div>
|
|
<div class="sk-cube sk-cube3"></div>
|
|
<div class="sk-cube sk-cube4"></div>
|
|
<div class="sk-cube sk-cube5"></div>
|
|
<div class="sk-cube sk-cube6"></div>
|
|
<div class="sk-cube sk-cube7"></div>
|
|
<div class="sk-cube sk-cube8"></div>
|
|
<div class="sk-cube sk-cube9"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="question-loading" class="fullscreen-overlay-transparent">
|
|
<div class="progress-block">
|
|
<div class="lds-ripple">
|
|
<div></div>
|
|
<div></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="pause" class="fullscreen-overlay"></div>
|
|
|
|
<div id="packet-history" class="fullscreen-overlay"></div>
|
|
|
|
<div id="database-error" class="fullscreen-overlay"></div>
|
|
|
|
<script src="lib/loglevel.min.js"></script>
|
|
<script src="lib/uuidv4.min.js" type="module"></script>
|
|
<script src="lib/jquery-3.4.1.min.js" type="text/javascript"></script>
|
|
<script src="lib/jq-ajax-progress.min.js" type="text/javascript"></script>
|
|
<script src="lib/easytimer.min.js" type="module"></script>
|
|
<script src="lib/hammer.js"></script>
|
|
<script src="lib/cornerstone.js"></script>
|
|
<script src="lib/dicomParser.min.js"></script>
|
|
<script src="lib/cornerstoneMath.min.js"></script>
|
|
<!-- <script src="lib/cornerstoneTools.min.js"></script> -->
|
|
<script src="lib/cornerstoneTools.js"></script>
|
|
<script src="lib/cornerstoneWebImageLoader.min.js"></script>
|
|
<script src="lib/cornerstoneWADOImageLoader.js"></script>
|
|
<script src="lib/cornerstone-base64-image-loader.umd.js"></script>
|
|
<script src="lib/dexie.js"></script>
|
|
<script src="lib/jquery.modal.min.js"></script>
|
|
<!-- <script src="packets/rr1" defer="defer"></script> -->
|
|
<script src="js/main.js" defer="defer" type="module"></script>
|
|
<script src="lib/notify.min.js" type="text/javascript"></script>
|
|
|
|
<script></script>
|
|
</body>
|
|
</html>
|