ported legacy functions

This commit is contained in:
2025-07-04 14:00:46 +02:00
parent e48ddfdb2c
commit 3c898f36de
32 changed files with 2642 additions and 35 deletions

View File

@@ -0,0 +1,19 @@
@font-face {
font-family: "awesome";
src: url("../fontawesome-webfont.woff");
}
.symbol{
font-family: awesome;
text-decoration: none;
}
.completed > a::before {
content: " ✓";
}
.canceled a,
.children .inactive,
.requirements .inactive,
.tasks .inactive{
text-decoration: line-through;
}

View File

@@ -0,0 +1,84 @@
body{
color: red;
background-color: black;
}
a{
color: red;
}
.tasks .pending>a{
color: gray;
}
.completed>a,
.started>a{
color: #5bc500;
}
.canceled>a{
color: gray;
}
tr{
background-color: #52525270;
}
tr:nth-child(2n+1){
background-color: #a7a7a740;
}
fieldset {
border-color: red;
}
.button,
input,
button {
background-color: red;
color: #303030;
}
.hover{
background-color: black;
border-color: red;
}
form.invoice textarea {
background-color: red;
color: black;
}
.infos span{
background-color: #00ad00;
color: black;
}
.errors span{
background-color: #ff9847;
color: black;
}
.warnings span{
background-color: #ffff00;
color: black;
}
#announce{
background-color: black;
}
#main_menu .button:hover {
color: red;
background-color: gray;
}
tr:hover td{
background-color: #160202;
}
code {
background-color: black;
color: orange;
}
.description img,
#preview img{
background: lightcyan;
}

View File

