This commit is contained in:
2025-02-26 14:49:25 +07:00
commit 1c1d9c4474
6403 changed files with 1953774 additions and 0 deletions

View File

@@ -0,0 +1,292 @@
/**
* Application GUI.
*/
// Default colour maps.
dwv.tool.colourMaps = {
"plain": dwv.image.lut.plain,
"invplain": dwv.image.lut.invPlain,
"rainbow": dwv.image.lut.rainbow,
"hot": dwv.image.lut.hot,
"hotiron": dwv.image.lut.hot_iron,
"pet": dwv.image.lut.pet,
"hotmetalblue": dwv.image.lut.hot_metal_blue,
"pet20step": dwv.image.lut.pet_20step
};
// Default window level presets.
dwv.tool.defaultpresets = {};
// Default window level presets for CT.
dwv.tool.defaultpresets.CT = {
"mediastinum": {"center": 40, "width": 400},
"lung": {"center": -500, "width": 1500},
"bone": {"center": 500, "width": 2000},
"brain": {"center": 40, "width": 80},
"head": {"center": 90, "width": 350}
};
//decode query
dwv.utils.decodeQuery = dwv.utils.base.decodeQuery;
// Window
dwv.gui.getWindowSize = function () {
return { 'width': ($('#pageMain').width() - 360), 'height': ($('#pageMain').height() - 75) };
};
// Prompt
dwv.gui.prompt = dwv.gui.base.prompt;
// Progress
dwv.gui.displayProgress = function (percent) {
// jquery-ui progress bar
if( percent <= 100 ) {
$("#progressbar").progressbar({ value: percent });
}
};
// Focus
dwv.gui.focusImage = dwv.gui.base.focusImage;
// get element
dwv.gui.getElement = dwv.gui.base.getElement;
// refresh
dwv.gui.refreshElement = dwv.gui.base.refreshElement;
// Slider
dwv.gui.Slider = function (app)
{
this.append = function ()
{
// nothing to do
};
this.initialise = function ()
{
var min = app.getImage().getDataRange().min;
var max = app.getImage().getDataRange().max;
// jquery-ui slider
$( ".thresholdLi" ).slider({
range: true,
min: min,
max: max,
values: [ min, max ],
slide: function( event, ui ) {
app.onChangeMinMax(
{'min':ui.values[0], 'max':ui.values[1]});
}
});
};
};
// plot
dwv.gui.plot = function (div, data, options)
{
var plotOptions = {
"bars": { "show": true },
"grid": { "backgroundcolor": null },
"xaxis": { "show": true },
"yaxis": { "show": false }
};
if (typeof options !== "undefined" &&
typeof options.markings !== "undefined") {
plotOptions.grid.markings = options.markings;
}
$.plot(div, [ data ], plotOptions);
};
function toggle(dialogId)
{
if( $(dialogId).dialog('isOpen') ) {
$(dialogId).dialog('close');
}
else {
$(dialogId).dialog('open');
}
}
// post process table
dwv.gui.postProcessTable = dwv.gui.base.postProcessTable;
// Tags table
dwv.gui.DicomTags = dwv.gui.base.DicomTags;
// DrawList table
dwv.gui.DrawList = dwv.gui.base.DrawList;
// Loaders
dwv.gui.Loadbox = dwv.gui.base.Loadbox;
// File loader
dwv.gui.FileLoad = dwv.gui.base.FileLoad;
// File loader
dwv.gui.FolderLoad = dwv.gui.base.FolderLoad;
// Url loader
dwv.gui.UrlLoad = dwv.gui.base.UrlLoad;
// Toolbox
dwv.gui.Toolbox = function (app)
{
var base = new dwv.gui.base.Toolbox(app);
this.setup = function(list)
{
base.setup(list);
// toolbar
// open
var openSpan = document.createElement("span");
openSpan.className = "ui-icon ui-icon-plus";
var open = document.createElement("button");
open.appendChild(openSpan);
open.title = dwv.i18n("basics.open");
open.onclick = function() { toggle(".openData"); };
// toolbox
var toolboxSpan = document.createElement("span");
toolboxSpan.className = "ui-icon ui-icon-wrench";
var toolbox = document.createElement("button");
toolbox.appendChild(toolboxSpan);
toolbox.title = dwv.i18n("basics.toolbox");
toolbox.onclick = function() { toggle(".toolList"); };
// history
var historySpan = document.createElement("span");
historySpan.className = "ui-icon ui-icon-clipboard";
var history = document.createElement("button");
history.appendChild(historySpan);
history.title = dwv.i18n("basics.history");
history.onclick = function() { toggle(".history"); };
// DICOM tags
var tagsSpan = document.createElement("span");
tagsSpan.className = "ui-icon ui-icon-tag";
var tags = document.createElement("button");
tags.appendChild(tagsSpan);
tags.title = dwv.i18n("basics.dicomTags");
tags.onclick = function() { toggle(".tags"); };
// draw list
var drawListSpan = document.createElement("span");
drawListSpan.className = "ui-icon ui-icon-pencil";
var drawList = document.createElement("button");
drawList.appendChild(drawListSpan);
drawList.title = dwv.i18n("basics.drawList");
drawList.onclick = function() { toggle(".drawList"); };
// image
var imageSpan = document.createElement("span");
imageSpan.className = "ui-icon ui-icon-image";
var image = document.createElement("button");
image.appendChild(imageSpan);
image.title = dwv.i18n("basics.image");
image.onclick = function() { toggle(".layerDialog"); };
// info
var infoSpan = document.createElement("span");
infoSpan.className = "ui-icon ui-icon-info";
var info = document.createElement("button");
info.appendChild(infoSpan);
info.title = dwv.i18n("basics.info");
info.onclick = app.onToggleInfoLayer;
// help
var helpSpan = document.createElement("span");
helpSpan.className = "ui-icon ui-icon-help";
var help = document.createElement("button");
help.appendChild(helpSpan);
help.title = dwv.i18n("basics.help");
help.onclick = function() { toggle(".help"); };
var node = app.getElement("toolbar");
node.appendChild(open);
node.appendChild(toolbox);
node.appendChild(history);
node.appendChild(tags);
node.appendChild(drawList);
node.appendChild(image);
node.appendChild(info);
node.appendChild(help);
// apply button style
$("button").button();
// save state button
var saveButton = document.createElement("button");
saveButton.appendChild(document.createTextNode(dwv.i18n("basics.downloadState")));
// save state link
var toggleSaveState = document.createElement("a");
toggleSaveState.onclick = app.onStateSave;
toggleSaveState.download = "state.json";
toggleSaveState.id = "download-state";
toggleSaveState.className += "download-state";
toggleSaveState.appendChild(saveButton);
// add to openData window
node = app.getElement("openData");
node.appendChild(toggleSaveState);
};
this.display = function (bool)
{
base.display(bool);
};
this.initialise = function (list)
{
base.initialise(list);
};
};
//Window/level
dwv.gui.WindowLevel = dwv.gui.base.WindowLevel;
// Draw
dwv.gui.Draw = dwv.gui.base.Draw;
// ColourTool
dwv.gui.ColourTool = dwv.gui.base.ColourTool;
// ZoomAndPan
dwv.gui.ZoomAndPan = dwv.gui.base.ZoomAndPan;
// Scroll
dwv.gui.Scroll = dwv.gui.base.Scroll;
// Filter
dwv.gui.Filter = dwv.gui.base.Filter;
// Filter: threshold
dwv.gui.Threshold = dwv.gui.base.Threshold;
// Filter: sharpen
dwv.gui.Sharpen = dwv.gui.base.Sharpen;
// Filter: sobel
dwv.gui.Sobel = dwv.gui.base.Sobel;
// Undo/redo
dwv.gui.Undo = dwv.gui.base.Undo;
// Help
dwv.gui.appendHelpHtml = dwv.gui.base.appendHelpHtml;
// Version
dwv.gui.appendVersionHtml = dwv.gui.base.appendVersionHtml;
// special setup
dwv.gui.setup = function () {
$(".toggleInfoLayer").button({ icons:
{ primary: "ui-icon-comment" }, text: false,
appendTo: "#dwv"
});
// create dialogs
$(".openData").dialog({ position:
{my: "left top", at: "left top", of: "#pageMain"},
appendTo: "#dwv"
});
$(".toolList").dialog({ position:
{my: "left top+180", at: "left top", of: "#pageMain"},
appendTo: "#dwv"
});
$(".history").dialog({ position:
{my: "left top+350", at: "left top", of: "#pageMain"},
appendTo: "#dwv"
});
$(".tags").dialog({ position:
{my: "right top", at: "right top", of: "#pageMain"},
autoOpen: false, width: 500, height: 590,
appendTo: "#dwv"
});
$(".drawList").dialog({ position:
{my: "right top", at: "right top", of: "#pageMain"},
autoOpen: false, width: 500, height: 590,
appendTo: "#dwv"
});
$(".help").dialog({ position:
{my: "right top", at: "right top", of: "#pageMain"},
autoOpen: false, width: 500, height: 590,
appendTo: "#dwv"
});
// image dialog
$(".layerDialog").dialog({ position:
{my: "left+320 top", at: "left top", of: "#pageMain"},
appendTo: "#dwv"
});
// default size
$(".layerDialog").dialog({ width: "auto", resizable: false });
// Resizable but keep aspect ratio
// TODO it seems to add a border that bothers getting the cursor position...
//$("#layerContainer").resizable({ aspectRatio: true });
};

