Skip to content
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 186 134" style="enable-background:new 0 0 186 134;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:6;stroke-miterlimit:10;}
</style>
<line class="st0" x1="0" y1="134" x2="186" y2="0"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 134 134" style="enable-background:new 0 0 134 134;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
</style>
<circle class="st0" cx="67" cy="67" r="64"/>
<circle cx="67" cy="66" r="12"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 134 134" style="enable-background:new 0 0 134 134;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:6;stroke-miterlimit:10;}
</style>
<polygon class="st0" points="88.15,6.74 125.06,33.12 108.66,112.74 27.72,113.35 15.42,35.97 "/>
</svg>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 173.05 138.3"><defs><style>.cls-1{fill:none;}</style></defs><title>txt</title><rect class="cls-1" width="173.05" height="138.3"/><path d="M27.72,36.22H.71V26.75H65.48v9.47H38.34v75.91H27.72Z"/><path d="M97.09,86.78,78.53,112.13h-11L91.2,80.38,68.8,50.3H79.94L97.09,73.85,114.24,50.3h11.14L103,80.38l23.81,31.75H115.65Z"/><path d="M146.88,99.2V58.75H136.64V50.3h10.24V33.4h9.6V50.3H169v8.45H156.48v38.4c0,4.61,2.05,7.94,6.27,7.94a9.26,9.26,0,0,0,6.53-2.57l2.82,7.17c-2.43,2.31-5.89,4-11.52,4C151.49,113.66,146.88,108.41,146.88,99.2Z"/></svg>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 186.12 171.92"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-miterlimit:10;}.cls-1{stroke-width:10px;}.cls-2{stroke-width:16px;}</style></defs><title>mag1</title><circle class="cls-1" cx="106.12" cy="80" r="75"/><line class="cls-2" x1="5.24" y1="165.87" x2="48.7" y2="128.24"/><path d="M103.67,45.39l-16,17-7.5-7.65,25-25.8h11V128.94H103.67Z" transform="translate(0 0)"/></svg>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 186.12 171.92"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-miterlimit:10;}.cls-1{stroke-width:10px;}.cls-2{stroke-width:16px;}</style></defs><title>magplus</title><circle class="cls-1" cx="117.12" cy="69" r="64"/><line class="cls-2" x1="5.24" y1="165.87" x2="68.73" y2="110.89"/><line class="cls-2" x1="74.38" y1="69" x2="159.86" y2="69"/><line class="cls-2" x1="117.12" y1="111.74" x2="117.12" y2="26.26"/></svg>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 186.12 171.92"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-miterlimit:10;}.cls-1{stroke-width:10px;}.cls-2{stroke-width:16px;}</style></defs><title>mag</title><circle class="cls-1" cx="117.12" cy="69" r="64"/><line class="cls-2" x1="5.24" y1="165.87" x2="68.73" y2="110.89"/></svg>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 186.12 171.92"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-miterlimit:10;}.cls-1{stroke-width:10px;}.cls-2{stroke-width:16px;}</style></defs><title>magminus</title><circle class="cls-1" cx="117.12" cy="69" r="64"/><line class="cls-2" x1="5.24" y1="165.87" x2="68.73" y2="110.89"/><line class="cls-2" x1="74.38" y1="69" x2="159.86" y2="69"/></svg>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 182.28 168.83"><defs><style>.cls-1{fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:10px;}</style></defs><title>magtofit</title><rect class="cls-1" x="5" y="5" width="172.28" height="158.83"/><line class="cls-1" x1="106.79" y1="84.42" x2="152.3" y2="84.42"/><polygon points="132.38 101.37 149.34 84.42 132.38 67.46 146.78 67.46 163.73 84.42 146.78 101.37 132.38 101.37"/><line class="cls-1" x1="74.8" y1="84.52" x2="29.29" y2="84.52"/><polygon points="49.21 67.57 32.25 84.52 49.21 101.48 34.82 101.48 17.86 84.52 34.82 67.57 49.21 67.57"/><line class="cls-1" x1="91.05" y1="75.02" x2="91.05" y2="29.51"/><polygon points="108 49.43 91.05 32.47 74.09 49.43 74.09 35.04 91.05 18.08 108 35.04 108 49.43"/><line class="cls-1" x1="91.05" y1="94.03" x2="91.05" y2="139.54"/><polygon points="74.09 119.62 91.05 136.58 108 119.62 108 134.01 91.05 150.97 74.09 134.01 74.09 119.62"/></svg>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 186.12 171.92"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-miterlimit:10;}.cls-1{stroke-width:10px;}.cls-2{stroke-width:16px;}</style></defs><title>mag</title><circle class="cls-1" cx="117.12" cy="69" r="64"/><line class="cls-2" x1="5.24" y1="165.87" x2="68.73" y2="110.89"/></svg>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
/* JS9 allinone: v3.8.0 */
@charset "UTF-8";
/*!
* jQuery contextMenu - Plugin for simple contextMenu handling
*
* Version: v2.8.0
*
* Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)
* Web: http://swisnl.github.io/jQuery-contextMenu/
*
* Copyright (c) 2011-2019 SWIS BV and contributors
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
* Date: 2019-01-16T15:45:48.418Z
*/
@-webkit-keyframes cm-spin {
0% {
-webkit-transform: translateY(-50%) rotate(0deg);
transform: translateY(-50%) rotate(0deg);
}
100% {
-webkit-transform: translateY(-50%) rotate(359deg);
transform: translateY(-50%) rotate(359deg);
}
}
@-o-keyframes cm-spin {
0% {
-webkit-transform: translateY(-50%) rotate(0deg);
-o-transform: translateY(-50%) rotate(0deg);
transform: translateY(-50%) rotate(0deg);
}
100% {
-webkit-transform: translateY(-50%) rotate(359deg);
-o-transform: translateY(-50%) rotate(359deg);
transform: translateY(-50%) rotate(359deg);
}
}
@keyframes cm-spin {
0% {
-webkit-transform: translateY(-50%) rotate(0deg);
-o-transform: translateY(-50%) rotate(0deg);
transform: translateY(-50%) rotate(0deg);
}
100% {
-webkit-transform: translateY(-50%) rotate(359deg);
-o-transform: translateY(-50%) rotate(359deg);
transform: translateY(-50%) rotate(359deg);
}
}
@font-face {
font-family: "context-menu-icons";
font-style: normal;
font-weight: normal;
src: url("font/context-menu-icons.eot?2lkho");
src: url("font/context-menu-icons.eot?2lkho#iefix") format("embedded-opentype"), url("font/context-menu-icons.woff2?2lkho") format("woff2"), url("font/context-menu-icons.woff?2lkho") format("woff"), url("font/context-menu-icons.ttf?2lkho") format("truetype");
}
.context-menu-icon-add:before {
content: "\EA01";
}
.context-menu-icon-copy:before {
content: "\EA02";
}
.context-menu-icon-cut:before {
content: "\EA03";
}
.context-menu-icon-delete:before {
content: "\EA04";
}
.context-menu-icon-edit:before {
content: "\EA05";
}
.context-menu-icon-loading:before {
content: "\EA06";
}
.context-menu-icon-paste:before {
content: "\EA07";
}
.context-menu-icon-quit:before {
content: "\EA08";
}
.context-menu-icon::before {
position: absolute;
top: 50%;
left: 0;
width: 2em;
font-family: "context-menu-icons";
font-size: 1em;
font-style: normal;
font-weight: normal;
line-height: 1;
color: #2980b9;
text-align: center;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.context-menu-icon.context-menu-hover:before {
color: #fff;
}
.context-menu-icon.context-menu-disabled::before {
color: #bbb;
}
.context-menu-icon.context-menu-icon-loading:before {
-webkit-animation: cm-spin 2s infinite;
-o-animation: cm-spin 2s infinite;
animation: cm-spin 2s infinite;
}
.context-menu-icon.context-menu-icon--fa {
display: list-item;
font-family: inherit;
line-height: inherit;
}
.context-menu-icon.context-menu-icon--fa::before {
position: absolute;
top: 50%;
left: 0;
width: 2em;
font-family: FontAwesome;
font-size: 1em;
font-style: normal;
font-weight: normal;
line-height: 1;
color: #2980b9;
text-align: center;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.context-menu-icon.context-menu-icon--fa.context-menu-hover:before {
color: #fff;
}
.context-menu-icon.context-menu-icon--fa.context-menu-disabled::before {
color: #bbb;
}
.context-menu-icon.context-menu-icon--fa5 {
display: list-item;
font-family: inherit;
line-height: inherit;
}
.context-menu-icon.context-menu-icon--fa5 i, .context-menu-icon.context-menu-icon--fa5 svg {
position: absolute;
top: .3em;
left: .5em;
color: #2980b9;
}
.context-menu-icon.context-menu-icon--fa5.context-menu-hover > i, .context-menu-icon.context-menu-icon--fa5.context-menu-hover > svg {
color: #fff;
}
.context-menu-icon.context-menu-icon--fa5.context-menu-disabled i, .context-menu-icon.context-menu-icon--fa5.context-menu-disabled svg {
color: #bbb;
}
.context-menu-list {
position: absolute;
display: inline-block;
min-width: 13em;
max-width: 26em;
padding: .25em 0;
margin: .3em;
font-family: inherit;
font-size: inherit;
list-style-type: none;
background: #fff;
border: 1px solid #bebebe;
border-radius: .2em;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
}
.context-menu-item {
position: relative;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
padding: .2em 2em;
color: #2f2f2f;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #fff;
}
.context-menu-separator {
padding: 0;
margin: .35em 0;
border-bottom: 1px solid #e6e6e6;
}
.context-menu-item > label > input,
.context-menu-item > label > textarea {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.context-menu-item.context-menu-hover {
color: #fff;
cursor: pointer;
background-color: #2980b9;
}
.context-menu-item.context-menu-disabled {
color: #bbb;
cursor: default;
background-color: #fff;
}
.context-menu-input.context-menu-hover {
color: #2f2f2f;
cursor: default;
}
.context-menu-submenu:after {
position: absolute;
top: 50%;
right: .5em;
z-index: 1;
width: 0;
height: 0;
content: '';
border-color: transparent transparent transparent #2f2f2f;
border-style: solid;
border-width: .25em 0 .25em .25em;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
}
/**
* Inputs
*/
.context-menu-item.context-menu-input {
padding: .3em .6em;
}
/* vertically align inside labels */
.context-menu-input > label > * {
vertical-align: top;
}
/* position checkboxes and radios as icons */
.context-menu-input > label > input[type="checkbox"],
.context-menu-input > label > input[type="radio"] {
position: relative;
top: .12em;
margin-right: .4em;
}
.context-menu-input > label {
margin: 0;
}
.context-menu-input > label,
.context-menu-input > label > input[type="text"],
.context-menu-input > label > textarea,
.context-menu-input > label > select {
display: block;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.context-menu-input > label > textarea {
height: 7em;
}
.context-menu-item > .context-menu-list {
top: .3em;
/* re-positioned by js */
right: -.3em;
display: none;
}
.context-menu-item.context-menu-visible > .context-menu-list {
display: block;
}
.context-menu-accesskey {
text-decoration: underline;
}
.dhtmlwindow{
position: absolute;
border: 2px solid black;
visibility: hidden;
background-color: white;
}
.drag-handle{ /*CSS for Drag Handle*/
padding: 1px;
text-indent: 3px;
font: bold 14px Arial;
background-color: #CA0000;
color: white;
cursor: move;
overflow: hidden;
width: auto;
filter:progid:DXImageTransform.Microsoft.alpha(opacity=100);
-moz-opacity: 1;
opacity: 1;
}
.drag-handle .drag-controls{ /*CSS for controls (min, close etc) within Drag Handle*/
position: absolute;
right: 1px;
top: 2px;
cursor: hand;
cursor: pointer;
}
* html .drag-handle{ /*IE6 and below CSS hack. Width must be set to 100% in order for opaque title bar to render*/
width: 100%;
}
.drag-contentarea{ /*CSS for Content Display Area div*/
border-top: 1px solid brown;
background-color: white;
color: black;
height: 150px;
padding: 2px;
overflow: auto;
}
.drag-statusarea{ /*CSS for Status Bar div (includes resizearea)*/
border-top: 1px solid gray;
background-color: #F8F8F8;
height: 13px; /*height of resize image*/
}
.drag-resizearea{ /*CSS for Resize Area itself*/
float: right;
width: 13px; /*width of resize image*/
height: 13px; /*height of resize image*/
cursor: nw-resize;
font-size: 0;
}
.osxA {
text-decoration: none;
}
.osxSpan {
line-height: 8px;
vertical-align: 0%;
}
.osxButtons {
padding-left: 8px;
padding-right: 8px;
padding-top: 4px;
line-height: 0px;
}
.osxButtons:hover a {
visibility: visible;
}
.osxClose {
background: #ff5c5c;
font-family: HelveticaNeue, 'Helvetica Neue', 'Lucida Grande', Arial, sans-serif;
font-size: 8pt;
width: 11px;
height: 11px;
border: 1px solid #e33e41;
border-radius: 50%;
display: inline-block;
}
.osxClose:active {
background: #c14645;
border: 1px solid #b03537;
}
.osxClose:active .osxClosebutton {
color: #4e0002;
}
.osxClosebutton {
color: #820005;
visibility: hidden;
cursor: default;
}
.osxMinimize {
background: #ffbd4c;
font-family: HelveticaNeue, 'Helvetica Neue', 'Lucida Grande', Arial, sans-serif;
font-size: 8pt;
margin-left: 8px;
width: 11px;
height: 11px;
border: 1px solid #e09e3e;
border-radius: 50%;
display: inline-block;
}
.osxMinimize:active {
background: #c08e38;
border: 1px solid #af7c33;
}
.osxMinimize:active .osxMinimizebutton {
color: #5a2607;
}
.osxMinimizebutton {
color: #9a5518;
visibility: hidden;
cursor: default;
}
/* ######### CSS for Shade Tabs. Remove if not using ######### */
.shadetabs{
padding: 3px 0;
margin-left: 0;
margin-top: 1px;
margin-bottom: 0;
font: bold 12px Verdana;
list-style-type: none;
text-align: left; /*set to left, center, or right to align the menu as desired*/
}
.shadetabs li{
display: inline;
margin: 0;
}
.shadetabs li a{
text-decoration: none;
position: relative;
z-index: 1;
padding: 3px 7px;
margin-right: 3px;
border: 1px solid #778;
color: #2d2b2b;
background: white url(images/shade.gif) top left repeat-x;
}
.shadetabs li a:visited{
color: #2d2b2b;
}
.shadetabs li a:hover{
text-decoration: underline;
color: #2d2b2b;
}
.shadetabs li a.selected{ /*selected main tab style */
position: relative;
top: 1px;
}
.shadetabs li a.selected{ /*selected main tab style */
background-image: url(images/shadeactive.gif);
border-bottom-color: white;
}
.shadetabs li a.selected:hover{ /*selected main tab style */
text-decoration: none;
}
.tabcontent{
display:none;
}
@media print {
.tabcontent {
display:block !important;
}
}
/* ######### CSS for Inverted Modern Bricks II Tabs. Remove if not using ######### */
.modernbricksmenu2{
padding: 0;
width: 362px;
border-top: 5px solid #D25A0B; /*Brown color theme*/
background: transparent;
voice-family: "\"}\"";
voice-family: inherit;
}
.modernbricksmenu2 ul{
margin:0;
margin-left: 10px; /*margin between first menu item and left browser edge*/
padding: 0;
list-style: none;
}
.modernbricksmenu2 li{
display: inline;
margin: 0 2px 0 0;
padding: 0;
text-transform:uppercase;
}
.modernbricksmenu2 a{
float: left;
display: block;
font: bold 11px Arial;
color: white;
text-decoration: none;
margin: 0 1px 0 0; /*Margin between each menu item*/
padding: 5px 10px;
background-color: black; /*Brown color theme*/
border-top: 1px solid white;
}
.modernbricksmenu2 a:hover{
background-color: #D25A0B; /*Brown color theme*/
color: white;
}
.modernbricksmenu2 a.selected{ /*currently selected tab*/
background-color: #D25A0B; /*Brown color theme*/
color: white;
border-color: #D25A0B; /*Brown color theme*/
}
.tabcontent{
display:none;
}
@media print {
.tabcontent {
display:block !important;
}
}
/* ######### CSS for Indented CSS Tabs. Remove if not using ######### */
.indentmenu{
font: bold 13px Arial;
width: 100%; /*leave this value as is in most cases*/
}
.indentmenu ul{
margin: 0;
padding: 0;
float: left;
/* width: 80%; width of menu*/
border-top: 1px solid navy; /*navy border*/
background: black url(images/indentbg.gif) center center repeat-x;
}
.indentmenu ul li{
display: inline;
}
.indentmenu ul li a{
float: left;
color: white; /*text color*/
padding: 5px 11px;
text-decoration: none;
border-right: 1px solid navy; /*navy divider between menu items*/
}
.indentmenu ul li a:visited{
color: white;
}
.indentmenu ul li a.selected{
color: white !important;
padding-top: 6px; /*shift text down 1px*/
padding-bottom: 4px;
background: black url(images/indentbg2.gif) center center repeat-x;
}
.tabcontentstyle{ /*style of tab content oontainer*/
border: 1px solid gray;
width: 450px;
margin-bottom: 1em;
padding: 10px;
}
.tabcontent{
display:none;
}
@media print {
.tabcontent {
display:block !important;
}
}
/***
Spectrum Colorpicker v1.8.0
https://github.com/bgrins/spectrum
Author: Brian Grinstead
License: MIT
***/
.sp-container {
position:absolute;
top:0;
left:0;
display:inline-block;
*display: inline;
*zoom: 1;
/* https://github.com/bgrins/spectrum/issues/40 */
z-index: 9999994;
overflow: hidden;
}
.sp-container.sp-flat {
position: relative;
}
/* Fix for * { box-sizing: border-box; } */
.sp-container,
.sp-container * {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */
.sp-top {
position:relative;
width: 100%;
display:inline-block;
}
.sp-top-inner {
position:absolute;
top:0;
left:0;
bottom:0;
right:0;
}
.sp-color {
position: absolute;
top:0;
left:0;
bottom:0;
right:20%;
}
.sp-hue {
position: absolute;
top:0;
right:0;
bottom:0;
left:84%;
height: 100%;
}
.sp-clear-enabled .sp-hue {
top:33px;
height: 77.5%;
}
.sp-fill {
padding-top: 80%;
}
.sp-sat, .sp-val {
position: absolute;
top:0;
left:0;
right:0;
bottom:0;
}
.sp-alpha-enabled .sp-top {
margin-bottom: 18px;
}
.sp-alpha-enabled .sp-alpha {
display: block;
}
.sp-alpha-handle {
position:absolute;
top:-4px;
bottom: -4px;
width: 6px;
left: 50%;
cursor: pointer;
border: 1px solid black;
background: white;
opacity: .8;
}
.sp-alpha {
display: none;
position: absolute;
bottom: -14px;
right: 0;
left: 0;
height: 8px;
}
.sp-alpha-inner {
border: solid 1px #333;
}
.sp-clear {
display: none;
}
.sp-clear.sp-clear-display {
background-position: center;
}
.sp-clear-enabled .sp-clear {
display: block;
position:absolute;
top:0px;
right:0;
bottom:0;
left:84%;
height: 28px;
}
/* Don't allow text selection */
.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button {
-webkit-user-select:none;
-moz-user-select: -moz-none;
-o-user-select:none;
user-select: none;
}
.sp-container.sp-input-disabled .sp-input-container {
display: none;
}
.sp-container.sp-buttons-disabled .sp-button-container {
display: none;
}
.sp-container.sp-palette-buttons-disabled .sp-palette-button-container {
display: none;
}
.sp-palette-only .sp-picker-container {
display: none;
}
.sp-palette-disabled .sp-palette-container {
display: none;
}
.sp-initial-disabled .sp-initial {
display: none;
}
/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */
.sp-sat {
background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));
background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));
background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";
filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');
}
.sp-val {
background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));
background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));
background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";
filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');
}
.sp-hue {
background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));
background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
}
/* IE filters do not support multiple color stops.
Generate 6 divs, line them up, and do two color gradients for each.
Yes, really.
*/
.sp-1 {
height:17%;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00');
}
.sp-2 {
height:16%;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00');
}
.sp-3 {
height:17%;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff');
}
.sp-4 {
height:17%;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff');
}
.sp-5 {
height:16%;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff');
}
.sp-6 {
height:17%;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000');
}
.sp-hidden {
display: none !important;
}
/* Clearfix hack */
.sp-cf:before, .sp-cf:after { content: ""; display: table; }
.sp-cf:after { clear: both; }
.sp-cf { *zoom: 1; }
/* Mobile devices, make hue slider bigger so it is easier to slide */
@media (max-device-width: 480px) {
.sp-color { right: 40%; }
.sp-hue { left: 63%; }
.sp-fill { padding-top: 60%; }
}
.sp-dragger {
border-radius: 5px;
height: 5px;
width: 5px;
border: 1px solid #fff;
background: #000;
cursor: pointer;
position:absolute;
top:0;
left: 0;
}
.sp-slider {
position: absolute;
top:0;
cursor:pointer;
height: 3px;
left: -1px;
right: -1px;
border: 1px solid #000;
background: white;
opacity: .8;
}
/*
Theme authors:
Here are the basic themeable display options (colors, fonts, global widths).
See http://bgrins.github.io/spectrum/themes/ for instructions.
*/
.sp-container {
border-radius: 0;
background-color: #ECECEC;
border: solid 1px #f0c49B;
padding: 0;
}
.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear {
font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
.sp-top {
margin-bottom: 3px;
}
.sp-color, .sp-hue, .sp-clear {
border: solid 1px #666;
}
/* Input */
.sp-input-container {
float:right;
width: 100px;
margin-bottom: 4px;
}
.sp-initial-disabled .sp-input-container {
width: 100%;
}
.sp-input {
font-size: 12px !important;
border: 1px inset;
padding: 4px 5px;
margin: 0;
width: 100%;
background:transparent;
border-radius: 3px;
color: #222;
}
.sp-input:focus {
border: 1px solid orange;
}
.sp-input.sp-validation-error {
border: 1px solid red;
background: #fdd;
}
.sp-picker-container , .sp-palette-container {
float:left;
position: relative;
padding: 10px;
padding-bottom: 300px;
margin-bottom: -290px;
}
.sp-picker-container {
width: 172px;
border-left: solid 1px #fff;
}
/* Palettes */
.sp-palette-container {
border-right: solid 1px #ccc;
}
.sp-palette-only .sp-palette-container {
border: 0;
}
.sp-palette .sp-thumb-el {
display: block;
position:relative;
float:left;
width: 24px;
height: 15px;
margin: 3px;
cursor: pointer;
border:solid 2px transparent;
}
.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active {
border-color: orange;
}
.sp-thumb-el {
position:relative;
}
/* Initial */
.sp-initial {
float: left;
border: solid 1px #333;
}
.sp-initial span {
width: 30px;
height: 25px;
border:none;
display:block;
float:left;
margin:0;
}
.sp-initial .sp-clear-display {
background-position: center;
}
/* Buttons */
.sp-palette-button-container,
.sp-button-container {
float: right;
}
/* Replacer (the little preview div that shows up instead of the <input>) */
.sp-replacer {
margin:0;
overflow:hidden;
cursor:pointer;
padding: 4px;
display:inline-block;
*zoom: 1;
*display: inline;
border: solid 1px #91765d;
background: #eee;
color: #333;
vertical-align: middle;
}
.sp-replacer:hover, .sp-replacer.sp-active {
border-color: #F0C49B;
color: #111;
}
.sp-replacer.sp-disabled {
cursor:default;
border-color: silver;
color: silver;
}
.sp-dd {
padding: 2px 0;
height: 16px;
line-height: 16px;
float:left;
font-size:10px;
}
.sp-preview {
position:relative;
width:25px;
height: 20px;
border: solid 1px #222;
margin-right: 5px;
float:left;
z-index: 0;
}
.sp-palette {
*width: 220px;
max-width: 220px;
}
.sp-palette .sp-thumb-el {
width:16px;
height: 16px;
margin:2px 1px;
border: solid 1px #d0d0d0;
}
.sp-container {
padding-bottom:0;
}
/* Buttons: http://hellohappy.org/css3-buttons/ */
.sp-container button {
background-color: #eeeeee;
background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);
background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);
background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);
background-image: -o-linear-gradient(top, #eeeeee, #cccccc);
background-image: linear-gradient(to bottom, #eeeeee, #cccccc);
border: 1px solid #ccc;
border-bottom: 1px solid #bbb;
border-radius: 3px;
color: #333;
font-size: 14px;
line-height: 1;
padding: 5px 4px;
text-align: center;
text-shadow: 0 1px 0 #eee;
vertical-align: middle;
}
.sp-container button:hover {
background-color: #dddddd;
background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);
background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);
background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);
background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);
background-image: linear-gradient(to bottom, #dddddd, #bbbbbb);
border: 1px solid #bbb;
border-bottom: 1px solid #999;
cursor: pointer;
text-shadow: 0 1px 0 #ddd;
}
.sp-container button:active {
border: 1px solid #aaa;
border-bottom: 1px solid #888;
-webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
-moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
-ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
-o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
}
.sp-cancel {
font-size: 11px;
color: #d93f3f !important;
margin:0;
padding:2px;
margin-right: 5px;
vertical-align: middle;
text-decoration:none;
}
.sp-cancel:hover {
color: #d93f3f !important;
text-decoration: underline;
}
.sp-palette span:hover, .sp-palette span.sp-thumb-active {
border-color: #000;
}
.sp-preview, .sp-alpha, .sp-thumb-el {
position:relative;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
}
.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner {
display:block;
position:absolute;
top:0;left:0;bottom:0;right:0;
}
.sp-palette .sp-thumb-inner {
background-position: 50% 50%;
background-repeat: no-repeat;
}
.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);
}
.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);
}
.sp-clear-display {
background-repeat:no-repeat;
background-position: center;
background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==);
}
div.JS9BlendContainer {
padding: 2px;
}
div.JS9BlendImage {
margin: 5px;
background: #E9E9E9;
overflow: auto;
}
div.JS9BlendImageInactive {
padding: 10px;
border: 1px solid black;
}
div.JS9BlendImageActive {
padding: 9px;
border: 2px solid #00F000;
}
div.JS9BlendHeader {
border: 0px solid black;
background: #E9E9E9;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
#blendModeSelect {
width: 110px;
}
#blendModeSelect option {
width: 110px;
}
#blendOpacitySelect {
width: 80px;
}
#blendOpacitySelect option {
width: 80px;
}
#blendFile {
float: right;
}
#blendNoFile {
margin-left: 15px;
}
div.JS9BlinkContainer {
padding: 2px;
}
div.JS9BlinkImage {
margin: 5px;
background: #E9E9E9;
overflow: auto;
}
div.JS9BlinkImageInactive {
padding: 10px;
border: 1px solid black;
}
div.JS9BlinkImageActive {
padding: 9px;
border: 2px solid #00F000;
}
div.JS9BlinkHeader {
border: 0px solid black;
background: #E9E9E9;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
#blinkModeSelect {
width: 110px;
}
#blinkModeSelect option {
width: 110px;
}
#blinkOpacitySelect {
width: 80px;
}
#blinkOpacitySelect option {
width: 80px;
}
#blinkFile {
float: right;
}
#blinkNoFile {
margin-left: 15px;
}
div.JS9CmapsContainer {
padding: 2px;
overflow: auto;
}
div.JS9CmapsHeader {
border: 0px solid black;
background: #E9E9E9;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
div.JS9CmapsImage {
margin: 5px;
background: #E9E9E9;
overflow: auto;
}
div.JS9CmapsImageInactive {
padding: 10px;
border: 1px solid black;
}
div.JS9CmapsImageActive {
padding: 9px;
border: 2px solid #00F000;
}
div.JS9cmapsNoFile {
padding: 15px;
}
.JS9ColorContainer {
padding: 5px;
}
.JS9ColorButton {
margin-top: 1px;
width: 105px;
}
.JS9ColorSelect {
width: 100px;
}
.JS9ColorInput {
padding: 1px 1px 1px 3px;
width: 95px;
}
.JS9ColorCol1 {
position: absolute;
top: 0;
left: 0;
}
.JS9ColorCol2 {
position: absolute;
top: 0;
left: 110px;
}
.JS9ColorCol3 {
position: absolute;
top: 0;
left: 220px;
}
.JS9ColorCol4 {
position: absolute;
top: 0;
left: 330px;
}
.JS9ColorLinegroup {
float: left;
position: relative;
top: 0px;
left: 0px;
width: 95%;
padding: 5px;
margin: 5px;
}
canvas.JS9ColorbarCanvas {
border: 1px solid black;
}
canvas.JS9ColorbarTextCanvas {
background-color: white;
}
.JS9CubeContainer {
padding: 5px;
}
.JS9CubeLinegroup {
float: left;
position: relative;
top: 0px;
left: 0px;
width: 95%;
padding: 5px;
margin: 5px;
}
.JS9CubeRangeLine {
font-size: 9pt;
}
.JS9CubeRange {
vertical-align: middle;
}
.JS9CubeValue {
vertical-align: top;
text-align: center;
}
.JS9CubeValue2 {
vertical-align: top;
text-align: center;
}
.JS9CubeOrder {
vertical-align: top;
}
div.JS9DivsContainer {
padding: 2px;
}
div.JS9DivsHeader {
border: 0px solid black;
background: #E9E9E9;
padding: 10px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
div.JS9DivsDiv {
margin: 5px;
background: #E9E9E9;
overflow: auto;
padding: 10px;
border: 1px solid black;
}
span.JS9DivsSpan {
float: right;
margin-right: 10px;
}
span.JS9NoDivs {
margin-left: 15px;
}
.JS9FiltersContainer {
padding: 5px;
}
.JS9FiltersLineheader {
}
.JS9FiltersLinegroup {
float: left;
position: relative;
top: 0px;
left: 0px;
width: 95%;
height: 20px;
padding: 0px;
margin: 1px;
}
.JS9FiltersHeader {
padding-left: 12px;
padding-top: 5px;
padding-bottom: 0px;
padding-right: 5px;
}
.JS9FiltersText {
float: right;
}
.JS9FiltersButton {
padding: 0px;
margin: 2px;
width: 80px;
float: left;
outline: none;
}
.JS9FiltersUndoButton {
padding: 0px;
margin-top: 15px;
margin-right: 2px;
margin-bottom: 2px;
margin-left: 2px;
width: 80px;
float: left;
outline: none;
}
.JS9FiltersValue {
padding: 1px;
text-align: right;
}
.JS9FiltersCol1 {
position: absolute;
float: right;
top: 0;
left: 5;
width: 80px;
}
.JS9FiltersCol2 {
position: absolute;
top: 0;
left: 100px;
}
.JS9FiltersCol3 {
position: absolute;
top: 0;
left: 250px;
width: 40px;
}
.JS9FiltersRange {
width: 130px;
}
div.JS9ImarithLinegroup {
float: left;
position: relative;
top: 0px;
left: 0px;
width: 95%;
padding: 5px;
margin: 5px;
}
div.JS9ImarithContainer {
padding: 5px;
}
div.JS9KeyboardContainer {
padding: 0px;
margin: 0px;
}
div.JS9KeyboardActionContainer {
padding: 0px;
margin: 0px;
}
div.JS9KeyboardItem {
padding: 0px;
margin: 0px;
}
div.JS9KeyboardText {
margin: 0px;
padding: 1px 1px 1px 30px;
background: #E9E9E9;
overflow: auto;
border: 1px solid transparent;
display: inline-block;
width: 120px;
}
div.JS9KeyboardAction {
margin: 0px 0px 5px 0px;
padding: 1px;
background: #E9E9E9;
overflow: auto;
border: 1px solid transparent;
display: inline-block;
}
div.JS9KeyboardHeader, div.JS9KeyboardFooter {
background: #E9E9E9;
text-align: left;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
border: 1px solid transparent;
}
button.JS9KeyboardButton {
margin: 0px 0px 5px 0px;
}
div.JS9LayersContainer {
padding: 2px;
}
div.JS9LayersHeader {
border: 0px solid black;
background: #E9E9E9;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
div.JS9LayersLayer {
margin: 5px;
background: #E9E9E9;
overflow: auto;
}
div.JS9LayersLayerInactive {
padding: 10px;
border: 1px solid black;
}
div.JS9LayersLayerActive {
padding: 9px;
border: 2px solid #00F000;
}
span.JS9LayersSpan {
float: right;
margin-right: 10px;
}
span.JS9NoLayers {
margin-left: 15px;
}
.JS9MefContainer {
padding: 10px;
overflow: auto;
}
.JS9MefExtension {
margin: 5px;
background: #E9E9E9;
overflow: auto;
font-size: 10pt;
}
.JS9MefHeader {
margin: 5px;
background: #E9E9E9;
}
.JS9MefInput {
margin: 5px;
background: #E9E9E9;
}
.JS9MefExtensionInactive {
padding: 0px;
border: 1px solid black;
}
.JS9MefExtensionActive {
padding: 0px;
border: 2px solid #00F000;
}
span.JS9MefStrike{
font-weight:bold; /*set line weight here*/
color:red;
text-decoration:line-through;
}
span.JS9MefStrike>span {
font-weight:normal;
color: black;
}div.JS9MouseTouchContainer {
padding: 2px;
}
div.JS9MouseTouchText {
margin: 5px;
padding: 6px 6px 6px 10px;
background: #E9E9E9;
overflow: auto;
border: 1px solid transparent;
}
div.JS9MouseTouchAction {
margin: 5px;
padding: 6px;
background: #E9E9E9;
overflow: auto;
border: 1px solid black;
}
div.JS9MouseTouchHeader, div.JS9MouseTouchFooter {
background: #E9E9E9;
text-align: center;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
border: 1px solid transparent;
}
.JS9ScaleContainer {
padding: 5px;
}
.JS9ScaleLinegroup {
float: left;
position: relative;
top: 0px;
left: 0px;
width: 95%;
padding: 5px;
margin: 5px;
}
.JS9ScalePlot {
border: 1px black solid;
}
div.JS9SeparateContainer {
padding: 2px;
}
div.JS9SeparateImage {
margin: 5px;
background: #E9E9E9;
overflow: auto;
}
div.JS9SeparateImageInactive {
padding: 10px;
border: 1px solid black;
}
div.JS9SeparateImageActive {
padding: 9px;
border: 2px solid #00F000;
}
div.JS9SeparateHeader {
border: 0px solid black;
background: #E9E9E9;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
input.separateButton1 {
position: relative;
width: 120px;
left: 10px;
}
input.separateButton2 {
position: relative;
width: 90px;
left: 30px;
}
select.separateLayoutSelect {
margin-right: 5px;
}
#separateFile {
float: right;
}
#separateNoFile {
margin-left: 15px;
}
/* overflow scrolling technique: https://stackoverflow.com/questions/9672176/prevent-floated-divs-from-wrapping-to-new-line */
/* this doesn't work on Linux Electron: it puts up arrows that get in the way */
.JS9Statusbar {
/* overflow-y: scroll; */
}
.JS9StatusbarContainer {
background-color: #E9E9E9;
padding-left: 4px;
height: 100%;
font: normal 12px Arial;
overflow: auto;
}
.JS9StatusbarItem {
border-radius: 4px;
display:inline-block;
vertical-align:middle;
text-align:center;
white-space:nowrap;
background-color: #E9E9E9;
color: black;
margin-top: 4px;
margin-bottom: 4px;
padding: 4px;
float: left;
}
.JS9StatusbarItem[name*="JS9Colorbar"] {
margin-top: 0px;
padding-right: 0px;
padding-left: 0px;
}
img.JS9StatusbarImage {
white-space:nowrap;
}
img.JS9StatusbarImageItem[name*="zoom_"]{
height: 12px;
width: 12px;
}
img.JS9StatusbarImageOption[name*="color_"]{
height: 12px;
width: 100px;
}
.JS9StatusbarItemNoHighlight {
border: 1px solid #E9E9E9;
}
.JS9StatusbarItemHighlight {
border: 1px solid #B0B0B0;
}
.JS9StatusbarItemHighlight2 {
border: 1px solid #777777
}
.JS9StatusbarPluginItem .JS9ColorbarCanvas {
border: 0px solid black;
}
.JS9StatusbarPluginItem {
vertical-align: middle;
}
div.JS9SyncUIContainer {
padding: 2px;
}
div.JS9SyncUIHeader {
position: relative;
left: 0px;
top: 0px;
background: #E9E9E9;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
div.JS9SyncUIOpContainer {
position: relative;
left: 0px;
top: 0px;
}
div.JS9SyncUIOpRow {
position: relative;
left: 0px;
top: 0px;
width: 100%;
height: 24px;
}
span.JS9SyncUIOp {
background: #E9E9E9;
overflow: auto;
display: relative;
/* calculated in the code */
top: 0px;
left: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
div.JS9SyncUIText {
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 10px;
white-space: nowrap;
}
input.JS9SyncUIActiveCheck {
margin-left: 0px;
}
div.JS9SyncUIButtons {
margin-left: 0px;
margin-top: 30px;
margin-right: 0px;
margin-bottom: 0px;
padding-right: 10px;
}
span.JS9SyncUIButton {
margin-right: 0px;
}
div.JS9SyncUIImageContainer {
position: relative;
left: 0px;
top: 0px;
overflow: auto;
}
div.JS9SyncUIImageRow {
position: relative;
left: 0px;
top: 0px;
background: #E9E9E9;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
overflow: auto;
white-space: nowrap;
}
div.JS9SyncUIOptsContainer {
position: relative;
left: 0px;
top: 0px;
}
div.JS9SyncUIOptsRow {
position: relative;
left: 0px;
top: 0px;
width: 100%;
height: 24px;
}
span.JS9SyncUIOpts {
background: #E9E9E9;
overflow: auto;
display: relative;
/* calculated in the code */
top: 0px;
left: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 0px;
}
div.JS9SyncUIFooter {
border: 0px solid black;
background: #E9E9E9;
padding: 0px;
margin-left: 15px;
margin-top: 5px;
margin-right: 5px;
margin-bottom: 15px;
}
span.JS9SyncUINoFile {
margin-left: 15px;
}
.JS9ToolbarContainer{
border-style: solid;
border-color: black;
border-width: 0px;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #ebebeb, color-stop(1.0, #d5d5d5)));
background: -webkit-linear-gradient(top, #ebebeb, #d5d5d5);
background: -moz-linear-gradient(top, #ebebeb, #d5d5d5);
background: -ms-linear-gradient(top, #ebebeb, #d5d5d5);
background: -o-linear-gradient(top, #ebebeb, #d5d5d5);
background: linear-gradient(top, #ebebeb, #d5d5d5);
}
.JS9ToolbarDiv{
overflow: auto;
border-style: solid;
border-color: black;
border-width: 0px;
margin: 0px 0px 2px 0px;
padding: 0px;
}
.JS9ToolbarButtonDiv{
margin: 2px 0px 0px 4px;
padding: 2px 2px 0px 0px;;
display: inline;
}
.JS9ToolbarImageButton{
margin: 2px 2px 0px 0px;
padding: 2px;
display: inline-block;
vertical-align: middle;
}
.JS9ToolbarImageButton:focus {
outline: 2px dotted grey;
}
.JS9ToolbarImageButton:hover {
border: 1px solid grey;
}
.JS9ToolbarButtonButton{
vertical-align: middle;
border: 0px black solid;
background-color: transparent;
color: black;
padding: 2px 4px 2px 4px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 12px;
margin: 2px;
border-radius: 4px;
}
.JS9ToolbarButtonButton:hover {
border: 1px solid grey;
}
.JS9ToolbarButtonButton:focus {
outline: 2px dotted grey;
}
.JS9ToolbarTooltip{
position: relative;
z-index: 999;
background: #E9E9E9;
padding: 9px;
border: 1px solid grey;
font-family: Helvetica, sans-serif;
font-size: 10pt;
display: none;
}
.JS9PanZoomContainer {
padding: 5px;
}
.JS9PanZoomCol1 {
position: absolute;
top: 0;
left: 0;
width: 80px;
}
.JS9PanZoomCol2 {
position: absolute;
top: 0;
left: 100px;
width: 80px;
}
.JS9PanZoomCol3 {
position: absolute;
top: 0;
left: 200px;
width: 80px;
}
.JS9PanZoomCol4 {
position: absolute;
top: 0;
left: 300px;
width: 80px;
}
.JS9PanZoomCol5 {
position: absolute;
top: 0;
left: 400px;
width: 100px;
}
.JS9PanZoomLinegroup {
float: left;
position: relative;
top: 0px;
left: 0px;
width: 95%;
padding: 5px;
margin: 5px;
}
/*
*
* JS9 CSS specifications
*
*/
/* high-level divs used by Web designers */
div.JS9 {
/* relative pos top/left for container, Flanagan's JavaScript, p 357 */
position: relative;
top: 0px;
left: 0px;
display: block;
padding: 0px;
}
/* plugin divs */
div.JS9Panner, div.JS9Magnifier, div.JS9Menubar, div.JS9Console, div.JS9Info {
/* relative pos top/left for container, Flanagan's JavaScript, p 357 */
position: relative;
top: 0px;
left: 0px;
display: block;
padding: 0px;
}
/* grid container used in separateDisplay() */
div.JS9GridContainer {
display: grid;
/* NB: these grid parameters should be overridden by web page designers! */
/* see js9super.html for an example */
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
}
/* containers used internally to place content inside high-level divs */
div.JS9Container {
/* absolute pos top/left for positioning, Flanagan's JavaScript, p 357 */
position: absolute;
top: 0px;
left: 0px;
outline: none;
background-color: transparent;
}
/* containers used internally to wrap around div plugin content */
div.JS9PluginContainer {
/* background: #E9E9E9; */
background: transparent;
position: relative;
display: block;
outline: none;
}
/* this is the plugin div itself */
div.JS9Plugin {
background: #E9E9E9;
}
/* tell plugin div to scroll on overflow */
div.JS9PluginScrolling {
overflow: auto;
}
/* commands and buttons on top of plugins */
div.JS9PluginToolbar-div {
/* absolute positioning places the toolbar on the dhtml title bar */
position:absolute;
display:inline-block;
top: 0px;
overflow: auto;
cursor: default;
text-align: center;
left: 10px;
}
div.JS9PluginToolbar-light {
/* absolute positioning places the toolbar on the dhtml title bar */
position:absolute;
display:inline-block;
top: 0px;
right: 48px;
overflow: auto;
text-align: center;
}
div.JS9MenubarContainer, div.JS9MenubarContainer-classic {
/* absolute pos top/left for positioning, Flanagan's JavaScript, p 357 */
/* why is this relative?? absolute positions the menu under the canvas!! */
position: relative;
/* sigh ... why does this make the menubar too short?? */
display: block;
top: 0px;
left: 0px;
/* height: 25px; */
text-align: left;
padding: 2px 6px;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #ebebeb, color-stop(1.0, #d5d5d5)));
background: -webkit-linear-gradient(top, #ebebeb, #d5d5d5);
background: -moz-linear-gradient(top, #ebebeb, #d5d5d5);
background: -ms-linear-gradient(top, #ebebeb, #d5d5d5);
background: -o-linear-gradient(top, #ebebeb, #d5d5d5);
background: linear-gradient(top, #ebebeb, #d5d5d5);
color: #4d494d;
}
div.JS9MenubarContainer-flat, div.JS9MenubarContainer-border {
/* absolute pos top/left for positioning, Flanagan's JavaScript, p 357 */
/* why is this relative?? absolute positions the menu under the canvas!! */
position: relative;
/* sigh ... why does this make the menubar too short?? */
display: block;
top: 0px;
left: 0px;
/* height: 25px; */
text-align: left;
padding: 2px 10px;
background-color: lightblue;
}
div.JS9Hidden {
visibility: hidden;
position: relative;
top: -50;
left: -50;
}
div.JS9Logo {
position: absolute;
right: 10px;
bottom: 10px;
}
img.JS9Logo {
width: 80;
height: 40;
border: none;
}
/* CSS for images loaded as part of the menubar */
div.JS9MenubarImage {
white-space:nowrap;
}
img.JS9MenubarImage {
vertical-align: middle;
padding: 0px;
margin: 0px;
width: 40px;
height: 12px;
}
/* CSS for images loaded as part of the user-defined menubar */
div.JS9MenubarUserImage {
white-space:nowrap;
}
img.JS9MenubarUserImage {
vertical-align: middle;
padding: 0px;
margin: 0px;
height: 12px;
}
/* image associated with the colormap title */
img.JS9MenubarUserImageTitle[name="colormap"]{
width: 60px;
}
/* all menu option images in the colormap menu */
img.JS9MenubarUserImageOption[name^="colormap"]{
width: 60px;
}
/* image associated with the region title */
img.JS9MenubarUserImageTitle[name="regions"]{
width: 30px;
}
/* all menu option images in the regions menu */
img.JS9MenubarUserImageOption[name^="regions"]{
width: 20px;
}
/* menu option hint for key-press action */
span.JS9MenubarKeyAction{
float: right;
font: bold 9pt Courier;
}
div.JS9ConsoleContainer {
/* absolute pos top/left for positioning, Flanagan's JavaScript, p 357 */
/* why is this relative?? absolute positions make it tiny!! */
position: relative;
display: block;
top: 0px;
left: 0px;
background: #E9E9E9;
text-align: left;
width: 100%;
height: 100%;
overflow: auto;
overflow-x: hidden;
}
/* canvas elements */
canvas.JS9Image, canvas.JS9Panner, canvas.JS9Magnifier, canvas.JS9Info {
/* absolute positioning of canvas is required to overlay/align with
graphics canvas (which is positioned relative) */
position:absolute;
top: 0px;
left: 0px;
background: #E9E9E9;
}
/* canvas element for transparent layers */
canvas.JS9Layer {
/* absolute positioning of canvas is required to overlay/align with
graphics canvas (which is positioned relative) */
position:absolute;
top: 0px;
left: 0px;
background-color: transparent;
}
/* message display */
div.JS9Message {
width: 100%;
padding-top: 10px;
padding-left: 10px;
font-family: Helvetica, sans-serif;
font-size: 10pt;
font-weight: 300;
}
/* div enclosing progress bar in message area */
div.JS9Progress {
display: none;
}
/* used by menubar, panner, magnifier */
.JS9Button, .JS9Button-classic {
font: normal 12px Arial;
background: #F6F6F6;
border: none;
border-radius: 4px;
padding: 3px 6px 3px 6px;
/* back off left margin or else Linux menubar Help button wraps ... */
margin: 6px 4px 6px 3px;
outline: none;
}
.JS9Button:hover, .JS9Button-classic:hover {
background-color: #C0C0C0;
}
/* prevent firefox from adding extra button padding */
.JS9Button::-moz-focus-inner, .JS9Button-classic::-moz-focus-inner {
padding: 0;
border: 0;
}
.JS9Button-flat {
color: #fff;
background-color: #6496c8;
text-shadow: -1px 1px #417cb8;
border: none;
padding-top: 4px;
padding-right: 6px;
padding-bottom: 4px;
padding-left: 6px;
margin: 4px;
outline: none;
}
.JS9Button-flat:hover, .JS9Button-flat.hover {
background-color: #346392;
text-shadow: -1px 1px #27496d;
}
.JS9Button-flat:active, .JS9Button-flat.active {
background-color: #27496d;
text-shadow: -1px 1px #193047;
}
.JS9Button-flat::-moz-focus-inner {
padding: 0;
border: 0;
}
.JS9Button-border {
color: #6496c8;
background: #fff;
border: 2px solid #6496c8;
padding: 3px 6px 3px 6px;
margin: 6px 4px 6px 4px;
outline: none;
}
.JS9Button-border:hover, .JS9Button-border.hover {
border-color: #346392;
color: #346392;
}
.JS9Button-border:active, .JS9Button-border.active {
border-color: #27496d;
color: #27496d;
}/* the commands inside a console */
/* for buttons inside dialog boxes and plugins */
.JS9Button2 {
font: normal 12px Arial;
color: black;
background: white;
border: 2px solid #d5d5d5;
border-radius: 4px;
padding: 2px 4px 2px 4px;
margin: 0px;
outline: none;
}
.JS9Button2:hover {
background-color: #d5d5d5;
}
.JS9Button2:active{
background-color: #ebebeb;
}
.JS9RunButton {
font: normal 12px Arial;
color: white;
background-color: #3188fb;
border: none;
border-radius: 4px;
padding: 2px 4px 2px 4px;
margin: 0px;
outline: none;
}
.JS9RunButton:hover {
/* darkened using https://pinetools.com/darken-color */
background-color: #0468eb;
}
.JS9RunButton:active {
background-color: #034db0;
}
/* for menus inside dialog boxes and plugins */
.JS9Select {
font: normal 12px Arial;
border-radius: 4px;
border-width: 2px;
border-color: #d5d5d5;
border-style: solid;
outline: none;
background-color: white;
}
.JS9Select:hover {
background-color:rgba(0, 0, 0, 0.1);
}
.JS9Highlight {
border-top: solid 0px #00FF00;
border-right: solid 2px #00FF00;
border-bottom: solid 2px #00FF00;
border-left: solid 0px #00FF00;
}
.JS9CmdTable {
vertical-align:top;
width: 100%;
}
.JS9CmdTd {
width: 100%;
}
.JS9CmdIn, .JS9CmdOut {
border: none;
padding-top: 0px;
padding-left: 4px;
margin-left: 2px;
font-size: 14px;
font-family: monospace;
width:97%;
background: #E9E9E9;
overflow: auto;
}
/* get rid of blue border for input in Safari, Chrome */
input:focus.JS9CmdIn {
outline: none;
}
.JS9CmdError {
border: none;
padding-top: 2px;
padding-left: 4px;
margin-left: 2px;
font-size: 14px;
font-family: monospace;
width: 100%;
color: red;
}
.JS9CmdWarning {
border: none;
padding-top: 2px;
padding-left: 4px;
margin-left: 2px;
font-size: 14px;
font-family: monospace;
width: 100%;
color: yellow;
}
.JS9CmdInfo {
border: none;
padding-top: 2px;
padding-left: 4px;
margin-left: 4px;
font-size: 14px;
font-family: monospace;
width: 100%;
color: #3333FF;
}
.JS9CmdHelp {
border: none;
padding-top: 2px;
padding-left: 4px;
margin-left: 4px;
font-size: 12px;
font-family: monospace;
width: 100%;
height: 100%;
color: #3333FF;
}
.JS9CmdPrompt {
color: #777;
font-size: 14px;
font-family: monospace;
white-space:nowrap;
}
.JS9AnalysisText {
padding-left: 10px;
}
/* NB: dimensions are tied to JS9.lightOpts.dhtml.plotWin in js9.js */
.JS9Plot {
width: 800px;
height: 400px;
margin: 10px;
}
/* placement of the gear image relative to the plot */
.JS9PlotGear {
position:absolute;
bottom: -10px;
right: -20px;
}
/* searchbar see: https://markjs.io/ */
.JS9Searchbar{
position: fixed;
bottom: 0px;
left: 0px;
width: 100%;
background: #E9E9E9;
padding: 8px;
outline: none;
display: none;
}
.JS9SearchInput{
width: 132px;
margin-left: 4px;
}
.JS9SearchButton{
font: normal 12px Arial;
border: 2px solid black;
border-radius: 4px;
padding: 3px 6px 3px 6px;
margin-left: 8px;
outline: none;
}
.JS9SearchButton-true{
background-color: #D5D5D5;
outline: false;
}
.JS9SearchButton-false{
background-color: white;
outline: false;
}
/* searchbar marks, see: https://jsfiddle.net/julmot/973gdh8g/ */
mark {
background: yellow;
}
mark.current {
background: mediumspringgreen;
}
.JS9Tooltip{
position: relative;
z-index: 999;
background: #E9E9E9;
padding: 10px;
border: none;
font-family: Helvetica, sans-serif;
font-size: 10pt;
display: none;
}
/* context menu overrides */
.context-menu-list {
border: 1px solid black;
font-family: Helvetica, sans-serif;
font-size: 12px;
background-color: #E9E9E9;
}
/* jqueryContextMenu v2.2 */
.context-menu-icon-sun:before {
content: url(images/sun.png);
}
/* jqueryContextMenu v2.2 */
.context-menu-icon-check:before {
/* content: url(images/checkmark.svg); */
content: url(data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzMuMDUgMTYyLjQ4Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmNoZWNrbWFyazwvdGl0bGU+PHJlY3QgY2xhc3M9ImNscy0xIiB5PSIyNC4xOCIgd2lkdGg9IjE3My4wNSIgaGVpZ2h0PSIxMzguMyIvPjx0ZXh0IHk9IjI0LjE4Ii8+PHJlY3QgY2xhc3M9ImNscy0xIiB4PSIxNC45OSIgeT0iMzYuNSIgd2lkdGg9IjEzOS4yMiIgaGVpZ2h0PSIxMTAuMzgiLz48dGV4dCB5PSIyNC4xOCIvPjxwYXRoIGQ9Ik02MC40NCw2OC4yNGw0LjI4LTRMNzgsODAuNDRsMjUuOTQtNDgsNC44MiwzTDc4LjgyLDkwLjYzWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyNC4xOCkiLz48L3N2Zz4=);
}
.context-menu-item {
background-color: #E9E9E9;
padding: .2em 2em;
}
.context-menu-item.context-menu-disabled {
color: #AAA;
cursor: default;
background-color: #E9E9E9;
}
.context-menu-separator {
border-bottom: 1px solid #AAA;
}
.context-menu-input > label {
margin-left: 18px;
}
.context-menu-input > label > input[type="text"] {
width: 80%;
padding: 2px;
}
.context-menu-input > label > textarea {
width: 85%;
height: 3em;
}
/* dhtml window overrides */
.dhtmlwindow {
border: 1px solid grey;
padding: 0px;
}
.drag-controls {
padding: 6px 2px 2px 2px;
}
.drag-handle {
/* height: 25px; */
height: 25px;
padding-top: 10px;
padding-left: 8px;
text-align: left;
color: black;
font-size: 14px;
font-weight: normal;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #ebebeb, color-stop(1.0, #d5d5d5)));
background: -webkit-linear-gradient(top, #ebebeb, #d5d5d5);
background: -moz-linear-gradient(top, #ebebeb, #d5d5d5);
background: -ms-linear-gradient(top, #ebebeb, #d5d5d5);
background: -o-linear-gradient(top, #ebebeb, #d5d5d5);
background: linear-gradient(top, #ebebeb, #d5d5d5);
color: #4d494d;
}
.drag-contentarea {
background: #E9E9E9;
border-width: 0px;
padding: 0px;
font-family: "Times New Roman", Times, serif;
font-size: 12pt;
}
.indentmenu{
font: normal 11px Arial;
margin-left: 4px;
}
.indentmenu ul{
border-top: 0px;
background: #A9A9A9;
}
.indentmenu ul li a{
border-top: 0px;
border-bottom: 0px;
border-left: 0px;
border-right: 6px solid #E9E9E9;
padding-left: 8px;
padding-right: 8px;
}
.indentmenu ul li a:hover,
.indentmenu ul li a.hover {
background-color: #808080;
}
.indentmenu ul li a.selected {
padding-top: 5px; /* don't shift text down 1px */
padding-bottom: 5px;
background: #696969;
}
/* spectrum colorpicker */
.sp-replacer {
padding: 2px;
border: solid 0px transparent;
}
/* 3d surface plot bug */
canvas.surfacePlotCanvas {
position: absolute;
}
/* js9 info */
.js9InfoTable {
margin: 0px;
padding: 8px;
font: normal 12px Arial;
border-collapse: separate;
border-spacing: 2px 4px;
}
.js9InfoTable input{
overflow-x: hidden;
padding: 2px 0px 1px 2px;
margin: 0px;
}
.js9InfoTable .column0{
background: transparent;
width: 50px;
border: none;
}
.js9InfoTable .input1{
width: 115px;
border: none;
}
.js9InfoTable .input2{
width: 240px;
font-size: 12px;
font-family: monospace;
border: none;
}
.js9InfoTable textarea{
overflow-x: hidden;
padding: 2px 0px 1px 2px;
margin: 0px;
border: none;
}
.js9InfoTable .text2{
width: 242px;
font-size: 12px;
font-family: monospace;
}
.js9InfoTable td{
padding: 2px 0px 1px 2px;
margin: 0px;
}
/* binning plugin */
.js9BinningForm {
margin: 0px;
padding: 8px;
width: 100%;
height: 100%
}
/* regularize textarea and input text (e.g. binning.js, contour.js) */
.JS9Text, .JS9TextArea, .js9Form textarea, .js9Form input[type=text]{
display: block;
margin: 0px;
box-sizing: border-box;
border: none;
padding: 2px;
font: normal 14px Arial;
}
.JS9Text:read-only {
border: 1px solid white;
}
/* read-only reportedly fixed in FF 78, but until then ... */
.JS9Text:-moz-read-only {
border: 1px solid white;
}
.JS9Text::placeholder {
opacity: 0.4;
}
/* js9Analysis forms (e.g. parameter dialog boxes) */
.js9AnalysisForm {
border: 1px solid grey;
margin: 8px;
padding: 8px;
background: #E9E9E9;
}
/* larger text for some analysis dialog boxes (loadproxy, loadcors) */
.js9LargeInputText {
font-size: 11pt;
}
.JS9Archive-form {
background: #E9E9E9;
padding: 8px;
}
.linegroup {
float: left;
position: relative;
top: 0px;
left: 0px;
width: 100%;
height: 24px;
padding: 0;
margin: 0 0 1.25em 0;
}
.column_A {
position: absolute;
top: 0;
left: 0;
width: 300px;
}
.column_B {
position: absolute;
top: 0;
left: 300px;
width: 100px;
}
.text_B {
width: 100px;
}
.column_C {
position: absolute;
top: 0;
left: 450px;
width: 340px;
}
.column_R1 {
position: absolute;
top: 0;
left: 0;
width: 140px;
}
.column_R2 {
position: absolute;
top: 0;
left: 150px;
width: 100px;
}
.column_R2l {
position: absolute;
top: 0;
left: 150px;
width: 250px;
}
.column_R2L {
position: absolute;
top: 0;
left: 150px;
width: 400px;
}
.column_R3 {
position: absolute;
top: 0;
left: 300px;
width: 100px;
}
.column_R3l {
position: absolute;
top: 0;
left: 300px;
width: 150px;
}
.column_R3L {
position: absolute;
top: 0;
left: 300px;
width: 300px;
}
.column_R4 {
position: absolute;
top: 0;
left: 450px;
width: 100px;
}
.column_R4l {
position: absolute;
top: 0;
left: 450px;
width: 250px;
}
.column_R4L {
position: absolute;
top: 0;
left: 450px;
width: 350px;
}
.column_R5 {
position: absolute;
top: 0;
left: 600px;
width: 200px;
}
.text_R {
width: 100%;
font: normal 12px Arial
}
.nodisplay {
display: none;
}
.hline0 {
display: block;
height: 1px;
border: none;
border-top: 1px solid black;
margin: 0;
padding: 0;
}
.js9archive-control {
border: none;
padding: 2px;
}
.js9HelpText {
border: 1px solid grey;
margin: 8px;
padding: 8px;
background: #E9E9E9;
}
ul.js9demo {
margin-top: 0;
}
.helpLogo{
position: absolute;
top: 15px;
right: 15px;
}
.helpContainer{
padding: 10px;
}
/* to make wait cursor override other element cursors (e.g. fabric.js canvas) */
body.waiting, body.waiting * {
cursor: wait !important;
}
.context-menu-icon-sun:before{content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAKJGNVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G+fAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m+BkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd+q00KR5yNAlWZzrF+Ie+uNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf+ja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL+kmMGs4i5kfNuQ62EnBuam8tzP+Q+tSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK+Mdg8y5nkZfFO+se9LQr3/09xZr+5GcaSufeAfAww60mAPx+q8u/bAr8rFCLrx7s+vqEkw8qb+p26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC+W8cndbl9t2SfhU+Fb4UfhO+F74GWThknBZ+Em4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1+U0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL+iH6jB9y2x83ok898GOPQX3lk3Itl0A+BrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn+Vmc+NL9L8GcMn8F1kAcXjEKMJAAAAACXBIWXMAAAsTAAALEwEAmpwYAAADO0lEQVQokW3T3W9TZQAH4N/7cU7pStuVlnZrq3SDyaSSjpHNMZWAZgS5g9htmCh6oRK40AsTbxCzEEnQqNfohR+Ji7Z+AYY5MIEBcaAsg2Rtl411hLK5rqxraWnPac95X6/0yj/guXyIlBIA0B8Hi0VhAsChcQTc5tzWfFVzNVlZebNvXeL1Nm8aAHYPXeaXPthlAACRUv4HT6Xh1DJjH7nF3MDIaodzsz2D2w83IsiXKxHncmzBNnj8ky5kSDzOZDRqsmQ4zGLRsDmcutg2mlwdO13y973n/mlNXVPkduuUGM/78UbzRbXCPB3fZZTXGsyZP355fu/d/nicESklPkti3beJ1MSbzZdDfy75ay/7r3EhDdqoFCAhoBDI05n99U7PXfVCvqcU8vdEPu7GPAUAUvz13QO++dDNbEB/u2VYfdw6Rbtcv2OT7TYizlFopkqObhhWU/mg/oPut/Py2IcAQM7kpH3k+oXEgHfkMYuoC0MKusP9PapGCJTUYQgLbPw+FrV2zDzqFCrV6VR1a+kr9laY3pxNbpos+YKHpwfBaJl0uc6iUm8FYEBICkZqqJp+uNQsVKKRqw865W/FbnuHfmcbz2mqt9eVIr1rJsGJgC484LQGIQkIJCQICAyY0gIbK5EtjrQo6XZyoxKy8rUKL0zmgiCagEIlNtpuQUgOwIQEQCBhSgVWvgBK2vDl4i5SVr1ot9Ma/ZyFZne75pejwVFssC7K1VoTrGwJEhwEgACHjWcxXXoBjKjycPAS8cgVLeBomKLFHchDUc8eW3wHJ9IHDV1aMFN+BpyUAZhgpIwHtSCsfBVf3Dtg5GgLdnrvXzv2dOssB4B7yr4TVW06OuhLOGMLL9W6G1OKha2QqulGoeaBQg15PrfT2N6YUk5m9qOvqeU4ALBkOMy+2RspFCuzf/34d8uAu0Gx9Kwdw/t3jopWS0FeL0Rkqy1NXl06yBgC2NO88sqp5544T+JxxhKxmOyPx9mnfS/OfZ0NnOtSJraMP+wIXTHa6XqroJP6U9TBJWlX6S1HY+TQyd4nfyZDQ1QeOSLI/60aupF+NlusbJurPrL5LA69SD0TZ/asvwIA/6YAgH8A+sdxmMb2E7oAAAAASUVORK5CYII=");}
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -13,7 +13,7 @@ $jscomp.checkStringArgs=function(b,c,a){if(null==b)throw new TypeError("The 'thi ...@@ -13,7 +13,7 @@ $jscomp.checkStringArgs=function(b,c,a){if(null==b)throw new TypeError("The 'thi
$jscomp.polyfill("Number.isNaN",function(b){return b?b:function(b){return"number"===typeof b&&isNaN(b)}},"es6","es3");$jscomp.polyfill("Number.isFinite",function(b){return b?b:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}},"es6","es3");$jscomp.findInternal=function(b,c,a){b instanceof String&&(b=String(b));for(var d=b.length,e=0;e<d;e++){var f=b[e];if(c.call(a,f,e,b))return{i:e,v:f}}return{i:-1,v:void 0}}; $jscomp.polyfill("Number.isNaN",function(b){return b?b:function(b){return"number"===typeof b&&isNaN(b)}},"es6","es3");$jscomp.polyfill("Number.isFinite",function(b){return b?b:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}},"es6","es3");$jscomp.findInternal=function(b,c,a){b instanceof String&&(b=String(b));for(var d=b.length,e=0;e<d;e++){var f=b[e];if(c.call(a,f,e,b))return{i:e,v:f}}return{i:-1,v:void 0}};
$jscomp.polyfill("Array.prototype.find",function(b){return b?b:function(b,a){return $jscomp.findInternal(this,b,a).v}},"es6","es3");$jscomp.polyfill("String.prototype.startsWith",function(b){return b?b:function(b,a){var c=$jscomp.checkStringArgs(this,b,"startsWith");b+="";var e=c.length,f=b.length;a=Math.max(0,Math.min(a|0,c.length));for(var g=0;g<f&&a<e;)if(c[a++]!=b[g++])return!1;return g>=f}},"es6","es3");$jscomp.polyfill("Number.parseFloat",function(b){return b||parseFloat},"es6","es3"); $jscomp.polyfill("Array.prototype.find",function(b){return b?b:function(b,a){return $jscomp.findInternal(this,b,a).v}},"es6","es3");$jscomp.polyfill("String.prototype.startsWith",function(b){return b?b:function(b,a){var c=$jscomp.checkStringArgs(this,b,"startsWith");b+="";var e=c.length,f=b.length;a=Math.max(0,Math.min(a|0,c.length));for(var g=0;g<f&&a<e;)if(c[a++]!=b[g++])return!1;return g>=f}},"es6","es3");$jscomp.polyfill("Number.parseFloat",function(b){return b||parseFloat},"es6","es3");
$jscomp.polyfill("Math.log10",function(b){return b?b:function(b){return Math.log(b)/Math.LN10}},"es6","es3");var Module;"object"!==typeof Module&&(Module={}); $jscomp.polyfill("Math.log10",function(b){return b?b:function(b){return Math.log(b)/Math.LN10}},"es6","es3");var Module;"object"!==typeof Module&&(Module={});
var JS9=function(){var b={NAME:"JS9",VERSION:"3.8",COPYRIGHT:"Copyright (c) 2012-2022 Smithsonian Institution"};b.ABOUT="JS9 "+b.VERSION+": astronomical image display everywhere\nEric Mandel, Alexey Vikhlinin\n"+b.COPYRIGHT;b.DEFID="JS9";b.WIDTH=512;b.HEIGHT=512;b.ANON="Anonymous";b.PREFSFILE="js9Prefs.json";b.WORKERFILE="js9worker.js";b.ZINDEX=0;b.SHAPEZINDEX=4;b.MESSZINDEX=80;b.BTNZINDEX=90;b.MENUZINDEX=1E3;b.COLORSIZE=1024;b.SCALESIZE=16384;b.INVSIZE=1024;b.HISTSIZE=16384;b.INSTALLDIR="/static/js9/";b.TOROOT= var JS9=function(){var b={NAME:"JS9",VERSION:"3.8",COPYRIGHT:"Copyright (c) 2012-2022 Smithsonian Institution"};b.ABOUT="JS9 "+b.VERSION+": astronomical image display everywhere\nEric Mandel, Alexey Vikhlinin\n"+b.COPYRIGHT;b.DEFID="JS9";b.WIDTH=512;b.HEIGHT=512;b.ANON="Anonymous";b.PREFSFILE="js9Prefs.json";b.WORKERFILE="js9worker.js";b.ZINDEX=0;b.SHAPEZINDEX=4;b.MESSZINDEX=80;b.BTNZINDEX=90;b.MENUZINDEX=1E3;b.COLORSIZE=1024;b.SCALESIZE=16384;b.INVSIZE=1024;b.HISTSIZE=16384;b.INSTALLDIR="";b.TOROOT=
"";b.PLUGINS="";b.LIGHTWIN="dhtml";b.ANTIALIAS=!1;b.SCALEIREG=!0;b.NOMOVE=3;b.DBLCLICK0=5;b.DBLCLICK=300;b.TIMEOUT=250;b.SPINOUT=250;b.WORKEROUT=2E3;b.SUPERMENU=/^SUPERMENU_/;b.RESIZEDIST=20;b.RESIZEFUDGE=5;b.RAWID0="raw0";b.RAWIDX="alt";b.IDFMT=" (%s)";b.MINZOOM=.125;b.MAXZOOM=32;b.ADDZOOM=.1;b.MODZOOM=2;b.DIRZOOM=1;b.CHROMEFILEWARNING=!0;b.CLIPBOARDERROR="the local clipboard (which only holds data copied from within JS9) does not contain any content. Were you trying to paste something copied outside JS9?"; "";b.PLUGINS="";b.LIGHTWIN="dhtml";b.ANTIALIAS=!1;b.SCALEIREG=!0;b.NOMOVE=3;b.DBLCLICK0=5;b.DBLCLICK=300;b.TIMEOUT=250;b.SPINOUT=250;b.WORKEROUT=2E3;b.SUPERMENU=/^SUPERMENU_/;b.RESIZEDIST=20;b.RESIZEFUDGE=5;b.RAWID0="raw0";b.RAWIDX="alt";b.IDFMT=" (%s)";b.MINZOOM=.125;b.MAXZOOM=32;b.ADDZOOM=.1;b.MODZOOM=2;b.DIRZOOM=1;b.CHROMEFILEWARNING=!0;b.CLIPBOARDERROR="the local clipboard (which only holds data copied from within JS9) does not contain any content. Were you trying to paste something copied outside JS9?";
b.CLIPBOARDERROR2="the local clipboard (which only holds data copied from within JS9) does not contain any regions";b.URLEXP=/^(https?|ftp):\/\//;b.WCSEXP=/^(fk4|fk5|icrs|galactic|ecliptic|image|physical|linear)$/;b.REGSIZE=0;b.TOUCHSUPPORTED={}.hasOwnProperty.call(window,"ontouchstart")||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints;b.BROWSER=function(){var b=navigator.platform,a=navigator.appName,d=navigator.userAgent,e=d.match(/version\/([.\d]+)/i),f=d.match(/(opera|chrome|safari|firefox)\/?\s*(\.?\d+(\.\d+)*)/i); b.CLIPBOARDERROR2="the local clipboard (which only holds data copied from within JS9) does not contain any regions";b.URLEXP=/^(https?|ftp):\/\//;b.WCSEXP=/^(fk4|fk5|icrs|galactic|ecliptic|image|physical|linear)$/;b.REGSIZE=0;b.TOUCHSUPPORTED={}.hasOwnProperty.call(window,"ontouchstart")||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints;b.BROWSER=function(){var b=navigator.platform,a=navigator.appName,d=navigator.userAgent,e=d.match(/version\/([.\d]+)/i),f=d.match(/(opera|chrome|safari|firefox)\/?\s*(\.?\d+(\.\d+)*)/i);
f&&null!==e&&(f[2]=e[1]);f=f?[f[1],f[2],b]:[a,navigator.appVersion,"-?",b];f.push(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(d)||"MacIntel"===navigator.platform&&1<navigator.maxTouchPoints);return f}();b.PIXEL_RATIO=function(){var b=document.createElement("canvas").getContext("2d");return(window.devicePixelRatio||1)/(b.webkitBackingStorePixelRatio||b.mozBackingStorePixelRatio||b.msBackingStorePixelRatio||b.oBackingStorePixelRatio||b.backingStorePixelRatio||1)}();b.globalOpts={helperType:"none", f&&null!==e&&(f[2]=e[1]);f=f?[f[1],f[2],b]:[a,navigator.appVersion,"-?",b];f.push(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(d)||"MacIntel"===navigator.platform&&1<navigator.maxTouchPoints);return f}();b.PIXEL_RATIO=function(){var b=document.createElement("canvas").getContext("2d");return(window.devicePixelRatio||1)/(b.webkitBackingStorePixelRatio||b.mozBackingStorePixelRatio||b.msBackingStorePixelRatio||b.oBackingStorePixelRatio||b.backingStorePixelRatio||1)}();b.globalOpts={helperType:"none",
......
var JS9Prefs = { var JS9Prefs = {
"globalOpts": { "globalOpts": {
// "helperType": "none", // "helperType": "nodejs",
// "helperPort": 2718, // "helperPort": 2718,
// "helperCGI": "./cgi-bin/js9/js9Helper.cgi", // "helperCGI": "./cgi-bin/js9/js9Helper.cgi",
// "debug": 0, // "debug": 0,
// "loadProxy": true, // "loadProxy": true,
// "workDir": "./tmp", // "workDir": "./tmp",
// "workDirQuota": 100, // "workDirQuota": 100,
// "dataPath": "$HOME/Desktop:$HOME/data", "dataPath": "$HOME/Desktop:$HOME/data",
"analysisPlugins": "./analysis-plugins", "analysisPlugins": "./analysis-plugins",
"analysisWrappers": "./analysis-wrappers" "analysisWrappers": "./analysis-wrappers"
}, },
......
# minimum j9 files
./js9support.css
./js9.css
./js9.min.js
./js9prefs.js
./js9.min.js
./js9plugins.js
./js9worker.js
./astroemw.wasm
./astroemw.js
./js/sprintf.min.js
./js/fabric.min.js
./js/jquery.contextMenu.min.js
./js/dhtmlwindow.min.js
./images/voyager/*svg
./images/voyager/color_*png
./images/js9logo.png
./font/context-menu-icons.*
// Close the SSE connection when necessary
function closeSSEConnection(eventsource) {
console.log("closing source SSE")
eventsource.close();
}
////////////////// //////////////////
/// Status streams /// Connection
////////////////// //////////////////
var source = new EventSource('/web/home/stream/status'); // in home.py var socket = io.connect({
transports: ['websocket'],
path: "/web/socket"
});
let first_camera_update = true
// Handle SSE errors socket.on('connect', function() {
source.onerror = function(error) { console.log('Connected to server');
console.error(error);
};
window.addEventListener('beforeunload', function() {
console.log("beforeunload status SSE")
closeSSEConnection(source);
}); });
window.addEventListener('unload', function() { socket.on('disconnect', function() {
console.log("unload status SSE") console.log('Disconnected from server');
closeSSEConnection(source);
}); });
//////////////////// socket.on('timestamp', function(server_unix_time) {
/// Telescope stream var diff = difftime(server_unix_time)
//////////////////// $('[data-status=timestamp-diff]').text(diff)
//console.log(diff)
});
source.addEventListener("telescope",function(e) {
var res = JSON.parse(e.data)
// console.log(res)
$.each(res, function(k,v){ //////////////////
var elem = $("[data-status=telescope-"+k) /// Dome stream
//////////////////
socket.on("all-dome",function(e) {
// Disable if not ping:
if (e["dome-connection"].raw !== true) {
$("#Dome").addClass("pe-none").css({"opacity":"0.4"})
.find('*')
.attr('tabindex', '-1')
} else {
$("#Dome").removeClass("pe-none").css({"opacity": "1.0"})
.find('*')
.removeAttr('tabindex')
}
$.each(e, function(k,v){
/// Depth 1
var elem = $("[data-status="+k+"]")
if (elem) { if (elem) {
//console.log(k)
elem.text(v.response) elem.text(v.response)
} }
})
if (res && res.coordinates) { /// Depth 2
$("[data-status=telescope-coordinates-ra").text(res.coordinates.response.radec[0]) if (k == "dome-position") {
$("[data-status=telescope-coordinates-dec").text(res.coordinates.response.radec[1]) $("[data-status="+k+"-azimuth]").text(e[k].response.azimuth)
$("[data-status=telescope-coordinates-alt").text(res.coordinates.response.altaz[0].toFixed(3)) $("[data-status="+k+"-parked]").text(e[k].response.parked)
$("[data-status=telescope-coordinates-az").text(res.coordinates.response.altaz[1].toFixed(3)) }
$("[data-status=telescope-coordinates-ha").text(res.coordinates.response.ha)
$("[data-status=telescope-coordinates-lst").text(res.coordinates.response.lst)
}
if (res && res.offset) { // pulse(elem)
$("[data-status=telescope-offset-zd").text((res.offset.response[0]*3600).toFixed(1))
$("[data-status=telescope-offset-az").text((res.offset.response[1]*3600).toFixed(1))
}
if (res && res.rotator) { });
$("[data-status=telescope-offset-rot").text(res.rotator.response.toFixed(1))
}
}); });
////////////////// ////////////////////
/// Dome stream /// Telescope stream
////////////////// ////////////////////
source.addEventListener("dome",function(e) { socket.on("all-telescope",function(e) {
var res = JSON.parse(e.data)
// console.log(res) // Disable if not ping:
if (e["telescope-power"].raw !== true) {
$("#Telescope").addClass("pe-none").css({"opacity":"0.4"})
.find('*')
.attr('tabindex', '-1')
} else {
$("#Telescope").removeClass("pe-none").css({"opacity": "1.0"})
.find('*')
.removeAttr('tabindex')
}
$.each(e, function(k,v){
var elem = $("[data-status="+k+"]")
$.each(res, function(k,v){ /// Depth 1
var elem = $("[data-status=dome-"+k) if (elem) {
if (elem) { //console.log(k)
elem.text(v.response) elem.text(v.response)
} }
});
if (res && res.position) { /// Depth 2
$("[data-status=dome-azimuth").text(res.position.response.azimuth) if (k == "telescope-coordinates") {
$("[data-status=dome-parked").text(res.position.response.parked) $("[data-status="+k+"-ra]").text(e[k].response.radec[0])
} $("[data-status="+k+"-dec]").text(e[k].response.radec[1])
$("[data-status="+k+"-alt]").text(e[k].response.altaz[0].toFixed(3))
$("[data-status="+k+"-az]").text(e[k].response.altaz[1].toFixed(3))
$("[data-status="+k+"-ha]").text(e[k].response.ha)
$("[data-status="+k+"-lst]").text(e[k].response.lst)
}
if (k == "telescope-coordinates-offset") {
$("[data-status="+k+"-zd]").text((e[k].response[0]*3600).toFixed(1))
$("[data-status="+k+"-az]").text((e[k].response[1]*3600).toFixed(1))
}
// pulse(elem)
})
}); });
...@@ -88,36 +115,62 @@ source.addEventListener("dome",function(e) { ...@@ -88,36 +115,62 @@ source.addEventListener("dome",function(e) {
/// Camera stream /// Camera stream
////////////////// //////////////////
source.addEventListener("camera",function(e) { socket.on("all-camera",function(e) {
var res = JSON.parse(e.data) //console.log(e)
// console.log(res)
// Disable if not ping:
if (e["camera-power"].raw !== true) {
$("#Camera").addClass("pe-none").css({"opacity":"0.4"})
.find('*')
.attr('tabindex', '-1')
} else {
$("#Camera").removeClass("pe-none").css({"opacity": "1.0"})
.find('*')
.removeAttr('tabindex')
// Update the input fields with the real data, at first page load
if (first_camera_update) {
$('#filter').prop("value", e["camera-filter"].response)
$("#binning").prop("value", e["camera-settings"].response.binning[0]) // [0,0]
$('#x0').prop("value", e["camera-settings"].response.xystart[0])
$('#y0').prop("value", e["camera-settings"].response.xystart[1])
$('#xf').prop("value", e["camera-settings"].response.xyend[0])
$('#yf').prop("value", e["camera-settings"].response.xyend[1])
first_camera_update = false
}
}
$.each(e, function(k,v){
$.each(res, function(k,v){ /// Depth 1
var elem = $("[data-status=camera-"+k) var elem = $("[data-status="+k+"]")
if (elem) { if (elem) {
elem.text(v.response) elem.text(v.response)
} }
});
if (res && res.settings) {
$.each(res.settings, function(k,v){
var elem = $("[data-status=camera-"+k)
if (elem) {
elem.text(v.response)
}
});
}
/// Depth 2 (settings)
if (k == "camera-settings") {
$.each(v.response, function(kk,vv){
var elem = $("[data-status=camera-"+kk+"]")
if (elem) {
elem.text(vv)
}
});
}
});
}); });
///////////////////// /////////////////////
/// Sequencer stream /// Sequencer stream
///////////////////// /////////////////////
source.addEventListener("sequencer",function(e) { socket.on("api-sequencer",function(e) {
var res = JSON.parse(e.data) var res = e //JSON.parse(e.data)
$.each(res.response, function(k,v){ /// sequencer has just 1 response $.each(res.response, function(k,v){ /// sequencer has just 1 response
var elem = $("[data-status=sequencer-"+k) var elem = $("[data-status=sequencer-"+k)
if (elem) { if (elem) {
...@@ -130,16 +183,17 @@ source.addEventListener("sequencer",function(e) { ...@@ -130,16 +183,17 @@ source.addEventListener("sequencer",function(e) {
if (auto_display) { if (auto_display) {
if (typeof JS9 != "undefined") { if (typeof JS9 != "undefined") {
JS9.Load("/static/temp.fits", {refresh:true, colormap:"heat"} ) JS9.Load("/static/temp.fits", {refresh:true, colormap:"heat"} )
} }
} }
/// For the d3.js focus output /// For the d3.js focus output
var auto_output = $("#auto-output").prop("checked") var auto_output = $("#auto-output").prop("checked")
if (auto_output) { if (auto_output) {
if (res.response.output && res.response.output.focus) { if (res.response.output && res.response.output.focus) {
const focus = res.response.output.focus const focus = res.response.output.focus
const data = focus.m2.map((x, i) => ({ x, y: focus.fwhm[i] })); const data = focus.m2.map((x, i) => ({ x, y: focus.fwhm[i] }));
if (typeof chart1 != "undefined") { if (typeof chart1 != "undefined") {
chart1.update(data); chart1.update(data);
} }
} }
...@@ -151,25 +205,8 @@ source.addEventListener("sequencer",function(e) { ...@@ -151,25 +205,8 @@ source.addEventListener("sequencer",function(e) {
/// Environment stream /// Environment stream
/////////////////////// ///////////////////////
var env_source = new EventSource('/web/home/stream/environment'); // in home.py socket.on("api-environment", function(e) {
var res = e //JSON.parse(e.data)
// Handle SSE errors
env_source.onerror = function(error) {
console.error(error);
};
window.addEventListener('beforeunload', function() {
console.log("beforeunload environment SSE")
closeSSEConnection(env_source);
});
window.addEventListener('unload', function() {
console.log("unload environment SSE")
closeSSEConnection(env_source);
});
env_source.addEventListener("environment", function(e) {
var res = JSON.parse(e.data)
// console.log(res) // console.log(res)
if (res && res.external) { if (res && res.external) {
...@@ -193,42 +230,97 @@ env_source.addEventListener("environment", function(e) { ...@@ -193,42 +230,97 @@ env_source.addEventListener("environment", function(e) {
}); });
/////////////////////// ///////////////////////
/// Logfile stream /// Webcam stream
/////////////////////// ///////////////////////
socket.on("api-webcam", function(e) {
const elem = $("[data-status=webcam-snapshot")
//console.log(e)
var log_source = new EventSource('/web/home/stream/logfile'); // in home.py if (e) {
var ansi_up = new AnsiUp; const url = btoa(String.fromCharCode(...new Uint8Array(e)));
elem.attr("src", 'data:image/jpeg;base64,' + url)
// Handle SSE errors } else {
log_source.onerror = function(error) { console.log("no image?")
console.error(error); }
};
window.addEventListener('beforeunload', function() {
console.log("beforeunload logfile SSE")
closeSSEConnection(log_source);
}); });
window.addEventListener('unload', function() {
console.log("unload logfile SSE")
closeSSEConnection(log_source);
});
log_source.addEventListener("logfile", function(e) { ///////////////////////
/// Logfile stream
///////////////////////
var ansi_up = new AnsiUp;
socket.on("new-lines", function(lines) {
//console.log(e.data) var log_level_list = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"];
var log_level_list = ["DEBUG", "INFO", "WARNING", "ERROR"];
var log_level = ""; var log_level = "";
var line = e.data
$.each(log_level_list, function(index, value) { $.each(log_level_list, function(index, value) {
if (line.indexOf(value) !== -1) { //console.log(lines)
log_level = value+'-level-line'; if (lines.indexOf(value) !== -1) {
return false; log_level = value+'-level-line';
} return false;
}
});
lines.forEach(function(line){
$("[data-status=stream-output]").prepend(
'<div class="'+log_level+'">'+ansi_up.ansi_to_html(line)+'</div>'
);
})
});
///////////////////////
/// Pulse on changes
///////////////////////
function pulse(selector) {
// var done = "bg-success"
// var delay = 200
selector.fadeTo('slow', 0.5, function() {
selector.fadeTo('slow', 1.0) //.removeClass(done);
});
// setTimeout(function() {
// selector.removeClass(done);
// }, delay);
}
$(document).ready(function(){
// Select all elements with data-status attribute
const elements = document.querySelectorAll('[data-status]');
// Object to store previous text content of each element
const previousTextContent = {};
// Function to monitor text changes
function observeChanges(element) {
const observer = new MutationObserver(mutationsList => {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
const previousText = previousTextContent[element.getAttribute('data-status')];
const currentText = element.textContent.trim();
if (previousText !== currentText) {
pulse($(element))
previousTextContent[element.getAttribute('data-status')] = currentText;
}
}
}
});
observer.observe(element, { subtree: true, childList: true });
}
// Apply observeChanges function to each element
elements.forEach(element => {
previousTextContent[element.getAttribute('data-status')] = element.textContent.trim();
observeChanges(element);
}); });
$("#stream-output").prepend(
'<div class="'+log_level+'">'+ansi_up.ansi_to_html(line)+'</div>'
);
}); });
//camera synch
$(document).ready(function() {
var filternumber = {
1: 'U',
2: 'B',
3: 'V',
4: 'R',
5: 'I',
6: 'Halpha',
7: 'Free'
};
var binningconversion = {
"1,1": 1,
"2,2": 2,
"3,3": 3,
"4,4": 4
};
function getFilterFromNumber(number) {
return filternumber[number] || '';
}
function getBinningFromNumber(number) {
return binningconversion[number] || '';
}
function selectOptionByValue(selectElement, value) {
selectElement.val(value);
}
var CameraSection = $('#Camera');
var cameraFilter = $('#camera-filter var');
var cameraBinning = $('#camera-binning var');
var filterSelect = $('#filter');
var binningSelect = $('#binning');
function mutationCallback(mutations) {
mutations.forEach(function(mutation) {
CameraSection.removeClass('disabled-section');
if (mutation.target.nodeType === Node.ELEMENT_NODE) {
var newValue = $(mutation.target).text();
if (mutation.target.parentElement.id === 'camera-filter') {
selectOptionByValue(filterSelect, getFilterFromNumber(newValue));
observerFilter.disconnect();
} else if (mutation.target.parentElement.id === 'camera-binning') {
selectOptionByValue(binningSelect, getBinningFromNumber(newValue));
observerBinning.disconnect();
}
}
});
}
var observerFilter = new MutationObserver(mutationCallback);
var observerBinning = new MutationObserver(mutationCallback);
var config = { childList: true, subtree: true };
observerFilter.observe(cameraFilter[0], config);
observerBinning.observe(cameraBinning[0], config);
});