@@ -0,0 +1,584 @@
@font-face {
font-family: "awesome";
src: url("../fontawesome-webfont.woff");
}
*{
max-width:100%;
min-width:auto;
}
a{
text-decoration: none;
}
body{
font-family: sans-serif;
}
code {
display: inline-block;
padding: 5px;
margin: 5px 0;
}
textarea {
min-height: 60px;
width: 100%;
font-size: 16px;
}
textarea:hover{
min-height: 400px;
width: 100%;
}
input[type=text],input[type=email]{
width: 100%;
}
td.connectors form input{
width: 200px;
}
img#logo{
position: fixed;
top: 10px;
right: 10px;
z-index: -1;
}
blockquote{
font-style: italic;
}
#main_menu,
#main_menu form{
display: inline;
}
#main_menu .button {
font-size: 12px;
font-weight: normal;
margin-top: 7px;
vertical-align: bottom;
}
.hidden{
display: none !important;
}
.hover:hover .hidden{
display: inherit !important;
}
.emphasized{
font-weight: bold;
}
.add_positions,
.requirements{
max-height: 60px;
max-width: 66%;
overflow: hidden;
}
.add_positions:hover,
.requirements:hover{
max-height: 999999px;
max-width: 999999px;
}
.add_positions > ul > li{
max-height: 20px;
overflow: hidden;
padding-top: 20px;
}
.add_positions > ul > li:hover{
max-height: 999999px;
}
fieldset.add.document:hover {
max-height: unset;
}
fieldset.add.document {
max-height: 5px;
overflow: hidden;
}
fieldset.options label,
.add_positions label span,
.poll_status label,
.requirements label{
display: block;
}
.tasks .canceled a,
.children .inactive,
.requirements .inactive,
.tasks .inactive{
text-decoration: line-through;
}
.tasks .navi a{
display: inline-table;
}
blockquote a,
p a,
.description a{
text-decoration: underline;
}
table {
border-collapse: collapse;
}
tr > *{
padding: 5px 10px;
}
label.street:after,
label.location::after {
content: "\a ";
white-space: pre;
}
.poll.evaluate table tr:nth-child(n+2) th,
.poll.evaluate table td{
text-align: right;
}
.poll .disabled{
text-decoration: line-through;
}
.company div > fieldset,
.company > table{
margin-right: 10px;
float: left;
}
table.time h2{
margin-right: 60px;
}
.file label,
.document .dates label{
display: block
}
.document .header,
.document .tags{
clear: both;
}
fieldset {
border-radius: 10px;
border-width: 1px;
}
.contacts fieldset,
.document .customer,
.document .document_type,
.document .sender,
.document .court,
.document .dates,
.document .template,
fieldset.del_note,
fieldset.login_service_list,
fieldset.userlist,
fieldset.document.list{
float: left;
}
.document .dates label{
text-align: right;
}
.button,
input,
button {
border: 0 none;
font-weight: bold;
margin: 0 2px;
padding: 3px;
display: inline-block;
}
.change_state,
td.connectors button[type="submit"],
.prop_action,
input[type="submit"] {
clear: both;
float: right;
}
.symbol{
font-family: awesome;
font-size: 20px;
font-weight: normal;
}
#main_menu .symbol{
font-size: 14px;
}
.right{
float: right;
margin: 0 0 0 5px;
}
.tasks .project {
font-weight: bold;
}
.right-abs {
position: absolute;
right: 5px;
top: 5px;
}
.right-fix {
position: fixed;
right: 5px;
top: 5px;
}
.hover {
border-width: 1px;
border-style: solid;
border-radius: 5px;
max-height: 35px;
overflow: hidden;
z-index: 10;
}
.hover:hover {
max-height: unset;
}
.hover_h > a:nth-child(n+2){
display: none;
}
.hover_h:hover {
padding: 5px 0 20px;
}
.hover_h:hover > a:nth-child(n+2){
display: inherit;
}
form.document textarea {
font-weight: bold;
min-height: 90px;
width: 100%;
}
.pos_price,
form.document input.price,
form.document input.amount{
max-width: 60px;
text-align: right;
}
form.document .tax{
min-width: 70px;
}
form.document .tax input{
max-width: 40px;
text-align: right;
}
td > h1{
display: inline-block;
margin: 0 10px 0 0;
}
.center,
.infos,
.errors,
.warnings{
text-align: center;
}
.infos span,
.errors span,
.warnings span{
margin: 5px 0 0;
padding: 5px;
border-radius: 10px;
display: inline-block;
}
.tags span{
display: inline-block;
vertical-align: top;
}
.bookmark .share,
.bookmark .tags{
display: inline-block;
}
.bookmark form .share{
height: 20px;
overflow: hidden;
}
.bookmark form .share:hover{
height: initial;
}
fieldset.bookmark > fieldset{
max-height: 14px;
overflow: hidden;
}
fieldset.bookmark > fieldset.tags{
max-height: unset;
}
fieldset.bookmark > fieldset:hover{
max-height: unset;
}
.bookmark>fieldset>a{
word-wrap: break-word;
display: block;
min-width: auto;
}
.bookmark>fieldset>a.button{
display: inline-block;
}
.copytext{
position:fixed;
width: 100px;
left: -1000px;
}
img[src*="pos=right"] {
float:right;
margin: 5px 0 5px 5px;
}
img[src*="pos=left"] {
float:left;
margin: 5px 5px 5px 0;
}
img[src*="width=100"]{
max-width: 100px;
}
img[src*="width=200"]{
max-width: 200px;
}
img[src*="width=300"]{
max-width: 300px;
}
img[src*="width=400"]{
max-width: 400px;
}
img[src*="width=500"]{
max-width: 500px;
}
img[src*="width=600"]{
max-width: 600px;
}
img[src*="width=700"]{
max-width: 700px;
}
img[src*="width=800"]{
max-width: 800px;
}
img[src*="width=900"]{
max-width: 900px;
}
img[src*="width=50%"]{
max-width: 50%;
}
img[src*="width=33%"]{
max-width: 33%;
}
img[src$="width=25%"]{
max-width: 25%;
}
#announce{
position: fixed;
bottom: 0;
right: 0;
padding: 3px 5px 0;
border-top-left-radius: 7px;
}
fieldset.scrolling{
overflow: scroll;
max-height: 80%;
}
svg#gantt{
max-width: unset;
}
svg .row{
fill: none;
pointer-events: all;
}
svg .row:hover{
fill: #333333;
}
svg .duration{
fill:rgba(255,0,255,0.4);
stroke:none;
}
svg .schedule{
fill:none;
stroke-width:1;
stroke: yellow;
}
svg .start{
stroke-dasharray: 10,30,40;
}
svg .stop{
stroke-dasharray: 50,30;
}
svg text{
stroke: none;
fill: red;
}
div.search{
display: inline-block;
max-width: 150px;
}
div.search input,
div.search label{
display: none;
}
div.search:hover input,
div.search:hover label{
display: initial;
}
.note td.code {
width: 50%;
}
.note td.code textarea {
min-height: 200px;
}
.project-index td .users{
max-height: 30px;
overflow: hidden;
}
.project-index tr:hover td .users{
max-height: none;
}
.easylist fieldset a.button {
width: 80%;
padding: 30px;
text-align: center;
}
#preview,
#preview-source{
display: inline-block;
max-width: calc(50% - 20px);
vertical-align: bottom;
}
table #preview,
table #preview-source{
display: inherit;
max-width: unset;
vertical-align: inherit;
}
#preview.loading{
opacity: 0.2;
}
.completed > a::before {
content: " ✓";
}
@media (max-width:1199px) {
*[hide="12"]{
display: none;
}
table.document input{
max-width: 100px;
}
}
@media (max-width: 900px){
*[hide="9"]{
display: none;
}
table.document input{
max-width: 60px;
}
table.document .tax input,
table.document input.amount{
max-width: 25px;
}
}
@media (max-width: 800px){
*[hide="8"]{
display: none;
}
}
@media (max-width: 700px){
*[hide="7"]{
display: none;
}
fieldset.bookmark > fieldset{
max-height: 50px;
}
#preview,
#preview-source{
display: block;
max-width: unset;
}
}
@media (max-width: 600px){
*[hide="6"]{
display: none;
}
.easylist fieldset a.button {
width: 60%;
}
}
@media (max-width: 500px){
*[hide="5"]{
display: none;
}
}
@media (max-width: 400px){
*[hide="4"]{
display: none;
}
}
@media print{
fieldset.note span.right,
#logo, #main_menu {
display: none;
}
fieldset.process, fieldset.database{
page-break-after: always;
}
.export>fieldset{
border: 0 none;
}
}