View File

@@ -0,0 +1,76 @@
/**
* Application launcher.
*/
// start app function
function startApp() {
// gui setup
dwv.gui.setup();
// main application
var myapp = new dwv.App();
// initialise the application
var options = {
"containerDivId": "dwv",
"fitToWindow": true,
"gui": ["tool", "load", "help", "undo", "version", "tags", "drawList"],
"loaders": ["File", "Url"],
"tools": ["Scroll", "WindowLevel", "ZoomAndPan", "Draw", "Livewire", "Filter", "Floodfill"],
"filters": ["Threshold", "Sharpen", "Sobel"],
"shapes": ["Arrow", "Ruler", "Protractor", "Rectangle", "Roi", "Ellipse", "FreeHand"],
"isMobile": false,
"helpResourcesPath": "../../resources/help"
};
if ( dwv.browser.hasInputDirectory() ) {
options.loaders.splice(1, 0, "Folder");
}
myapp.init(options);
// help
// TODO Seems accordion only works when at end...
$("#accordion").accordion({ collapsible: "true", active: "false", heightStyle: "content" });
}
// Image decoders (for web workers)
dwv.image.decoderScripts = {
"jpeg2000": "../../decoders/pdfjs/decode-jpeg2000.js",
"jpeg-lossless": "../../decoders/rii-mango/decode-jpegloss.js",
"jpeg-baseline": "../../decoders/pdfjs/decode-jpegbaseline.js"
};
// status flags
var domContentLoaded = false;
var i18nInitialised = false;
// launch when both DOM and i18n are ready
function launchApp() {
if ( domContentLoaded && i18nInitialised ) {
startApp();
}
}
// i18n ready?
dwv.i18nOnInitialised( function () {
// call next once the overlays are loaded
var onLoaded = function (data) {
dwv.gui.info.overlayMaps = data;
i18nInitialised = true;
launchApp();
};
// load overlay map info
$.getJSON( dwv.i18nGetLocalePath("overlays.json"), onLoaded )
.fail( function () {
console.log("Using fallback overlays.");
$.getJSON( dwv.i18nGetFallbackLocalePath("overlays.json"), onLoaded );
});
});
// check browser support
dwv.browser.check();
// initialise i18n
dwv.i18nInitialise();
// DOM ready?
$(document).ready( function() {
domContentLoaded = true;
launchApp();
});

