Initial commit
This commit is contained in:
parent
54fc731b43
commit
a26261a295
3
.gitignore
vendored
3
.gitignore
vendored
@ -12,3 +12,6 @@
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
# Output of ./build.sh
|
||||
output/
|
||||
|
||||
|
||||
46
build.sh
Executable file
46
build.sh
Executable file
@ -0,0 +1,46 @@
|
||||
if [ ! -d output ]; then
|
||||
mkdir output
|
||||
fi
|
||||
|
||||
echo " *** Building Themes *** "
|
||||
|
||||
if [ -d src/uwt-web/common ]; then
|
||||
pushd src/uwt-web/common
|
||||
|
||||
# first compile common CSS
|
||||
# since lessc doesn't support multiple files, we have to cat =(^.^)= them first :(
|
||||
cat *.less > ../common.less
|
||||
lessc --verbose --plugin=less-plugin-clean-css ../common.less ../../../output/common.css
|
||||
rm ../common.less
|
||||
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ -d src/uwt-web/themes ]; then
|
||||
|
||||
if [ ! -d output/themes ]; then
|
||||
mkdir output/themes
|
||||
fi
|
||||
|
||||
# for each dir in themes dir, compile its own .css file
|
||||
for theme in $(ls src/uwt-web/themes); do
|
||||
cat src/uwt-web/themes/$theme/*.less > src/uwt-web/themes/$theme.less
|
||||
lessc --verbose --plugin=less-plugin-clean-css src/uwt-web/themes/$theme.less output/themes/$theme.css
|
||||
rm src/uwt-web/themes/$theme.less
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
echo " *** Building Scripts *** "
|
||||
|
||||
if [ -d src/uwt-web/scripts ]; then
|
||||
|
||||
cat src/uwt-web/scripts/*.js src/uwt-web/scripts/controls/*.js > src/uwt-web/scripts.js
|
||||
jsmin src/uwt-web/scripts.js > output/uwt.min.js
|
||||
rm src/uwt-web/scripts.js
|
||||
|
||||
fi
|
||||
|
||||
echo " *** Build Completed ***"
|
||||
|
||||
|
||||
22
src/fonts/awesome/css/all.less
Normal file
22
src/fonts/awesome/css/all.less
Normal file
@ -0,0 +1,22 @@
|
||||
@font-face
|
||||
{
|
||||
font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.ttf) format("truetype")}.fa-light,.fal{font-weight:300}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(../webfonts/fa-thin-100.woff2) format("woff2"),url(../webfonts/fa-thin-100.ttf) format("truetype")}.fa-thin,.fat{font-weight:100}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(../webfonts/fa-duotone-900.woff2) format("woff2"),url(../webfonts/fa-duotone-900.ttf) format("truetype")
|
||||
}
|
||||
@font-face
|
||||
{
|
||||
font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")
|
||||
}
|
||||
@font-face
|
||||
{
|
||||
font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")
|
||||
}
|
||||
@font-face
|
||||
{
|
||||
font-family:"FontAwesome";
|
||||
font-display: block;
|
||||
src: url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");
|
||||
}
|
||||
@font-face
|
||||
{
|
||||
font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");
|
||||
}
|
||||
BIN
src/fonts/awesome/webfonts/fa-brands-400.ttf
Normal file
BIN
src/fonts/awesome/webfonts/fa-brands-400.ttf
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-brands-400.woff2
Normal file
BIN
src/fonts/awesome/webfonts/fa-brands-400.woff2
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-duotone-900.ttf
Normal file
BIN
src/fonts/awesome/webfonts/fa-duotone-900.ttf
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-duotone-900.woff2
Normal file
BIN
src/fonts/awesome/webfonts/fa-duotone-900.woff2
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-light-300.ttf
Normal file
BIN
src/fonts/awesome/webfonts/fa-light-300.ttf
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-light-300.woff2
Normal file
BIN
src/fonts/awesome/webfonts/fa-light-300.woff2
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-regular-400.ttf
Normal file
BIN
src/fonts/awesome/webfonts/fa-regular-400.ttf
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-regular-400.woff2
Normal file
BIN
src/fonts/awesome/webfonts/fa-regular-400.woff2
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-solid-900.ttf
Normal file
BIN
src/fonts/awesome/webfonts/fa-solid-900.ttf
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-solid-900.woff2
Normal file
BIN
src/fonts/awesome/webfonts/fa-solid-900.woff2
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-thin-100.ttf
Normal file
BIN
src/fonts/awesome/webfonts/fa-thin-100.ttf
Normal file
Binary file not shown.
BIN
src/fonts/awesome/webfonts/fa-thin-100.woff2
Normal file
BIN
src/fonts/awesome/webfonts/fa-thin-100.woff2
Normal file
Binary file not shown.
50
src/uwt-web/common/mobile/uwt-actionpreviewbutton.less
Normal file
50
src/uwt-web/common/mobile/uwt-actionpreviewbutton.less
Normal file
@ -0,0 +1,50 @@
|
||||
@media (max-width: 1000px)
|
||||
{
|
||||
div.uwt-actionpreviewbutton
|
||||
{
|
||||
&> a.apb-button
|
||||
{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
div.apb-preview
|
||||
{
|
||||
position: fixed !important;
|
||||
left: 0px !important;
|
||||
top: 0px !important;
|
||||
right: 0px !important;
|
||||
bottom: 0px !important;
|
||||
|
||||
display: flex;
|
||||
justify-content: start;
|
||||
flex-direction: column-reverse;
|
||||
|
||||
margin: 0px;
|
||||
width: 100%;
|
||||
&> div.apb-actions
|
||||
{
|
||||
&> ul.uwt-menu
|
||||
{
|
||||
width: 100%;
|
||||
|
||||
&> li.uwt-menu-item-command
|
||||
{
|
||||
&> ul.uwt-menu
|
||||
{
|
||||
margin-top: 32px; // 16px;
|
||||
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&> div.apb-actions, &> div.apb-preview-content
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
23
src/uwt-web/common/mobile/uwt-alert.less
Normal file
23
src/uwt-web/common/mobile/uwt-alert.less
Normal file
@ -0,0 +1,23 @@
|
||||
@media (max-width: 1000px)
|
||||
{
|
||||
div.uwt-alert
|
||||
{
|
||||
&.uwt-collapsible
|
||||
{
|
||||
&:not(.uwt-collapsed)
|
||||
{
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
width: inherit;
|
||||
z-index: 10;
|
||||
}
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
max-height: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
13
src/uwt-web/common/mobile/uwt-formview.less
Normal file
13
src/uwt-web/common/mobile/uwt-formview.less
Normal file
@ -0,0 +1,13 @@
|
||||
@media screen and (max-width: 1000px)
|
||||
{
|
||||
div.uwt-formview
|
||||
{
|
||||
&> div.uwt-formview-item
|
||||
{
|
||||
&> div.uwt-formview-item-label, &> div.uwt-formview-item-content
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
13
src/uwt-web/common/mobile/uwt-menu.less
Normal file
13
src/uwt-web/common/mobile/uwt-menu.less
Normal file
@ -0,0 +1,13 @@
|
||||
@media (max-width: 1000px)
|
||||
{
|
||||
ul.uwt-menu > li
|
||||
{
|
||||
|
||||
padding: 24px 20px;
|
||||
&> a
|
||||
{
|
||||
padding: 24px 20px;
|
||||
margin: -24px -20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
10
src/uwt-web/common/mobile/uwt-window.less
Normal file
10
src/uwt-web/common/mobile/uwt-window.less
Normal file
@ -0,0 +1,10 @@
|
||||
@media (max-width: 1000px)
|
||||
{
|
||||
div.uwt-window
|
||||
{
|
||||
left: 0px !important;
|
||||
top: 0px !important;
|
||||
right: 0px !important;
|
||||
bottom: 0px !important;
|
||||
}
|
||||
}
|
||||
5
src/uwt-web/common/mobile/uwt.less
Normal file
5
src/uwt-web/common/mobile/uwt.less
Normal file
@ -0,0 +1,5 @@
|
||||
@import "uwt-actionpreviewbutton.less";
|
||||
@import "uwt-alert.less";
|
||||
@import "uwt-formview.less";
|
||||
@import "uwt-menu.less";
|
||||
@import "uwt-window.less";
|
||||
10
src/uwt-web/common/print/uwt-actionpreviewbutton.less
Normal file
10
src/uwt-web/common/print/uwt-actionpreviewbutton.less
Normal file
@ -0,0 +1,10 @@
|
||||
@media print
|
||||
{
|
||||
div.uwt-actionpreviewbutton
|
||||
{
|
||||
&> a.apb-button
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
10
src/uwt-web/common/print/uwt-listview.less
Normal file
10
src/uwt-web/common/print/uwt-listview.less
Normal file
@ -0,0 +1,10 @@
|
||||
@media print
|
||||
{
|
||||
.uwt-listview-caption, .uwt-listview > caption
|
||||
{
|
||||
&> .uwt-listview-controlbox
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
21
src/uwt-web/common/print/uwt.less
Normal file
21
src/uwt-web/common/print/uwt.less
Normal file
@ -0,0 +1,21 @@
|
||||
@import "uwt-actionpreviewbutton.less";
|
||||
@import "uwt-listview.less";
|
||||
|
||||
@media print
|
||||
{
|
||||
body.uwt-header-visible > div.uwt-header + *
|
||||
{
|
||||
margin-top: 0px;
|
||||
}
|
||||
body > div.uwt-page-header, body > form > div.uwt-page-header
|
||||
{
|
||||
padding: 0px;
|
||||
position: static;
|
||||
|
||||
&+ div.uwt-page-content
|
||||
{
|
||||
padding: 0px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
219
src/uwt-web/common/uwt-actionpreviewbutton.less
Normal file
219
src/uwt-web/common/uwt-actionpreviewbutton.less
Normal file
@ -0,0 +1,219 @@
|
||||
@ActionPreviewButton_ActionMenu_Width: 200px;
|
||||
|
||||
div.uwt-actionpreviewbutton
|
||||
{
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
// white-space: nowrap; // this actually looks better this way
|
||||
img.apb-icon
|
||||
{
|
||||
width: 1.2em;
|
||||
margin-right: 8px;
|
||||
}
|
||||
img.apb-icon, a.apb-text, a.apb-button
|
||||
{
|
||||
vertical-align: middle;
|
||||
}
|
||||
&> a.apb-button
|
||||
{
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
|
||||
display: inline-block;
|
||||
padding: 0px 2px 0px 6px;
|
||||
border-radius: 4px;
|
||||
|
||||
margin-left: 8px;
|
||||
padding-right: 6px;
|
||||
|
||||
&::before
|
||||
{
|
||||
content: "...";
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
|
||||
display: block;
|
||||
margin-top: -3px;
|
||||
height: 0px;
|
||||
}
|
||||
}
|
||||
&:hover, &:focus-within
|
||||
{
|
||||
&> a.apb-button
|
||||
{
|
||||
&:hover
|
||||
{
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.apb-selected > div.apb-preview
|
||||
{
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&> a.apb-text.apb-empty
|
||||
{
|
||||
color: inherit;
|
||||
cursor: inherit;
|
||||
&:hover
|
||||
{
|
||||
text-decoration: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
&> div.apb-preview
|
||||
{
|
||||
display: flex;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
float: right;
|
||||
padding: 8px;
|
||||
margin-left: 8px;
|
||||
position: absolute;
|
||||
transition: all 0.3s;
|
||||
|
||||
width: max-content;
|
||||
|
||||
&> a.uwt-button.uwt-button-close
|
||||
{
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
top: 8px;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
padding: 8px;
|
||||
min-width: unset;
|
||||
min-height: unset;
|
||||
&::after
|
||||
{
|
||||
content: "\f00d";
|
||||
font-family: "FontAwesome";
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
left: 6px;
|
||||
}
|
||||
}
|
||||
&.uwt-detached
|
||||
{
|
||||
&> a.uwt-button.uwt-button-close
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
&> div.uwt-gripper
|
||||
{
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
width: 64px;
|
||||
height: 16px;
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
&.uwt-loading > div.apb-content, &.uwt-loading > div.apb-preview-content, &.uwt-loading > div.apb-actions
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&:not(.uwt-loading) > div.uwt-spinner
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
&> div.apb-actions
|
||||
{
|
||||
&.uwt-empty
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
margin: -8px;
|
||||
margin-right: 16px;
|
||||
|
||||
&> h2
|
||||
{
|
||||
cursor: default;
|
||||
}
|
||||
&> ul.uwt-menu
|
||||
{
|
||||
width: @ActionPreviewButton_ActionMenu_Width;
|
||||
&> li.uwt-menu-item-command
|
||||
{
|
||||
position: relative;
|
||||
&> ul.uwt-menu
|
||||
{
|
||||
display: none;
|
||||
position: absolute;
|
||||
//margin-left: 20px;
|
||||
left: @ActionPreviewButton_ActionMenu_Width;
|
||||
top: 0px;
|
||||
width: max-content;
|
||||
z-index: 1;
|
||||
}
|
||||
&:hover > ul.uwt-menu
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
&> div.apb-preview
|
||||
{
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
float: right;
|
||||
padding: 8px;
|
||||
margin-left: 8px;
|
||||
position: absolute;
|
||||
}
|
||||
*/
|
||||
}
|
||||
&> div.apb-preview-content
|
||||
{
|
||||
//!FIXME: determine what the best max-width is based on the location of the popup and the user's screen size
|
||||
max-width: 600px;
|
||||
|
||||
&.uwt-empty
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&> div.apb-header
|
||||
{
|
||||
&> h2
|
||||
{
|
||||
&> span.apb-class-title
|
||||
{
|
||||
padding-right: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
body:not(.uwt-javascript-disabled) div.uwt-actionpreviewbutton
|
||||
{
|
||||
&.apb-selected > a.apb-button
|
||||
{
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
&:hover, &:focus-within
|
||||
{
|
||||
&> a.apb-button
|
||||
{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
&:hover
|
||||
{
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
87
src/uwt-web/common/uwt-alert.less
Normal file
87
src/uwt-web/common/uwt-alert.less
Normal file
@ -0,0 +1,87 @@
|
||||
body > div.uwt-alert-container
|
||||
{
|
||||
position: fixed;
|
||||
right: 32px;
|
||||
top: 32px;
|
||||
|
||||
min-width: 320px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
div.uwt-alert
|
||||
{
|
||||
&.uwt-popup
|
||||
{
|
||||
margin-left: auto;
|
||||
margin-bottom: 8px;
|
||||
position: relative;
|
||||
transition: all 0.5s, scale 0.3s;
|
||||
right: 0px;
|
||||
width: 600px;
|
||||
}
|
||||
&.uwt-collapsible
|
||||
{
|
||||
scale: 0.8;
|
||||
&:not(.uwt-collapsed), &:hover
|
||||
{
|
||||
scale: 1.0;
|
||||
}
|
||||
&> div.uwt-icon
|
||||
{
|
||||
cursor: pointer;
|
||||
}
|
||||
&> div.uwt-title
|
||||
{
|
||||
padding: 16px;
|
||||
}
|
||||
}
|
||||
&:not(.uwt-collapsed)
|
||||
{
|
||||
&> div.uwt-icon
|
||||
{
|
||||
float: left;
|
||||
}
|
||||
&> div.uwt-badge
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
&.uwt-collapsed
|
||||
{
|
||||
&> div.uwt-badge
|
||||
{
|
||||
color: #000;
|
||||
position: absolute;
|
||||
margin-left: 8px;
|
||||
padding: 8px;
|
||||
font-size: 14pt;
|
||||
right: 8px;
|
||||
bottom: 8px;
|
||||
}
|
||||
width: 64px;
|
||||
&> div.uwt-content, &> div.uwt-title
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&> div.uwt-title
|
||||
{
|
||||
font-weight: bold;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
max-height: 200px;
|
||||
overflow: clip;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
&.uwt-disabled
|
||||
{
|
||||
&> div.uwt-badge
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
32
src/uwt-web/common/uwt-applicationmenu.less
Normal file
32
src/uwt-web/common/uwt-applicationmenu.less
Normal file
@ -0,0 +1,32 @@
|
||||
div.uwt-applicationmenu
|
||||
{
|
||||
&> div.uwt-button
|
||||
{
|
||||
border: none;
|
||||
padding: 0px;
|
||||
min-width: auto;
|
||||
|
||||
&> button.uwt-button-dropdownbutton
|
||||
{
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 13px 20px;
|
||||
display: inline-block;
|
||||
|
||||
font-size: 18pt;
|
||||
color: #fff;
|
||||
|
||||
&::before
|
||||
{
|
||||
content: "\f0c9";
|
||||
font-family: FontAwesome;
|
||||
}
|
||||
}
|
||||
&> div.uwt-popup
|
||||
{
|
||||
/* for some reason there's a weird gap between the button and the dropdown */
|
||||
/* margin-top: -4px; */
|
||||
margin-top: -10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
src/uwt-web/common/uwt-badge.less
Normal file
14
src/uwt-web/common/uwt-badge.less
Normal file
@ -0,0 +1,14 @@
|
||||
div.uwt-badge
|
||||
{
|
||||
cursor: default;
|
||||
-moz-user-select: none;
|
||||
|
||||
border-radius: 8px;
|
||||
display: inline-block;
|
||||
|
||||
margin: -8px;
|
||||
|
||||
padding: 8px;
|
||||
padding-left: 24px;
|
||||
padding-right: 24px;
|
||||
}
|
||||
91
src/uwt-web/common/uwt-binaryswitch.less
Normal file
91
src/uwt-web/common/uwt-binaryswitch.less
Normal file
@ -0,0 +1,91 @@
|
||||
div.uwt-binaryswitch
|
||||
{
|
||||
&> div.uwt-binaryswitch-switches
|
||||
{
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
&> div.uwt-switch
|
||||
{
|
||||
border: solid 1px #aaaaaa;
|
||||
cursor: pointer;
|
||||
|
||||
user-select: none;
|
||||
|
||||
margin: 16px 8px 8px 8px;
|
||||
&> label.uwt-switch-label
|
||||
{
|
||||
font-size: 8pt;
|
||||
position: absolute;
|
||||
top: -16px;
|
||||
text-align: center;
|
||||
display: block;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
height: 48px;
|
||||
position: relative;
|
||||
width: 16px;
|
||||
&> div.uwt-switch-indicator
|
||||
{
|
||||
padding: 8px;
|
||||
background: #cccccc;
|
||||
height: 4px;
|
||||
position: absolute;
|
||||
top: 28px;
|
||||
width: 0px;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
&.uwt-selected
|
||||
{
|
||||
background-color: #fff7cc;
|
||||
&> div.uwt-switch-indicator
|
||||
{
|
||||
top: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&> input.uwt-binaryswitch-input, &> label.uwt-binaryswitch-label
|
||||
{
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
text-align: center;
|
||||
}
|
||||
&> label.uwt-binaryswitch-label
|
||||
{
|
||||
display: none;
|
||||
cursor: text;
|
||||
padding: 8px;
|
||||
user-select: revert;
|
||||
}
|
||||
&[disabled]
|
||||
{
|
||||
&> div.uwt-binaryswitch-switches
|
||||
{
|
||||
background-color: var(--uwt-color-gray-300);
|
||||
&> div.uwt-switch
|
||||
{
|
||||
background-color: var(--uwt-color-gray-500);
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
|
||||
&> div.uwt-switch-indicator
|
||||
{
|
||||
background: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
&> input.uwt-binaryswitch-input
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&> label.uwt-binaryswitch-label
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
42
src/uwt-web/common/uwt-button-group.less
Normal file
42
src/uwt-web/common/uwt-button-group.less
Normal file
@ -0,0 +1,42 @@
|
||||
div.uwt-button-group
|
||||
{
|
||||
&> div.uwt-button
|
||||
{
|
||||
cursor: default;
|
||||
|
||||
&> a
|
||||
{
|
||||
display: block;
|
||||
padding: 16px;
|
||||
&> span
|
||||
{
|
||||
display: block;
|
||||
&.uwt-title
|
||||
{
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.uwt-orientation-horizontal
|
||||
{
|
||||
&> div.uwt-button
|
||||
{
|
||||
display: inline-block;
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
&.uwt-orientation-vertical
|
||||
{
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&> a.uwt-button, input[type=submit], input[type=reset], input[type=button], button, div.uwt-button > a,
|
||||
{
|
||||
text-align: left;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
77
src/uwt-web/common/uwt-button.less
Normal file
77
src/uwt-web/common/uwt-button.less
Normal file
@ -0,0 +1,77 @@
|
||||
// @ButtonSelector: 'a.uwt-button, button, input[type=button], input[type=submit], input[type=reset], div.uwt-button > a';
|
||||
|
||||
// (~'@{ButtonSelector}')
|
||||
.uwt-button /* , button, input[type=button], input[type=submit], input[type=reset], div.uwt-button > a */
|
||||
{
|
||||
display: inline-block;
|
||||
font-weight: 400;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
.user-select(none);
|
||||
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
padding: .438rem 1.125rem;
|
||||
font-size: .894rem;
|
||||
line-height: 1.54;
|
||||
|
||||
min-width: 80px;
|
||||
|
||||
|
||||
&+ .uwt-button
|
||||
{
|
||||
margin-right: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-button-group
|
||||
{
|
||||
//(~'@{ButtonSelector}')
|
||||
.uwt-button /*, button, input[type=button], input[type=submit], input[type=reset], div.uwt-button > a */
|
||||
{
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-button
|
||||
{
|
||||
|
||||
display: inline-block;
|
||||
|
||||
&> button.uwt-button-dropdownbutton
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&.uwt-button-hasdropdown
|
||||
{
|
||||
&> button.uwt-button-dropdownbutton
|
||||
{
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
display: inline-block;
|
||||
&::before
|
||||
{
|
||||
content: "⏷";
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
&.uwt-button-requiredropdown > input:nth-child(1), &.uwt-button-requiredropdown > a:nth-child(1)
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&:not(.uwt-button-requiredropdown)
|
||||
{
|
||||
/* split dropdown button styles */
|
||||
&> input:first-child
|
||||
{
|
||||
border-right: none;
|
||||
}
|
||||
&> input.uwt-button-dropdownbutton
|
||||
{
|
||||
border-left: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
27
src/uwt-web/common/uwt-calendar.less
Normal file
27
src/uwt-web/common/uwt-calendar.less
Normal file
@ -0,0 +1,27 @@
|
||||
div.uwt-calendar
|
||||
{
|
||||
&> table
|
||||
{
|
||||
&> thead
|
||||
{
|
||||
}
|
||||
&> tbody
|
||||
{
|
||||
&> tr
|
||||
{
|
||||
&> td
|
||||
{
|
||||
&> a
|
||||
{
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
|
||||
line-height: 2rem;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
37
src/uwt-web/common/uwt-checkbox.less
Normal file
37
src/uwt-web/common/uwt-checkbox.less
Normal file
@ -0,0 +1,37 @@
|
||||
div.uwt-checkbox
|
||||
{
|
||||
transition: all 0.3s;
|
||||
&> i.fa-check
|
||||
{
|
||||
margin-left: 4px;
|
||||
transition: all 0.3s;
|
||||
opacity: 0;
|
||||
}
|
||||
&.uwt-checked, &.uwt-indeterminate
|
||||
{
|
||||
&> i.fa-check
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
&.uwt-indeterminate > i.fa-check::before
|
||||
{
|
||||
content: "\f0c8";
|
||||
}
|
||||
|
||||
border: solid 1px #24abf2;
|
||||
display: inline-block;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-radius: 4px;
|
||||
color: #ffffff;
|
||||
&:focus-within
|
||||
{
|
||||
box-shadow: 0px 0px 4px #24abf2;
|
||||
}
|
||||
&.uwt-checked, &.uwt-indeterminate
|
||||
{
|
||||
background-color: #24abf2;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
72
src/uwt-web/common/uwt-column.less
Normal file
72
src/uwt-web/common/uwt-column.less
Normal file
@ -0,0 +1,72 @@
|
||||
div.uwt-columns
|
||||
{
|
||||
display: flex;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: 20px;
|
||||
min-height: 1px;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
div.uwt-columns > div.uwt-column-row
|
||||
{
|
||||
box-sizing: border-box;
|
||||
}
|
||||
div.uwt-columns > div.uwt-column-row
|
||||
{
|
||||
display: flex;
|
||||
}
|
||||
div.uwt-columns > div.uwt-column-section
|
||||
{
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
|
||||
&> div.uwt-column
|
||||
{
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1000px)
|
||||
{
|
||||
div.uwt-columns
|
||||
{
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px)
|
||||
{
|
||||
div.uwt-columns > div.uwt-column-row > div.uwt-column.uwt-column-4
|
||||
{
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px)
|
||||
{
|
||||
div.uwt-columns > div.uwt-column-row > div.uwt-column.uwt-column-4
|
||||
{
|
||||
flex: 0 1 25%;
|
||||
max-width: 25%;
|
||||
}
|
||||
}
|
||||
|
||||
.uwt-column.uwt-column-1
|
||||
{
|
||||
flex: 0 1 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
.uwt-column.uwt-column-2
|
||||
{
|
||||
flex: 0 1 50%;
|
||||
max-width: 50%;
|
||||
}
|
||||
.uwt-column.uwt-column-3
|
||||
{
|
||||
flex: 0 1 33.333333%;
|
||||
max-width: 33.333333%;
|
||||
}
|
||||
.uwt-column.uwt-column-8
|
||||
{
|
||||
flex: 0 1 66.666667%;
|
||||
max-width: 66.666667%;
|
||||
}
|
||||
90
src/uwt-web/common/uwt-dialog.less
Normal file
90
src/uwt-web/common/uwt-dialog.less
Normal file
@ -0,0 +1,90 @@
|
||||
div.uwt-dialog-background
|
||||
{
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
|
||||
transition: all 0.3s;
|
||||
&:not(.uwt-visible)
|
||||
{
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
z-index: 10000;
|
||||
}
|
||||
div.uwt-dialog
|
||||
{
|
||||
max-width: 35rem;
|
||||
margin: 1.75rem auto;
|
||||
z-index: 10001;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
|
||||
transition: all 0.3s;
|
||||
&:not(.uwt-visible)
|
||||
{
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
&> div.uwt-header
|
||||
{
|
||||
padding: 1.25rem 1.5625rem;
|
||||
|
||||
&> div.uwt-dialog-title, &> div.uwt-dialog-controlbox
|
||||
{
|
||||
}
|
||||
&> div.uwt-dialog-title
|
||||
{
|
||||
font-size: 1rem;
|
||||
}
|
||||
&> div.uwt-dialog-controlbox
|
||||
{
|
||||
position: absolute;
|
||||
right: 24px;
|
||||
top: 15px;
|
||||
&> a.uwt-dialog-controlbox-close
|
||||
{
|
||||
font-size: 1.341rem;
|
||||
font-weight: 300;
|
||||
}
|
||||
}
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
padding: 1.5625rem;
|
||||
}
|
||||
&> div.uwt-footer
|
||||
{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
padding: 1.25rem 1.5625rem;
|
||||
|
||||
&> :not(:first-child)
|
||||
{
|
||||
margin-left: .25rem;
|
||||
}
|
||||
&> :not(:last-child)
|
||||
{
|
||||
margin-right: .25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 600px)
|
||||
{
|
||||
div.uwt-dialog
|
||||
{
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
margin: 0px;
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
31
src/uwt-web/common/uwt-disclosure.less
Normal file
31
src/uwt-web/common/uwt-disclosure.less
Normal file
@ -0,0 +1,31 @@
|
||||
div.uwt-disclosure
|
||||
{
|
||||
&> div.uwt-title
|
||||
{
|
||||
&::after
|
||||
{
|
||||
content: "\f078";
|
||||
font-family: "Font Awesome 6 Pro";
|
||||
font-weight: 100;
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
&.uwt-expanded > div.uwt-title::after
|
||||
{
|
||||
content: "\f077";
|
||||
}
|
||||
&:not(.uwt-expanded) > div.uwt-content
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-alert > div.uwt-content > div.uwt-disclosure
|
||||
{
|
||||
border-bottom: 1px dotted;
|
||||
&> div.uwt-title:hover
|
||||
{
|
||||
background: rgba(255,255,255, 0.3);
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
5
src/uwt-web/common/uwt-expand.less
Normal file
5
src/uwt-web/common/uwt-expand.less
Normal file
@ -0,0 +1,5 @@
|
||||
.uwt-expand
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
}
|
||||
18
src/uwt-web/common/uwt-footer.less
Normal file
18
src/uwt-web/common/uwt-footer.less
Normal file
@ -0,0 +1,18 @@
|
||||
body > div.uwt-footer, body > form > div.uwt-footer
|
||||
{
|
||||
padding: 16px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
@media (max-width: 999px)
|
||||
{
|
||||
/* TABLET styles */
|
||||
body > div.uwt-footer, body > form > div.uwt-footer
|
||||
{
|
||||
left: 0px;
|
||||
/*
|
||||
background-color: #111111;
|
||||
padding: 16px;
|
||||
*/
|
||||
}
|
||||
}
|
||||
124
src/uwt-web/common/uwt-formview.less
Normal file
124
src/uwt-web/common/uwt-formview.less
Normal file
@ -0,0 +1,124 @@
|
||||
table.uwt-formview
|
||||
{
|
||||
border-collapse: collapse;
|
||||
|
||||
// &:not(.uwt-expand)
|
||||
// {
|
||||
// display: inline-block;
|
||||
// }
|
||||
|
||||
&> tr > td, &> thead > tr > td, &> tbody > tr > td
|
||||
{
|
||||
//padding: 8px;
|
||||
padding-left: 0px;
|
||||
vertical-align: top;
|
||||
&:first-child
|
||||
{
|
||||
&> label
|
||||
{
|
||||
font-weight: bold;
|
||||
padding-right: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.uwt-formview-stacked
|
||||
{
|
||||
&> tr, &> td, &> thead > tr, &> thead > tr > td, &> tbody > tr, &> tbody > tr > td
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
input
|
||||
{
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
tr.uwt-required > td:first-child
|
||||
{
|
||||
position: relative;
|
||||
&::before
|
||||
{
|
||||
content: "*";
|
||||
color: #f00;
|
||||
font-size: 18pt;
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* V2 FormView - now more FLEXible! */
|
||||
div.uwt-formview
|
||||
{
|
||||
// display: grid;
|
||||
display: table;
|
||||
/*
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
*/
|
||||
|
||||
&> div.uwt-formview-item
|
||||
{
|
||||
/*
|
||||
display: flex;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
*/
|
||||
display: table-row;
|
||||
|
||||
&> div.uwt-formview-item-label, &> div.uwt-formview-item-content
|
||||
{
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
}
|
||||
&> div.uwt-formview-item-label
|
||||
{
|
||||
padding-top: 8pt;
|
||||
padding-right: 32px;
|
||||
&> label
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
&> div.uwt-formview-item-description
|
||||
{
|
||||
color: #aaaaaa;
|
||||
}
|
||||
}
|
||||
&.uwt-hide-label
|
||||
{
|
||||
display: block;
|
||||
&> div.uwt-formview-item-label
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&> div.uwt-formview-item-content
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 800px)
|
||||
{
|
||||
div.uwt-formview
|
||||
{
|
||||
&> div.uwt-formview-item
|
||||
{
|
||||
/*
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
*/
|
||||
display: block;
|
||||
|
||||
&> div.uwt-formview-item-label
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
4
src/uwt-web/common/uwt-gripper.less
Normal file
4
src/uwt-web/common/uwt-gripper.less
Normal file
@ -0,0 +1,4 @@
|
||||
div.uwt-gripper
|
||||
{
|
||||
cursor: move;
|
||||
}
|
||||
33
src/uwt-web/common/uwt-header.less
Normal file
33
src/uwt-web/common/uwt-header.less
Normal file
@ -0,0 +1,33 @@
|
||||
body, body > form
|
||||
{
|
||||
&> div.uwt-header
|
||||
{
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
height: 60px;
|
||||
right: 0px;
|
||||
z-index: 100;
|
||||
&> div.uwt-header-item
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
ul.uwt-menu
|
||||
{
|
||||
padding-bottom: 32px;
|
||||
height: 300px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media print
|
||||
{
|
||||
body, body > form
|
||||
{
|
||||
&> div.uwt-header
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
5
src/uwt-web/common/uwt-image.less
Normal file
5
src/uwt-web/common/uwt-image.less
Normal file
@ -0,0 +1,5 @@
|
||||
div.uwt-image
|
||||
{
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
5
src/uwt-web/common/uwt-label.less
Normal file
5
src/uwt-web/common/uwt-label.less
Normal file
@ -0,0 +1,5 @@
|
||||
label, span.uwt-label
|
||||
{
|
||||
cursor: default;
|
||||
-moz-user-select: none;
|
||||
}
|
||||
36
src/uwt-web/common/uwt-layout-box.less
Normal file
36
src/uwt-web/common/uwt-layout-box.less
Normal file
@ -0,0 +1,36 @@
|
||||
div.uwt-layout.uwt-layout-box
|
||||
{
|
||||
display: flex;
|
||||
&.uwt-orientation-horizontal
|
||||
{
|
||||
flex-direction: row;
|
||||
}
|
||||
&.uwt-orientation-vertical
|
||||
{
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
&> div.uwt-layout-item
|
||||
{
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
justify-content: center;
|
||||
|
||||
&.uwt-pack-start
|
||||
{
|
||||
justify-content: flex-start;
|
||||
}
|
||||
&.uwt-pack-end
|
||||
{
|
||||
justify-content: flex-end;
|
||||
}
|
||||
&.uwt-homogenous
|
||||
{
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
|
||||
&.uwt-layout-box-expand
|
||||
{
|
||||
}
|
||||
}
|
||||
21
src/uwt-web/common/uwt-listbox.less
Normal file
21
src/uwt-web/common/uwt-listbox.less
Normal file
@ -0,0 +1,21 @@
|
||||
div.uwt-listbox
|
||||
{
|
||||
&> div.uwt-listitem
|
||||
{
|
||||
cursor: pointer;
|
||||
|
||||
&> div.uwt-title, &> div.uwt-detail
|
||||
{
|
||||
padding: 8px;
|
||||
}
|
||||
&> div.uwt-title
|
||||
{
|
||||
padding-bottom: 0px;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
&> div.uwt-detail
|
||||
{
|
||||
color: #aaaaaa;
|
||||
}
|
||||
}
|
||||
}
|
||||
209
src/uwt-web/common/uwt-listview.less
Normal file
209
src/uwt-web/common/uwt-listview.less
Normal file
@ -0,0 +1,209 @@
|
||||
div.uwt-listview-caption
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
table.uwt-listview
|
||||
{
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
&> tr, &> thead > tr
|
||||
{
|
||||
&> th
|
||||
{
|
||||
&> a.uwt-listview-row-add, &> a.uwt-listview-row-remove
|
||||
{
|
||||
&::before
|
||||
{
|
||||
font-size: 28px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
color: var(--uwt-color-gray);
|
||||
&:hover
|
||||
{
|
||||
color: var(--uwt-color-black);
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&> tr, &> tbody > tr
|
||||
{
|
||||
&> td
|
||||
{
|
||||
&> a.uwt-listview-row-add, &> a.uwt-listview-row-remove
|
||||
{
|
||||
&::before
|
||||
{
|
||||
font-size: 28px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
color: var(--uwt-color-gray);
|
||||
&:hover
|
||||
{
|
||||
color: var(--uwt-color-black);
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
&> input
|
||||
{
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
&> div.uwt-checkbox
|
||||
{
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.uwt-listview-caption, .uwt-listview > caption
|
||||
{
|
||||
text-align: left;
|
||||
padding-top: 8px;
|
||||
|
||||
&> span.uwt-listview-title
|
||||
{
|
||||
font-weight: bold;
|
||||
&:not(:empty)
|
||||
{
|
||||
padding-right: 8px;
|
||||
}
|
||||
}
|
||||
&> span.uwt-listview-item-count, &> span.uwt-listview-item-count-label
|
||||
{
|
||||
color: var(--uwt-color-secondary);
|
||||
}
|
||||
&> .uwt-listview-controlbox
|
||||
{
|
||||
float: right;
|
||||
margin-left: auto;
|
||||
padding-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.uwt-listview
|
||||
{
|
||||
&> .uwt-content
|
||||
{
|
||||
border-collapse: collapse;
|
||||
margin-top: 10px;
|
||||
&> .uwt-listview-items
|
||||
{
|
||||
&> .uwt-listview-item
|
||||
{
|
||||
&> .uwt-listview-item-column
|
||||
{
|
||||
word-wrap: break-word;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&.uwt-expand
|
||||
{
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
}
|
||||
tr
|
||||
{
|
||||
&> th, &> td
|
||||
{
|
||||
padding: 10px;
|
||||
}
|
||||
&> th:not([colspan])
|
||||
{
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
&> thead
|
||||
{
|
||||
&> tr > th
|
||||
{
|
||||
vertical-align: bottom;
|
||||
&> a
|
||||
{
|
||||
display: block;
|
||||
|
||||
/* remove the padding from the surrounding td */
|
||||
margin: -10px;
|
||||
/* and apply it back for this block-level a element */
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&> tbody
|
||||
{
|
||||
&> tr
|
||||
{
|
||||
&> td
|
||||
{
|
||||
vertical-align: top;
|
||||
}
|
||||
&.uwt-selected
|
||||
{
|
||||
&> td
|
||||
{
|
||||
background-color: #08c;
|
||||
color: #fff;
|
||||
}
|
||||
&:hover > td
|
||||
{
|
||||
background-color: #0075b0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&> tr > th, &> thead > tr > th, &> tr > td, &> tbody > tr > td
|
||||
{
|
||||
&.uwt-listview-row-buttons
|
||||
{
|
||||
text-align: center;
|
||||
width: 96px;
|
||||
}
|
||||
&> a.uwt-listview-row-add
|
||||
{
|
||||
&::before
|
||||
{
|
||||
content: "\f055";
|
||||
}
|
||||
}
|
||||
&> a.uwt-listview-row-remove
|
||||
{
|
||||
&::before
|
||||
{
|
||||
content: "\f056";
|
||||
}
|
||||
}
|
||||
&> a.uwt-listview-row-add, &> a.uwt-listview-row-remove
|
||||
{
|
||||
display: inline-block;
|
||||
font-family: "Font Awesome 6 Pro";
|
||||
padding: 4px;
|
||||
margin: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
ul.uwt-listview
|
||||
{
|
||||
&> li
|
||||
{
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-listview.uwt-view-thumbnails
|
||||
{
|
||||
&> div.uwt-listview-item
|
||||
{
|
||||
display: inline-block;
|
||||
padding: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
32
src/uwt-web/common/uwt-megamenu.less
Normal file
32
src/uwt-web/common/uwt-megamenu.less
Normal file
@ -0,0 +1,32 @@
|
||||
div.uwt-menu-large
|
||||
{
|
||||
&> div.uwt-menu-section
|
||||
{
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
padding: 16px;
|
||||
&> div.uwt-title
|
||||
{
|
||||
color: #aaaaaa;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 2px;
|
||||
font-size: 12px;
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
&> ul.uwt-menu
|
||||
{
|
||||
&> li
|
||||
{
|
||||
&> a
|
||||
{
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
padding: .438rem 1.25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
112
src/uwt-web/common/uwt-menu.less
Normal file
112
src/uwt-web/common/uwt-menu.less
Normal file
@ -0,0 +1,112 @@
|
||||
ul.uwt-menu
|
||||
{
|
||||
list-style-type: none;
|
||||
padding-left: 0px;
|
||||
margin: 0px;
|
||||
user-select: none;
|
||||
&> li
|
||||
{
|
||||
padding: .438rem 1.25rem;
|
||||
position: relative;
|
||||
&:not(.uwt-visible)
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&> a
|
||||
{
|
||||
color: var(--uwt-control-text);
|
||||
display: block;
|
||||
font-size: initial;
|
||||
padding: .438rem 1.25rem;
|
||||
margin: -.438rem -1.25rem;
|
||||
text-align: initial;
|
||||
text-decoration: none;
|
||||
|
||||
&> span
|
||||
{
|
||||
/* not required, but if used, block-level elements */
|
||||
display: block;
|
||||
&.uwt-title
|
||||
{
|
||||
//font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.uwt-menu-item-command
|
||||
{
|
||||
&:hover, &.uwt-highlight
|
||||
{
|
||||
background-color: rgba(0, 0, 0, 0.03); // var(--uwt-dropdown-menu-highlight-background);
|
||||
color: var(--uwt-dropdown-menu-highlight-foreground);
|
||||
&> a
|
||||
{
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.uwt-separator
|
||||
{
|
||||
border-bottom: solid 1px #eee;
|
||||
margin-left: 8px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
&> ul.uwt-menu
|
||||
{
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
}
|
||||
&:hover > ul.uwt-menu
|
||||
{
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
&.uwt-multiselect
|
||||
{
|
||||
&> li:not(.uwt-section)
|
||||
{
|
||||
&> a
|
||||
{
|
||||
padding: 10px;
|
||||
padding-left: 40px;
|
||||
|
||||
&::before
|
||||
{
|
||||
content: " ";
|
||||
color: #fff;
|
||||
font-family: "Font Awesome 6 Pro";
|
||||
font-weight: bold;
|
||||
border: 1px solid var(--uwt-color-gray);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border-radius: 4px;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
left: 8px;
|
||||
top: 8px;
|
||||
padding: 4px;
|
||||
}
|
||||
}
|
||||
&.uwt-selected
|
||||
{
|
||||
&> a
|
||||
{
|
||||
&::before
|
||||
{
|
||||
background-color: var(--uwt-color-accent);
|
||||
border-color: var(--uwt-color-accent);
|
||||
content: "\f00c";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-popup.uwt-contextmenu
|
||||
{
|
||||
position: fixed;
|
||||
}
|
||||
11
src/uwt-web/common/uwt-meter.less
Normal file
11
src/uwt-web/common/uwt-meter.less
Normal file
@ -0,0 +1,11 @@
|
||||
div.uwt-meter
|
||||
{
|
||||
&> div.uwt-meter-wrapper
|
||||
{
|
||||
&> canvas.uwt-meter-canvas
|
||||
{
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
}
|
||||
}
|
||||
6
src/uwt-web/common/uwt-page-footer.less
Normal file
6
src/uwt-web/common/uwt-page-footer.less
Normal file
@ -0,0 +1,6 @@
|
||||
div.uwt-page-footer
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: end;
|
||||
}
|
||||
49
src/uwt-web/common/uwt-page-header.less
Normal file
49
src/uwt-web/common/uwt-page-header.less
Normal file
@ -0,0 +1,49 @@
|
||||
body
|
||||
{
|
||||
&> div.uwt-page-header, &> form > div.uwt-page-header
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
z-index: 5;
|
||||
|
||||
&> div.uwt-title
|
||||
{
|
||||
flex: auto;
|
||||
}
|
||||
&> input.uwt-searchbox
|
||||
{
|
||||
width: 20%;
|
||||
margin: 6px;
|
||||
}
|
||||
|
||||
&+ div.uwt-page-content
|
||||
{
|
||||
padding-top: 230px;
|
||||
}
|
||||
}
|
||||
&> div.uwt-page-content, &> form > div.uwt-page-content
|
||||
{
|
||||
padding-bottom: 64px;
|
||||
}
|
||||
|
||||
&> div.uwt-page-footer, &> form > div.uwt-page-footer
|
||||
{
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
body:not(.uwt-header-visible)
|
||||
{
|
||||
&> div.uwt-page-header, &> form > div.uwt-page-header
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
150
src/uwt-web/common/uwt-page.less
Normal file
150
src/uwt-web/common/uwt-page.less
Normal file
@ -0,0 +1,150 @@
|
||||
body
|
||||
{
|
||||
margin: 0px;
|
||||
&.uwt-header-visible
|
||||
{
|
||||
&> div.uwt-header + *
|
||||
{
|
||||
margin-top: 64px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1000px)
|
||||
{
|
||||
body
|
||||
{
|
||||
&:not(.uwt-hide-sidebar)
|
||||
{
|
||||
&> div.uwt-page, &> form > div.uwt-page
|
||||
{
|
||||
margin-left: 260px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
body
|
||||
{
|
||||
&:not(.uwt-hide-header)
|
||||
{
|
||||
&> div.uwt-page, &> form > div.uwt-page
|
||||
{
|
||||
/* margin-top: 60px; */
|
||||
}
|
||||
}
|
||||
&.uwt-hide-sidebar
|
||||
{
|
||||
margin-left: 0px;
|
||||
&> div.uwt-sidebar, &> form > div.uwt-sidebar
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
body, body > form
|
||||
{
|
||||
&> div.uwt-page
|
||||
{
|
||||
margin-right: 0px;
|
||||
margin-bottom: 0px;
|
||||
&> div.uwt-header, &> div.uwt-footer
|
||||
{
|
||||
padding: 32px;
|
||||
}
|
||||
&> div.uwt-header
|
||||
{
|
||||
position: relative;
|
||||
&> div.uwt-title
|
||||
{
|
||||
font-size: 18pt;
|
||||
font-weight: 300;
|
||||
margin: 0px;
|
||||
}
|
||||
&> div.uwt-subtitle
|
||||
{
|
||||
font-size: 12pt;
|
||||
font-weight: 300;
|
||||
margin-top: 16px;
|
||||
color: rgba(0,0,0,0.6);
|
||||
}
|
||||
&> div.uwt-controlbox
|
||||
{
|
||||
position: absolute;
|
||||
top: 48px;
|
||||
right: 32px;
|
||||
&> ul
|
||||
{
|
||||
list-style-type: none;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
&> li
|
||||
{
|
||||
&> a > i
|
||||
{
|
||||
font-size: 18pt;
|
||||
}
|
||||
display: inline-block;
|
||||
&+ li
|
||||
{
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
padding: 40px;
|
||||
}
|
||||
}
|
||||
&> div.uwt-footer
|
||||
{
|
||||
position: fixed;
|
||||
left: 260px; /* get this from uwt-sidebar.less */
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
|
||||
border-top: 1px solid #d2d3d6;
|
||||
background-color: #edeef0;
|
||||
padding: 16px;
|
||||
}
|
||||
}
|
||||
body:not(.uwt-loading) div#uwt-page-loading
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
@media (max-width: 999px)
|
||||
{
|
||||
body
|
||||
{
|
||||
&> div.uwt-page, &> form > div.uwt-page
|
||||
{
|
||||
margin-left: 0px;
|
||||
}
|
||||
&> form > div.uwt-sidebar, body > div.uwt-sidebar
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media print
|
||||
{
|
||||
body, body > form
|
||||
{
|
||||
&> div.uwt-page
|
||||
{
|
||||
margin-left: 0px;
|
||||
}
|
||||
margin: 0px;
|
||||
&> div.uwt-footer
|
||||
{
|
||||
left: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
div.uwt-page-content
|
||||
{
|
||||
padding: 16px;
|
||||
}
|
||||
35
src/uwt-web/common/uwt-panel.less
Normal file
35
src/uwt-web/common/uwt-panel.less
Normal file
@ -0,0 +1,35 @@
|
||||
div.uwt-panel
|
||||
{
|
||||
background-color: #FFFFFF;
|
||||
border: solid 1px #aeaeae;
|
||||
box-shadow: 0px 0px 24px #aeaeae;
|
||||
&> div.uwt-header
|
||||
{
|
||||
font-size: 18pt;
|
||||
font-weight: 300;
|
||||
padding: 24px;
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
padding: 24px;
|
||||
}
|
||||
&> div.uwt-footer
|
||||
{
|
||||
background-color: #eeeeee;
|
||||
border-top: solid 1px #cccccc;
|
||||
padding: 24px;
|
||||
text-align: right;
|
||||
}
|
||||
&.uwt-loading > div.uwt-content::after
|
||||
{
|
||||
position: absolute;
|
||||
content: "";
|
||||
background-image: url('data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==');
|
||||
display: block;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
33
src/uwt-web/common/uwt-popup.less
Normal file
33
src/uwt-web/common/uwt-popup.less
Normal file
@ -0,0 +1,33 @@
|
||||
.uwt-popup
|
||||
{
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
|
||||
position: fixed;
|
||||
z-index: 150;
|
||||
|
||||
|
||||
font-size: initial;
|
||||
font-weight: initial;
|
||||
|
||||
&.uwt-visible
|
||||
{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
min-width: 10rem;
|
||||
/* padding: .3125rem 0; */
|
||||
margin: .125rem 0 0;
|
||||
|
||||
box-shadow: 0 1px 6px rgba(0,0,0,0.09);
|
||||
transition: opacity .3s, visibility .3s;
|
||||
|
||||
&> div.uwt-spinner
|
||||
{
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-top: 48px;
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
}
|
||||
31
src/uwt-web/common/uwt-progressbar.less
Normal file
31
src/uwt-web/common/uwt-progressbar.less
Normal file
@ -0,0 +1,31 @@
|
||||
div.uwt-progressbar
|
||||
{
|
||||
background-color: rgba(24,28,33,0.03);
|
||||
border-radius: 10rem;
|
||||
margin-top: .25rem !important;
|
||||
margin-bottom: 1.5rem !important;
|
||||
height: 4px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
div.uwt-progressbar > div.uwt-progressbar-value
|
||||
{
|
||||
transition: width 0.6s ease;
|
||||
width: 0%;
|
||||
}
|
||||
|
||||
@keyframes progress-marquee
|
||||
{
|
||||
from { left: -25%; }
|
||||
to { left: 125%; }
|
||||
}
|
||||
div.uwt-progressbar.uwt-progressbar-marquee > div.uwt-progressbar-value
|
||||
{
|
||||
position: absolute;
|
||||
|
||||
width: 25% !important;
|
||||
animation: progress-marquee;
|
||||
animation-duration: 1s;
|
||||
animation-timing-function: ease-in;
|
||||
animation-iteration-count: infinite;
|
||||
}
|
||||
113
src/uwt-web/common/uwt-ribbon-listview.less
Normal file
113
src/uwt-web/common/uwt-ribbon-listview.less
Normal file
@ -0,0 +1,113 @@
|
||||
div.uwt-ribbon-listview
|
||||
{
|
||||
border: solid 1px #cccccc;
|
||||
background-color: #ffffff;
|
||||
display: flex;
|
||||
&> div.uwt-scrollbar
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&> a
|
||||
{
|
||||
display: block;
|
||||
width: 10px;
|
||||
text-decoration: none;
|
||||
border: solid 1px transparent;
|
||||
margin: -1px;
|
||||
padding: 1px;
|
||||
flex-grow: 1;
|
||||
&:hover
|
||||
{
|
||||
border-color: #eeeeee;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
&.uwt-scrollbar-button
|
||||
{
|
||||
cursor: default;
|
||||
&::before
|
||||
{
|
||||
content: " ";
|
||||
display: block;
|
||||
|
||||
margin-top: 10px;
|
||||
margin-left: 3px;
|
||||
position: absolute;
|
||||
width: 5px;
|
||||
height: 3px;
|
||||
}
|
||||
&.uwt-disabled
|
||||
{
|
||||
cursor: default;
|
||||
&::before
|
||||
{
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.uwt-scrollbar-button-up
|
||||
{
|
||||
&::before
|
||||
{
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAADCAYAAABbNsX4AAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AYht+2SlUqgnYQcchQdbEgWsRRq1CECqFWaNXB5NI/aNKQpLg4Cq4FB38Wqw4uzro6uAqC4A+Im5uToouU+F1SaBHjHcc9vPe9L3ffAf56malmxwSgapaRSsSFTHZVCL6iG/00xxCTmKnPiWISnuPrHj6+30V5lnfdn6NXyZkM8AnEs0w3LOIN4ulNS+e8TxxmRUkhPiceN+iCxI9cl11+41xw2M8zw0Y6NU8cJhYKbSy3MSsaKnGMOKKoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5rGAksYgkiBMioooQyLERp10gxkaLzuId/yPGL5JLJVQIjxwIqUCE5fvA/+N1bMz816SaF4kDni21/jADBXaBRs+3vY9tunACBZ+BKa/krdWDmk/RaS4scAX3bwMV1S5P3gMsdYPBJlwzJkQK0/Pk88H5G35QFBm6BnjW3b81znD4AaepV8gY4OARGC5S97vHurva+/VvT7N8PwFhyxlX78fMAAAAGYktHRAD/AAAA/x4lk34AAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQflCRIUExeEThINAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAB1JREFUCNdjYICCurq6/zA2I7pAU1MTIyOyAAwAACpFCPXLR2gjAAAAAElFTkSuQmCC');
|
||||
}
|
||||
}
|
||||
&.uwt-scrollbar-button-down
|
||||
{
|
||||
&::before
|
||||
{
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAADCAYAAABbNsX4AAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AYht+2SlUqgnYQcchQdbEgWsRRq1CECqFWaNXB5NI/aNKQpLg4Cq4FB38Wqw4uzro6uAqC4A+Im5uToouU+F1SaBHjHcc9vPe9L3ffAf56malmxwSgapaRSsSFTHZVCL6iG/00xxCTmKnPiWISnuPrHj6+30V5lnfdn6NXyZkM8AnEs0w3LOIN4ulNS+e8TxxmRUkhPiceN+iCxI9cl11+41xw2M8zw0Y6NU8cJhYKbSy3MSsaKnGMOKKoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5rGAksYgkiBMioooQyLERp10gxkaLzuId/yPGL5JLJVQIjxwIqUCE5fvA/+N1bMz816SaF4kDni21/jADBXaBRs+3vY9tunACBZ+BKa/krdWDmk/RaS4scAX3bwMV1S5P3gMsdYPBJlwzJkQK0/Pk88H5G35QFBm6BnjW3b81znD4AaepV8gY4OARGC5S97vHurva+/VvT7N8PwFhyxlX78fMAAAAGYktHRAD/AAAA/x4lk34AAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQflCRIUExAaKoeuAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAB5JREFUCNdjrKur+8+ABhgZGBgYkCWampoY4bLIEgAqbwj1ABBIfwAAAABJRU5ErkJggg==');
|
||||
}
|
||||
}
|
||||
&.uwt-scrollbar-button-expand
|
||||
{
|
||||
&::before
|
||||
{
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAGCAYAAAAPDoR2AAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AYht+2SlUqgnYQcchQdbEgWsRRq1CECqFWaNXB5NI/aNKQpLg4Cq4FB38Wqw4uzro6uAqC4A+Im5uToouU+F1SaBHjHcc9vPe9L3ffAf56malmxwSgapaRSsSFTHZVCL6iG/00xxCTmKnPiWISnuPrHj6+30V5lnfdn6NXyZkM8AnEs0w3LOIN4ulNS+e8TxxmRUkhPiceN+iCxI9cl11+41xw2M8zw0Y6NU8cJhYKbSy3MSsaKnGMOKKoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5rGAksYgkiBMioooQyLERp10gxkaLzuId/yPGL5JLJVQIjxwIqUCE5fvA/+N1bMz816SaF4kDni21/jADBXaBRs+3vY9tunACBZ+BKa/krdWDmk/RaS4scAX3bwMV1S5P3gMsdYPBJlwzJkQK0/Pk88H5G35QFBm6BnjW3b81znD4AaepV8gY4OARGC5S97vHurva+/VvT7N8PwFhyxlX78fMAAAAGYktHRAD/AAAA/x4lk34AAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQflCRIUEie7jBPgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAClJREFUCNdjrKur+89AdcDIwMDAgM3opqYmRkYYB1lBU1MTI4Yx6CYAAJuhDPakghFwAAAAAElFTkSuQmCC');
|
||||
width: 7px;
|
||||
height: 6px;
|
||||
|
||||
margin-left: 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
height: 80px;
|
||||
overflow: hidden;
|
||||
flex-grow: 1;
|
||||
transition: all 0.3s;
|
||||
&> div.uwt-listview-item
|
||||
{
|
||||
border: solid 1px transparent;
|
||||
display: inline-block;
|
||||
padding: 11px 16px;
|
||||
&:hover
|
||||
{
|
||||
background-color: #eeeeee;
|
||||
border-color: #eeeeee;
|
||||
}
|
||||
&> img
|
||||
{
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
&> span.uwt-title
|
||||
{
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: smaller;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-ribbon > div.uwt-ribbon-tab-contents > div.uwt-ribbon-tab-content > div.uwt-ribbon-tab-group > div.uwt-content > div.uwt-ribbon-literal > div.uwt-ribbon-listview
|
||||
{
|
||||
margin-top: 20px;
|
||||
}
|
||||
203
src/uwt-web/common/uwt-ribbon.less
Normal file
203
src/uwt-web/common/uwt-ribbon.less
Normal file
@ -0,0 +1,203 @@
|
||||
.mso-radial-gradient(@start, @end)
|
||||
{
|
||||
background: radial-gradient(ellipse at top, @start, transparent), radial-gradient(ellipse at bottom, @end, transparent);
|
||||
}
|
||||
|
||||
@RibbonExpandedHeight: 168px;
|
||||
@RibbonCollapsedHeight: 48px;
|
||||
|
||||
body.uwt-ribbon-visible
|
||||
{
|
||||
div.uwt-ribbon
|
||||
{
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: @RibbonExpandedHeight;
|
||||
right: 0px;
|
||||
}
|
||||
div.uwt-sidebar
|
||||
{
|
||||
top: @RibbonExpandedHeight;
|
||||
}
|
||||
&> form > div.uwt-page > div.uwt-content, &> div.uwt-page > div.uwt-content
|
||||
{
|
||||
margin-top: @RibbonExpandedHeight;
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-ribbon
|
||||
{
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
height: 0px;
|
||||
transition: all 0.3s;
|
||||
overflow: hidden;
|
||||
|
||||
&.uwt-visible
|
||||
{
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
height: @RibbonExpandedHeight;
|
||||
|
||||
&.uwt-ribbon-collapsed
|
||||
{
|
||||
height: @RibbonCollapsedHeight;
|
||||
&> div.uwt-ribbon-tab-contents
|
||||
{
|
||||
position: absolute;
|
||||
|
||||
height: 94px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
margin-top: 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-moz-user-select: none;
|
||||
&> div.uwt-ribbon-application-button
|
||||
{
|
||||
padding: 10px 0px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
|
||||
&> a
|
||||
{
|
||||
text-align: center;
|
||||
padding: 10px 30px;
|
||||
}
|
||||
}
|
||||
|
||||
&> ul.uwt-ribbon-tab-buttons
|
||||
{
|
||||
list-style-type: none;
|
||||
padding: 0px;
|
||||
padding-left: 96px;
|
||||
|
||||
margin: 0px;
|
||||
margin-top: 2px;
|
||||
|
||||
display: block;
|
||||
|
||||
&> li
|
||||
{
|
||||
display: inline-block;
|
||||
|
||||
border: solid 1px transparent;
|
||||
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
|
||||
padding: 10px 20px;
|
||||
|
||||
margin-bottom: -1px;
|
||||
|
||||
&:hover
|
||||
{
|
||||
.mso-radial-gradient(#c4ddfe, #e3d198);
|
||||
border-color: #99bbe8;
|
||||
}
|
||||
}
|
||||
}
|
||||
&> div.uwt-ribbon-tab-contents
|
||||
{
|
||||
&> div.uwt-ribbon-tab-content
|
||||
{
|
||||
&:not(.uwt-visible)
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&> div.uwt-ribbon-tab-group
|
||||
{
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
|
||||
height: 120px;
|
||||
margin-bottom: 4px;
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
|
||||
&> div.uwt-content
|
||||
{
|
||||
.uwt-ribbon-command, .uwt-ribbon-command-container
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
.uwt-ribbon-command
|
||||
{
|
||||
margin: 2px;
|
||||
vertical-align: top;
|
||||
div.uwt-title
|
||||
{
|
||||
padding: 2px 4px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
img
|
||||
{
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
width: 32px;
|
||||
padding: 4px;
|
||||
}
|
||||
&.uwt-button
|
||||
{
|
||||
border: solid 1px transparent;
|
||||
border-radius: 3px;
|
||||
}
|
||||
&.uwt-ribbon-hide-title > div.uwt-title
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&> div.uwt-title
|
||||
{
|
||||
min-width: 40px;
|
||||
max-width: 70px;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
&.uwt-splitbutton
|
||||
{
|
||||
&> div.uwt-button
|
||||
{
|
||||
padding: 10px 4px;
|
||||
}
|
||||
&> div.uwt-dropdown-button
|
||||
{
|
||||
padding: 2px 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.uwt-ribbon-command-container
|
||||
{
|
||||
&> .uwt-ribbon-command
|
||||
{
|
||||
display: block;
|
||||
img
|
||||
{
|
||||
width: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
&.uwt-orientation-vertical > .uwt-ribbon-command
|
||||
{
|
||||
&> img { display: inline-block; }
|
||||
&> div.uwt-title { display: inline-block; text-align: left; }
|
||||
}
|
||||
}
|
||||
}
|
||||
&> div.uwt-title
|
||||
{
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
76
src/uwt-web/common/uwt-rotaryswitch.less
Normal file
76
src/uwt-web/common/uwt-rotaryswitch.less
Normal file
@ -0,0 +1,76 @@
|
||||
@RotarySwitchSize: 128px;
|
||||
@RotarySwitchButtonSize: 16px;
|
||||
|
||||
div.uwt-rotaryswitch
|
||||
{
|
||||
position: relative;
|
||||
width: @RotarySwitchSize;
|
||||
|
||||
&> div.uwt-rotaryswitch-indicator
|
||||
{
|
||||
left: 75%;
|
||||
top: 50%;
|
||||
height: 3px;
|
||||
width: 50%;
|
||||
|
||||
position: absolute;
|
||||
transform-origin: 0px 0px;
|
||||
transition: all 0.3s;
|
||||
|
||||
margin: -4px 0px;
|
||||
}
|
||||
&> ul
|
||||
{
|
||||
background-color: #fff;
|
||||
list-style-type: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
padding: 32px;
|
||||
position: relative;
|
||||
|
||||
width: @RotarySwitchSize;
|
||||
height: @RotarySwitchSize;
|
||||
|
||||
&> li
|
||||
{
|
||||
position: absolute;
|
||||
width: @RotarySwitchSize;
|
||||
height: @RotarySwitchSize;
|
||||
pointer-events: none;
|
||||
|
||||
&> a
|
||||
{
|
||||
pointer-events: all;
|
||||
position: absolute;
|
||||
|
||||
width: @RotarySwitchButtonSize;
|
||||
height: @RotarySwitchButtonSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body:not(.uwt-javascript-disabled)
|
||||
{
|
||||
div.uwt-rotaryswitch
|
||||
{
|
||||
&> select
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
body.uwt-javascript-disabled
|
||||
{
|
||||
div.uwt-rotaryswitch
|
||||
{
|
||||
&> ul
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&> div.uwt-rotaryswitch-indicator
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
src/uwt-web/common/uwt-searchbar.less
Normal file
14
src/uwt-web/common/uwt-searchbar.less
Normal file
@ -0,0 +1,14 @@
|
||||
body, body > form
|
||||
{
|
||||
&> div.uwt-header > div.uwt-header-item.uwt-searchbar div.uwt-popup
|
||||
{
|
||||
&:not(.uwt-loading) > div.uwt-spinner
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
&.uwt-loading > div.uwt-dropdown-content
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
src/uwt-web/common/uwt-sidebar-profile.less
Normal file
9
src/uwt-web/common/uwt-sidebar-profile.less
Normal file
@ -0,0 +1,9 @@
|
||||
div.uwt-sidebar > div.uwt-sidebar-panel > div.uwt-profile-image
|
||||
{
|
||||
padding-right: 5px;
|
||||
display: inline-block;
|
||||
}
|
||||
div.uwt-sidebar > div.uwt-sidebar-panel > div.uwt-profile-image, div.uwt-sidebar > div.uwt-sidebar-panel > div.uwt-profile-details
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
46
src/uwt-web/common/uwt-sidebar.less
Normal file
46
src/uwt-web/common/uwt-sidebar.less
Normal file
@ -0,0 +1,46 @@
|
||||
div.uwt-sidebar
|
||||
{
|
||||
position: fixed;
|
||||
top: 60px;
|
||||
left: 0px;
|
||||
width: 260px;
|
||||
bottom: 0px;
|
||||
ul
|
||||
{
|
||||
list-style-type: none;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
&> li
|
||||
{
|
||||
&> ul
|
||||
{
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
&> a
|
||||
{
|
||||
display: block;
|
||||
padding-left: 5px;
|
||||
line-height: 42px;
|
||||
&:hover
|
||||
{
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
&> i.fa
|
||||
{
|
||||
display: inline-block;
|
||||
width: 45px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media print
|
||||
{
|
||||
div.uwt-sidebar
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
67
src/uwt-web/common/uwt-slider.less
Normal file
67
src/uwt-web/common/uwt-slider.less
Normal file
@ -0,0 +1,67 @@
|
||||
@uwt-slider-padding: 8px;
|
||||
|
||||
div.uwt-slider
|
||||
{
|
||||
position: relative;
|
||||
user-select: none;
|
||||
padding-top: @uwt-slider-padding;
|
||||
padding-bottom: @uwt-slider-padding;
|
||||
|
||||
&:not(.uwt-disable-animation)
|
||||
{
|
||||
&> div.uwt-slider-bar
|
||||
{
|
||||
&> div.uwt-slider-selection
|
||||
{
|
||||
transition: width 0.2s ease-in;
|
||||
}
|
||||
&> div.uwt-slider-button
|
||||
{
|
||||
transition: left 0.2s ease-in;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&> div.uwt-slider-bar
|
||||
{
|
||||
height: 2px;
|
||||
&> div.uwt-slider-selection
|
||||
{
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
width: 0px;
|
||||
height: 2px;
|
||||
}
|
||||
&> div.uwt-slider-button
|
||||
{
|
||||
border-radius: .75rem;
|
||||
width: .75rem;
|
||||
height: .75rem;
|
||||
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: @uwt-slider-padding - 5px;
|
||||
}
|
||||
}
|
||||
&.uwt-large
|
||||
{
|
||||
padding-top: @uwt-slider-padding + 8px;
|
||||
padding-bottom: @uwt-slider-padding + 8px;
|
||||
|
||||
&> div.uwt-slider-bar
|
||||
{
|
||||
height: 4px;
|
||||
&> div.uwt-slider-selection
|
||||
{
|
||||
height: 4px;
|
||||
}
|
||||
&> div.uwt-slider-button
|
||||
{
|
||||
border-radius: 30px;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
top: (@uwt-slider-padding + 8px) - 15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
src/uwt-web/common/uwt-spinbutton.less
Normal file
16
src/uwt-web/common/uwt-spinbutton.less
Normal file
@ -0,0 +1,16 @@
|
||||
div.uwt-spinbutton
|
||||
{
|
||||
&> a.uwt-button-up, &> a.uwt-button-down, &> label
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
&> label
|
||||
{
|
||||
padding-top: 16px;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
&> input
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
21
src/uwt-web/common/uwt-spinner.less
Normal file
21
src/uwt-web/common/uwt-spinner.less
Normal file
@ -0,0 +1,21 @@
|
||||
div.uwt-spinner
|
||||
{
|
||||
animation: rotation .6s infinite linear;
|
||||
}
|
||||
div#uwt-page-loading > div.uwt-spinner
|
||||
{
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
}
|
||||
@keyframes rotation
|
||||
{
|
||||
0%
|
||||
{
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100%
|
||||
{
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
32
src/uwt-web/common/uwt-splashscreen.less
Normal file
32
src/uwt-web/common/uwt-splashscreen.less
Normal file
@ -0,0 +1,32 @@
|
||||
div.uwt-splashscreen
|
||||
{
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: all 0.3s;
|
||||
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
|
||||
z-index: 5000;
|
||||
|
||||
&.uwt-visible
|
||||
{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
body.uwt-loading
|
||||
{
|
||||
cursor: wait;
|
||||
overflow: hidden;
|
||||
|
||||
&> div.uwt-splashscreen
|
||||
{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
23
src/uwt-web/common/uwt-stack.less
Normal file
23
src/uwt-web/common/uwt-stack.less
Normal file
@ -0,0 +1,23 @@
|
||||
div.uwt-stack-container
|
||||
{
|
||||
position: relative;
|
||||
&> div.uwt-stack-page
|
||||
{
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
transition: visibility 0.3s, opacity 0.3s;
|
||||
|
||||
&.uwt-visible
|
||||
{
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
75
src/uwt-web/common/uwt-switch.less
Normal file
75
src/uwt-web/common/uwt-switch.less
Normal file
@ -0,0 +1,75 @@
|
||||
label.uwt-switch
|
||||
{
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
margin-right: .75rem;
|
||||
margin-bottom: 0;
|
||||
border-radius: 60rem;
|
||||
vertical-align: middle;
|
||||
font-weight: normal;
|
||||
cursor: default;
|
||||
padding-left: 2.375rem;
|
||||
min-height: 1.375rem;
|
||||
font-size: .894rem;
|
||||
line-height: 1.4;
|
||||
input.uwt-switch-input
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
.uwt-switch-indicator::after
|
||||
{
|
||||
top: 0;
|
||||
margin: .25rem 0 0 .25rem;
|
||||
width: .875rem;
|
||||
height: .875rem;
|
||||
}
|
||||
.uwt-switch-unchecked
|
||||
{
|
||||
padding-right: .25rem;
|
||||
padding-left: 1.125rem;
|
||||
|
||||
left: 100%;
|
||||
color: transparent;
|
||||
}
|
||||
.uwt-switch-checked
|
||||
{
|
||||
left: 0;
|
||||
}
|
||||
input.uwt-switch-input:checked ~ .uwt-switch-indicator
|
||||
{
|
||||
background: #26B4FF;
|
||||
color: #FFFFFF;
|
||||
|
||||
.uwt-switch-unchecked
|
||||
{
|
||||
left: 100%;
|
||||
color: transparent;
|
||||
}
|
||||
.uwt-switch-checked
|
||||
{
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
.uwt-switch-unchecked, .uwt-switch-checked
|
||||
{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
transition-duration: .2s;
|
||||
transition-property: left, right;
|
||||
}
|
||||
}
|
||||
.uwt-switch-indicator::after
|
||||
{
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
display: block;
|
||||
border-radius: 999px;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 0 1px rgba(24,28,33,0.04),0 1px 6px rgba(24,28,33,0.09);
|
||||
transition-duration: .2s;
|
||||
transition-property: left, right, background;
|
||||
}
|
||||
89
src/uwt-web/common/uwt-tabcontainer.less
Normal file
89
src/uwt-web/common/uwt-tabcontainer.less
Normal file
@ -0,0 +1,89 @@
|
||||
div.uwt-tabcontainer
|
||||
{
|
||||
box-sizing: border-box;
|
||||
/* display: table; */
|
||||
&.uwt-expand
|
||||
{
|
||||
width: 100%;
|
||||
}
|
||||
&> ul.uwt-tabcontainer-tabs
|
||||
{
|
||||
&> li
|
||||
{
|
||||
display: none;
|
||||
margin-bottom: -1px;
|
||||
&.uwt-visible
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
&> a
|
||||
{
|
||||
text-decoration: none;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
&.uwt-visible > a
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
list-style-type: none;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
&> div.uwt-tabcontainer-tabpages
|
||||
{
|
||||
position: relative;
|
||||
&> div.uwt-tabpage
|
||||
{
|
||||
/*display: none;*/
|
||||
|
||||
/*
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
|
||||
*/
|
||||
/*
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
*/
|
||||
display: none;
|
||||
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
|
||||
padding: 10px 15px;
|
||||
&.uwt-selected
|
||||
{
|
||||
|
||||
display: block;
|
||||
/*
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
*/
|
||||
|
||||
/*display: block;*/
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.uwt-position-bottom
|
||||
{
|
||||
position: relative;
|
||||
&> ul.uwt-tabcontainer-tabs
|
||||
{
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
}
|
||||
&> ul.uwt-tabcontainer-tabpages
|
||||
{
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
32
src/uwt-web/common/uwt-textbox.less
Normal file
32
src/uwt-web/common/uwt-textbox.less
Normal file
@ -0,0 +1,32 @@
|
||||
input[type=text], input[type=password], input[type=number], input[type=search], textarea
|
||||
{
|
||||
padding: 10px;
|
||||
}
|
||||
div.uwt-textbox
|
||||
{
|
||||
&.uwt-selection-required
|
||||
{
|
||||
&> div > input
|
||||
{
|
||||
cursor: default;
|
||||
&:focus
|
||||
{
|
||||
cursor: text;
|
||||
}
|
||||
}
|
||||
}
|
||||
&> select
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
div.uwt-popup.uwt-textbox-popup
|
||||
{
|
||||
background: #ffff;
|
||||
|
||||
&> div.uwt-dropdown-content > ul.uwt-menu
|
||||
{
|
||||
max-height: 186px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
}
|
||||
63
src/uwt-web/common/uwt-tile.less
Normal file
63
src/uwt-web/common/uwt-tile.less
Normal file
@ -0,0 +1,63 @@
|
||||
div.uwt-tile-container
|
||||
{
|
||||
display: flex;
|
||||
&> div.uwt-tile
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
&:first-child
|
||||
{
|
||||
margin-right: 8px;
|
||||
}
|
||||
&+ div.uwt-tile
|
||||
{
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
&> div.uwt-header
|
||||
{
|
||||
letter-spacing: 0.1em;
|
||||
padding: 6px 10px;
|
||||
border-top-right-radius: 1px;
|
||||
border-top-left-radius: 1px;
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
font-size: 11px;
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
flex-grow: 1;
|
||||
padding: 10px 20px;
|
||||
font-weight: 300;
|
||||
font-size: 48px;
|
||||
text-align: center;
|
||||
&> small
|
||||
{
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
}
|
||||
&> div.uwt-footer
|
||||
{
|
||||
padding: 5px 10px;
|
||||
border-bottom-right-radius: 1px;
|
||||
border-bottom-left-radius: 1px;
|
||||
&> a + a
|
||||
{
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1000px)
|
||||
{
|
||||
div.uwt-tile-container
|
||||
{
|
||||
&> div.uwt-tile
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
42
src/uwt-web/common/uwt-toolbar.less
Normal file
42
src/uwt-web/common/uwt-toolbar.less
Normal file
@ -0,0 +1,42 @@
|
||||
div.uwt-toolbar
|
||||
{
|
||||
&> a
|
||||
{
|
||||
margin: 4px;
|
||||
&.uwt-button
|
||||
{
|
||||
min-width: initial;
|
||||
background: transparent;
|
||||
border-color: transparent;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
}
|
||||
&> span.uwt-separator
|
||||
{
|
||||
width: 0px;
|
||||
|
||||
display: inline-block;
|
||||
-moz-user-select: none;
|
||||
|
||||
height: 30px;
|
||||
top: -4px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
}
|
||||
@media (max-width: 600px)
|
||||
{
|
||||
div.uwt-toolbar
|
||||
{
|
||||
&> div.uwt-button
|
||||
{
|
||||
display: block;
|
||||
margin-bottom: 8px;
|
||||
|
||||
&> a
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
29
src/uwt-web/common/uwt-tooltip.less
Normal file
29
src/uwt-web/common/uwt-tooltip.less
Normal file
@ -0,0 +1,29 @@
|
||||
div.uwt-tooltip
|
||||
{
|
||||
max-width: 400px;
|
||||
padding: .25rem .5rem;
|
||||
text-align: left;
|
||||
border-radius: .25rem;
|
||||
position: fixed;
|
||||
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s;
|
||||
z-index: 1000;
|
||||
|
||||
&.uwt-visible
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&> div.uwt-title
|
||||
{
|
||||
font-weight: bold;
|
||||
padding: 8px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
&> div.uwt-content
|
||||
{
|
||||
padding: 8px;
|
||||
padding-top: 4px;
|
||||
}
|
||||
}
|
||||
31
src/uwt-web/common/uwt-treeview.less
Normal file
31
src/uwt-web/common/uwt-treeview.less
Normal file
@ -0,0 +1,31 @@
|
||||
ul.uwt-treeview, ul.uwt-treeview ul
|
||||
{
|
||||
list-style-type: none;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
padding-left: 32px;
|
||||
|
||||
li
|
||||
{
|
||||
position: relative;
|
||||
|
||||
&:not(.uwt-expanded) ul
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
&> span.uwt-treeview-item
|
||||
{
|
||||
&> span.uwt-treeview-toggler
|
||||
{
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
left: 16px;
|
||||
}
|
||||
display: block;
|
||||
padding: 8px;
|
||||
padding-left: 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
21
src/uwt-web/common/uwt-uml-diagram.less
Normal file
21
src/uwt-web/common/uwt-uml-diagram.less
Normal file
@ -0,0 +1,21 @@
|
||||
div.uwt-uml-diagram
|
||||
{
|
||||
&> div.uwt-uml-class
|
||||
{
|
||||
background-color: #ffffff;
|
||||
border: solid 1px #cccccc;
|
||||
box-shadow: 4px 4px 8px #aaaaaa;
|
||||
|
||||
display: inline-block;
|
||||
|
||||
&> div.uwt-title, &> div.uwt-content
|
||||
{
|
||||
padding: 16px;
|
||||
}
|
||||
&> div.uwt-title
|
||||
{
|
||||
border-bottom: solid 1px #cccccc;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
33
src/uwt-web/common/uwt-window.less
Normal file
33
src/uwt-web/common/uwt-window.less
Normal file
@ -0,0 +1,33 @@
|
||||
div.uwt-window
|
||||
{
|
||||
position: fixed;
|
||||
|
||||
&> div.uwt-header
|
||||
{
|
||||
-moz-user-select: none;
|
||||
&> div.uwt-controlbox
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
&> div.uwt-footer
|
||||
{
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
&.uwt-footer-hidden > div.uwt-footer
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
div.uwt-modal-background
|
||||
{
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
top: 0px;
|
||||
z-index: -1;
|
||||
}
|
||||
75
src/uwt-web/common/uwt-wunderbar.less
Normal file
75
src/uwt-web/common/uwt-wunderbar.less
Normal file
@ -0,0 +1,75 @@
|
||||
div.uwt-wunderbar
|
||||
{
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
&> div.uwt-content
|
||||
{
|
||||
position: relative;
|
||||
height: 100%;
|
||||
&> div.uwt-wunderbar-content
|
||||
{
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
&:not(.uwt-visible)
|
||||
{
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
&> div.uwt-wunderbar-buttons
|
||||
{
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
left: 0px;
|
||||
&> div.uwt-wunderbar-gripper
|
||||
{
|
||||
height: 18px;
|
||||
display: block;
|
||||
cursor: ns-resize;
|
||||
-moz-user-select: none;
|
||||
&> div.uwt-gripper
|
||||
{
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
display: block;
|
||||
width: 38px;
|
||||
}
|
||||
}
|
||||
&> div.uwt-wunderbar-overflow
|
||||
{
|
||||
height: 28px;
|
||||
}
|
||||
&> ul
|
||||
{
|
||||
list-style-type: none;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
&> li
|
||||
{
|
||||
&> a
|
||||
{
|
||||
display: block;
|
||||
|
||||
margin-top: -1px;
|
||||
margin-bottom: -1px;
|
||||
padding: 8px;
|
||||
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
div.uwt-sidebar > div.uwt-wunderbar ul li a
|
||||
{
|
||||
line-height: initial;
|
||||
}
|
||||
198
src/uwt-web/common/uwt.less
Normal file
198
src/uwt-web/common/uwt.less
Normal file
@ -0,0 +1,198 @@
|
||||
@import "uwt-actionpreviewbutton.less";
|
||||
@import "uwt-alert.less";
|
||||
@import "uwt-applicationmenu.less";
|
||||
@import "uwt-badge.less";
|
||||
@import "uwt-binaryswitch.less";
|
||||
@import "uwt-button.less";
|
||||
@import "uwt-button-group.less";
|
||||
@import "uwt-calendar.less";
|
||||
@import "uwt-checkbox.less";
|
||||
@import "uwt-column.less";
|
||||
@import "uwt-dialog.less";
|
||||
@import "uwt-disclosure.less";
|
||||
@import "uwt-expand.less";
|
||||
@import "uwt-footer.less";
|
||||
@import "uwt-formview.less";
|
||||
@import "uwt-gripper.less";
|
||||
@import "uwt-header.less";
|
||||
@import "uwt-image.less";
|
||||
@import "uwt-label.less";
|
||||
@import "uwt-layout-box.less";
|
||||
@import "uwt-listbox.less";
|
||||
@import "uwt-listview.less";
|
||||
@import "uwt-megamenu.less";
|
||||
@import "uwt-menu.less";
|
||||
@import "uwt-meter.less";
|
||||
@import "uwt-page-header.less";
|
||||
@import "uwt-page.less";
|
||||
@import "uwt-page-footer.less";
|
||||
@import "uwt-panel.less";
|
||||
@import "uwt-popup.less";
|
||||
@import "uwt-progressbar.less";
|
||||
@import "uwt-ribbon.less";
|
||||
@import "uwt-ribbon-listview.less";
|
||||
@import "uwt-rotaryswitch.less";
|
||||
@import "uwt-searchbar.less";
|
||||
@import "uwt-sidebar.less";
|
||||
@import "uwt-sidebar-profile.less";
|
||||
@import "uwt-slider.less";
|
||||
@import "uwt-spinbutton.less";
|
||||
@import "uwt-spinner.less";
|
||||
@import "uwt-splashscreen.less";
|
||||
@import "uwt-stack.less";
|
||||
@import "uwt-tabcontainer.less";
|
||||
@import "uwt-textbox.less";
|
||||
@import "uwt-tile.less";
|
||||
@import "uwt-toolbar.less";
|
||||
@import "uwt-tooltip.less";
|
||||
@import "uwt-treeview.less";
|
||||
@import "uwt-uml-diagram.less";
|
||||
@import "uwt-window.less";
|
||||
@import "uwt-wunderbar.less";
|
||||
|
||||
@import "mobile/uwt.less";
|
||||
@import "print/uwt.less";
|
||||
|
||||
@import "../fonts/awesome/css/all.less";
|
||||
|
||||
html
|
||||
{
|
||||
height: 100%;
|
||||
}
|
||||
body
|
||||
{
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
h1
|
||||
{
|
||||
font-size: 42px;
|
||||
font-weight: 300;
|
||||
}
|
||||
h1, h2, h3
|
||||
{
|
||||
font-weight: 300;
|
||||
}
|
||||
h4
|
||||
{
|
||||
font-size: 18px;
|
||||
}
|
||||
h4, h5, h6
|
||||
{
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
div.uwt-container.uwt-layout-box-horizontal
|
||||
{
|
||||
&> *
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
div.uwt-center
|
||||
{
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.linear-gradient-twostop(@start, @end)
|
||||
{
|
||||
/* Permalink - use to edit and share this gradient: https://colorzilla.com/gradient-editor/#dcfcff+0,7cc2ec+50,5bacdc+51,bcf8ff+100 */
|
||||
background: @start; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, @start 0%, @end 100%); /* FF3.6-15 */
|
||||
background: -webkit-linear-gradient(top, @start 0%,@end 100%); /* Chrome10-25,Safari5.1-6 */
|
||||
background: linear-gradient(to bottom, @start 0%,@end 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@{start}', endColorstr='@{end}',GradientType=0 ); /* IE6-9 */
|
||||
}
|
||||
.linear-gradient-fourstop(@start, @startmid, @endmid, @end)
|
||||
{
|
||||
/* Permalink - use to edit and share this gradient: https://colorzilla.com/gradient-editor/#dcfcff+0,7cc2ec+50,5bacdc+51,bcf8ff+100 */
|
||||
background: @start; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, @start 0%, @startmid 50%, @endmid 51%, @end 100%); /* FF3.6-15 */
|
||||
background: -webkit-linear-gradient(top, @start 0%,@startmid 50%,@endmid 51%,@end 100%); /* Chrome10-25,Safari5.1-6 */
|
||||
background: linear-gradient(to bottom, @start 0%,@startmid 50%,@endmid 51%,@end 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@{start}', endColorstr='@{end}',GradientType=0 ); /* IE6-9 */
|
||||
}
|
||||
.user-select(@param)
|
||||
{
|
||||
-webkit-user-select: @param;
|
||||
-moz-user-select: @param;
|
||||
-ms-user-select: @param;
|
||||
user-select: @param;
|
||||
}
|
||||
|
||||
.UwtColors()
|
||||
{
|
||||
|
||||
&.uwt-color-primary
|
||||
{
|
||||
background-color: @ThemeColorPrimaryLight;
|
||||
border-color: @ThemeColorPrimary;
|
||||
}
|
||||
&.uwt-color-info
|
||||
{
|
||||
background-color: @ThemeColorInfoLight;
|
||||
border-color: @ThemeColorInfo;
|
||||
}
|
||||
&.uwt-color-purple
|
||||
{
|
||||
background-color: @ThemeColorPurpleLight;
|
||||
border-color: @ThemeColorPurple;
|
||||
}
|
||||
&.uwt-color-indigo
|
||||
{
|
||||
background-color: @ThemeColorIndigoLight;
|
||||
border-color: @ThemeColorIndigo;
|
||||
}
|
||||
&.uwt-color-success
|
||||
{
|
||||
background-color: @ThemeColorSuccessLight;
|
||||
border-color: @ThemeColorSuccess;
|
||||
}
|
||||
&.uwt-color-green
|
||||
{
|
||||
background-color: @ThemeColorGreenLight;
|
||||
border-color: @ThemeColorGreen;
|
||||
}
|
||||
&.uwt-color-lime
|
||||
{
|
||||
background-color: @ThemeColorLimeLight;
|
||||
border-color: @ThemeColorLime;
|
||||
}
|
||||
&.uwt-color-warning
|
||||
{
|
||||
background-color: @ThemeColorWarningLight;
|
||||
border-color: @ThemeColorWarning;
|
||||
}
|
||||
&.uwt-color-yellow
|
||||
{
|
||||
background-color: @ThemeColorYellowLight;
|
||||
border-color: @ThemeColorYellow;
|
||||
}
|
||||
&.uwt-color-danger
|
||||
{
|
||||
background-color: @ThemeColorDangerLight;
|
||||
border-color: @ThemeColorDanger;
|
||||
}
|
||||
&.uwt-color-pink
|
||||
{
|
||||
background-color: @ThemeColorPinkLight;
|
||||
border-color: @ThemeColorPink;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.uwt-nonexistent
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.uwt-prevent-scrolling
|
||||
{
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
body > div.uwt-page-content
|
||||
{
|
||||
padding: 16px;
|
||||
}
|
||||
194
src/uwt-web/scripts/Base64.js
Normal file
194
src/uwt-web/scripts/Base64.js
Normal file
@ -0,0 +1,194 @@
|
||||
/*
|
||||
* $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License.
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* References:
|
||||
* http://en.wikipedia.org/wiki/Base64
|
||||
*/
|
||||
|
||||
(function(global) {
|
||||
'use strict';
|
||||
// existing version for noConflict()
|
||||
var _Base64 = global.Base64;
|
||||
var version = "2.1.9";
|
||||
// if node.js, we use Buffer
|
||||
var buffer;
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
try {
|
||||
buffer = require('buffer').Buffer;
|
||||
} catch (err) {}
|
||||
}
|
||||
// constants
|
||||
var b64chars
|
||||
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
||||
var b64tab = function(bin) {
|
||||
var t = {};
|
||||
for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
|
||||
return t;
|
||||
}(b64chars);
|
||||
var fromCharCode = String.fromCharCode;
|
||||
// encoder stuff
|
||||
var cb_utob = function(c) {
|
||||
if (c.length < 2) {
|
||||
var cc = c.charCodeAt(0);
|
||||
return cc < 0x80 ? c
|
||||
: cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
|
||||
+ fromCharCode(0x80 | (cc & 0x3f)))
|
||||
: (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
|
||||
+ fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
|
||||
+ fromCharCode(0x80 | ( cc & 0x3f)));
|
||||
} else {
|
||||
var cc = 0x10000
|
||||
+ (c.charCodeAt(0) - 0xD800) * 0x400
|
||||
+ (c.charCodeAt(1) - 0xDC00);
|
||||
return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
|
||||
+ fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
|
||||
+ fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
|
||||
+ fromCharCode(0x80 | ( cc & 0x3f)));
|
||||
}
|
||||
};
|
||||
var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
|
||||
var utob = function(u) {
|
||||
return u.replace(re_utob, cb_utob);
|
||||
};
|
||||
var cb_encode = function(ccc) {
|
||||
var padlen = [0, 2, 1][ccc.length % 3],
|
||||
ord = ccc.charCodeAt(0) << 16
|
||||
| ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
|
||||
| ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
|
||||
chars = [
|
||||
b64chars.charAt( ord >>> 18),
|
||||
b64chars.charAt((ord >>> 12) & 63),
|
||||
padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
|
||||
padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
|
||||
];
|
||||
return chars.join('');
|
||||
};
|
||||
var btoa = global.btoa ? function(b) {
|
||||
return global.btoa(b);
|
||||
} : function(b) {
|
||||
return b.replace(/[\s\S]{1,3}/g, cb_encode);
|
||||
};
|
||||
var _encode = buffer ? function (u) {
|
||||
return (u.constructor === buffer.constructor ? u : new buffer(u))
|
||||
.toString('base64')
|
||||
}
|
||||
: function (u) { return btoa(utob(u)) }
|
||||
;
|
||||
var encode = function(u, urisafe) {
|
||||
return !urisafe
|
||||
? _encode(String(u))
|
||||
: _encode(String(u)).replace(/[+\/]/g, function(m0) {
|
||||
return m0 == '+' ? '-' : '_';
|
||||
}).replace(/=/g, '');
|
||||
};
|
||||
var encodeURI = function(u) { return encode(u, true) };
|
||||
// decoder stuff
|
||||
var re_btou = new RegExp([
|
||||
'[\xC0-\xDF][\x80-\xBF]',
|
||||
'[\xE0-\xEF][\x80-\xBF]{2}',
|
||||
'[\xF0-\xF7][\x80-\xBF]{3}'
|
||||
].join('|'), 'g');
|
||||
var cb_btou = function(cccc) {
|
||||
switch(cccc.length) {
|
||||
case 4:
|
||||
var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
|
||||
| ((0x3f & cccc.charCodeAt(1)) << 12)
|
||||
| ((0x3f & cccc.charCodeAt(2)) << 6)
|
||||
| (0x3f & cccc.charCodeAt(3)),
|
||||
offset = cp - 0x10000;
|
||||
return (fromCharCode((offset >>> 10) + 0xD800)
|
||||
+ fromCharCode((offset & 0x3FF) + 0xDC00));
|
||||
case 3:
|
||||
return fromCharCode(
|
||||
((0x0f & cccc.charCodeAt(0)) << 12)
|
||||
| ((0x3f & cccc.charCodeAt(1)) << 6)
|
||||
| (0x3f & cccc.charCodeAt(2))
|
||||
);
|
||||
default:
|
||||
return fromCharCode(
|
||||
((0x1f & cccc.charCodeAt(0)) << 6)
|
||||
| (0x3f & cccc.charCodeAt(1))
|
||||
);
|
||||
}
|
||||
};
|
||||
var btou = function(b) {
|
||||
return b.replace(re_btou, cb_btou);
|
||||
};
|
||||
var cb_decode = function(cccc) {
|
||||
var len = cccc.length,
|
||||
padlen = len % 4,
|
||||
n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
|
||||
| (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
|
||||
| (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
|
||||
| (len > 3 ? b64tab[cccc.charAt(3)] : 0),
|
||||
chars = [
|
||||
fromCharCode( n >>> 16),
|
||||
fromCharCode((n >>> 8) & 0xff),
|
||||
fromCharCode( n & 0xff)
|
||||
];
|
||||
chars.length -= [0, 0, 2, 1][padlen];
|
||||
return chars.join('');
|
||||
};
|
||||
var atob = global.atob ? function(a) {
|
||||
return global.atob(a);
|
||||
} : function(a){
|
||||
return a.replace(/[\s\S]{1,4}/g, cb_decode);
|
||||
};
|
||||
var _decode = buffer ? function(a) {
|
||||
return (a.constructor === buffer.constructor
|
||||
? a : new buffer(a, 'base64')).toString();
|
||||
}
|
||||
: function(a) { return btou(atob(a)) };
|
||||
var decode = function(a){
|
||||
return _decode(
|
||||
String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
|
||||
.replace(/[^A-Za-z0-9\+\/]/g, '')
|
||||
);
|
||||
};
|
||||
var noConflict = function() {
|
||||
var Base64 = global.Base64;
|
||||
global.Base64 = _Base64;
|
||||
return Base64;
|
||||
};
|
||||
// export Base64
|
||||
global.Base64 = {
|
||||
VERSION: version,
|
||||
atob: atob,
|
||||
btoa: btoa,
|
||||
fromBase64: decode,
|
||||
toBase64: encode,
|
||||
utob: utob,
|
||||
encode: encode,
|
||||
encodeURI: encodeURI,
|
||||
btou: btou,
|
||||
decode: decode,
|
||||
noConflict: noConflict
|
||||
};
|
||||
// if ES5 is available, make Base64.extendString() available
|
||||
if (typeof Object.defineProperty === 'function') {
|
||||
var noEnum = function(v){
|
||||
return {value:v,enumerable:false,writable:true,configurable:true};
|
||||
};
|
||||
global.Base64.extendString = function () {
|
||||
Object.defineProperty(
|
||||
String.prototype, 'fromBase64', noEnum(function () {
|
||||
return decode(this)
|
||||
}));
|
||||
Object.defineProperty(
|
||||
String.prototype, 'toBase64', noEnum(function (urisafe) {
|
||||
return encode(this, urisafe)
|
||||
}));
|
||||
Object.defineProperty(
|
||||
String.prototype, 'toBase64URI', noEnum(function () {
|
||||
return encode(this, true)
|
||||
}));
|
||||
};
|
||||
}
|
||||
// that's it!
|
||||
if (global['Meteor']) {
|
||||
Base64 = global.Base64; // for normal export in Meteor.js
|
||||
}
|
||||
})(this);
|
||||
11
src/uwt-web/scripts/MousePosition.js
Normal file
11
src/uwt-web/scripts/MousePosition.js
Normal file
@ -0,0 +1,11 @@
|
||||
function MousePosition()
|
||||
{
|
||||
}
|
||||
MousePosition.X = 0;
|
||||
MousePosition.Y = 0;
|
||||
|
||||
document.addEventListener("mousemove", function(e)
|
||||
{
|
||||
MousePosition.X = e.clientX;
|
||||
MousePosition.Y = e.clientY;
|
||||
});
|
||||
13
src/uwt-web/scripts/PrependArgument.js
Normal file
13
src/uwt-web/scripts/PrependArgument.js
Normal file
@ -0,0 +1,13 @@
|
||||
Function.prototype.PrependArgument = function(arg)
|
||||
{
|
||||
var func = this;
|
||||
return function()
|
||||
{
|
||||
var newargs = [arg];
|
||||
for (var i = 0; i < arguments.length; i++)
|
||||
{
|
||||
newargs.push(arguments[i]);
|
||||
}
|
||||
return func.apply(this, newargs);
|
||||
};
|
||||
};
|
||||
895
src/uwt-web/scripts/System.js
Normal file
895
src/uwt-web/scripts/System.js
Normal file
@ -0,0 +1,895 @@
|
||||
function Clipboard()
|
||||
{
|
||||
}
|
||||
Clipboard.setText = function(value)
|
||||
{
|
||||
if ('clipboard' in navigator)
|
||||
{
|
||||
navigator.clipboard.writeText(value).then(() =>
|
||||
{
|
||||
}).catch((err) => console.error(err.name, err.message));
|
||||
}
|
||||
else
|
||||
{
|
||||
const textArea = document.createElement('textarea');
|
||||
textArea.value = value;
|
||||
textArea.style.opacity = 0;
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
try {
|
||||
const success = document.execCommand('copy');
|
||||
//console.log(`Text copy was ${success ? 'successful' : 'unsuccessful'}.`);
|
||||
} catch (err) {
|
||||
console.error(err.name, err.message);
|
||||
}
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
};
|
||||
|
||||
function StringPadDirection(value)
|
||||
{
|
||||
this._value = value;
|
||||
}
|
||||
StringPadDirection.Left = new StringPadDirection(1);
|
||||
StringPadDirection.Right = new StringPadDirection(2);
|
||||
StringPadDirection.Both = new StringPadDirection(3);
|
||||
|
||||
function StringPad(str, len, pad, dir)
|
||||
{
|
||||
if (typeof(len) == "undefined") len = 0;
|
||||
if (typeof(pad) == "undefined") pad = ' ';
|
||||
if (typeof(dir) == "undefined") dir = StringPadDirection.Right;
|
||||
|
||||
if (len + 1 >= str.length)
|
||||
{
|
||||
if (dir == StringPadDirection.Left)
|
||||
{
|
||||
str = Array(len + 1 - str.length).join(pad) + str;
|
||||
}
|
||||
else if (dir == StringPadDirection.Both)
|
||||
{
|
||||
var right = Math.ceil((padlen = len - str.length) / 2);
|
||||
var left = padlen - right;
|
||||
str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
|
||||
}
|
||||
else
|
||||
{
|
||||
str = str + Array(len + 1 - str.length).join(pad);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
String.prototype.padLeft = function(length, value)
|
||||
{
|
||||
return StringPad(this, length, value, StringPadDirection.Left);
|
||||
}
|
||||
String.prototype.padRight = function(length, value)
|
||||
{
|
||||
return StringPad(this, length, value, StringPadDirection.Right);
|
||||
}
|
||||
String.prototype.pad = function(length, value)
|
||||
{
|
||||
return StringPad(this, length, value, StringPadDirection.Both);
|
||||
}
|
||||
|
||||
/**
|
||||
* Event arguments for an event that can be canceled.
|
||||
*/
|
||||
function CancelEventArgs()
|
||||
{
|
||||
this.Cancel = false;
|
||||
}
|
||||
|
||||
function EventArgs()
|
||||
{
|
||||
}
|
||||
EventArgs.Empty = new EventArgs();
|
||||
|
||||
/**
|
||||
* Enumeration for mouse button values
|
||||
*/
|
||||
function MouseButtons()
|
||||
{
|
||||
}
|
||||
/**
|
||||
* No mouse buttons are being pressed.
|
||||
*/
|
||||
MouseButtons.None = 0;
|
||||
/**
|
||||
* The primary (usually left) button is being pressed.
|
||||
*/
|
||||
MouseButtons.Primary = 1;
|
||||
/**
|
||||
* The secondary (usually right) button is being pressed.
|
||||
*/
|
||||
MouseButtons.Secondary = 2;
|
||||
/**
|
||||
* The tertiary (usually wheel) button is being pressed.
|
||||
*/
|
||||
MouseButtons.Tertiary = 4;
|
||||
/**
|
||||
* The additional primary button is being pressed.
|
||||
*/
|
||||
MouseButtons.XButton1 = 8;
|
||||
/**
|
||||
* The additional secondary button is being pressed.
|
||||
*/
|
||||
MouseButtons.XButton2 = 16;
|
||||
|
||||
function MouseEventArgs(button, x, y)
|
||||
{
|
||||
this.Button = button;
|
||||
this.X = x;
|
||||
this.Y = y;
|
||||
this.NativeEventArgs = null;
|
||||
|
||||
this.Control = false;
|
||||
this.Alt = false;
|
||||
this.Shift = false;
|
||||
}
|
||||
|
||||
MouseEventArgs.FromNativeEventArgs = function(e)
|
||||
{
|
||||
var ee = new MouseEventArgs(0);
|
||||
ee.X = e.clientX;
|
||||
ee.Y = e.clientY;
|
||||
|
||||
ee.Control = e.ctrlKey;
|
||||
ee.Alt = e.altKey;
|
||||
ee.Shift = e.shiftKey;
|
||||
|
||||
ee.NativeEventArgs = e;
|
||||
|
||||
if (e.which)
|
||||
{
|
||||
switch (e.which)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
ee.Button |= MouseButtons.Primary;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
ee.Button |= MouseButtons.Tertiary;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
ee.Button |= MouseButtons.Secondary;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (e.button)
|
||||
{
|
||||
if ((e.button & 1) == 1) ee.Button |= MouseButtons.Primary;
|
||||
if ((e.button & 4) == 4) ee.Button |= MouseButtons.Tertiary;
|
||||
if ((e.button & 2) == 2) ee.Button |= MouseButtons.Secondary;
|
||||
}
|
||||
return ee;
|
||||
};
|
||||
function KeyboardKeys()
|
||||
{
|
||||
};
|
||||
/**
|
||||
* The TAB key.
|
||||
*/
|
||||
KeyboardKeys.Tab = 9;
|
||||
/**
|
||||
* The ENTER key.
|
||||
*/
|
||||
KeyboardKeys.Enter = 13;
|
||||
/**
|
||||
* The ESC key.
|
||||
*/
|
||||
KeyboardKeys.Escape = 27;
|
||||
/**
|
||||
* The spacebar key.
|
||||
*/
|
||||
KeyboardKeys.Space = 32;
|
||||
/**
|
||||
* The F1 function key.
|
||||
*/
|
||||
KeyboardKeys.F1 = 112;
|
||||
|
||||
KeyboardKeys.Control = 17;
|
||||
KeyboardKeys.Alt = 18;
|
||||
|
||||
KeyboardKeys.ArrowLeft = 37;
|
||||
KeyboardKeys.ArrowUp = 38;
|
||||
KeyboardKeys.ArrowRight = 39;
|
||||
KeyboardKeys.ArrowDown = 40;
|
||||
|
||||
KeyboardKeys.Meta = 91;
|
||||
KeyboardKeys.ContextMenu = 93;
|
||||
|
||||
/**
|
||||
* Enumeration for horizontal alignment values
|
||||
*/
|
||||
function HorizontalAlignment(value)
|
||||
{
|
||||
this._value = value;
|
||||
}
|
||||
/**
|
||||
* Specifies that content is aligned to the left.
|
||||
*/
|
||||
HorizontalAlignment.Left = new HorizontalAlignment(0);
|
||||
/**
|
||||
* Specifies that content is aligned in the center of the screen.
|
||||
*/
|
||||
HorizontalAlignment.Center = new HorizontalAlignment(1);
|
||||
/**
|
||||
* Specifies that content is aligned to the right.
|
||||
*/
|
||||
HorizontalAlignment.Right = new HorizontalAlignment(2);
|
||||
|
||||
/**
|
||||
* Enumeration for vertical alignment values
|
||||
*/
|
||||
function VerticalAlignment(value)
|
||||
{
|
||||
this._value = value;
|
||||
}
|
||||
/**
|
||||
* Specifies that content is aligned to the top.
|
||||
*/
|
||||
VerticalAlignment.Top = new VerticalAlignment(0);
|
||||
/**
|
||||
* Specifies that content is aligned in the middle of the screen.
|
||||
*/
|
||||
VerticalAlignment.Middle = new VerticalAlignment(1);
|
||||
/**
|
||||
* Specifies that content is aligned to the bottom.
|
||||
*/
|
||||
VerticalAlignment.Bottom = new VerticalAlignment(2);
|
||||
|
||||
function Callback(sender)
|
||||
{
|
||||
this._items = [];
|
||||
this._sender = sender;
|
||||
|
||||
this.Add = function(func)
|
||||
{
|
||||
this._items.push(func);
|
||||
};
|
||||
this.Execute = function(e)
|
||||
{
|
||||
for (var i = 0; i < this._items.length; i++)
|
||||
{
|
||||
this._items[i](this._sender, e);
|
||||
}
|
||||
};
|
||||
}
|
||||
function CallbackArgument()
|
||||
{
|
||||
}
|
||||
CallbackArgument.Empty = new CallbackArgument();
|
||||
|
||||
function Page()
|
||||
{
|
||||
}
|
||||
Page.Cookies = new Object();
|
||||
/**
|
||||
* Gets the cookie with the specified name.
|
||||
*/
|
||||
Page.Cookies.Get = function(name)
|
||||
{
|
||||
var cookie = document.cookie.split(';');
|
||||
for (var i = 0; i < cookie.length; i++)
|
||||
{
|
||||
var cookie1 = cookie[i].split(';', 2);
|
||||
if (cookie1[0] == name) return cookie1[1];
|
||||
}
|
||||
return null;
|
||||
};
|
||||
/**
|
||||
* Sets the cookie with the given name to the given value, and optionally sets an expiration date.
|
||||
* @param name string The name of the cookie to set or update.
|
||||
* @param value string The value of the cookie.
|
||||
* @param expires string The date and time at which the cookie should expire.
|
||||
*/
|
||||
Page.Cookies.Set = function(name, value, expires)
|
||||
{
|
||||
var cookie = name + "=" + value;
|
||||
if (expires)
|
||||
{
|
||||
cookie += ";expires=" + expires;
|
||||
}
|
||||
document.cookie = cookie;
|
||||
};
|
||||
|
||||
Page.Path = new Object();
|
||||
Page.Path.GetParts = function()
|
||||
{
|
||||
var p = window.location.href.substring(System.ExpandRelativePath("~/").length + 5);
|
||||
return p.split('/');
|
||||
};
|
||||
|
||||
/**
|
||||
* The Phast static members
|
||||
*/
|
||||
function System()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirects the browser to the given page.
|
||||
*/
|
||||
System.Redirect = function(path)
|
||||
{
|
||||
window.location.href = System.ExpandRelativePath(path);
|
||||
};
|
||||
/**
|
||||
* Expands the given path using the tilde (~) character and variable replacement.
|
||||
*/
|
||||
System.ExpandRelativePath = function(path)
|
||||
{
|
||||
var replpath = System.BasePath;
|
||||
if (System.IsTenantedHostingEnabled())
|
||||
{
|
||||
replpath = replpath + "/" + System.GetTenantName();
|
||||
}
|
||||
return path.replace(/~\//, replpath + "/");
|
||||
};
|
||||
/**
|
||||
* Raises a custom DOM event on the given element.
|
||||
* @param element string The element on which to raise the event.
|
||||
* @param eventName string The name of the Event to raise.
|
||||
* @param args any Arguments passed into the event handler.
|
||||
*/
|
||||
System.RaiseEvent = function(element, eventName, args)
|
||||
{
|
||||
var event; // The custom event that will be created
|
||||
if (document.createEvent)
|
||||
{
|
||||
event = document.createEvent("HTMLEvents");
|
||||
event.initEvent(eventName, true, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
event = document.createEventObject();
|
||||
event.eventType = eventName;
|
||||
}
|
||||
event.eventName = eventName;
|
||||
|
||||
if (document.createEvent)
|
||||
{
|
||||
return element.dispatchEvent(event);
|
||||
}
|
||||
else
|
||||
{
|
||||
element.fireEvent("on" + eventName, event);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Provides an event handler for custom-handled events.
|
||||
* @deprecated Use DOM events and System.RaiseEvent() instead.
|
||||
*/
|
||||
System.EventHandler = function()
|
||||
{
|
||||
this._functions = new Array();
|
||||
this.Add = function (func)
|
||||
{
|
||||
this._functions.push(func);
|
||||
};
|
||||
this.Execute = function(sender, e)
|
||||
{
|
||||
for (var i = 0; i < this._functions.length; i++)
|
||||
{
|
||||
var retval = this._functions[i](sender, e);
|
||||
if (!retval) return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
};
|
||||
System.Navigation = new Object();
|
||||
/**
|
||||
* Retrieves partial content from a URL and loads it into the specified element's innerHTML property.
|
||||
*
|
||||
* @param url string The URL to fetch.
|
||||
* @param targetFrame string The DOM element in which to load the data.
|
||||
* @param throbber DOMElement The DOM element used as the waiting indicator (optional).
|
||||
* @param throbberClassDefault string The CSS class for the waiting indicator (optional).
|
||||
* @param throbberClassHidden string The CSS class for the hidden waiting indicator (optional).
|
||||
* @param throbberClassVisible string The CSS class for the visible waiting indicator (optional).
|
||||
*/
|
||||
System.Navigation.LoadPartialContent = function(url, targetFrame, async, throbber, throbberClassDefault, throbberClassHidden, throbberClassVisible)
|
||||
{
|
||||
if (typeof(async) === "undefined") async = false;
|
||||
if (!throbberClassDefault) throbberClassDefault = "";
|
||||
if (!throbberClassHidden) throbberClassHidden = "Hidden";
|
||||
if (!throbberClassVisible) throbberClassHidden = "Visible";
|
||||
|
||||
// fetch the data from the URL, should be a same-origin URL
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function()
|
||||
{
|
||||
if (this.readyState == 4)
|
||||
{
|
||||
targetFrame.innerHTML = xhr.responseText;
|
||||
if (throbber)
|
||||
{
|
||||
var cssclass = "";
|
||||
if (throbberClassDefault) cssclass += throbberClassDefault + " ";
|
||||
if (throbberClassVisible) cssclass += throbberClassHidden;
|
||||
throbber.className = cssclass;
|
||||
}
|
||||
}
|
||||
};
|
||||
xhr.open('GET', url, async);
|
||||
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
xhr.send(null);
|
||||
|
||||
if (throbber)
|
||||
{
|
||||
var cssclass = "";
|
||||
if (throbberClassDefault) cssclass += throbberClassDefault + " ";
|
||||
if (throbberClassVisible) cssclass += throbberClassVisible;
|
||||
throbber.className = cssclass;
|
||||
}
|
||||
};
|
||||
System.TerminateIfSenderIs = function(sender, compareTo)
|
||||
{
|
||||
while (sender != null)
|
||||
{
|
||||
if (sender.classList)
|
||||
{
|
||||
for (var i = 0; i < compareTo.length; i++)
|
||||
{
|
||||
if (System.ClassList.Contains(sender, compareTo[i]))
|
||||
{
|
||||
// do not close the popup when we click inside itself
|
||||
// e.preventDefault();
|
||||
// e.stopPropagation();
|
||||
// alert(compareTo[i] + " = " + sender.className + " ? true ");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
sender = sender.parentNode;
|
||||
if (sender == null) break;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
System.CheckIfSenderIsInside = function(sender, compareTo)
|
||||
{
|
||||
while (sender != null)
|
||||
{
|
||||
if (sender === compareTo)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
sender = sender.parentNode;
|
||||
if (sender == null) break;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
/**
|
||||
* Enters full screen mode on the specified element. If no element is specified, the entire page becomes full screen.
|
||||
* @param element DOMElement The element with which to fill the screen. If not specified, document.body will be used.
|
||||
*/
|
||||
System.EnterFullScreen = function(element)
|
||||
{
|
||||
if (!element) element = document.body;
|
||||
if (element.requestFullscreen)
|
||||
{
|
||||
// The HTML5 way
|
||||
element.requestFullscreen();
|
||||
}
|
||||
else if (element.webkitRequestFullscreen)
|
||||
{
|
||||
// The WebKit (safari/chrome) way
|
||||
element.webkitRequestFullscreen();
|
||||
}
|
||||
else if (element.mozRequestFullScreen)
|
||||
{
|
||||
// The Firefox way
|
||||
element.mozRequestFullScreen();
|
||||
}
|
||||
else if (element.msRequestFullscreen)
|
||||
{
|
||||
// The Internet Explorer way
|
||||
element.msRequestFullscreen();
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Exits full screen mode.
|
||||
*/
|
||||
System.ExitFullScreen = function()
|
||||
{
|
||||
if (document.exitFullscreen)
|
||||
{
|
||||
document.exitFullscreen();
|
||||
}
|
||||
else if (document.webkitExitFullscreen)
|
||||
{
|
||||
document.webkitExitFullscreen();
|
||||
}
|
||||
else if (document.mozCancelFullScreen)
|
||||
{
|
||||
document.mozCancelFullScreen();
|
||||
}
|
||||
else if (document.msExitFullscreen)
|
||||
{
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the predefined Phast events that are passed into event handlers.
|
||||
*/
|
||||
System.Events = new Object();
|
||||
|
||||
System.Events.MouseClick = new Object();
|
||||
System.Events.MouseClick.Name = "click";
|
||||
|
||||
/**
|
||||
* The event that is raised when the mouse wheel is scrolled over an element.
|
||||
*/
|
||||
System.Events.MouseWheel = new Object();
|
||||
//FF doesn't recognize mousewheel as of FF3.x
|
||||
/**
|
||||
* Gets the name of this event.
|
||||
*/
|
||||
System.Events.MouseWheel.Name = ((/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel");
|
||||
/**
|
||||
* Gets the event arguments for this event.
|
||||
*/
|
||||
System.Events.GetEventArgs = function(e)
|
||||
{
|
||||
var delta = e.detail ? e.detail * (-120) : e.wheelDelta;
|
||||
// delta returns +120 when wheel is scrolled up, -120 when scrolled down
|
||||
var evt =
|
||||
{
|
||||
"Cancel": false,
|
||||
"Delta": delta
|
||||
};
|
||||
return evt;
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the value of the ClientProperty with the given propertyName for the control with the given controlName.
|
||||
* @param controlName string The name of the control for which to retrieve a ClientProperty.
|
||||
* @param propertyName string The name of the property to search for.
|
||||
*/
|
||||
System.GetClientProperty = function(controlName, propertyName)
|
||||
{
|
||||
return Page.Cookies.Get(controlName + "__ClientProperty_" + propertyName);
|
||||
};
|
||||
/**
|
||||
* Sets the value of the ClientProperty with the given propertyName for the control with the given controlName to the given propertyValue.
|
||||
* @param controlName string The name of the control for which to update a ClientProperty.
|
||||
* @param propertyName string The name of the property to search for.
|
||||
* @param propertyValue string The new value of the property.
|
||||
*/
|
||||
System.SetClientProperty = function(controlName, propertyName, propertyValue)
|
||||
{
|
||||
Page.Cookies.Set(controlName + "__ClientProperty_" + propertyName, propertyValue);
|
||||
};
|
||||
/**
|
||||
* Adds an event listener with the given eventTypeOrName to the parent element.
|
||||
* @param parent DOMElement The element on which to add an event listener.
|
||||
* @param eventTypeOrName string The name of the event for which to add a listener, minus the "on" prefix.
|
||||
* @param callback EventListener The event listener that will be called when this event is raised.
|
||||
*/
|
||||
System.AddEventListener = function(parent, eventTypeOrName, callback)
|
||||
{
|
||||
function CustomCallback(evt)
|
||||
{
|
||||
if (typeof eventTypeOrName.GetEventArgs !== 'undefined')
|
||||
{
|
||||
var eas = eventTypeOrName.GetEventArgs(evt);
|
||||
eas.Cancel = false;
|
||||
callback(eas);
|
||||
if (eas.Cancel)
|
||||
{
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var eas = evt;
|
||||
eas.Cancel = false;
|
||||
callback(eas);
|
||||
if (eas.Cancel)
|
||||
{
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (typeof eventTypeOrName !== "object")
|
||||
{
|
||||
if (parent.attachEvent)
|
||||
{
|
||||
//if IE (and Opera depending on user setting)
|
||||
parent.attachEvent("on" + eventTypeOrName, callback);
|
||||
}
|
||||
else if (parent.addEventListener) //WC3 browsers
|
||||
{
|
||||
parent.addEventListener(eventTypeOrName, callback, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (parent.attachEvent)
|
||||
{
|
||||
//if IE (and Opera depending on user setting)
|
||||
parent.attachEvent("on" + eventTypeOrName.Name, CustomCallback);
|
||||
}
|
||||
else if (parent.addEventListener) //WC3 browsers
|
||||
{
|
||||
parent.addEventListener(eventTypeOrName.Name, CustomCallback, false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
System.ClassList =
|
||||
{
|
||||
"Add": function (object, className)
|
||||
{
|
||||
if (object.classList && object.classList.add)
|
||||
{
|
||||
object.classList.add(className);
|
||||
return true;
|
||||
}
|
||||
|
||||
var splits = object.className.split(" ");
|
||||
for (var i = 0; i < splits.length; i++)
|
||||
{
|
||||
if (splits[i] == className) return true;
|
||||
}
|
||||
splits.push(className);
|
||||
object.className = splits.join(" ");
|
||||
return false;
|
||||
},
|
||||
"Remove": function (object, className)
|
||||
{
|
||||
if (object.classList && object.classList.remove)
|
||||
{
|
||||
object.classList.remove(className);
|
||||
return true;
|
||||
}
|
||||
|
||||
var splits = object.className.split(" ");
|
||||
var newsplits = new Array();
|
||||
for (var i = 0; i < splits.length; i++)
|
||||
{
|
||||
if (splits[i] == className) continue;
|
||||
newsplits.push(splits[i]);
|
||||
}
|
||||
object.className = newsplits.join(" ");
|
||||
return false;
|
||||
},
|
||||
"Contains": function (object, className)
|
||||
{
|
||||
if (object.classList && object.classList.contains)
|
||||
{
|
||||
return object.classList.contains(className);
|
||||
}
|
||||
|
||||
if (!object.className) return false;
|
||||
|
||||
var splits = object.className.split(" ");
|
||||
for (var i = 0; i < splits.length; i++)
|
||||
{
|
||||
if (splits[i] == className) return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
"Toggle": function (object, className)
|
||||
{
|
||||
if (System.ClassList.Contains(object, className))
|
||||
{
|
||||
System.ClassList.Remove(object, className);
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Add(object, className);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
System.StringMethods =
|
||||
{
|
||||
"Contains": function(string, value)
|
||||
{
|
||||
if (string.includes) return string.includes(value);
|
||||
if (string.contains) return string.contains(value);
|
||||
|
||||
console.error("Neither String.includes nor String.contains were found");
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
var WebPage =
|
||||
{
|
||||
"Postback": function(url)
|
||||
{
|
||||
var WebPageForm = document.getElementById("WebPageForm");
|
||||
if (url)
|
||||
{
|
||||
// Set the action of the WebPageForm to the specified PostBackURL before submitting
|
||||
WebPageForm.action = url;
|
||||
}
|
||||
if (!WebPageForm)
|
||||
{
|
||||
console.warn("WebPage.Postback: could not find WebPageForm, postbacks are not enabled");
|
||||
return;
|
||||
}
|
||||
WebPageForm.submit();
|
||||
},
|
||||
"IsVariableDefined": function(name)
|
||||
{
|
||||
var txtWebPageVariable = document.getElementById("WebPageVariable_" + name + "_Value");
|
||||
if (!txtWebPageVariable) return false;
|
||||
return true;
|
||||
},
|
||||
"IsVariableSet": function(name)
|
||||
{
|
||||
var txtWebPageVariable_IsSet = document.getElementById("WebPageVariable_" + name + "_IsSet");
|
||||
if (!txtWebPageVariable_IsSet)
|
||||
{
|
||||
console.warn("WebPage.IsVariableSet: undefined variable '" + name + "'");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
"ClearVariableValue": function(name, value)
|
||||
{
|
||||
var txtWebPageVariable = document.getElementById("WebPageVariable_" + name + "_Value");
|
||||
var txtWebPageVariable_IsSet = document.getElementById("WebPageVariable_" + name + "_IsSet");
|
||||
if (!txtWebPageVariable || !txtWebPageVariable_IsSet)
|
||||
{
|
||||
console.error("WebPage.ClearVariableValue: undefined variable '" + name + "'");
|
||||
return false;
|
||||
}
|
||||
txtWebPageVariable_IsSet.value = "false";
|
||||
txtWebPageVariable.value = "";
|
||||
|
||||
WebPage.Postback();
|
||||
return true;
|
||||
},
|
||||
"GetVariableValue": function(name)
|
||||
{
|
||||
var txtWebPageVariable = document.getElementById("WebPageVariable_" + name + "_Value");
|
||||
if (!txtWebPageVariable)
|
||||
{
|
||||
console.error("WebPage.GetVariableValue: undefined variable '" + name + "'");
|
||||
return null;
|
||||
}
|
||||
return txtWebPageVariable.value;
|
||||
},
|
||||
"SetVariableValue": function(name, value, autoPostback)
|
||||
{
|
||||
var txtWebPageVariable = document.getElementById("WebPageVariable_" + name + "_Value");
|
||||
var txtWebPageVariable_IsSet = document.getElementById("WebPageVariable_" + name + "_IsSet");
|
||||
if (!txtWebPageVariable || !txtWebPageVariable_IsSet)
|
||||
{
|
||||
console.error("WebPage.GetVariableValue: undefined variable '" + name + "'");
|
||||
return false;
|
||||
}
|
||||
txtWebPageVariable_IsSet.value = "true";
|
||||
txtWebPageVariable.value = value;
|
||||
|
||||
if (autoPostback !== false)
|
||||
{
|
||||
WebPage.Postback();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Provide the XMLHttpRequest constructor for Internet Explorer 5.x-6.x:
|
||||
Other browsers (including Internet Explorer 7.x-9.x) do not redefine
|
||||
XMLHttpRequest if it already exists.
|
||||
|
||||
This example is based on findings at:
|
||||
http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx
|
||||
*/
|
||||
if (typeof XMLHttpRequest === "undefined")
|
||||
{
|
||||
XMLHttpRequest = function ()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new ActiveXObject("Msxml2.XMLHTTP.6.0");
|
||||
}
|
||||
catch (e) {}
|
||||
try
|
||||
{
|
||||
return new ActiveXObject("Msxml2.XMLHTTP.3.0");
|
||||
}
|
||||
catch (e) {}
|
||||
try
|
||||
{
|
||||
return new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
catch (e) {}
|
||||
console.log("This browser does not support XMLHttpRequest.");
|
||||
};
|
||||
}
|
||||
|
||||
if (!String.format)
|
||||
{
|
||||
String.format = function() {
|
||||
var args = arguments;
|
||||
return args[0].replace(/{(\d+)}/g, function(match, number) {
|
||||
return typeof args[parseInt(number) + 1] != 'undefined'
|
||||
? args[parseInt(number) + 1]
|
||||
: match
|
||||
;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
System.AddEventListener(window, "load", function()
|
||||
{
|
||||
System.ClassList.Remove(document.body, "uwt-javascript-disabled");
|
||||
});
|
||||
|
||||
System.EnsureElementVisible = function(element, relativeToElement)
|
||||
{
|
||||
var buttonRect = null;
|
||||
if (relativeToElement !== null)
|
||||
{
|
||||
buttonRect = relativeToElement.getBoundingClientRect();
|
||||
|
||||
console.log ("button rect: ");
|
||||
console.log(buttonRect);
|
||||
|
||||
var previewRect = element.getBoundingClientRect();
|
||||
console.log ("preview rect: ");
|
||||
console.log(previewRect);
|
||||
|
||||
element.style.top = buttonRect.bottom + "px";
|
||||
element.style.left = buttonRect.right + "px";
|
||||
|
||||
var offsetBottom = element.offsetTop + previewRect.height;
|
||||
console.log ("popup bottom: " + offsetBottom);
|
||||
console.log ("document height: " + document.body.clientHeight);
|
||||
|
||||
element.style.left = buttonRect.right + "px";
|
||||
if (offsetBottom > document.body.clientHeight)
|
||||
{
|
||||
element.style.top = "";
|
||||
element.style.bottom = (document.body.clientHeight - buttonRect.top) + "px";
|
||||
}
|
||||
else
|
||||
{
|
||||
element.style.top = buttonRect.bottom + "px";
|
||||
element.style.bottom = "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var previewRect = element.getBoundingClientRect();
|
||||
console.log ("preview rect: ");
|
||||
console.log(previewRect);
|
||||
|
||||
var offsetTop = element.offsetTop;
|
||||
var offsetBottom = element.offsetTop + previewRect.height;
|
||||
console.log ("popup bottom: " + offsetBottom);
|
||||
console.log ("document height: " + document.body.clientHeight);
|
||||
|
||||
if (offsetBottom > document.body.clientHeight)
|
||||
{
|
||||
var newBottom = document.body.clientHeight - offsetTop; // (offsetBottom - document.body.clientHeight);
|
||||
console.log("new bottom: " + newBottom + "px")
|
||||
element.style.top = "";
|
||||
element.style.bottom = newBottom + "px";
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
};
|
||||
34
src/uwt-web/scripts/WindowDimensions.js
Normal file
34
src/uwt-web/scripts/WindowDimensions.js
Normal file
@ -0,0 +1,34 @@
|
||||
window.GetWidth = function()
|
||||
{
|
||||
var x = 0;
|
||||
if (self.innerHeight)
|
||||
{
|
||||
x = self.innerWidth;
|
||||
}
|
||||
else if (document.documentElement && document.documentElement.clientHeight)
|
||||
{
|
||||
x = document.documentElement.clientWidth;
|
||||
}
|
||||
else if (document.body)
|
||||
{
|
||||
x = document.body.clientWidth;
|
||||
}
|
||||
return x;
|
||||
};
|
||||
window.GetHeight = function()
|
||||
{
|
||||
var y = 0;
|
||||
if (self.innerHeight)
|
||||
{
|
||||
y = self.innerHeight;
|
||||
}
|
||||
else if (document.documentElement && document.documentElement.clientHeight)
|
||||
{
|
||||
y = document.documentElement.clientHeight;
|
||||
}
|
||||
else if (document.body)
|
||||
{
|
||||
y = document.body.clientHeight;
|
||||
}
|
||||
return y;
|
||||
}
|
||||
173
src/uwt-web/scripts/controls/AdditionalDetailWidget.js
Normal file
173
src/uwt-web/scripts/controls/AdditionalDetailWidget.js
Normal file
@ -0,0 +1,173 @@
|
||||
function AdditionalDetailWidget(parent)
|
||||
{
|
||||
this.Parent = parent;
|
||||
this.Parent.addEventListener("transitionend", function(e)
|
||||
{
|
||||
if (!System.ClassList.Contains(this, "apb-selected"))
|
||||
{
|
||||
System.ClassList.Remove(document.body, "uwt-prevent-scrolling");
|
||||
}
|
||||
});
|
||||
|
||||
this.InitializePopupLocation = function()
|
||||
{
|
||||
this.PreviewElement.style.top = "";
|
||||
this.PreviewElement.style.left = "";
|
||||
this.PreviewElement.style.position = "fixed";
|
||||
};
|
||||
this.UpdatePopupLocation = function()
|
||||
{
|
||||
this.InitializePopupLocation();
|
||||
|
||||
if (System.ClassList.Contains(this.PreviewElement, "uwt-loading"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
System.EnsureElementVisible(this.PreviewElement, this.ButtonLink);
|
||||
};
|
||||
|
||||
this.Show = function ()
|
||||
{
|
||||
System.ClassList.Add(document.body, "uwt-prevent-scrolling");
|
||||
this.UpdatePopupLocation();
|
||||
|
||||
this.OnOpening();
|
||||
System.ClassList.Add(this.Parent, "apb-selected");
|
||||
};
|
||||
this.Hide = function ()
|
||||
{
|
||||
System.ClassList.Remove(document.body, "uwt-prevent-scrolling");
|
||||
System.ClassList.Remove(this.Parent, "apb-selected");
|
||||
};
|
||||
this.Toggle = function ()
|
||||
{
|
||||
if (!System.ClassList.Contains(this.Parent, "apb-selected"))
|
||||
{
|
||||
this.OnOpening();
|
||||
}
|
||||
System.ClassList.Toggle(this.Parent, "apb-selected");
|
||||
};
|
||||
|
||||
this.OnOpening = function()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
if (parent.children[0].tagName === "IMG")
|
||||
{
|
||||
this.IconElement = parent.children[0];
|
||||
this.TextLink = parent.children[1];
|
||||
this.ButtonLink = parent.children[2];
|
||||
this.PreviewElement = parent.children[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
this.IconElement = null;
|
||||
this.TextLink = parent.children[0];
|
||||
this.ButtonLink = parent.children[1];
|
||||
this.PreviewElement = parent.children[2];
|
||||
}
|
||||
|
||||
// aria
|
||||
this.TextLink.NativeObject = this;
|
||||
this.TextLink.addEventListener("keydown", function(e)
|
||||
{
|
||||
if (e.keyCode == 9)
|
||||
{
|
||||
if (!e.shiftKey)
|
||||
{
|
||||
this.focusIndex = 1;
|
||||
// tab
|
||||
this.NativeObject.ButtonLink.tabIndex = -1;
|
||||
this.NativeObject.ButtonLink.focus();
|
||||
console.log("focused");
|
||||
console.log(this.NativeObject.ButtonLink);
|
||||
|
||||
// just.. eat it!
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.TextLink.NativeObject = this;
|
||||
this.TextLink.addEventListener("focus", function(e)
|
||||
{
|
||||
if (e.relatedTarget !== null)
|
||||
{
|
||||
var pos = this.compareDocumentPosition(e.relatedTarget);
|
||||
if (pos == Node.DOCUMENT_POSITION_FOLLOWING && e.relatedTarget !== this.NativeObject.ButtonLink)
|
||||
{
|
||||
this.NativeObject.ButtonLink.focus();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.ButtonLink.NativeObject = this;
|
||||
this.ButtonLink.addEventListener("click", function (e)
|
||||
{
|
||||
if (e.which == MouseButtons.Primary)
|
||||
{
|
||||
this.NativeObject.Show();
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
this.ButtonLink.addEventListener("keydown", function (e)
|
||||
{
|
||||
if (e.keyCode == 13 || e.keyCode == 32) // enter or space
|
||||
{
|
||||
this.NativeObject.Toggle();
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
// console.log("keydown on button"); console.log(e);
|
||||
});
|
||||
}
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-actionpreviewbutton");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new AdditionalDetailWidget(items[i]);
|
||||
}
|
||||
});
|
||||
window.addEventListener("mousedown", function (e)
|
||||
{
|
||||
var sender = null;
|
||||
if (!e) e = window.event;
|
||||
if (e.target)
|
||||
{
|
||||
sender = e.target;
|
||||
}
|
||||
else if (e.srcElement)
|
||||
{
|
||||
sender = e.srcElement;
|
||||
}
|
||||
if (!System.TerminateIfSenderIs(sender, ["uwt-actionpreviewbutton"]))
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-actionpreviewbutton");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject.Hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
window.addEventListener("keydown", function (e)
|
||||
{
|
||||
if (e.keyCode == 27)
|
||||
{
|
||||
// cancel all APBs if they are open
|
||||
var items = document.getElementsByClassName("uwt-actionpreviewbutton");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject.Hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
210
src/uwt-web/scripts/controls/Alert.js
Normal file
210
src/uwt-web/scripts/controls/Alert.js
Normal file
@ -0,0 +1,210 @@
|
||||
function Alert(parentElement)
|
||||
{
|
||||
if (parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.IconElement = this.ParentElement.children[0];
|
||||
System.ClassList.Remove(this.ParentElement, "uwt-disabled");
|
||||
|
||||
if (this.IconElement != null)
|
||||
{
|
||||
this.IconElement.NativeObject = this;
|
||||
this.IconElement.addEventListener("click", function()
|
||||
{
|
||||
if (System.ClassList.Contains(this.NativeObject.ParentElement, "uwt-collapsible"))
|
||||
{
|
||||
System.ClassList.Toggle(this.NativeObject.ParentElement, "uwt-collapsed");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
this.mvarID = "";
|
||||
this.setID = function(value)
|
||||
{
|
||||
this.mvarID = value;
|
||||
};
|
||||
this.getID = function()
|
||||
{
|
||||
return this.mvarID;
|
||||
};
|
||||
|
||||
this.mvarTitle = "";
|
||||
this.setTitle = function(value)
|
||||
{
|
||||
this.mvarTitle = value;
|
||||
};
|
||||
this.getTitle = function()
|
||||
{
|
||||
return this.mvarTitle;
|
||||
}
|
||||
|
||||
this.mvarContent = "";
|
||||
this.setContent = function(value)
|
||||
{
|
||||
this.mvarContent = value;
|
||||
};
|
||||
this.getContent = function()
|
||||
{
|
||||
return this.mvarContent;
|
||||
};
|
||||
|
||||
this.mvarCssClass = "";
|
||||
this.setCssClass = function(value)
|
||||
{
|
||||
this.mvarCssClass = value;
|
||||
};
|
||||
this.getCssClass = function()
|
||||
{
|
||||
return this.mvarCssClass;
|
||||
};
|
||||
|
||||
this.mvarTimeout = -1;
|
||||
this.setTimeout = function(value)
|
||||
{
|
||||
this.mvarTimeout = value;
|
||||
}
|
||||
this.getTimeout = function()
|
||||
{
|
||||
return this.mvarTimeout;
|
||||
};
|
||||
|
||||
this.mvarParentElement = null;
|
||||
this.show = function(timeoutInMilliseconds)
|
||||
{
|
||||
//!FIXME: this needs to track which alerts have timeouts, and cancel them if they are re-shown
|
||||
var element = null;
|
||||
if (this.mvarID != "")
|
||||
{
|
||||
var existing = document.getElementById("uwt_alert__" + this.mvarID);
|
||||
if (typeof(existing) !== "undefined")
|
||||
{
|
||||
element = existing;
|
||||
}
|
||||
}
|
||||
if (element === null)
|
||||
{
|
||||
element = document.createElement("div");
|
||||
}
|
||||
element.innerHTML = "";
|
||||
|
||||
if (this.mvarID != "")
|
||||
{
|
||||
element.id = "uwt_alert__" + this.mvarID;
|
||||
}
|
||||
|
||||
var cssClass = "uwt-alert";
|
||||
if (this.getCssClass() != "") cssClass += " " + this.getCssClass();
|
||||
element.className = cssClass;
|
||||
element.ObjectReference = this;
|
||||
|
||||
element.addEventListener("click", function(e)
|
||||
{
|
||||
this.ObjectReference.hide();
|
||||
});
|
||||
|
||||
this.mvarParentElement = element;
|
||||
|
||||
var elemTitle = document.createElement("div");
|
||||
elemTitle.className = "uwt-title";
|
||||
elemTitle.innerHTML = this.getTitle();
|
||||
element.appendChild(elemTitle);
|
||||
|
||||
var elemContent = document.createElement("div");
|
||||
elemContent.className = "uwt-content";
|
||||
elemContent.innerHTML = this.getContent();
|
||||
element.appendChild(elemContent);
|
||||
|
||||
|
||||
if (Alert.AlertContainer === null)
|
||||
{
|
||||
Alert.AlertContainer = document.createElement("div");
|
||||
Alert.AlertContainer.className = "uwt-alert-container";
|
||||
document.body.appendChild(Alert.AlertContainer);
|
||||
}
|
||||
Alert.AlertContainer.appendChild(element);
|
||||
cssClass += " uwt-visible";
|
||||
|
||||
// timeout required to see the transition when first adding the element to the page
|
||||
window.setTimeout(function()
|
||||
{
|
||||
element.className = cssClass;
|
||||
}, 50);
|
||||
|
||||
if (typeof(timeoutInMilliseconds) !== "undefined")
|
||||
{
|
||||
window.setTimeout(function(sender)
|
||||
{
|
||||
sender.hide();
|
||||
}, timeoutInMilliseconds, this);
|
||||
}
|
||||
else if (typeof(this.mvarTimeout) !== "undefined")
|
||||
{
|
||||
window.setTimeout(function(sender)
|
||||
{
|
||||
sender.hide();
|
||||
}, this.mvarTimeout, this);
|
||||
}
|
||||
};
|
||||
this.hide = function()
|
||||
{
|
||||
System.ClassList.Remove(this.mvarParentElement, "uwt-visible");
|
||||
};
|
||||
}
|
||||
|
||||
Alert.AlertContainer = null;
|
||||
|
||||
Alert.show = function(content, title, cssClass, timeoutInMilliseconds, id)
|
||||
{
|
||||
var n = new Alert();
|
||||
if (typeof(id) !== "undefined")
|
||||
{
|
||||
n.setID(id);
|
||||
}
|
||||
|
||||
if (typeof(content) === "undefined")
|
||||
{
|
||||
console.warn("showing notification with empty content");
|
||||
content = "";
|
||||
}
|
||||
n.setContent(content);
|
||||
|
||||
if (typeof(title) === "undefined")
|
||||
{
|
||||
console.warn("showing notification with empty title");
|
||||
title = "";
|
||||
}
|
||||
n.setTitle(title);
|
||||
|
||||
if (typeof(cssClass) === "undefined") cssClass = "";
|
||||
n.setCssClass(cssClass);
|
||||
|
||||
if (typeof(timeoutInMilliseconds) !== "undefined")
|
||||
{
|
||||
n.setTimeout(timeoutInMilliseconds);
|
||||
}
|
||||
|
||||
n.show();
|
||||
};
|
||||
|
||||
window.addEventListener("load", function()
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-alert");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new Alert(items[i]);
|
||||
}
|
||||
|
||||
window.setTimeout(function()
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-alert");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
if (!System.ClassList.Contains(items[i], "uwt-alert-sticky"))
|
||||
{
|
||||
items[i].style.right = "-2000px";
|
||||
}
|
||||
}
|
||||
}, 5000);
|
||||
|
||||
});
|
||||
47
src/uwt-web/scripts/controls/BinarySwitch.js
Normal file
47
src/uwt-web/scripts/controls/BinarySwitch.js
Normal file
@ -0,0 +1,47 @@
|
||||
function BinarySwitch(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.SwitchesElement = this.ParentElement.children[0];
|
||||
this.InputElement = this.ParentElement.children[1];
|
||||
|
||||
var switches = this.SwitchesElement.children;
|
||||
for (var i = 0; i < switches.length; i++)
|
||||
{
|
||||
switches[i].__BinarySwitch = this;
|
||||
switches[i].addEventListener("change", function(e)
|
||||
{
|
||||
this.__BinarySwitch.update();
|
||||
}, true);
|
||||
}
|
||||
|
||||
this.update = function()
|
||||
{
|
||||
var value = 0;
|
||||
var switches = this.SwitchesElement.children;
|
||||
for (var i = 0; i < switches.length; i++)
|
||||
{
|
||||
if (System.ClassList.Contains(switches[i], "uwt-selected"))
|
||||
{
|
||||
if (this.ParentElement.getAttribute("data-endianness") == "little")
|
||||
{
|
||||
value += (2 ** (switches.length - i - 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
value += (2 ** i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.InputElement.value = value;
|
||||
};
|
||||
}
|
||||
|
||||
window.addEventListener("load", function()
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-binaryswitch");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new BinarySwitch(items[i]);
|
||||
}
|
||||
});
|
||||
86
src/uwt-web/scripts/controls/Button.js
Normal file
86
src/uwt-web/scripts/controls/Button.js
Normal file
@ -0,0 +1,86 @@
|
||||
function Button(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
|
||||
if (this.ParentElement.tagName == "A")
|
||||
{
|
||||
console.log(parentElement);
|
||||
this.ParentElement.addEventListener("click", function(e)
|
||||
{
|
||||
if (System.ClassList.Contains(this, "uwt-toggle"))
|
||||
{
|
||||
System.ClassList.Toggle(this, "uwt-selected");
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
/*
|
||||
|
||||
this.ButtonElement = this.ParentElement.children[0];
|
||||
this.ButtonElement.NativeObject = this;
|
||||
|
||||
this.DropDownButtonElement = this.ParentElement.children[1];
|
||||
this.DropDownButtonElement.NativeObject = this;
|
||||
|
||||
this.DropDownContentElement = this.ParentElement.children[2];
|
||||
|
||||
this.getDropDownOpened = function()
|
||||
{
|
||||
return System.ClassList.Contains(this.DropDownContentElement, "Visible");
|
||||
};
|
||||
this.setDropDownOpened = function(value)
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
System.ClassList.Add(this.DropDownContentElement, "Visible");
|
||||
if (this.ParentElement.getAttribute("data-pwt-dropdown-direction") == "right")
|
||||
{
|
||||
this.DropDownContentElement.style.left = (this.ParentElement.offsetLeft - this.ParentElement.offsetWidth) + "px";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Remove(this.DropDownContentElement, "Visible");
|
||||
}
|
||||
};
|
||||
this.toggleDropDownOpened = function()
|
||||
{
|
||||
this.setDropDownOpened(!this.getDropDownOpened());
|
||||
};
|
||||
|
||||
this.isDropDownRequired = function()
|
||||
{
|
||||
return System.ClassList.Contains(this.ParentElement, "pwt-DropDownRequired");
|
||||
}
|
||||
|
||||
this.ButtonElement.addEventListener("click", function(e)
|
||||
{
|
||||
if (this.NativeObject.isDropDownRequired())
|
||||
{
|
||||
this.NativeObject.setDropDownOpened(true);
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
this.DropDownButtonElement.addEventListener("click", function(e)
|
||||
{
|
||||
this.NativeObject.setDropDownOpened(true);
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
*/
|
||||
}
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-button");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
// if (items[i].tagName.toLowerCase() != "div") continue;
|
||||
items[i].NativeObject = new Button(items[i]);
|
||||
}
|
||||
});
|
||||
113
src/uwt-web/scripts/controls/CheckBox.js
Normal file
113
src/uwt-web/scripts/controls/CheckBox.js
Normal file
@ -0,0 +1,113 @@
|
||||
function CheckBox(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
|
||||
this.mvarChecked = parentElement.hasAttribute("checked");
|
||||
this.SetChecked = function(value)
|
||||
{
|
||||
var changed = (this.GetChecked() != value);
|
||||
|
||||
this.mvarChecked = value;
|
||||
this.ParentElement.checked = this.mvarChecked;
|
||||
if (this.mvarChecked)
|
||||
{
|
||||
this.NewParentElement.className = "uwt-checkbox uwt-checked";
|
||||
}
|
||||
else
|
||||
{
|
||||
this.NewParentElement.className = "uwt-checkbox";
|
||||
}
|
||||
|
||||
if (!changed) return;
|
||||
|
||||
if (!this.__inhibit_update)
|
||||
{
|
||||
System.RaiseEvent(this.ParentElement, "change", null);
|
||||
}
|
||||
}
|
||||
this.GetChecked = function()
|
||||
{
|
||||
return this.mvarChecked;
|
||||
}
|
||||
this.ToggleChecked = function()
|
||||
{
|
||||
this.SetChecked(!this.GetChecked());
|
||||
}
|
||||
|
||||
var child = document.createElement("div");
|
||||
child.className = "uwt-checkbox";
|
||||
child.tabIndex = 0;
|
||||
child.NativeObject = this;
|
||||
child.addEventListener("click", function(e)
|
||||
{
|
||||
this.NativeObject.ToggleChecked();
|
||||
});
|
||||
child.addEventListener("keydown", function(e)
|
||||
{
|
||||
if (e.keyCode === KeyboardKeys.Space)
|
||||
{
|
||||
this.NativeObject.ToggleChecked();
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
var fa = document.createElement("i");
|
||||
fa.className = "fa fa-check";
|
||||
child.appendChild(fa);
|
||||
|
||||
parentElement.style.display = "none";
|
||||
parentElement.parentNode.insertBefore(child, parentElement);
|
||||
|
||||
this.NewParentElement = child;
|
||||
parentElement.NativeObject = this;
|
||||
parentElement.NativeObject.__inhibit_update = false;
|
||||
parentElement.addEventListener("change", function(e)
|
||||
{
|
||||
if (!this.NativeObject.__inhibit_update)
|
||||
{
|
||||
this.NativeObject.__inhibit_update = true;
|
||||
this.NativeObject.SetChecked(this.checked);
|
||||
this.NativeObject.__inhibit_update = false;
|
||||
}
|
||||
/*
|
||||
if (this.hasAttribute("checked"))
|
||||
{
|
||||
System.ClassList.Add(this.NativeObject.ParentElement, "uwt-checked");
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Remove(this.NativeObject.ParentElement, "uwt-checked");
|
||||
}
|
||||
*/
|
||||
});
|
||||
this.SetChecked(parentElement.checked);
|
||||
}
|
||||
function RadioButton(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
}
|
||||
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByTagName("input");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
if (items[i].attributes["type"] != null)
|
||||
{
|
||||
switch (items[i].attributes["type"].value)
|
||||
{
|
||||
case "checkbox":
|
||||
{
|
||||
items[i].NativeObject = new CheckBox(items[i]);
|
||||
break;
|
||||
}
|
||||
case "radio":
|
||||
{
|
||||
items[i].NativeObject = new RadioButton(items[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
14
src/uwt-web/scripts/controls/CodeEditor.js
Normal file
14
src/uwt-web/scripts/controls/CodeEditor.js
Normal file
@ -0,0 +1,14 @@
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var CodeEditors = document.getElementsByTagName("textarea");
|
||||
for(var i = 0; i < CodeEditors.length; i++)
|
||||
{
|
||||
if (CodeEditors[i].className == "CodeEditor")
|
||||
{
|
||||
CodeEditors[i].NativeEditor = CodeMirror.fromTextArea(CodeEditors[i],
|
||||
{
|
||||
mode: CodeEditors[i].attributes["data-mode"].value
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
82
src/uwt-web/scripts/controls/CommandBar.js
Normal file
82
src/uwt-web/scripts/controls/CommandBar.js
Normal file
@ -0,0 +1,82 @@
|
||||
function CommandBarItem(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
parentElement.addEventListener("click", function(e)
|
||||
{
|
||||
parentElement.className = "CommandBarItem Selected";
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
parentElement.addEventListener("mousemove", function(e)
|
||||
{
|
||||
var selected = false;
|
||||
for (var i = 0; i < parentElement.parentNode.childNodes.length; i++)
|
||||
{
|
||||
if (parentElement.parentNode.childNodes[i].className == "CommandBarItem Selected")
|
||||
{
|
||||
selected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (selected)
|
||||
{
|
||||
for (var i = 0; i < parentElement.parentNode.childNodes.length; i++)
|
||||
{
|
||||
parentElement.parentNode.childNodes[i].className = "CommandBarItem";
|
||||
}
|
||||
parentElement.className = "CommandBarItem Selected";
|
||||
}
|
||||
});
|
||||
}
|
||||
function CommandBar(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
var items = parentElement.childNodes;
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new CommandBarItem(items[i]);
|
||||
}
|
||||
}
|
||||
function CommandBarContainer(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
|
||||
var items = parentElement.childNodes;
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new CommandBar(items[i]);
|
||||
}
|
||||
|
||||
parentElement.addEventListener("contextmenu", function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("CommandBarContainer");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new CommandBarContainer(items[i]);
|
||||
}
|
||||
});
|
||||
window.addEventListener("click", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("CommandBarContainer");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
var items1 = items[i].childNodes;
|
||||
for (var j = 0; j < items1.length; j++)
|
||||
{
|
||||
var items2 = items1[j].childNodes;
|
||||
for (var k = 0; k < items2.length; k++)
|
||||
{
|
||||
items2[k].className = "CommandBarItem";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
171
src/uwt-web/scripts/controls/Countdown.js
Normal file
171
src/uwt-web/scripts/controls/Countdown.js
Normal file
@ -0,0 +1,171 @@
|
||||
function Countdown(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.ParentElement.addEventListener("contextmenu", function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
|
||||
this.mvarTargetYear = parentElement.getAttribute("data-target-year");
|
||||
this.get_TargetYear = function() { return this.mvarTargetYear; };
|
||||
this.set_TargetYear = function(value) { this.mvarTargetYear = value; };
|
||||
|
||||
this.mvarTargetMonth = parentElement.getAttribute("data-target-month");
|
||||
this.get_TargetMonth = function() { return this.mvarTargetMonth; };
|
||||
this.set_TargetMonth = function(value) { this.mvarTargetMonth = value; };
|
||||
|
||||
this.mvarTargetDay = parentElement.getAttribute("data-target-day");
|
||||
this.get_TargetDay = function() { return this.mvarTargetDay; };
|
||||
this.set_TargetDay = function(value) { this.mvarTargetDay = value; };
|
||||
|
||||
this.mvarTargetHour = parentElement.getAttribute("data-target-hour");
|
||||
this.get_TargetHour = function() { return this.mvarTargetHour; };
|
||||
this.set_TargetHour = function(value) { this.mvarTargetHour = value; };
|
||||
|
||||
this.mvarTargetMinute = parentElement.getAttribute("data-target-minute");
|
||||
this.get_TargetMinute = function() { return this.mvarTargetMinute; };
|
||||
this.set_TargetMinute = function(value) { this.mvarTargetMinute = value; };
|
||||
|
||||
this.mvarTargetSecond = parentElement.getAttribute("data-target-second");
|
||||
this.get_TargetSecond = function() { return this.mvarTargetSecond; };
|
||||
this.set_TargetSecond = function(value) { this.mvarTargetSecond = value; };
|
||||
|
||||
this.get_Year = function()
|
||||
{
|
||||
return parseInt(this.ParentElement.children[0].children[0].innerHTML);
|
||||
};
|
||||
this.set_Year = function(value)
|
||||
{
|
||||
this.ParentElement.children[0].children[0].innerHTML = value.toString();
|
||||
};
|
||||
this.get_Month = function()
|
||||
{
|
||||
return parseInt(this.ParentElement.children[1].children[0].innerHTML);
|
||||
};
|
||||
this.set_Month = function(value)
|
||||
{
|
||||
this.ParentElement.children[1].children[0].innerHTML = value.toString();
|
||||
};
|
||||
this.get_Day = function()
|
||||
{
|
||||
return parseInt(this.ParentElement.children[2].children[0].innerHTML);
|
||||
};
|
||||
this.set_Day = function(value)
|
||||
{
|
||||
this.ParentElement.children[2].children[0].innerHTML = value.toString();
|
||||
};
|
||||
this.get_Hour = function()
|
||||
{
|
||||
return parseInt(this.ParentElement.children[3].children[0].innerHTML);
|
||||
};
|
||||
this.set_Hour = function(value)
|
||||
{
|
||||
this.ParentElement.children[3].children[0].innerHTML = value.toString();
|
||||
};
|
||||
this.get_Minute = function()
|
||||
{
|
||||
return parseInt(this.ParentElement.children[4].children[0].innerHTML);
|
||||
};
|
||||
this.set_Minute = function(value)
|
||||
{
|
||||
this.ParentElement.children[4].children[0].innerHTML = value.toString();
|
||||
};
|
||||
this.get_Second = function()
|
||||
{
|
||||
return parseInt(this.ParentElement.children[5].children[0].innerHTML);
|
||||
};
|
||||
this.set_Second = function(value)
|
||||
{
|
||||
this.ParentElement.children[5].children[0].innerHTML = value.toString();
|
||||
};
|
||||
|
||||
var thiss = this;
|
||||
this._timer = null;
|
||||
this._timer_Tick = function()
|
||||
{
|
||||
if (thiss.get_Second() == 0)
|
||||
{
|
||||
if (thiss.get_Minute() == 0)
|
||||
{
|
||||
if (thiss.get_Hour() == 0)
|
||||
{
|
||||
if (thiss.get_Day() == 0)
|
||||
{
|
||||
if (thiss.get_Month() == 0)
|
||||
{
|
||||
if (thiss.get_Year() == 0)
|
||||
{
|
||||
// everything is 0 so we can stop
|
||||
thiss.Stop();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
thiss.set_Year(thiss.get_Year() - 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
thiss.set_Month(thiss.get_Month() - 1);
|
||||
}
|
||||
|
||||
// TODO: figure out how many days are left for this month... probably using target date
|
||||
thiss.set_Day(31);
|
||||
}
|
||||
else
|
||||
{
|
||||
thiss.set_Day(thiss.get_Day() - 1);
|
||||
}
|
||||
thiss.set_Hour(23);
|
||||
}
|
||||
else
|
||||
{
|
||||
thiss.set_Hour(thiss.get_Hour() - 1);
|
||||
}
|
||||
thiss.set_Minute(59);
|
||||
}
|
||||
else
|
||||
{
|
||||
thiss.set_Minute(thiss.get_Minute() - 1);
|
||||
}
|
||||
thiss.set_Second(59);
|
||||
}
|
||||
else
|
||||
{
|
||||
thiss.set_Second(thiss.get_Second() - 1);
|
||||
}
|
||||
thiss._timer = window.setTimeout(thiss._timer_Tick, 1000);
|
||||
};
|
||||
|
||||
this.Stop = function()
|
||||
{
|
||||
if (this._timer == null) return;
|
||||
window.clearTimeout(this._timer);
|
||||
};
|
||||
this.Start = function()
|
||||
{
|
||||
this._timer = window.setTimeout(this._timer_Tick, 1000);
|
||||
};
|
||||
|
||||
var date = new Date();
|
||||
var targetDate = new Date(this.get_TargetYear(), this.get_TargetMonth(), this.get_TargetDay(), this.get_TargetHour(), this.get_TargetMinute(), this.get_TargetSecond());
|
||||
|
||||
this.set_Year(targetDate.getFullYear() - date.getFullYear());
|
||||
this.set_Month((targetDate.getMonth() - date.getMonth()) + 1);
|
||||
this.set_Day(targetDate.getDate() - date.getDate());
|
||||
this.set_Hour(date.getHours() - targetDate.getHours());
|
||||
this.set_Minute(date.getMinutes() - targetDate.getMinutes());
|
||||
this.set_Second(date.getSeconds() - targetDate.getSeconds());
|
||||
|
||||
this.Start();
|
||||
}
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("Countdown");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new Countdown(items[i]);
|
||||
}
|
||||
});
|
||||
41
src/uwt-web/scripts/controls/Disclosure.js
Normal file
41
src/uwt-web/scripts/controls/Disclosure.js
Normal file
@ -0,0 +1,41 @@
|
||||
function Disclosure(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.TitleElement = this.ParentElement.children[0];
|
||||
this.TitleElement.NativeObject = this;
|
||||
this.TitleElement.addEventListener("click", function(e)
|
||||
{
|
||||
this.NativeObject.toggleExpanded();
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
|
||||
this.getExpanded = function()
|
||||
{
|
||||
return System.ClassList.Contains(this.ParentElement, "uwt-expanded");
|
||||
};
|
||||
this.setExpanded = function(value)
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
System.ClassList.Add(this.ParentElement, "uwt-expanded");
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Remove(this.ParentElement, "uwt-expanded");
|
||||
}
|
||||
};
|
||||
this.toggleExpanded = function()
|
||||
{
|
||||
this.setExpanded(!this.getExpanded());
|
||||
};
|
||||
}
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-disclosure");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new Disclosure(items[i]);
|
||||
}
|
||||
});
|
||||
440
src/uwt-web/scripts/controls/DropDown.js
Normal file
440
src/uwt-web/scripts/controls/DropDown.js
Normal file
@ -0,0 +1,440 @@
|
||||
function DropDownWrapper(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.ParentContainer = this.ParentElement.parentElement;
|
||||
this.SelectElement = this.ParentElement;
|
||||
|
||||
this.ShowPopupMenu = function()
|
||||
{
|
||||
for (var i = 0; i < this.SelectElement.options.length; i++)
|
||||
{
|
||||
if (this.InputElement.value == "" || this.SelectElement.options[i].label.toLowerCase().indexOf(this.InputElement.value.toLowerCase()) != -1)
|
||||
{
|
||||
System.ClassList.Add(this.SelectElement.options[i].li, "uwt-visible");
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Remove(this.SelectElement.options[i].li, "uwt-visible");
|
||||
}
|
||||
}
|
||||
System.ClassList.Add(this.MenuElement, "uwt-visible");
|
||||
};
|
||||
this.HidePopupMenu = function()
|
||||
{
|
||||
System.ClassList.Remove(this.MenuElement, "uwt-visible");
|
||||
};
|
||||
|
||||
var div = document.createElement("div");
|
||||
div.className = "uwt-combobox";
|
||||
div.ni = this;
|
||||
div.tabIndex = 0;
|
||||
|
||||
this.ParentElement.replaceWith(div);
|
||||
div.appendChild(this.SelectElement);
|
||||
|
||||
var input = document.createElement("input");
|
||||
input.id = this.SelectElement.id + "_input";
|
||||
|
||||
input.ni = this;
|
||||
input.type = "text";
|
||||
input.addEventListener("focus", function()
|
||||
{
|
||||
this.ni.InputElement._prev_value = this.ni.InputElement.value;
|
||||
this.ni.InputElement.value = "";
|
||||
this.ni.ShowPopupMenu();
|
||||
});
|
||||
input.addEventListener("blur", function()
|
||||
{
|
||||
this.ni.InputElement.value = this.ni.InputElement._prev_value;
|
||||
if (!this.ni.SelectElement.hasAttribute("multiple"))
|
||||
{
|
||||
this.ni.HidePopupMenu();
|
||||
}
|
||||
});
|
||||
input.addEventListener("keydown", function(e)
|
||||
{
|
||||
if (e.keyCode == KeyboardKeys.Enter)
|
||||
{
|
||||
this.__accepted = true;
|
||||
//this.ni.SetValue(this.ni.GetHighlightedOption().value);
|
||||
this.ni.HidePopupMenu();
|
||||
this.parentElement.focus();
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
input.addEventListener("keyup", function(e)
|
||||
{
|
||||
if (this.__accepted == true)
|
||||
{
|
||||
this.__accepted = false;
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
if (e.keyCode == KeyboardKeys.Escape)
|
||||
{
|
||||
this.ni.HidePopupMenu();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ni.ShowPopupMenu();
|
||||
}
|
||||
});
|
||||
div.appendChild(input);
|
||||
this.InputElement = input;
|
||||
|
||||
var ul = document.createElement("ul");
|
||||
this.MenuElement = ul;
|
||||
ul.className = "uwt-menu uwt-popup";
|
||||
for (var i = 0; i < this.SelectElement.options.length; i++)
|
||||
{
|
||||
var li = document.createElement("li");
|
||||
li.className = "uwt-menu-item uwt-menu-item-command uwt-visible";
|
||||
this.SelectElement.options[i].li = li;
|
||||
|
||||
var a = document.createElement("a");
|
||||
a.href = "#";
|
||||
|
||||
var spanTitle = document.createElement("span");
|
||||
spanTitle.className = "uwt-title";
|
||||
spanTitle.innerHTML = this.SelectElement.options[i].label;
|
||||
a.appendChild(spanTitle);
|
||||
|
||||
var spanDescription = document.createElement("span");
|
||||
spanDescription.className = "uwt-description";
|
||||
spanDescription.innerHTML = "";
|
||||
a.appendChild(spanDescription);
|
||||
|
||||
if (this.SelectElement.options[i].hasAttribute("data-description"))
|
||||
{
|
||||
spanDescription.innerHTML = this.SelectElement.options[i].getAttribute("data-description");
|
||||
}
|
||||
a.option = this.SelectElement.options[i];
|
||||
a.ni = this;
|
||||
a.addEventListener("click", function()
|
||||
{
|
||||
this.ni.InputElement.value = this.option.label;
|
||||
|
||||
if (this.ni.SelectElement.hasAttribute("multiple"))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ni.SelectElement.value = this.option.value;
|
||||
|
||||
for (var j = 0; j < this.ni.MenuElement.children.length; j++)
|
||||
{
|
||||
if (this.ni.MenuElement.children[j].children[0] == this)
|
||||
{
|
||||
System.ClassList.Add(this.ni.MenuElement.children[j], "uwt-selected");
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Remove(this.ni.MenuElement.children[j], "uwt-selected");
|
||||
}
|
||||
}
|
||||
System.ClassList.Remove(this.ni.MenuElement, "uwt-visible");
|
||||
}
|
||||
});
|
||||
li.appendChild(a);
|
||||
|
||||
|
||||
if (i == this.SelectElement.selectedIndex)
|
||||
{
|
||||
this.InputElement.value = a.option.label;
|
||||
System.ClassList.Add(li, "uwt-selected");
|
||||
}
|
||||
|
||||
ul.appendChild(li);
|
||||
}
|
||||
div.appendChild(ul);
|
||||
|
||||
this.ParentElement.style.display = "none";
|
||||
}
|
||||
|
||||
function DropDown(id)
|
||||
{
|
||||
this.ID = id;
|
||||
this.IsOpen = false;
|
||||
|
||||
var Container = document.getElementById("DropDown_" + id);
|
||||
Container.Parent = this;
|
||||
if (Container.className == "DropDown SelectionRequired")
|
||||
{
|
||||
Container.onmousedown = function(e)
|
||||
{
|
||||
if (e.button == 0)
|
||||
{
|
||||
// open the dropdown
|
||||
if (this.Parent.IsOpen)
|
||||
{
|
||||
this.Parent.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Parent.Open();
|
||||
}
|
||||
}
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
};
|
||||
Container.onmouseup = function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
Container.oncontextmenu = function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
var Button = document.getElementById("DropDown_" + id + "_Button");
|
||||
Button.Parent = this;
|
||||
Button.onmousedown = function(e)
|
||||
{
|
||||
if (e.button == 0)
|
||||
{
|
||||
// open the dropdown
|
||||
if (this.Parent.IsOpen)
|
||||
{
|
||||
this.Parent.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Parent.Open();
|
||||
}
|
||||
}
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
};
|
||||
Button.onmouseup = function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
|
||||
var ItemList_Items = document.getElementById("DropDown_" + id + "_ItemList_Items");
|
||||
ItemList_Items.Parent = this;
|
||||
ItemList_Items.onmousedown = function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
};
|
||||
ItemList_Items.oncontextmenu = function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
|
||||
var Search = document.getElementById("DropDown_" + id + "_ItemList_Search");
|
||||
Search.onmousedown = function(e)
|
||||
{
|
||||
// e.preventDefault();
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
this.Select = function(index)
|
||||
{
|
||||
// Selects the item with the specified index.
|
||||
var dd_Text = document.getElementById("DropDown_" + this.ID + "_Text");
|
||||
var dd_Input = document.getElementById("DropDown_" + this.ID + "_Input");
|
||||
|
||||
var menuItemsContainer = document.getElementById("DropDown_" + this.ID + "_ItemList_Items");
|
||||
var menuItems = menuItemsContainer.getElementsByTagName("A");
|
||||
var menuItem = menuItems[index];
|
||||
|
||||
if (dd_Text)
|
||||
{
|
||||
dd_Text.innerHTML = menuItem.innerHTML;
|
||||
}
|
||||
else if (dd_Input)
|
||||
{
|
||||
dd_Input.value = menuItem.innerHTML;
|
||||
dd_Input.focus();
|
||||
dd_Input.select();
|
||||
}
|
||||
};
|
||||
this.Open = function()
|
||||
{
|
||||
DropDown.CloseAll();
|
||||
|
||||
var dd = document.getElementById("DropDown_" + this.ID);
|
||||
var dd_Button = document.getElementById("DropDown_" + this.ID + "_Button");
|
||||
var dd_DropDown = document.getElementById("DropDown_" + this.ID + "_ItemList");
|
||||
var dd_ItemList_Search = document.getElementById("DropDown_" + this.ID + "_ItemList_Search");
|
||||
var dd_Text = document.getElementById("DropDown_" + this.ID + "_Text");
|
||||
var dd_Input = document.getElementById("DropDown_" + this.ID + "_Input");
|
||||
|
||||
if (dd.className == "DropDown SelectionRequired")
|
||||
{
|
||||
dd.className = "DropDown SelectionRequired Opened";
|
||||
}
|
||||
else if (dd.className == "DropDown")
|
||||
{
|
||||
dd.className = "DropDown Opened";
|
||||
}
|
||||
|
||||
dd_DropDown.style.width = dd.offsetWidth + "px";
|
||||
|
||||
dd_Button.className = "Button Pressed";
|
||||
|
||||
dd_ItemList_Search.focus();
|
||||
dd_ItemList_Search.value = "";
|
||||
this.UpdateFilter();
|
||||
|
||||
dd_DropDown.style.display = "block";
|
||||
|
||||
this.IsOpen = true;
|
||||
|
||||
if (dd_Input) dd_Input.select();
|
||||
/*
|
||||
if (dd_Input)
|
||||
{
|
||||
dd_ItemList_Search.value = dd_Input.value;
|
||||
}
|
||||
else if (dd_Text)
|
||||
{
|
||||
dd_ItemList_Search.value = dd_Text.innerHTML;
|
||||
}
|
||||
dd_ItemList_Search.select();
|
||||
*/
|
||||
};
|
||||
this.Close = function()
|
||||
{
|
||||
var dd = document.getElementById("DropDown_" + this.ID);
|
||||
var dd_Button = document.getElementById("DropDown_" + this.ID + "_Button");
|
||||
var dd_DropDown = document.getElementById("DropDown_" + this.ID + "_ItemList");
|
||||
|
||||
if (dd.className == "DropDown SelectionRequired Opened")
|
||||
{
|
||||
dd.className = "DropDown SelectionRequired";
|
||||
}
|
||||
else if (dd.className == "DropDown Opened")
|
||||
{
|
||||
dd.className = "DropDown";
|
||||
}
|
||||
|
||||
dd_DropDown.style.width = dd.offsetWidth;
|
||||
|
||||
dd_Button.className = "Button";
|
||||
|
||||
dd_DropDown.style.display = "none";
|
||||
|
||||
this.IsOpen = false;
|
||||
};
|
||||
|
||||
// go through and initialize all of the links in the menu items, for menu items that are already created
|
||||
var menuItemsContainer = document.getElementById("DropDown_" + this.ID + "_ItemList_Items");
|
||||
var menuItems = menuItemsContainer.getElementsByTagName("A");
|
||||
for (var i = 0; i < menuItems.length; i++)
|
||||
{
|
||||
menuItems[i].Index = i;
|
||||
menuItems[i].Parent = this;
|
||||
menuItems[i].onmousedown = function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
menuItems[i].onmouseup = function(e)
|
||||
{
|
||||
if (e.button == 0)
|
||||
{
|
||||
this.Parent.Select(this.Index);
|
||||
this.Parent.Close();
|
||||
}
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
menuItems[i].oncontextmenu = function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
this.UpdateFilter = function()
|
||||
{
|
||||
var dd_Search = document.getElementById("DropDown_" + this.ID + "_ItemList_Search");
|
||||
// filter the text in the text box
|
||||
var menuItemsContainer = document.getElementById("DropDown_" + this.ID + "_ItemList_Items");
|
||||
var menuItems = menuItemsContainer.getElementsByTagName("A");
|
||||
for (var i = 0; i < menuItems.length; i++)
|
||||
{
|
||||
if (dd_Search.value == "" || menuItems[i].innerHTML.toLowerCase().indexOf(dd_Search.value.toLowerCase()) != -1)
|
||||
{
|
||||
menuItems[i].style.display = "block";
|
||||
}
|
||||
else
|
||||
{
|
||||
menuItems[i].style.display = "none";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// set up the search text box
|
||||
var dd_Search = document.getElementById("DropDown_" + this.ID + "_ItemList_Search");
|
||||
dd_Search.Parent = this;
|
||||
dd_Search.onkeyup = function()
|
||||
{
|
||||
this.Parent.UpdateFilter();
|
||||
};
|
||||
}
|
||||
DropDown.CloseAll = function()
|
||||
{
|
||||
var dropdowns = document.getElementsByClassName("DropDown");
|
||||
for (var i = 0; i < dropdowns.length; i++)
|
||||
{
|
||||
dropdowns[i].Parent.Close();
|
||||
}
|
||||
};
|
||||
|
||||
// add a global hook to close all the dropdown lists when the mouse button is pressed
|
||||
document.addEventListener("mousedown", function(e)
|
||||
{
|
||||
DropDown.CloseAll();
|
||||
});
|
||||
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
/*
|
||||
// find DropDownButtons to trigger
|
||||
var dropdowns = document.getElementsByClassName("DropDownButton");
|
||||
for (var i = 0; i < dropdowns.length; i++)
|
||||
{
|
||||
(function(index)
|
||||
{
|
||||
dropdowns[index].addEventListener("mousedown", function(ee)
|
||||
{
|
||||
if (dropdowns[index].className == "DropDownButton")
|
||||
{
|
||||
dropdowns[index].className = "DropDownButton Opened";
|
||||
}
|
||||
else if (dropdowns[index].className == "DropDownButton Opened")
|
||||
{
|
||||
dropdowns[index].className = "DropDownButton";
|
||||
}
|
||||
});
|
||||
})(i);
|
||||
}
|
||||
|
||||
*/
|
||||
// retrofit SELECT elements
|
||||
var selects = document.getElementsByTagName("SELECT");
|
||||
for (var i = 0; i < selects.length; i++)
|
||||
{
|
||||
selects[i].NativeObject = new DropDownWrapper(selects[i]);
|
||||
}
|
||||
});
|
||||
54
src/uwt-web/scripts/controls/FlyoutTabContainer.js
Normal file
54
src/uwt-web/scripts/controls/FlyoutTabContainer.js
Normal file
@ -0,0 +1,54 @@
|
||||
function FlyoutTabContainer(id)
|
||||
{
|
||||
this.ID = id;
|
||||
this.ToggleItem = function(itemID)
|
||||
{
|
||||
var tab = document.getElementById("FlyoutTabContainer_" + this.ID + "_" + itemID + "_Tab");
|
||||
var content = document.getElementById("FlyoutTabContainer_" + this.ID + "_" + itemID + "_Content");
|
||||
|
||||
if (tab == null)
|
||||
{
|
||||
console.log("FlyoutTabContainer: nonexistent tab '" + itemID + "' on container '" + this.ID + "'");
|
||||
return;
|
||||
}
|
||||
if (content == null)
|
||||
{
|
||||
console.log("FlyoutTabContainer: nonexistent content '" + itemID + "' on container '" + this.ID + "'");
|
||||
return;
|
||||
}
|
||||
|
||||
var parent = tab.parentNode;
|
||||
if (tab.className == "FlyoutTab Active")
|
||||
{
|
||||
tab.className = "FlyoutTab";
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var i = 0; i < parent.childNodes.length; i++)
|
||||
{
|
||||
if (parent.childNodes[i].className == "FlyoutTab Active" && parent.childNodes[i] != tab);
|
||||
{
|
||||
parent.childNodes[i].className = "FlyoutTab";
|
||||
}
|
||||
}
|
||||
tab.className = "FlyoutTab Active";
|
||||
}
|
||||
|
||||
parent = content.parentNode;
|
||||
if (content.className == "FlyoutTabContent Active")
|
||||
{
|
||||
content.className = "FlyoutTabContent";
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var i = 0; i < parent.childNodes.length; i++)
|
||||
{
|
||||
if (parent.childNodes[i].className == "FlyoutTabContent Active" && parent.childNodes[i] != content);
|
||||
{
|
||||
parent.childNodes[i].className = "FlyoutTabContent";
|
||||
}
|
||||
}
|
||||
content.className = "FlyoutTabContent Active";
|
||||
}
|
||||
};
|
||||
}
|
||||
5
src/uwt-web/scripts/controls/LinkButton.js
Normal file
5
src/uwt-web/scripts/controls/LinkButton.js
Normal file
@ -0,0 +1,5 @@
|
||||
function LinkButton(id)
|
||||
{
|
||||
this.ID = id;
|
||||
this.PopupMenu = new Popup(id + "_menu");
|
||||
}
|
||||
643
src/uwt-web/scripts/controls/ListView.js
Normal file
643
src/uwt-web/scripts/controls/ListView.js
Normal file
@ -0,0 +1,643 @@
|
||||
var ListViewMode =
|
||||
{
|
||||
"Detail": 1,
|
||||
"Tile": 2
|
||||
};
|
||||
function ListViewItemActivationMode(value)
|
||||
{
|
||||
this._value = value;
|
||||
}
|
||||
ListViewItemActivationMode.SingleClick = new ListViewItemActivationMode(1);
|
||||
ListViewItemActivationMode.DoubleClick = new ListViewItemActivationMode(2);
|
||||
|
||||
function ListViewColumnResizer(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
|
||||
for (var i = 0; i < this.ParentElement.parentNode.children.length; i++)
|
||||
{
|
||||
if (this.ParentElement.parentNode.children[i] == this.ParentElement)
|
||||
{
|
||||
this.ParentElement.parentNode.children[i].index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.ParentElement.addEventListener("mousedown", function(e)
|
||||
{
|
||||
ListViewColumnResizer._moving = true;
|
||||
this._prevX = e.clientX;
|
||||
this._prevWidth = this.parentNode.children[this.index - 1].clientWidth;
|
||||
ListViewColumnResizer._current = this;
|
||||
|
||||
// document.body.style.cursor = "ew-resize";
|
||||
e.preventDefault();
|
||||
});
|
||||
}
|
||||
ListViewColumnResizer._moving = false;
|
||||
ListViewColumnResizer._current = null;
|
||||
|
||||
window.addEventListener("mousemove", function(e)
|
||||
{
|
||||
if (ListViewColumnResizer._moving)
|
||||
{
|
||||
var lvcr = ListViewColumnResizer._current;
|
||||
var w = lvcr._prevWidth + (e.clientX - lvcr._prevX);
|
||||
lvcr.parentNode.children[lvcr.index - 1].style.width = w.toString() + "px";
|
||||
}
|
||||
});
|
||||
window.addEventListener("mouseup", function(e)
|
||||
{
|
||||
ListViewColumnResizer._moving = false;
|
||||
});
|
||||
|
||||
function ListViewItemColumn(parentItem)
|
||||
{
|
||||
this.mvarParentItem = parentItem;
|
||||
this.get_ParentItem = function()
|
||||
{
|
||||
return this.mvarParentItem;
|
||||
};
|
||||
|
||||
this.get_Value = function()
|
||||
{
|
||||
};
|
||||
}
|
||||
function ListViewItem(parentListView, index)
|
||||
{
|
||||
this.mvarParentListView = parentListView;
|
||||
this.get_ParentListView = function()
|
||||
{
|
||||
return this.mvarParentListView;
|
||||
};
|
||||
|
||||
this.mvarParentElement = parentListView.ItemsElement.children[index];
|
||||
this.mvarParentElement.addEventListener("mousedown", function(e)
|
||||
{
|
||||
if (e.buttons == 1 || !System.ClassList.Contains(this, "uwt-selected"))
|
||||
{
|
||||
if (!e.ctrlKey)
|
||||
{
|
||||
for (var i = 0; i < this.parentElement.children.length; i++)
|
||||
{
|
||||
System.ClassList.Remove(this.parentElement.children[i], "uwt-selected");
|
||||
}
|
||||
}
|
||||
System.ClassList.Add(this, "uwt-selected");
|
||||
}
|
||||
});
|
||||
|
||||
this.mvarIndex = index;
|
||||
this.get_Index = function()
|
||||
{
|
||||
return this.mvarIndex;
|
||||
};
|
||||
|
||||
this.get_ParentElement = function()
|
||||
{
|
||||
return this.get_ParentListView().ItemsElement.children[this.get_Index()];
|
||||
};
|
||||
|
||||
this.get_Value = function()
|
||||
{
|
||||
return this.get_ParentElement().getAttribute("data-value");
|
||||
};
|
||||
}
|
||||
function ListViewColumn()
|
||||
{
|
||||
this.Title = null;
|
||||
this.ItemTemplate = null;
|
||||
}
|
||||
function ListView(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.ContentElement = this.ParentElement.children[1];
|
||||
|
||||
this.ColumnHeaderElement = this.ContentElement.children[0];
|
||||
//this.EmptyMessageElement = this.ContentElement.children[1];
|
||||
this.ItemsElement = this.ContentElement.children[1];
|
||||
|
||||
for (var i = 0; i < this.ItemsElement.children.length; i++)
|
||||
{
|
||||
this.ItemsElement.children[i].NativeObject = new ListViewItem(this, i);
|
||||
}
|
||||
|
||||
/*
|
||||
this.AddRemoveColumnHeaderElement = this.ColumnHeaderElement.children[0];
|
||||
this.AddRemoveColumnHeaderAddColumnButton = this.AddRemoveColumnHeaderElement.children[0];
|
||||
|
||||
this.AddRemoveColumnHeaderAddColumnButton.NativeObject = this;
|
||||
this.AddRemoveColumnHeaderAddColumnButton.addEventListener("click", function(e)
|
||||
{
|
||||
this.NativeObject.InsertRowAfter(-1);
|
||||
});
|
||||
*/
|
||||
|
||||
/**
|
||||
* Inserts a row after the row at the specified index.
|
||||
*/
|
||||
this.InsertRowAfter = function(index)
|
||||
{
|
||||
var rw = document.createElement("div");
|
||||
rw.className = "ListViewItem";
|
||||
|
||||
var col = document.createElement("div");
|
||||
col.className = "ListViewItemColumn AddRemoveRowItemColumn";
|
||||
|
||||
var aAdd = document.createElement("a");
|
||||
aAdd.className = "Add";
|
||||
col.appendChild(aAdd);
|
||||
|
||||
var aRemove = document.createElement("a");
|
||||
aRemove.className = "Remove";
|
||||
col.appendChild(aRemove);
|
||||
|
||||
rw.appendChild(col);
|
||||
|
||||
for (var i = 0; i < this.Columns.Count(); i++)
|
||||
{
|
||||
var column = this.Columns.GetByIndex(i);
|
||||
var col = document.createElement("div");
|
||||
col.className = "ListViewItemColumn";
|
||||
|
||||
col.innerHTML = column.ItemTemplate;
|
||||
|
||||
if (col.children.length > 0)
|
||||
{
|
||||
col.children[0].id = "ListView_" + this.ParentElement.id + "_Rows_" + this.ItemsElement.children.length + "_Columns_" + column.ID + "_Value";
|
||||
}
|
||||
|
||||
rw.appendChild(col);
|
||||
}
|
||||
|
||||
if ((index + 1) > this.ItemsElement.children.length)
|
||||
{
|
||||
this.ItemsElement.appendChild(rw);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ItemsElement.insertBefore(rw, this.ItemsElement.children[index + 1]);
|
||||
}
|
||||
this.Refresh();
|
||||
};
|
||||
|
||||
this.Refresh = function()
|
||||
{
|
||||
if (this.Rows.Count() > 0)
|
||||
{
|
||||
System.ClassList.Remove(this.ParentElement, "Empty");
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Add(this.ParentElement, "Empty");
|
||||
}
|
||||
|
||||
for (var i = 0; i < this.ColumnHeaderElement.children.length; i++)
|
||||
{
|
||||
if (this.ColumnHeaderElement.children[i].className == "ColumnResizer")
|
||||
{
|
||||
this.ColumnHeaderElement.children[i].NativeObject = new ListViewColumnResizer(this.ColumnHeaderElement.children[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < this.ItemsElement.children.length; i++)
|
||||
{
|
||||
var row = this.ItemsElement.children[i];
|
||||
|
||||
row.m_Index = i;
|
||||
/*
|
||||
var AddRemoveRowItemColumnElement = row.children[0];
|
||||
var AddRowButton = AddRemoveRowItemColumnElement.children[0];
|
||||
if (AddRowButton)
|
||||
{
|
||||
AddRowButton.m_Index = i;
|
||||
}
|
||||
|
||||
var RemoveRowButton = AddRemoveRowItemColumnElement.children[1];
|
||||
if (RemoveRowButton)
|
||||
{
|
||||
RemoveRowButton.m_Index = i;
|
||||
}
|
||||
*/
|
||||
|
||||
// if it has already been processed, skip it
|
||||
if (row.NativeObject) continue;
|
||||
|
||||
row.NativeObject = this;
|
||||
|
||||
/*
|
||||
if (AddRowButton)
|
||||
{
|
||||
AddRowButton.NativeObject = this;
|
||||
AddRowButton.addEventListener("click", function(e)
|
||||
{
|
||||
this.NativeObject.InsertRowAfter(this.m_Index);
|
||||
});
|
||||
}
|
||||
if (RemoveRowButton)
|
||||
{
|
||||
RemoveRowButton.NativeObject = this;
|
||||
RemoveRowButton.addEventListener("click", function(e)
|
||||
{
|
||||
this.NativeObject.Rows.RemoveAt(this.m_Index);
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
row.addEventListener("mousedown", function(e)
|
||||
{
|
||||
if (e.ctrlKey && System.ClassList.Contains(this.NativeObject.ParentElement, "MultiSelect"))
|
||||
{
|
||||
this.NativeObject.SelectedRows.Toggle(this.m_Index);
|
||||
}
|
||||
else if (e.shiftKey && System.ClassList.Contains(this.NativeObject.ParentElement, "MultiSelect"))
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(this.NativeObject.SelectedRows.Count() == 1 && this.NativeObject.SelectedRows.ContainsIndex(this.m_Index)))
|
||||
{
|
||||
this.NativeObject.SelectedRows.Clear();
|
||||
this.NativeObject.SelectedRows.Add(this.m_Index);
|
||||
}
|
||||
}
|
||||
|
||||
// WARNING: this messes with input elements and other controls - don't uncomment unless you KNOW WHAT YOU'RE DOING
|
||||
// e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
row.addEventListener("dblclick", function(e)
|
||||
{
|
||||
if (this.NativeObject.get_ItemActivationMode() == ListViewItemActivationMode.DoubleClick)
|
||||
{
|
||||
this.NativeObject.EventHandlers.ItemActivated.Execute();
|
||||
}
|
||||
});
|
||||
row.addEventListener("contextmenu", function(e)
|
||||
{
|
||||
this.NativeObject.SelectedRows.Clear();
|
||||
this.NativeObject.SelectedRows.Add(this.m_Index);
|
||||
// e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
this.mvarItemActivationMode = ListViewItemActivationMode.DoubleClick;
|
||||
this.get_ItemActivationMode = function()
|
||||
{
|
||||
return this.mvarItemActivationMode;
|
||||
};
|
||||
this.set_ItemActivationMode = function(value)
|
||||
{
|
||||
this.mvarItemActivationMode = value;
|
||||
};
|
||||
|
||||
if (this.ParentElement.hasAttribute("data-item-activation-mode"))
|
||||
{
|
||||
switch (this.ParentElement.getAttribute("data-item-activation-mode").toLowerCase())
|
||||
{
|
||||
case "singleclick":
|
||||
{
|
||||
this.set_ItemActivationMode(ListViewItemActivationMode.SingleClick);
|
||||
break;
|
||||
}
|
||||
case "doubleclick":
|
||||
{
|
||||
this.set_ItemActivationMode(ListViewItemActivationMode.DoubleClick);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.EventHandlers =
|
||||
{
|
||||
"ItemActivated": new System.EventHandler(),
|
||||
"SelectionChanging": new System.EventHandler(),
|
||||
"SelectionChanged": new System.EventHandler()
|
||||
};
|
||||
|
||||
this.Columns =
|
||||
{
|
||||
"NativeObject": null,
|
||||
|
||||
// # of predefined columns; e.g. add/remove column, row ordering column, etc.
|
||||
"_predefinedColumnsCount": 1,
|
||||
|
||||
"Count": function()
|
||||
{
|
||||
return this.NativeObject.ColumnHeaderElement.children.length - this._predefinedColumnsCount;
|
||||
},
|
||||
"GetByIndex": function(index)
|
||||
{
|
||||
var col = this.NativeObject.ColumnHeaderElement.children[index + this._predefinedColumnsCount];
|
||||
var column = new ListViewColumn();
|
||||
column.ID = col.getAttribute("data-id");
|
||||
column.Title = col.children[0].innerHTML;
|
||||
column.ItemTemplate = col.children[1].innerHTML;
|
||||
return column;
|
||||
}
|
||||
};
|
||||
this.Columns.NativeObject = this;
|
||||
|
||||
this.Rows =
|
||||
{
|
||||
"NativeObject": null,
|
||||
"Count": function()
|
||||
{
|
||||
return this.NativeObject.ItemsElement.children.length;
|
||||
},
|
||||
"Remove": function(row)
|
||||
{
|
||||
this.NativeObject.ItemsElement.removeChild(row.ParentElement);
|
||||
},
|
||||
"RemoveAt": function(index)
|
||||
{
|
||||
this.NativeObject.ItemsElement.removeChild(this.NativeObject.ItemsElement.children[index]);
|
||||
this.NativeObject.Refresh();
|
||||
}
|
||||
};
|
||||
this.Rows.NativeObject = this;
|
||||
|
||||
this.SelectedRows =
|
||||
{
|
||||
"NativeObject": null,
|
||||
"Clear": function()
|
||||
{
|
||||
var changed = false;
|
||||
for (var i = 0; i < this.NativeObject.ItemsElement.children.length; i++)
|
||||
{
|
||||
if (System.ClassList.Contains(this.NativeObject.ItemsElement.children[i], "Selected"))
|
||||
{
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!changed) return;
|
||||
|
||||
this.NativeObject.EventHandlers.SelectionChanging.Execute();
|
||||
for (var i = 0; i < this.NativeObject.ItemsElement.children.length; i++)
|
||||
{
|
||||
System.ClassList.Remove(this.NativeObject.ItemsElement.children[i], "Selected");
|
||||
}
|
||||
this.NativeObject.EventHandlers.SelectionChanged.Execute();
|
||||
},
|
||||
"AddRange": function(indices)
|
||||
{
|
||||
var changed = false;
|
||||
for (var i = 0; i < indices.length; i++)
|
||||
{
|
||||
if (!System.ClassList.Contains(this.NativeObject.ItemsElement.children[indices[i]], "Selected"))
|
||||
{
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!changed) return;
|
||||
|
||||
this.NativeObject.EventHandlers.SelectionChanging.Execute();
|
||||
for (var i = 0; i < indices.length; i++)
|
||||
{
|
||||
System.ClassList.Add(this.NativeObject.ItemsElement.children[indices[i]], "Selected");
|
||||
}
|
||||
this.NativeObject.EventHandlers.SelectionChanged.Execute();
|
||||
},
|
||||
"RemoveRange": function(indices)
|
||||
{
|
||||
var changed = false;
|
||||
for (var i = 0; i < indices.length; i++)
|
||||
{
|
||||
if (System.ClassList.Contains(this.NativeObject.ItemsElement.children[indices[i]], "Selected"))
|
||||
{
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!changed) return;
|
||||
|
||||
this.NativeObject.EventHandlers.SelectionChanging.Execute();
|
||||
for (var i = 0; i < indices.length; i++)
|
||||
{
|
||||
System.ClassList.Remove(this.NativeObject.ItemsElement.children[indices[i]], "Selected");
|
||||
}
|
||||
this.NativeObject.EventHandlers.SelectionChanged.Execute();
|
||||
},
|
||||
"Add": function(index)
|
||||
{
|
||||
this.AddRange([index]);
|
||||
},
|
||||
"Remove": function(index)
|
||||
{
|
||||
this.RemoveRange([index]);
|
||||
},
|
||||
"Count": function()
|
||||
{
|
||||
return this.Get().length;
|
||||
},
|
||||
"Get": function()
|
||||
{
|
||||
var items = new Array();
|
||||
for (var i = 0; i < this.NativeObject.ItemsElement.children.length; i++)
|
||||
{
|
||||
if (System.ClassList.Contains(this.NativeObject.ItemsElement.children[i], "Selected"))
|
||||
{
|
||||
items.push(new ListViewItem(this, i));
|
||||
}
|
||||
}
|
||||
return items;
|
||||
},
|
||||
"ContainsIndex": function(index)
|
||||
{
|
||||
return System.ClassList.Contains(this.NativeObject.ItemsElement.children[index], "Selected");
|
||||
},
|
||||
"Toggle": function(index)
|
||||
{
|
||||
if (this.ContainsIndex(index))
|
||||
{
|
||||
this.Remove(index);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Add(index);
|
||||
}
|
||||
},
|
||||
"ToggleRange": function(indices)
|
||||
{
|
||||
for (var i = 0; i < indices.length; i++)
|
||||
{
|
||||
this.Toggle(indices[i]);
|
||||
}
|
||||
}
|
||||
};
|
||||
this.SelectedRows.NativeObject = this;
|
||||
|
||||
/*
|
||||
if (parentElement.tHead != null && parentElement.tHead.rows[0] != null)
|
||||
{
|
||||
// begin : magic - do not even begin to attempt to understand this logic
|
||||
for (var i = 0; i < parentElement.tHead.rows[0].cells.length; i++)
|
||||
{
|
||||
if (parentElement.tHead.rows[0].cells[i].childNodes[0].className == "uwt-checkbox")
|
||||
{
|
||||
(function(i)
|
||||
{
|
||||
parentElement.tHead.rows[0].cells[i].childNodes[1].addEventListener("change", function(e)
|
||||
{
|
||||
for (var j = 0; j < parentElement.tBodies[0].rows.length; j++)
|
||||
{
|
||||
parentElement.tBodies[0].rows[j].cells[i].childNodes[0].NativeObject.SetChecked(parentElement.tHead.rows[0].cells[i].childNodes[0].NativeObject.GetChecked());
|
||||
}
|
||||
});
|
||||
})(i);
|
||||
}
|
||||
}
|
||||
// end : magic
|
||||
}
|
||||
*/
|
||||
|
||||
this.ParentElement.addEventListener("mousedown", function(e)
|
||||
{
|
||||
this.NativeObject.SelectedRows.Clear();
|
||||
// e.preventDefault();
|
||||
// e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
|
||||
this.Refresh();
|
||||
}
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-listview");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new ListView(items[i]);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
ListView.create = function(container, createParms)
|
||||
{
|
||||
/*
|
||||
var table = document.createElement("table");
|
||||
table.className = "uwt-listview";
|
||||
|
||||
if (createParms.columns)
|
||||
{
|
||||
var thead = document.createElement("thead");
|
||||
var tr = document.createElement("tr");
|
||||
|
||||
for (var i = 0; i < createParms.columns.length; i++)
|
||||
{
|
||||
var td = document.createElement("td");
|
||||
var a = document.createElement("a");
|
||||
a.href = "#";
|
||||
a.innerHTML = createParms.columns[i].title;
|
||||
td.appendChild(a);
|
||||
// createParms.columns[i].id;
|
||||
tr.appendChild(td);
|
||||
}
|
||||
|
||||
thead.appendChild(tr);
|
||||
table.appendChild(thead);
|
||||
}
|
||||
if (createParms.items)
|
||||
{
|
||||
var tbody = document.createElement("tbody");
|
||||
for (var i = 0; i < createParms.items.length; i++)
|
||||
{
|
||||
var tr = document.createElement("tr");
|
||||
for (var j = 0; j < createParms.items[i].columns.length; j++)
|
||||
{
|
||||
var td = document.createElement("td");
|
||||
|
||||
var value = createParms.items[i].columns[j].value;
|
||||
if (typeof(value) === "function")
|
||||
{
|
||||
value = value();
|
||||
}
|
||||
else
|
||||
{
|
||||
td.innerHTML = value;
|
||||
}
|
||||
tr.appendChild(td);
|
||||
}
|
||||
tbody.appendChild(tr);
|
||||
}
|
||||
table.appendChild(tbody);
|
||||
}
|
||||
container.appendChild(table);
|
||||
*/
|
||||
|
||||
var table = document.createElement("div");
|
||||
table.className = "uwt-listview";
|
||||
|
||||
var caption = document.createElement("div");
|
||||
caption.className = "uwt-listview-caption";
|
||||
|
||||
table.appendChild(caption);
|
||||
|
||||
var content = document.createElement("div");
|
||||
content.className = "uwt-content";
|
||||
|
||||
var columnHeaders = document.createElement("div");
|
||||
columnHeaders.className = "uwt-listview-column-headers";
|
||||
|
||||
if (createParms.columns)
|
||||
{
|
||||
for (var i = 0; i < createParms.columns.length; i++)
|
||||
{
|
||||
var td = document.createElement("div");
|
||||
td.className = "uwt-listview-column-header";
|
||||
|
||||
var a = document.createElement("a");
|
||||
a.href = "#";
|
||||
a.innerHTML = createParms.columns[i].title;
|
||||
td.appendChild(a);
|
||||
// createParms.columns[i].id;
|
||||
columnHeaders.appendChild(td);
|
||||
}
|
||||
}
|
||||
content.appendChild(columnHeaders);
|
||||
|
||||
var columnItems = document.createElement("div");
|
||||
columnItems.className = "uwt-listview-items";
|
||||
|
||||
if (createParms.items)
|
||||
{
|
||||
for (var i = 0; i < createParms.items.length; i++)
|
||||
{
|
||||
var tr = document.createElement("div");
|
||||
tr.className = "uwt-listview-item";
|
||||
|
||||
for (var j = 0; j < createParms.items[i].columns.length; j++)
|
||||
{
|
||||
var td = document.createElement("div");
|
||||
td.className = "uwt-listview-item-column";
|
||||
|
||||
var value = createParms.items[i].columns[j].value;
|
||||
if (typeof(value) === "function")
|
||||
{
|
||||
value = value();
|
||||
}
|
||||
else
|
||||
{
|
||||
td.innerHTML = value;
|
||||
}
|
||||
|
||||
tr.appendChild(td);
|
||||
}
|
||||
|
||||
// createParms.columns[i].id;
|
||||
columnItems.appendChild(tr);
|
||||
}
|
||||
}
|
||||
content.appendChild(columnItems);
|
||||
|
||||
table.appendChild(content);
|
||||
|
||||
var listview = new ListView(table);
|
||||
return listview;
|
||||
};
|
||||
222
src/uwt-web/scripts/controls/Menu.js
Normal file
222
src/uwt-web/scripts/controls/Menu.js
Normal file
@ -0,0 +1,222 @@
|
||||
function Menu(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.set_Expanded = function(value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case true:
|
||||
{
|
||||
System.ClassList.Add(this.ParentElement.parentNode, "Opened");
|
||||
break;
|
||||
}
|
||||
case false:
|
||||
{
|
||||
System.ClassList.Remove(this.ParentElement.parentNode, "Opened");
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var i = 0; i < this.ParentElement.children.length; i++)
|
||||
{
|
||||
this.ParentElement.children[i].children[0].addEventListener("click", function(e)
|
||||
{
|
||||
if (this.parentNode.children.length > 1)
|
||||
{
|
||||
System.ClassList.Toggle(this.parentNode, "Opened");
|
||||
}
|
||||
|
||||
this.blur();
|
||||
|
||||
if (this.href == "" || this.href == window.location.href + "#")
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-menu");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
if (items[i].NativeObject) continue;
|
||||
items[i].NativeObject = new Menu(items[i]);
|
||||
}
|
||||
});
|
||||
|
||||
function ContextMenu()
|
||||
{
|
||||
this.Items = [];
|
||||
this.ParentElement = null;
|
||||
this.Show = function(x, y, parent)
|
||||
{
|
||||
ContextMenu.HideAll();
|
||||
if (this.ParentElement == null)
|
||||
{
|
||||
var elem = document.createElement("ul");
|
||||
elem.className = "uwt-menu uwt-popup";
|
||||
elem.addEventListener("contextmenu", function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
elem.addEventListener("transitionend", function(e)
|
||||
{
|
||||
if (!System.ClassList.Contains(this, "uwt-visible"))
|
||||
{
|
||||
System.ClassList.Remove(document.body, "uwt-prevent-scrolling");
|
||||
this.remove();
|
||||
}
|
||||
});
|
||||
|
||||
for (var i = 0; i < this.Items.length; i++)
|
||||
{
|
||||
this.Items[i].Menu = this;
|
||||
|
||||
var li = document.createElement("li");
|
||||
System.ClassList.Add(li, "uwt-menu-item");
|
||||
|
||||
var visible = false;
|
||||
if (typeof(this.Items[i].Visible) === "function")
|
||||
{
|
||||
visible = this.Items[i].Visible();
|
||||
}
|
||||
else if (typeof(this.Items[i].Visible) === "undefined")
|
||||
{
|
||||
visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
visible = this.Items[i].Visible;
|
||||
}
|
||||
|
||||
if (visible)
|
||||
{
|
||||
System.ClassList.Add(li, "uwt-visible");
|
||||
}
|
||||
else
|
||||
{
|
||||
System.ClassList.Remove(li, "uwt-visible");
|
||||
}
|
||||
|
||||
if (this.Items[i].ClassName == "MenuItemCommand")
|
||||
{
|
||||
var elem1 = document.createElement("a");
|
||||
if (this.Items[i].TargetURL)
|
||||
{
|
||||
var targetUrl = this.Items[i].TargetURL;
|
||||
if (typeof(targetUrl) === 'function')
|
||||
{
|
||||
targetUrl = targetUrl();
|
||||
}
|
||||
elem1.setAttribute("href", targetUrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
elem1.setAttribute("href", "#");
|
||||
elem1.addEventListener("click", function(e)
|
||||
{
|
||||
this.NativeObject.Hide();
|
||||
this.MenuItem.Execute();
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
elem1.innerHTML = this.Items[i].Title;
|
||||
elem1.NativeObject = this;
|
||||
elem1.MenuItem = this.Items[i];
|
||||
li.appendChild(elem1);
|
||||
|
||||
System.ClassList.Add(li, "uwt-menu-item-command");
|
||||
}
|
||||
else if (this.Items[i].ClassName == "MenuItemSeparator")
|
||||
{
|
||||
System.ClassList.Add(li, "uwt-separator");
|
||||
}
|
||||
else if (this.Items[i].ClassName == "MenuItemHeader")
|
||||
{
|
||||
System.ClassList.Add(li, "uwt-menu-item-header");
|
||||
li.innerHTML = this.Items[i].Title;
|
||||
}
|
||||
elem.appendChild(li);
|
||||
}
|
||||
|
||||
elem.style.left = x + "px";
|
||||
elem.style.top = y + "px";
|
||||
|
||||
if (parent == null) parent = document.body;
|
||||
parent.appendChild(elem);
|
||||
this.ParentElement = elem;
|
||||
System.ClassList.Add(document.body, "uwt-prevent-scrolling");
|
||||
}
|
||||
this.ParentElement.className = "uwt-menu uwt-popup";
|
||||
|
||||
this.ParentElement.offsetWidth = this.ParentElement.offsetWidth; // thanks https://stackoverflow.com/a/24195559
|
||||
System.ClassList.Add(this.ParentElement, "uwt-visible");
|
||||
System.EnsureElementVisible(this.ParentElement, null);
|
||||
};
|
||||
this.Hide = function()
|
||||
{
|
||||
if (this.ParentElement == null) return;
|
||||
this.ParentElement.className = "uwt-menu uwt-popup";
|
||||
};
|
||||
}
|
||||
|
||||
ContextMenu.HideAll = function()
|
||||
{
|
||||
var items = document.getElementsByClassName("uwt-menu");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
if (System.ClassList.Contains(items[i], "uwt-popup"))
|
||||
{
|
||||
if (!System.ClassList.Contains(items[i], "uwt-visible-always"))
|
||||
{
|
||||
System.ClassList.Remove(items[i], "uwt-visible");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function MenuItemHeader(id, title)
|
||||
{
|
||||
this.ClassName = "MenuItemHeader";
|
||||
this.ID = id;
|
||||
this.Title = title;
|
||||
this.Visible = true;
|
||||
}
|
||||
function MenuItemSeparator(id)
|
||||
{
|
||||
this.ClassName = "MenuItemSeparator";
|
||||
this.ID = id;
|
||||
this.Visible = true;
|
||||
}
|
||||
function MenuItemCommand(id, title, onclick)
|
||||
{
|
||||
this.ClassName = "MenuItemCommand";
|
||||
this.ID = id;
|
||||
this.Title = title;
|
||||
this.OnClientClick = onclick;
|
||||
this.Visible = true;
|
||||
|
||||
this.Execute = function()
|
||||
{
|
||||
if (this.OnClientClick != null) this.OnClientClick();
|
||||
};
|
||||
}
|
||||
|
||||
window.addEventListener("contextmenu", function()
|
||||
{
|
||||
ContextMenu.HideAll();
|
||||
});
|
||||
window.addEventListener("mousedown", function()
|
||||
{
|
||||
ContextMenu.HideAll();
|
||||
});
|
||||
219
src/uwt-web/scripts/controls/Meter.js
Normal file
219
src/uwt-web/scripts/controls/Meter.js
Normal file
@ -0,0 +1,219 @@
|
||||
function MeterDisplayStyle(value)
|
||||
{
|
||||
this._value = value;
|
||||
}
|
||||
MeterDisplayStyle.None = new MeterDisplayStyle(0);
|
||||
MeterDisplayStyle.Percent = new MeterDisplayStyle(1);
|
||||
MeterDisplayStyle.Decimal = new MeterDisplayStyle(2);
|
||||
|
||||
function Meter(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.ContentWrapperElement = this.ParentElement.childNodes[0];
|
||||
this.ContentElement = this.ContentWrapperElement.childNodes[0];
|
||||
this.CanvasElement = this.ContentWrapperElement.childNodes[1];
|
||||
this.LabelElement = this.ParentElement.childNodes[1];
|
||||
|
||||
this.get_Title = function()
|
||||
{
|
||||
return this.LabelElement.innerHTML;
|
||||
};
|
||||
this.set_Title = function(value)
|
||||
{
|
||||
this.LabelElement.innerHTML = value;
|
||||
};
|
||||
|
||||
this.get_MinimumValue = function()
|
||||
{
|
||||
return this.ParentElement.getAttribute("data-minimum-value");
|
||||
};
|
||||
this.set_MinimumValue = function(value)
|
||||
{
|
||||
this.ParentElement.setAttribute("data-minimum-value", value);
|
||||
};
|
||||
this.get_MaximumValue = function()
|
||||
{
|
||||
return this.ParentElement.getAttribute("data-maximum-value");
|
||||
};
|
||||
this.set_MaximumValue = function(value)
|
||||
{
|
||||
this.ParentElement.setAttribute("data-maximum-value", value);
|
||||
};
|
||||
this.get_CurrentValue = function()
|
||||
{
|
||||
return this.ParentElement.getAttribute("data-current-value");
|
||||
};
|
||||
this.set_CurrentValue = function(value)
|
||||
{
|
||||
if (value < this.get_MinimumValue() || value > this.get_MaximumValue()) return false;
|
||||
|
||||
this.ParentElement.setAttribute("data-current-value", value);
|
||||
this.Refresh();
|
||||
return true;
|
||||
};
|
||||
|
||||
this.get_DisplayStyle = function()
|
||||
{
|
||||
var displayStyle = this.ParentElement.getAttribute("data-display-style");
|
||||
switch (displayStyle.toLowerCase())
|
||||
{
|
||||
case "none":
|
||||
{
|
||||
return MeterDisplayStyle.None;
|
||||
}
|
||||
case "decimal":
|
||||
{
|
||||
return MeterDisplayStyle.Decimal;
|
||||
}
|
||||
case "percent":
|
||||
default:
|
||||
{
|
||||
return MeterDisplayStyle.Percent;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.set_DisplayStyle = function(value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case MeterDisplayStyle.None:
|
||||
{
|
||||
this.ParentElement.setAttribute("data-display-style", "none");
|
||||
break;
|
||||
}
|
||||
case MeterDisplayStyle.Decimal:
|
||||
{
|
||||
this.ParentElement.setAttribute("data-display-style", "decimal");
|
||||
break;
|
||||
}
|
||||
case MeterDisplayStyle.Percent:
|
||||
{
|
||||
this.ParentElement.setAttribute("data-display-style", "percent");
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.Refresh();
|
||||
};
|
||||
|
||||
this.ParentElement.addEventListener("contextmenu", function(e)
|
||||
{
|
||||
var contextMenu = new ContextMenu();
|
||||
contextMenu.Items =
|
||||
[
|
||||
new MenuItemHeader(null, "Meter - " + this.NativeObject.get_Title()),
|
||||
new MenuItemCommand(null, "Decimal", null),
|
||||
new MenuItemCommand(null, "Percent", null)
|
||||
];
|
||||
|
||||
if (this.NativeObject.ParentElement.hasAttribute("data-enable-default-contextmenu") && this.NativeObject.ParentElement.getAttribute("data-enable-default-contextmenu") == "true")
|
||||
{
|
||||
contextMenu.Show(e.clientX, e.clientY);
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
|
||||
this.Refresh = function()
|
||||
{
|
||||
var canvas = this.CanvasElement;
|
||||
canvas.height = canvas.width;
|
||||
|
||||
var scaleBy = 1;
|
||||
var context = canvas.getContext('2d');
|
||||
|
||||
// support retina devices
|
||||
if (window.devicePixelRatio > 1)
|
||||
{
|
||||
scaleBy = window.devicePixelRatio;
|
||||
// canvas.style.width = canvas.style.height = [options.size, 'px'].join('');
|
||||
// canvas.width = canvas.height = options.size * scaleBy;
|
||||
context.scale(scaleBy, scaleBy);
|
||||
}
|
||||
|
||||
// canvas center point
|
||||
var centerX = canvas.width / 2;
|
||||
var centerY = canvas.height / 2;
|
||||
|
||||
// radius of arc
|
||||
var lineWidth = 16;
|
||||
var radius = (canvas.width - lineWidth) / 2;
|
||||
radius -= 2;
|
||||
|
||||
// 0% = 0.0, 100% = 2.0
|
||||
var minimumValue = this.ParentElement.getAttribute("data-minimum-value");
|
||||
var maximumValue = this.ParentElement.getAttribute("data-maximum-value");
|
||||
var currentValue = this.ParentElement.getAttribute("data-current-value");
|
||||
|
||||
var decimalValue = ((minimumValue + currentValue) / (maximumValue - minimumValue));
|
||||
if ((maximumValue - minimumValue) <= 0) decimalValue = 0;
|
||||
|
||||
var percentValue = (decimalValue * 100).toString() + "%";
|
||||
|
||||
switch (this.get_DisplayStyle())
|
||||
{
|
||||
case MeterDisplayStyle.None:
|
||||
{
|
||||
this.ContentElement.innerHTML = "";
|
||||
break;
|
||||
}
|
||||
case MeterDisplayStyle.Decimal:
|
||||
{
|
||||
this.ContentElement.innerHTML = decimalValue * (maximumValue - minimumValue);
|
||||
break;
|
||||
}
|
||||
case MeterDisplayStyle.Percent:
|
||||
default:
|
||||
{
|
||||
this.ContentElement.innerHTML = percentValue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
context.translate(centerX, centerY);
|
||||
context.rotate((-1 / 2 + 0 / 180) * Math.PI);
|
||||
|
||||
context.beginPath();
|
||||
context.lineWidth = lineWidth;
|
||||
context.arc(0, 0, radius, 0, Math.PI * 2 * decimalValue, false);
|
||||
|
||||
if (this.ParentElement.hasAttribute("data-foreground-color"))
|
||||
{
|
||||
context.strokeStyle = this.ParentElement.getAttribute("data-foreground-color");
|
||||
}
|
||||
else
|
||||
{
|
||||
context.strokeStyle = '#000000';
|
||||
}
|
||||
context.stroke();
|
||||
context.closePath();
|
||||
|
||||
// rest of meter
|
||||
context.beginPath();
|
||||
context.arc(0, 0, radius, Math.PI * 2 * decimalValue, Math.PI * 2, false);
|
||||
|
||||
// line color
|
||||
if (this.ParentElement.hasAttribute("data-background-color"))
|
||||
{
|
||||
context.strokeStyle = this.ParentElement.getAttribute("data-background-color");
|
||||
}
|
||||
else
|
||||
{
|
||||
context.strokeStyle = '#CCCCCC';
|
||||
}
|
||||
context.stroke();
|
||||
context.closePath();
|
||||
};
|
||||
|
||||
this.Refresh();
|
||||
}
|
||||
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("Meter");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new Meter(items[i]);
|
||||
}
|
||||
});
|
||||
21
src/uwt-web/scripts/controls/Panel.js
Normal file
21
src/uwt-web/scripts/controls/Panel.js
Normal file
@ -0,0 +1,21 @@
|
||||
function Panel(id)
|
||||
{
|
||||
this._iframe = document.getElementById("Panel_" + id + "_IFrame");
|
||||
this._iframe.onload = function(sender)
|
||||
{
|
||||
sender._throbber.style.display = "none";
|
||||
sender._content.style.display = "block";
|
||||
}.PrependArgument(this);
|
||||
|
||||
this._content = document.getElementById("Panel_" + id + "_Content");
|
||||
|
||||
this._throbber = document.getElementById("Panel_" + id + "_Throbber");
|
||||
|
||||
this.ID = id;
|
||||
this.NavigateTo = function(url)
|
||||
{
|
||||
this._throbber.style.display = "block";
|
||||
// this._content.style.display = "none";
|
||||
this._iframe.src = url;
|
||||
};
|
||||
}
|
||||
92
src/uwt-web/scripts/controls/Popup.js
Normal file
92
src/uwt-web/scripts/controls/Popup.js
Normal file
@ -0,0 +1,92 @@
|
||||
function Popup(idOrParentElement)
|
||||
{
|
||||
if (typeof(idOrParentElement) === "string")
|
||||
{
|
||||
this.ID = id;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ParentElement = idOrParentElement;
|
||||
}
|
||||
|
||||
this.Show = function()
|
||||
{
|
||||
Popup.HideAll();
|
||||
|
||||
if (this.ParentElement)
|
||||
{
|
||||
System.ClassList.Add(this.ParentElement, "uwt-visible");
|
||||
}
|
||||
else
|
||||
{
|
||||
var obj = document.getElementById("Popup_" + this.ID);
|
||||
obj.classList.add("Visible");
|
||||
}
|
||||
};
|
||||
this.Hide = function()
|
||||
{
|
||||
if (this.ParentElement)
|
||||
{
|
||||
System.ClassList.Remove(this.ParentElement, "uwt-visible");
|
||||
}
|
||||
else
|
||||
{
|
||||
var obj = document.getElementById("Popup_" + this.ID);
|
||||
obj.classList.remove("Visible");
|
||||
}
|
||||
};
|
||||
}
|
||||
Popup.HideAll = function()
|
||||
{
|
||||
var elems = document.getElementsByClassName("uwt-popup");
|
||||
for (var i = 0; i < elems.length; i++)
|
||||
{
|
||||
if (!System.ClassList.Contains(elems[i], "uwt-visible-always"))
|
||||
{
|
||||
System.ClassList.Remove(elems[i], "uwt-visible");
|
||||
}
|
||||
}
|
||||
};
|
||||
Popup.create = function(container)
|
||||
{
|
||||
console.log(container);
|
||||
|
||||
var parentElement = document.createElement("div");
|
||||
parentElement.className = "uwt-popup";
|
||||
|
||||
container.appendChild(parentElement);
|
||||
|
||||
var popup = new Popup(parentElement);
|
||||
return popup;
|
||||
};
|
||||
|
||||
window.addEventListener("mousedown", function(e)
|
||||
{
|
||||
var sender;
|
||||
if (!e)
|
||||
{
|
||||
e = window.event;
|
||||
}
|
||||
if (e.target)
|
||||
{
|
||||
sender = e.target;
|
||||
}
|
||||
else if (e.srcElement)
|
||||
{
|
||||
sender = e.srcElement;
|
||||
}
|
||||
|
||||
while (sender != null)
|
||||
{
|
||||
if (System.ClassList.Contains(sender, "Popup"))
|
||||
{
|
||||
// do not close the popup when we click inside itself
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return;
|
||||
}
|
||||
sender = sender.parentNode;
|
||||
if (sender == null) break;
|
||||
}
|
||||
Popup.HideAll();
|
||||
});
|
||||
28
src/uwt-web/scripts/controls/ProgressBar.js
Normal file
28
src/uwt-web/scripts/controls/ProgressBar.js
Normal file
@ -0,0 +1,28 @@
|
||||
function ProgressBar(parentElement)
|
||||
{
|
||||
this.ParentElement = parentElement;
|
||||
this.MinimumValue = 0;
|
||||
this.MaximumValue = 100;
|
||||
this.CurrentValue = 0;
|
||||
this.SetCurrentValue = function(value)
|
||||
{
|
||||
this.CurrentValue = value;
|
||||
this.Update();
|
||||
};
|
||||
this.Update = function()
|
||||
{
|
||||
var pb_fill = document.getElementById("ProgressBar_" + this.ID + "_ValueFill");
|
||||
var pb_label = document.getElementById("ProgressBar_" + this.ID + "_ValueLabel");
|
||||
pb_fill.style.width = ((this.CurrentValue / (this.MaximumValue - this.MinimumValue)) * 100).toFixed(0).toString() + "%";
|
||||
pb_label.innerHTML = ((this.CurrentValue / (this.MaximumValue - this.MinimumValue)) * 100).toFixed(0).toString() + "%";
|
||||
};
|
||||
}
|
||||
|
||||
window.addEventListener("load", function(e)
|
||||
{
|
||||
var items = document.getElementsByClassName("ProgressBar");
|
||||
for (var i = 0; i < items.length; i++)
|
||||
{
|
||||
items[i].NativeObject = new ProgressBar(items[i]);
|
||||
}
|
||||
});
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user