View File

@@ -0,0 +1,41 @@
.arrow{
stroke: red;
}
circle, ellipse, rect{
stroke: black;
}
ellipse,
circle.process{
fill: rgba(255,255,255,0.5);
}
rect.terminal{
fill: white;
}
circle.connector{
fill: rgba(0,0,0,0.05);
stroke: none;
}
circle.connector:hover{
fill: rgba(0,0,0,0.6);
}
#backdrop{
fill: transparent;
}
.arrow circle{
stroke: none;
fill: rgba(128,128,128,0.5);
}
.arrow text{
fill: black;
stroke: none;
}
.arrow:hover circle{
fill: rgba(255,0,0,0.3);
}
.process text{
fill: black;
}

View File

@@ -0,0 +1,76 @@
body{
background: #0f3a09;
}
a{
color: #0c0061;
}
code{
background: #cccccc;
border-color: #0f3a09;
}
.pending a{
color: #45513a;
}
.open>a{
color: #0f3a09;
}
.completed>a:after{
content: " ✓";
}
.canceled>a{
color: #414141;
}
li:hover > a,
a:hover{
color: red;
}
fieldset,table{
background: rgba(255,255,255,0.49);
}
legend{
background: #82987f;
}
.share, .share>legend{
background:#8cff7e;
}
.button{
background: white;
}
#announce a{
color:black;
}
table.diagram .step,
body > a.symbol {
background: white;
}
.right a {
background: white;
color: red;
}
.infos span{
background: lime;
}
.warnings span{
background: yellow;
}
.errors span{
background: orange;
}
.search label{
color: white;
}

View File