View File

@@ -0,0 +1,80 @@
CACHE MANIFEST
# v25 2017-12-21
CACHE:
# html
index.html
# css
/dwv/demo/stable/css/style.css
# js
/dwv/demo/stable/dwv-0.23.0-beta.min.js
applauncher.js
appgui.js
# images
/dwv/demo/stable/resources/icons/dwv-16.png
/dwv/demo/stable/resources/icons/dwv-60.png
/dwv/demo/stable/resources/icons/dwv-128.png
/dwv/demo/stable/resources/help/click.png
/dwv/demo/stable/resources/help/double_click.png
/dwv/demo/stable/resources/help/mouse_drag.png
/dwv/demo/stable/resources/help/mouse_wheel.png
# translations
/dwv/demo/stable/locales/de/translation.json
/dwv/demo/stable/locales/en/translation.json
/dwv/demo/stable/locales/es/translation.json
/dwv/demo/stable/locales/fr/translation.json
/dwv/demo/stable/locales/it/translation.json
/dwv/demo/stable/locales/jp/translation.json
/dwv/demo/stable/locales/ru/translation.json
/dwv/demo/stable/locales/zh/translation.json
# overlays
/dwv/demo/stable/locales/de/overlays.json
/dwv/demo/stable/locales/en/overlays.json
/dwv/demo/stable/locales/es/overlays.json
/dwv/demo/stable/locales/fr/overlays.json
/dwv/demo/stable/locales/it/overlays.json
/dwv/demo/stable/locales/jp/overlays.json
/dwv/demo/stable/locales/ru/overlays.json
/dwv/demo/stable/locales/zh/overlays.json
# third party
# css
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/jquery-ui-1.12.1.min.css
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-bg_glass_20_555555_1x400.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-icons_222222_256x240.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-icons_4b8e0b_256x240.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-icons_a83300_256x240.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-icons_cccccc_256x240.png
/dwv/demo/stable/ext/jquery-ui/themes/ui-darkness/images/ui-icons_ffffff_256x240.png
# js: dwv
/dwv/demo/stable/ext/modernizr/modernizr.js
/dwv/demo/stable/ext/i18next/i18next.min.js
/dwv/demo/stable/ext/i18next/i18nextXHRBackend.min.js
/dwv/demo/stable/ext/i18next/i18nextBrowserLanguageDetector.min.js
/dwv/demo/stable/ext/konva/konva.min.js
/dwv/demo/stable/ext/magic-wand/magic-wand.js
/dwv/demo/stable/ext/jszip/jszip.min.js
# js: viewer
/dwv/demo/stable/ext/jquery/jquery-2.1.4.min.js
/dwv/demo/stable/ext/jquery-ui/jquery-ui-1.12.1.min.js
/dwv/demo/stable/ext/flot/jquery.flot.min.js
# js: decoders
/dwv/demo/stable/decoders/pdfjs/jpx.js
/dwv/demo/stable/decoders/pdfjs/arithmetic_decoder.js
/dwv/demo/stable/decoders/pdfjs/decode-jpeg2000.js
/dwv/demo/stable/decoders/pdfjs/util.js
/dwv/demo/stable/decoders/pdfjs/jpg.js
/dwv/demo/stable/decoders/pdfjs/decode-jpegbaseline.js
/dwv/demo/stable/decoders/rii-mango/lossless-min.js
/dwv/demo/stable/decoders/rii-mango/decode-jpegloss.js
NETWORK:
*