@@ -0,0 +1,526 @@
@font-face {
font-family: "awesome";
src: url("../fontawesome-webfont.woff");
}
a{
text-decoration:none;
}
body{
margin-left: 160px;
margin-top: 25px;
font-family: sans-serif;
position: relative;
}
code{
display: inline-block;
padding: 5px;
border: 1px solid;
border-radius: 5px;
}
body > a.symbol {
padding: 5px;
border-radius: 5px;
}
body > h2{
color: #67a05f;
}
body.user.login{
width: 100%;
max-width: 400px;
margin: 0 auto;
text-align: center;
}
img#logo{
position: fixed;
top: 10px;
right: 10px;
z-index: -1;
}
blockquote{
font-style: italic;
}
#main_menu{
position: fixed;
top:0;
left:0;
bottom:0;
width: 150px;
}
#main_menu a{
display: block;
text-align: center;
overflow: hidden;
}
.hidden{
display: none;
}
td{
position: relative;
}
fieldset{
position: relative;
margin-top: 5px;
vertical-align: top;
}
.hover:hover .hidden{
display: inherit;
}
.button{
padding:2px;
margin: 1px 0;
border-radius: 5px;
border: 1px solid black;
white-space: pre;
display: inline-block;
}
.symbol{
font-family: awesome;
font-size: 22px;
}
.right{
position: absolute;
right: 0;
top: 0;
}
.right a {
border: 1px solid;
border-radius: 5px;
padding: 0 5px;
}
.right-fix{
position: fixed;
right: 0;
top: 0;
overflow: hidden;
max-height: 25px;
border: 1px solid red;
border-radius: 5px;
background: white;
z-index: 10;
}
.canceled{
text-decoration: line-through
}
.hover:hover{
max-height: unset !important;
max-width: unset !important;
}
fieldset textarea{
width: 100%;
height: 200px;
font-size: 16px;
}
img{
max-width: 100%;
}
.infos {
margin: 5px;
}
.errors span,
.infos span{
margin: 2px;
padding: 5px;
}
.copytext{
position: fixed;
width: 90px;
left: -100px;
}
.poll td>*{
margin: 15px;
padding: 15px;
}
.poll td.poll_status>*{
margin: 5px;
padding: 5px;
}
.poll td.poll_status>a{
display: inline-block;
}
.poll table{
border-spacing: 0;
}
.poll tr{
border-spacing: 0;
}
.poll td{
border-style: solid;
border-width: 1px 0 0 0;
border-color: black;
}
.poll .disabled{
text-decoration: line-through;
}
img[src*="pos=right"] {
float:right;
margin: 5px 0 5px 5px;
}
img[src*="pos=left"] {
float:left;
margin: 5px 5px 5px 0;
}
img[src*="width=100"]{
max-width: 100px;
}
img[src*="width=200"]{
max-width: 200px;
}
img[src*="width=300"]{
max-width: 300px;
}
img[src*="width=400"]{
max-width: 400px;
}
img[src*="width=500"]{
max-width: 500px;
}
img[src*="width=600"]{
max-width: 600px;
}
img[src*="width=700"]{
max-width: 700px;
}
img[src*="width=800"]{
max-width: 800px;
}
img[src*="width=900"]{
max-width: 900px;
}
img[src*="width=50%"]{
max-width: 50%;
}
img[src*="width=33%"]{
max-width: 33%;
}
img[src$="width=25%"]{
max-width: 25%;
}
#announce{
position: absolute;
right: 3px;
bottom: -40px;
}
span.hover_h {
display: block;
}
label{
display: block;
position: relative;
}
legend{
padding: 0 5px;
border-radius: 5px;
}
.search input {
margin: 5px 0 0 5px;
width: 62%;
}
.search label input{
width: 10px;
}
.search label{
display: none;
}
.search:hover label{
display: block;
}
.search button{
width: 40px;
font-size: 14px;
padding: 0;
}
.share{
height: 35px;
overflow: hidden;
}
.share:hover{
height: inherit;
}
.bookmark textarea[name=comment]{
max-height: 50px;
}
.bookmark textarea[name=comment]:hover{
max-height: unset;
}
.bookmark fieldset input{
width: 100%;
}
.notes .note{
border: 1px solid;
border-radius: 5px;
}
.warnings span{
background: yellow;
}
.errors span{
background: orange;
}
.tasks li{
margin: 5px;
padding-right: 80px;
}
.project-view{
min-width: 100%;
}
.project-view span.hover_h{
position: absolute;
right: 0;
}
.note td.code {
width: 50%;
}
.note td.code textarea {
min-height: 200px;
width: 100%;
}
.add_positions > ul,
.requirements > ul {
max-height: 400px;
overflow: auto;
}
td input,
table.vertical{
width: 100%;
}
.document td label{
width: unset;
}
.document.view .add_positions img{
display: none;
}
td input[type=checkbox]{
width: unset;
}
table.vertical span.right{
position: fixed;
top: 25px;
left: 60px;
right: 5px;
text-align: right;
}
img[src*="pos=right"] {
float:right;
margin: 5px 0 5px 5px;
}
img[src*="pos=left"] {
float:left;
margin: 5px 5px 5px 0;
}
img[src*="width=100"]{
max-width: 100px;
}
img[src*="width=200"]{
max-width: 200px;
}
img[src*="width=300"]{
max-width: 300px;
}
img[src*="width=400"]{
max-width: 400px;
}
img[src*="width=500"]{
max-width: 500px;
}
img[src*="width=600"]{
max-width: 600px;
}
img[src*="width=700"]{
max-width: 700px;
}
img[src*="width=800"]{
max-width: 800px;
}
img[src*="width=900"]{
max-width: 900px;
}
img[src*="width=50%"]{
max-width: 50%;
}
img[src*="width=33%"]{
max-width: 33%;
}
img[src$="width=25%"]{
max-width: 25%;
}
#preview,
#preview-source{
display: inline-block;
max-width: calc(50% - 20px);
vertical-align: bottom;
}
table #preview,
table #preview-source{
display: inherit;
max-width: unset;
vertical-align: inherit;
}
#preview.loading{
opacity: 0.2;
}
.easylist fieldset a.button {
width: 70%;
display: inline-block;
text-align: center;
padding: 10px;
}
@media (min-width: 1100px){
.share{
position: absolute;
right: 0;
top: 8px;
}
}
@media (max-width: 1000px){
*[hide="12"]{
display: none;
}
}
@media (max-width: 900px){
*[hide="11"]{
display: none;
}
#preview,
#preview-source{
display: block;
max-width: unset;
}
}
@media (max-width: 800px){
*[hide="10"]{
display: none;
}
}
@media (max-width: 700px){
*[hide="9"]{
display: none;
}
body{
margin-left: 50px;
margin-top: 60px;
}
#main_menu{
max-width: 50px;
z-index: 10;
overflow: hidden;
background: inherit;
}
#main_menu:hover{
max-width: unset;
}
#main_menu .button{
padding: 6px 0;
}
.search button{
display: none;
}
.search:hover button{
display: inline;
}
}
@media (max-width: 600px){
*[hide="8"]{
display: none;
}
}
@media (max-width: 500px){
*[hide="7"]{
display: none;
}
}
@media (max-width: 400px){
*[hide="6"]{
display: none;
}
}
@media print{
fieldset.note span.right,
#logo, #main_menu {
display: none;
}
fieldset.process, fieldset.database{
page-break-after: always;
}
.export>fieldset{
border: 0 none;
}
}

View File

@@ -0,0 +1,37 @@
.arrow{
stroke: blue;
}
circle, ellipse, rect{
stroke: black;
}
ellipse,
circle.process{
fill: rgba(255,255,255,0.5);
}
rect.terminal{
fill: white;
}
circle.connector{
fill: rgba(0,0,0,0.05);
stroke: none;
}
circle.connector:hover{
fill: rgba(0,0,0,0.6);
}
#backdrop{
fill: transparent;
}
.arrow circle{
stroke: none;
fill: white;
}
.arrow text{
fill: blue;
stroke: none;
}
.arrow:hover circle{
fill: rgba(0,0,255,0.3);
}

Binary file not shown.

View File

@@ -0,0 +1,23 @@
a {
color: palegreen;
}
body {
background: black;
color: white;
}
.error{
background: red;
color: black;
padding: 3px;
}
.error button{
margin: 2px 5px;
}
#navi .button{
border: 1px solid red;
padding: 2px;
margin: 2px;
text-decoration: none;
}

View File

@@ -0,0 +1,21 @@
.model svg{
max-width: 100%;
max-height: 1000px;
}
.arrow{
stroke-width: 2;
}
circle, ellipse, rect{
stroke-width: 2;
}
circle.connector:hover{
r: 30;
}
text{
text-anchor:middle;
alignment-baseline:middle;
font-size:12;
}
.arrow:hover circle{
r: 50;
}

View File

@@ -0,0 +1,80 @@
body{
color: black;
background-color: white;
}
a{
color: #005678;
}
.tasks .pending>a{
color: #888888;
}
.completed>a,
.started>a{
color: #53822c;
}
.canceled>a{
color: gray;
}
tr{
background-color: #dadada91;
}
tr:nth-child(2n+1){
background-color: #b9b9b982;
}
fieldset {
border-color: black;
}
.button,
input,
button {
background-color: black;
color: #d3d3d3;
}
.hover{
background-color: white;
border-color: black;
}
form.invoice textarea {
background-color: black;
color: white;
}
.infos span{
background-color: #00ad00;
color: white;
}
.errors span{
background-color: #ff9847;
color: white;
}
.hit,
.warnings span{
background-color: #ffff00;
color: black;
}
#announce{
background-color: white;
}
#main_menu .button:hover {
color: white;
background-color: gray;
}
tr:hover td{
background-color: #edf9f9;
}
code {
background-color: black;
color: lime;
}

View File