View File

@@ -0,0 +1,193 @@
<!DOCTYPE html>
<!-- <html manifest="cache.manifest"> -->
<html>
<head>
<title>DICOM Web Viewer</title>
<meta charset="UTF-8">
<meta name="description" content="DICOM Web Viewer (DWV) static version">
<meta name="keywords" content="DICOM,HTML5,JavaScript,medical,imaging,DWV">
<link type="text/css" rel="stylesheet" href="../../css/style.css">
<style type="text/css" >
body { background-color: #222; color: white; font-size: 80%; }
#pageHeader h1 { display: inline-block; margin: 0; color: #fff; }
#pageHeader a { color: #ddf; }
#pageHeader .toolbar { display: inline-block; float: right; }
.toolList ul { padding: 0; }
.toolList li { list-style-type: none; }
#pageMain { position: absolute; height: 92%; width: 99%; bottom: 5px; left: 5px; background-color: #333; }
.infotl { text-shadow: 0 1px 0 #000; }
.infotc { text-shadow: 0 1px 0 #000; }
.infotr { text-shadow: 0 1px 0 #000; }
.infocl { text-shadow: 0 1px 0 #000; }
.infocr { text-shadow: 0 1px 0 #000; }
.infobl { text-shadow: 0 1px 0 #000; }
.infobc { text-shadow: 0 1px 0 #000; }
.infobr { text-shadow: 0 1px 0 #000; }
.dropBox { margin: 20px; }
.ui-icon { zoom: 125%; }
.tagsTable tr:nth-child(even) { background-color: #333; }
.drawList tr:nth-child(even) { background-color: #333; }
button, input, li, table { margin-top: 0.2em; }
li button, li input { margin: 0; }
.history_list { width: 100%; }
</style>
<link type="text/css" rel="stylesheet" href="../../ext/jquery-ui/themes/ui-darkness/jquery-ui-1.12.1.min.css">
<style type="text/css" >
.ui-widget-content { background-color: #222; background-image: url();}
</style>
<!-- Third party (dwv) -->
<script type="text/javascript" src="../../ext/modernizr/modernizr.js"></script>
<script type="text/javascript" src="../../ext/i18next/i18next.min.js"></script>
<script type="text/javascript" src="../../ext/i18next/i18nextXHRBackend.min.js"></script>
<script type="text/javascript" src="../../ext/i18next/i18nextBrowserLanguageDetector.min.js"></script>
<script type="text/javascript" src="../../ext/konva/konva.min.js"></script>
<script type="text/javascript" src="../../ext/magic-wand/magic-wand.js"></script>
<script type="text/javascript" src="../../ext/jszip/jszip.min.js"></script>
<!-- Third party (viewer) -->
<script type="text/javascript" src="../../ext/jquery/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="../../ext/jquery-ui/jquery-ui-1.12.1.min.js"></script>
<script type="text/javascript" src="../../ext/flot/jquery.flot.min.js"></script>
<!-- decoders -->
<script type="text/javascript" src="../../decoders/pdfjs/jpx.js"></script>
<script type="text/javascript" src="../../decoders/pdfjs/util.js"></script>
<script type="text/javascript" src="../../decoders/pdfjs/arithmetic_decoder.js"></script>
<script type="text/javascript" src="../../decoders/pdfjs/jpg.js"></script>
<script type="text/javascript" src="../../decoders/rii-mango/lossless-min.js"></script>
<!-- Local -->
<script type="text/javascript" src="../../src/app/application.js"></script>
<script type="text/javascript" src="../../src/app/drawController.js"></script>
<script type="text/javascript" src="../../src/app/infoController.js"></script>
<script type="text/javascript" src="../../src/app/toolboxController.js"></script>
<script type="text/javascript" src="../../src/app/viewController.js"></script>
<script type="text/javascript" src="../../src/app/state.js"></script>
<script type="text/javascript" src="../../src/dicom/dicomParser.js"></script>
<script type="text/javascript" src="../../src/dicom/dictionary.js"></script>
<script type="text/javascript" src="../../src/gui/filter.js"></script>
<script type="text/javascript" src="../../src/gui/generic.js"></script>
<script type="text/javascript" src="../../src/gui/help.js"></script>
<script type="text/javascript" src="../../src/gui/html.js"></script>
<script type="text/javascript" src="../../src/gui/info.js"></script>
<script type="text/javascript" src="../../src/gui/layer.js"></script>
<script type="text/javascript" src="../../src/gui/loader.js"></script>
<script type="text/javascript" src="../../src/gui/style.js"></script>
<script type="text/javascript" src="../../src/gui/tools.js"></script>
<script type="text/javascript" src="../../src/gui/undo.js"></script>
<script type="text/javascript" src="../../src/image/decoder.js"></script>
<script type="text/javascript" src="../../src/image/dicomBufferToView.js"></script>
<script type="text/javascript" src="../../src/image/domReader.js"></script>
<script type="text/javascript" src="../../src/image/filter.js"></script>
<script type="text/javascript" src="../../src/image/geometry.js"></script>
<script type="text/javascript" src="../../src/image/image.js"></script>
<script type="text/javascript" src="../../src/image/luts.js"></script>
<script type="text/javascript" src="../../src/image/view.js"></script>
<script type="text/javascript" src="../../src/io/filesLoader.js"></script>
<script type="text/javascript" src="../../src/io/urlsLoader.js"></script>
<script type="text/javascript" src="../../src/io/memoryLoader.js"></script>
<script type="text/javascript" src="../../src/io/dicomDataLoader.js"></script>
<script type="text/javascript" src="../../src/io/jsonTextLoader.js"></script>
<script type="text/javascript" src="../../src/io/rawImageLoader.js"></script>
<script type="text/javascript" src="../../src/io/rawVideoLoader.js"></script>
<script type="text/javascript" src="../../src/io/zipLoader.js"></script>
<script type="text/javascript" src="../../src/math/matrix.js"></script>
<script type="text/javascript" src="../../src/math/bucketQueue.js"></script>
<script type="text/javascript" src="../../src/math/point.js"></script>
<script type="text/javascript" src="../../src/math/scissors.js"></script>
<script type="text/javascript" src="../../src/math/shapes.js"></script>
<script type="text/javascript" src="../../src/math/stats.js"></script>
<script type="text/javascript" src="../../src/math/vector.js"></script>
<script type="text/javascript" src="../../src/tools/arrow.js"></script>
<script type="text/javascript" src="../../src/tools/draw.js"></script>
<script type="text/javascript" src="../../src/tools/drawCommands.js"></script>
<script type="text/javascript" src="../../src/tools/editor.js"></script>
<script type="text/javascript" src="../../src/tools/ellipse.js"></script>
<script type="text/javascript" src="../../src/tools/filter.js"></script>
<script type="text/javascript" src="../../src/tools/floodfill.js"></script>
<script type="text/javascript" src="../../src/tools/freeHand.js"></script>
<script type="text/javascript" src="../../src/tools/livewire.js"></script>
<script type="text/javascript" src="../../src/tools/protractor.js"></script>
<script type="text/javascript" src="../../src/tools/rectangle.js"></script>
<script type="text/javascript" src="../../src/tools/roi.js"></script>
<script type="text/javascript" src="../../src/tools/ruler.js"></script>
<script type="text/javascript" src="../../src/tools/scroll.js"></script>
<script type="text/javascript" src="../../src/tools/toolbox.js"></script>
<script type="text/javascript" src="../../src/tools/undo.js"></script>
<script type="text/javascript" src="../../src/tools/windowLevel.js"></script>
<script type="text/javascript" src="../../src/tools/zoomPan.js"></script>
<script type="text/javascript" src="../../src/utils/browser.js"></script>
<script type="text/javascript" src="../../src/utils/i18n.js"></script>
<script type="text/javascript" src="../../src/utils/listen.js"></script>
<script type="text/javascript" src="../../src/utils/progress.js"></script>
<script type="text/javascript" src="../../src/utils/string.js"></script>
<script type="text/javascript" src="../../src/utils/uri.js"></script>
<script type="text/javascript" src="../../src/utils/thread.js"></script>
<!-- Launch the app -->
<script type="text/javascript" src="appgui.js"></script>
<script type="text/javascript" src="applauncher.js"></script>
</head>
<body>
<!-- DWV -->
<div id="dwv">
<div id="pageHeader">
<!-- Title -->
<h1>DWV <span class="dwv-version"></span></h1>
<!-- Toolbar -->
<div class="toolbar"></div>
</div><!-- /pageHeader -->
<div id="pageMain">
<!-- Open file -->
<div class="openData" title="File">
<div class="loaderlist"></div>
<div id="progressbar"></div>
</div>
<!-- Toolbox -->
<div class="toolList" title="Toolbox"></div>
<!-- History -->
<div class="history" title="History"></div>
<!-- Tags -->
<div class="tags" title="Tags"></div>
<!-- DrawList -->
<div class="drawList" title="Draw list"></div>
<!-- Help -->
<div class="help" title="Help"></div>
<!-- Layer Container -->
<div class="layerDialog" title="Image">
<div class="dropBox"></div>
<div class="layerContainer">
<canvas class="imageLayer">Only for HTML5 compatible browsers...</canvas>
<div class="drawDiv"></div>
<div class="infoLayer">
<div class="infotl"></div>
<div class="infotc"></div>
<div class="infotr"></div>
<div class="infocl"></div>
<div class="infocr"></div>
<div class="infobl"></div>
<div class="infobc"></div>
<div class="infobr" style="bottom: 64px;"></div>
<div class="plot"></div>
</div><!-- /infoLayer -->
</div><!-- /layerContainer -->
</div><!-- /layerDialog -->
</div><!-- /pageMain -->
</div><!-- /dwv -->
</body>
</html>