@@ -0,0 +1,597 @@
@font-face {
font-family: "awesome";
src: url("../fontawesome-webfont.woff");
}
*{
max-width:100%;
min-width:auto;
}
a{
text-decoration: none;
}
body{
font-family: sans-serif;
}
code {
display: inline-block;
padding: 5px;
margin: 5px 0;
}
textarea {
min-height: 60px;
width: 100%;
font-size: 16px;
}
textarea:hover{
min-height: 400px;
width: 100%;
}
input[type=text]{
width: 100%;
}
td.connectors form input{
width: 200px;
}
img#logo{
position: fixed;
top: 10px;
right: 10px;
z-index: -1;
}
blockquote{
font-style: italic;
}
#main_menu,
#main_menu form{
display: block;
}
#main_menu .button {
font-size: 12px;
font-weight: normal;
margin-top: 7px;
vertical-align: bottom;
}
.hidden{
display: none !important;
}
.hover:hover .hidden{
display: inherit !important;
}
.emphasized{
font-weight: bold;
}
.add_positions,
.requirements{
max-height: 60px;
max-width: 66%;
overflow: hidden;
}
.add_positions:hover,
.requirements:hover{
max-height: 999999px;
max-width: 999999px;
}
.add_positions > ul > li{
max-height: 20px;
overflow: hidden;
padding-top: 20px;
}
.add_positions > ul > li:hover{
max-height: 999999px;
}
fieldset.add.document:hover {
max-height: unset;
}
fieldset.add.document {
max-height: 5px;
overflow: hidden;
}
fieldset.options label,
.add_positions label span,
.poll_status label,
.requirements label{
display: block;
}
.tasks .canceled a,
.children .inactive,
.requirements .inactive,
.tasks .inactive{
text-decoration: line-through;
}
.tasks .navi a{
display: inline-table;
}
blockquote a,
p a,
.description a{
text-decoration: underline;
}
table {
border-collapse: collapse;
}
tr > *{
padding: 5px 10px;
}
label.street:after,
label.location::after {
content: "\a ";
white-space: pre;
}
.poll.evaluate table tr:nth-child(n+2) th,
.poll.evaluate table td{
text-align: right;
}
.poll .disabled{
text-decoration: line-through;
}
.company div > fieldset,
.company > table{
margin-right: 10px;
float: left;
}
table.time h2{
margin-right: 60px;
}
.file label,
.document .dates label{
display: block
}
.clear,
.document .header,
.document .tags{
clear: both;
}
fieldset {
border-radius: 10px;
border-width: 1px;
}
.contacts fieldset,
.document .customer,
.document .document_type,
.document .sender,
.document .court,
.document .dates,
.document .template,
fieldset.del_note,
fieldset.login_service_list,
fieldset.userlist,
fieldset.document.list{
float: left;
}
.document .dates label{
text-align: right;
}
.button,
input,
button {
border: 0 none;
font-weight: bold;
margin: 0 2px;
padding: 3px;
display: inline-block;
}
.change_state,
td.connectors button[type="submit"],
.prop_action,
input[type="submit"] {
clear: both;
float: right;
}
.symbol{
font-family: awesome;
font-size: 20px;
font-weight: normal;
}
#main_menu .symbol{
font-size: 14px;
}
.right{
float: right;
margin: 0 0 0 5px;
}
.tasks .project {
font-weight: bold;
}
.right-abs {
position: absolute;
right: 5px;
top: 5px;
}
.right-fix {
position: fixed;
right: 5px;
top: 5px;
}
.hover {
border-width: 1px;
border-style: solid;
border-radius: 5px;
max-height: 35px;
overflow: hidden;
z-index: 10;
}
.hover:hover {
max-height: unset;
}
.hover_h > a:nth-child(n+2){
display: none;
}
.hover_h:hover {
padding: 5px 0 20px;
}
.hover_h:hover > a:nth-child(n+2){
display: inherit;
}
form.document textarea {
font-weight: bold;
min-height: 90px;
width: 100%;
}
.pos_price,
form.document input.price,
form.document input.amount{
max-width: 60px;
text-align: right;
}
form.document .tax{
min-width: 70px;
}
form.document .tax input{
max-width: 40px;
text-align: right;
}
td > h1{
display: inline-block;
margin: 0 10px 0 0;
}
.center,
.infos,
.errors,
.warnings{
text-align: center;
}
.infos span,
.errors span,
.warnings span{
margin: 5px 0 0;
padding: 5px;
border-radius: 10px;
display: inline-block;
}
.tags span{
display: inline-block;
vertical-align: top;
}
.bookmark .share,
.bookmark .tags{
display: inline-block;
}
.bookmark form .share{
height: 20px;
overflow: hidden;
}
.bookmark form .share:hover{
height: initial;
}
fieldset.bookmark > fieldset{
max-height: 14px;
overflow: hidden;
}
fieldset.bookmark > fieldset.tags{
max-height: unset;
}
fieldset.bookmark > fieldset:hover{
max-height: unset;
}
.bookmark>fieldset>a{
word-wrap: break-word;
display: block;
min-width: auto;
}
.bookmark>fieldset>a.button{
display: inline-block;
}
.copytext{
position:fixed;
width: 100px;
left: -1000px;
}
img[src*="pos=right"] {
float:right;
margin: 5px 0 5px 5px;
}
img[src*="pos=left"] {
float:left;
margin: 5px 5px 5px 0;
}
img[src*="width=100"]{
max-width: 100px;
}
img[src*="width=200"]{
max-width: 200px;
}
img[src*="width=300"]{
max-width: 300px;
}
img[src*="width=400"]{
max-width: 400px;
}
img[src*="width=500"]{
max-width: 500px;
}
img[src*="width=600"]{
max-width: 600px;
}
img[src*="width=700"]{
max-width: 700px;
}
img[src*="width=800"]{
max-width: 800px;
}
img[src*="width=900"]{
max-width: 900px;
}
img[src*="width=50%"]{
max-width: 50%;
}
img[src*="width=33%"]{
max-width: 33%;
}
img[src$="width=25%"]{
max-width: 25%;
}
#announce{
position: fixed;
bottom: 0;
right: 0;
padding: 3px 5px 0;
border-top-left-radius: 7px;
}
fieldset.scrolling{
overflow: scroll;
max-height: 80%;
}
svg#gantt{
max-width: unset;
}
svg .row{
fill: none;
pointer-events: all;
}
svg .row:hover{
fill: #333333;
}
svg .duration{
fill:rgba(255,0,255,0.4);
stroke:none;
}
svg .schedule{
fill:none;
stroke-width:1;
stroke: yellow;
}
svg .start{
stroke-dasharray: 10,30,40;
}
svg .stop{
stroke-dasharray: 50,30;
}
svg text{
stroke: none;
fill: red;
}
div.search{
display: inline-block;
max-width: 150px;
}
div.search input,
div.search label{
display: none;
}
div.search:hover input,
div.search:hover label{
display: initial;
}
.note td.code {
width: 50%;
}
.note td.code textarea {
min-height: 200px;
}
.project-index td .users{
max-height: 30px;
overflow: hidden;
}
.project-index tr:hover td .users{
max-height: none;
}
.easylist fieldset a.button {
width: 80%;
padding: 30px;
text-align: center;
}
#preview,
#preview-source{
display: inline-block;
max-width: calc(50% - 20px);
vertical-align: bottom;
}
table #preview,
table #preview-source{
display: inherit;
max-width: unset;
vertical-align: inherit;
}
#preview.loading{
opacity: 0.2;
}
.completed > a::before {
content: " ✓";
}
@media (max-width:1199px) {
*[hide="12"]{
display: none;
}
table.document input{
max-width: 100px;
}
}
@media (max-width: 1100px){
*[hide="11"]{
display: none;
}
}
@media (max-width: 1000px){
*[hide="10"]{
display: none;
}
}
@media (max-width: 900px){
*[hide="9"]{
display: none;
}
table.document input{
max-width: 60px;
}
table.document .tax input,
table.document input.amount{
max-width: 25px;
}
}
@media (max-width: 800px){
*[hide="8"]{
display: none;
}
}
@media (max-width: 700px){
*[hide="7"]{
display: none;
}
fieldset.bookmark > fieldset{
max-height: 50px;
}
#preview,
#preview-source{
display: block;
max-width: unset;
}
}
@media (max-width: 600px){
*[hide="6"]{
display: none;
}
.easylist fieldset a.button {
width: 60%;
}
}
@media (max-width: 500px){
*[hide="5"]{
display: none;
}
}
@media (max-width: 400px){
*[hide="4"]{
display: none;
}
}
@media print{
fieldset.note span.right,
#logo, #main_menu {
display: none;
}
fieldset.process, fieldset.database{
page-break-after: always;
}
.export>fieldset{
border: 0 none;
}
}

View File

@@ -0,0 +1,37 @@
.arrow{
stroke: blue;
}
circle, ellipse, rect{
stroke: black;
}
ellipse,
circle.process{
fill: rgba(255,255,255,0.5);
}
rect.terminal{
fill: white;
}
circle.connector{
fill: rgba(0,0,0,0.05);
stroke: none;
}
circle.connector:hover{
fill: rgba(0,0,0,0.6);
}
#backdrop{
fill: transparent;
}
.arrow circle{
stroke: none;
fill: white;
}
.arrow text{
fill: blue;
stroke: none;
}
.arrow:hover circle{
fill: rgba(0,0,255,0.3);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,171 @@
const DEL = 'DELETE';
const PATCH = 'PATCH';
const POST = 'POST';
// remove all children from element, leave only the first <keep> children
function clearElement(key,keep = 1){
var elem = key instanceof Element ? key : get(key);
while (elem.childElementCount > keep) elem.removeChild(elem.lastChild);
return elem;
}
function create(type,code){
var elem = document.createElement(type);
if (code) elem.innerHTML = code;
return elem;
}
function disable(id){
var elem = get(id);
elem.setAttribute('disabled','disabled');
return elem;
}
function enable(id){
var elem = get(id);
elem.removeAttribute('disabled');
return elem;
}
function get(id){
return document.getElementById(id);
}
function getCookie(cname) {
let name = cname + "=";
let decodedCookie = decodeURIComponent(document.cookie);
let arr = decodedCookie.split(';');
for(let i = 0; i <arr.length; i++) {
let c = arr[i];
while (c.charAt(0) == ' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
return "";
}
function getValue(id){
return get(id).value;
}
function hide(id){
var elem = get(id);
if (elem) elem.style.display = 'none';
return elem;
}
function hideAll(clazz){
var elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if((' ' + elems[i].className + ' ').indexOf(' ' + clazz + ' ') > -1) elems[i].style.display = 'none';
}
}
function isChecked(id){
return get(id).checked;
}
function menu(){
fetch('<? user.api.menu ?>').then(showMenu);
}
// Replacement for Object.toEntries(…)
function paramsToObject(entries) {
const result = {};
for(var key of entries) { // each 'entry' is a [key, value] tupple
result[key[0]] = key[1];
}
return result;
}
function redirect(page){
window.location.href = page;
}
function setText(id, text){
var elem = get(id);
elem.innerHTML = text;
return elem;
}
function setValue(id,newVal){
var elem = get(id);
if (elem) elem.value = newVal;
return elem;
}
function show(id){
var elem = get(id);
if (elem) elem.style.display = '';
return elem;
}
function showAll(clazz){
var elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if((' ' + elems[i].className + ' ').indexOf(' ' + clazz + ' ') > -1) elems[i].style.display = '';
}
}
function showError(json){
var message = json.message;
var box = show('error');
box.innerHTML = message;
var button = document.createElement('button');
button.innerText = 'ok';
button.addEventListener('click',() => hide('error'))
box.appendChild(button);
box.scrollIntoView();
}
async function showMenu(resp){
if (resp.ok){
var menu = get('main_menu');
var json = await resp.json();
var entries = json.entries;
entries.sort((a,b) => a.index - b.index);
for (var idx in entries){
var entry = entries[idx];
menu.insertAdjacentHTML('beforeend','<a class="button" href="'+entry.url+'">'+entry.caption+'</a>');
}
}
}
function sortTableColumn(column){
var table = column;
var columnIndex = [...column.parentNode.children].indexOf(column);
while (table.localName != 'table'){
if (!table.parentNode) return;
table = table.parentNode;
}
var rows = Array.from(table.tBodies[0].rows);
var asc = table.getAttribute("data-sort-dir") !== "desc";
table.setAttribute("data-sort-dir", asc ? "desc" : "asc");
rows.sort(function(a, b) {
var cellA = a.cells[columnIndex].innerText.trim();
var cellB = b.cells[columnIndex].innerText.trim();
var numA = parseFloat(cellA);
var numB = parseFloat(cellB);
if (!isNaN(numA) && !isNaN(numB)) return asc ? numA - numB : numB - numA;
return asc ? cellA.localeCompare(cellB) : cellB.localeCompare(cellA);
});
// Append sorted rows back to the tbody
rows.forEach(function(row) {
table.tBodies[0].appendChild(row);
});
}
function spread(json,prefix){
for (var key in json){
var val = json[key];
var id = prefix+"."+key;
if (typeof val === 'object'){
spread(val,id);
continue;
}
if (typeof val === 'string') val = val.replaceAll("\n","<br/>\n");
var tag = get(id);
if (tag) tag.innerHTML = val;
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,124 @@
const POST = 'POST';
function toggle(selector){
$(selector).toggle("slow");
}
function addDescriptionOption(text){
if (text.trim() == '') return;
var select = $('select[name=alt_comment]');
if (select.length == 0){
var area=$('textarea[name=comment]');
var hint= area.attr('descr');
$('<select/>',{name: 'alt_comment'})
.append($('<option/>',{value: '',text: hint}))
.insertBefore(area);
select = $('select[name=alt_comment]');
select.on('change',function(){
$('textarea[name=comment]').val(select.find('option:selected').text());
});
}
select.append($('<option/>',{text: text}));
}
function getHeadings(elem){
$('select[name=alt_comment]').remove();
$('textarea[name=comment]').val('');
var url=window.location.href.replace(/\/([^\/]*)$/,'/headings')+'?page='+encodeURIComponent(elem.value);
$.ajax({
url: url,
dataType: "json",
success: function(data){
for (var index in data.headings) addDescriptionOption(data.headings[index]);
}
});
}
var preview_timer = 0;
function keyEvent(e){
if (e.ctrlKey){
if (e.key === 'f') { // display search form on Ctrl+F
e.preventDefault();
$('.search *').show();
$('.search form>input').focus();
} else
if (e.key === 's') { // save current element on Ctrl+S
var saveBtn = $('form[method=POST] button[type="submit"]')[0];
if (saveBtn) {
e.preventDefault();
saveBtn.click();
}
}
return;
}
if (e.altKey){
switch (e.keyCode){
case 38:
$('a.parent').each(function(){this.click()});
return;
case 39:
$('a.next').each(function(){this.click()});
return
default:
console.log(e.keyCode);
}
}
switch (e.keyCode){
case 27: // ESC
if (document.location.href.includes("/add")) window.history.back();
if (document.location.href.includes("/edit")) window.history.back();
return;
case 107: // +
var active = document.activeElement.tagName;
switch (active){
case 'TEXTAREA':
// do not activate add-link when in these fields
return;
}
var addLink = $('a[href^="add"]')[0];
if (addLink) addLink.click();
return;
}
if (e.target.id == 'preview-source') {
clearTimeout(preview_timer);
preview_timer = setTimeout(preview,750,e.target);
}
console.log(e);
}
getHeadingsTimer = null;
function getHeadings_delayed(){
if (getHeadingsTimer != null) clearTimeout(getHeadingsTimer);
getHeadingsTimer = window.setTimeout(getHeadings,200,this);
}
async function handlePreview(resp,txt){
const target = document.getElementById('preview');
if (resp.ok){
const content = await resp.text();
$(target).removeClass('loading').html(content);
setTimeout(() => {
$(txt).css('height',Math.max(target.clientHeight,200));
},200);
} else {
$(target).removeClass('loading').html('Preview failed…');
console.log("preview request failed!");
}
}
function preview(txt){
let target = document.getElementById('preview');
if (!target) return;
$(target).addClass('loading');
$(target).html('loading…');
let url = '<? base ?>/api/preview';
fetch(url,{
method: POST,
body: txt.value,
credentials: 'include'
}).then(resp => handlePreview(resp,txt));
}
document.addEventListener('keydown',keyEvent);

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB