From 8d42144107088ca04d66fb97efec1eee52ef4e2f Mon Sep 17 00:00:00 2001 From: marko Date: Mon, 4 Aug 2025 16:47:14 +0200 Subject: [PATCH] added 404 page, added title+description to pages --- homepage/cwsvJudo/Makefile.heliohost | 15 +- homepage/cwsvJudo/PHP.dockerfile | 6 + .../configs/localDocker/pages.config.inc.php | 25 + homepage/cwsvJudo/docker-compose.yaml | 1 + homepage/cwsvJudo/scripts/upload-heliohost | 1 + .../src/css/cwsvJudo-2018-wkKalender.css | 1145 ----------------- .../cwsvJudo/src/css/materialize/fonts.css | 30 +- .../src/css/materialize/shiai-calendar.css | 680 ++++++++++ .../src/favIcons/android-chrome-512x512.png | Bin 0 -> 38792 bytes .../cwsvJudo/src/htaccess/heliohost/.htaccess | 22 +- homepage/cwsvJudo/src/page_data/404/404.md | 7 + homepage/cwsvJudo/src/page_data/404/meta.json | 24 + .../cwsvJudo/src/page_data/index/promos.php | 6 + .../cwsvJudo/src/page_data/kalender/meta.json | 4 + .../cwsvJudo/src/pages/responsive/config.php | 6 - .../cwsvJudo/src/pages/responsive/index.php | 66 +- .../responsive/phpLibs/cwsvJudo/kalender.php | 245 +++- homepage/cwsvJudo/src/shared/favicon.html.inc | 16 +- 18 files changed, 1083 insertions(+), 1216 deletions(-) create mode 100644 homepage/cwsvJudo/configs/localDocker/pages.config.inc.php delete mode 100644 homepage/cwsvJudo/src/css/cwsvJudo-2018-wkKalender.css create mode 100644 homepage/cwsvJudo/src/css/materialize/shiai-calendar.css create mode 100644 homepage/cwsvJudo/src/favIcons/android-chrome-512x512.png create mode 100644 homepage/cwsvJudo/src/page_data/404/404.md create mode 100644 homepage/cwsvJudo/src/page_data/404/meta.json delete mode 100644 homepage/cwsvJudo/src/pages/responsive/config.php diff --git a/homepage/cwsvJudo/Makefile.heliohost b/homepage/cwsvJudo/Makefile.heliohost index ef0773b..8d59df5 100644 --- a/homepage/cwsvJudo/Makefile.heliohost +++ b/homepage/cwsvJudo/Makefile.heliohost @@ -20,14 +20,9 @@ all: build/css/cwsvJudo.css images make -j graphiken make build/css/cwsvJudo.css -# minimizing wallpaper sizes -build/graphiken/wallpapers/%.jpg: graphiken/wallpapers/%.jpg - mkdir -p build/graphiken/wallpapers - # guetzli $^ $@ - $(LN) $^ $@ -build/graphiken/wallpapers/%.svg: graphiken/wallpapers/%.svg - mkdir -p build/graphiken/wallpapers - $(LN) $^ $@ +.PHONY: wallpapers +wallpapers: + find graphiken/wallpapers/ -name *.jpg -exec ./scripts/mk-wallpaper {} \; .PHONY: images images: $(wallpapers) @@ -148,7 +143,7 @@ dist: all find ./build/graphiken/cwsvJudoLogoWappen -type f -exec $(LN) {} $(distDir)/httpdocs/ressourcen/graphiken/logos \; # - wallpapers mkdir -p $(distDir)/httpdocs/ressourcen/graphiken/wallpapers - find ./build/graphiken/wallpapers -type f -exec $(LN) {} $(distDir)/httpdocs/ressourcen/graphiken/wallpapers \; + find ./build/graphics/wallpapers -type d -exec cp -r {} $(distDir)/httpdocs/ressourcen/graphiken/wallpapers \; # - icons mkdir -p $(distDir)/httpdocs/ressourcen/graphiken/icons find ./graphiken/icons -type f -exec $(LN) {} $(distDir)/httpdocs/ressourcen/graphiken/icons \; @@ -180,7 +175,7 @@ dist: all $(LN) ./src/htaccess/heliohost/pages/responsive/.htaccess $(distDir)/httpdocs/pages/responsive/.htaccess # config files - $(LN) ./configs/heliohost/pages.config.inc.php $(distDir)/httpdocs/pages/responsive/config.php + $(LN) ./configs/localDocker/pages.config.inc.php $(distDir)/httpdocs/pages/responsive/config.php mkdir -p $(distDir)/.local $(LN) configs/heliohost/config.json $(distDir)/.local/config.json diff --git a/homepage/cwsvJudo/PHP.dockerfile b/homepage/cwsvJudo/PHP.dockerfile index 7c72276..fed6cd6 100644 --- a/homepage/cwsvJudo/PHP.dockerfile +++ b/homepage/cwsvJudo/PHP.dockerfile @@ -4,6 +4,12 @@ FROM php:8.2-apache # startup scripts for the image # - docker-php-ext-install -- install helper script from PHP RUN docker-php-ext-install pdo pdo_mysql +# install aditional php extensions +# - international time +RUN apt-get -y update \ + && apt-get install -y libicu-dev \ + && docker-php-ext-configure intl \ + && docker-php-ext-install intl # install and add xdebug extension # @todo What is pecl? diff --git a/homepage/cwsvJudo/configs/localDocker/pages.config.inc.php b/homepage/cwsvJudo/configs/localDocker/pages.config.inc.php new file mode 100644 index 0000000..631af40 --- /dev/null +++ b/homepage/cwsvJudo/configs/localDocker/pages.config.inc.php @@ -0,0 +1,25 @@ + diff --git a/homepage/cwsvJudo/docker-compose.yaml b/homepage/cwsvJudo/docker-compose.yaml index 82115f0..8b839b3 100644 --- a/homepage/cwsvJudo/docker-compose.yaml +++ b/homepage/cwsvJudo/docker-compose.yaml @@ -6,6 +6,7 @@ services: build: context: . dockerfile: PHP.dockerfile + network: host ports: # this line maps your pc port to the container port - "8080:80" diff --git a/homepage/cwsvJudo/scripts/upload-heliohost b/homepage/cwsvJudo/scripts/upload-heliohost index 0a2b787..818049f 100644 --- a/homepage/cwsvJudo/scripts/upload-heliohost +++ b/homepage/cwsvJudo/scripts/upload-heliohost @@ -8,4 +8,5 @@ set ftp:ssl-allow off # upload: mirror --verbose --continue --parallel=8 --reverse ./build/dist/heliohost / put configs/heliohost/db.config.php -o /.local/db.config.php +put configs/heliohost/pages.config.inc.php -o httpdocs/pages/responsive/config.php # exit diff --git a/homepage/cwsvJudo/src/css/cwsvJudo-2018-wkKalender.css b/homepage/cwsvJudo/src/css/cwsvJudo-2018-wkKalender.css deleted file mode 100644 index 70ced6d..0000000 --- a/homepage/cwsvJudo/src/css/cwsvJudo-2018-wkKalender.css +++ /dev/null @@ -1,1145 +0,0 @@ -.wkKalender{ - width: 100%; - max-width: 100%; - background-color: #FFAE00; - margin-bottom: 0; -} - -.wkKalender > thead, -.wkKalender > tfoot { - display: none; -} - -.wkKalender > tbody { - display: block; -} - -.wkKalender > tbody > tr:empty, -.wkKalender > tbody > tr > th:empty{ - display: none; -} -.wkKalender > tbody > tr{ - display: block; - border: 1px solid #e0e0e0; - border-radius: 2px; - margin-bottom: 1.6rem; -} - -.wkKalender th { - display: block; - background-color: #666; - color: #fff; -} - -.wkKalender > tbody > tr > td { - display: block; - vertical-align: middle; - text-align: right; -} -.wkKalender > tbody > tr > td:nth-child(odd) { - background-color: #FF8100; -} -.wkKalender > tbody > tr > td[data-title]:before { - content: attr(data-title); - float: left; - font-size: inherit; - font-weight: 400; - color: #757575; -} - -.kalenderDatum{ - display: flex; - justify-content: flex-end; -} -.kalenderDatum > span:nth-child(4)::after{ - content: ", d. "; - white-space: pre; -} -.kalenderDatum > span:nth-child(4){ - order: 1; -} -.kalenderDatum > span:nth-child(3)::after{ - content: ". "; - white-space: pre; -} -.kalenderDatum > span:nth-child(3){ - order: 2; -} -.kalenderDatum > span:nth-child(2)::after{ - content: " "; - white-space: pre; -} -.kalenderDatum > span:nth-child(2){ - order: 3; -} -.kalenderDatum > span:nth-child(1){ - order: 4; -} - - -@media screen and (min-width: 1280px){ - .wkKalender > thead{ - display: table-header-group; - width: 100%; - } - .wkKalender > tbody > tr{ - display: table-row; - width: 100%; - } - .wkKalender > tbody > tr > td { - display: table-cell; - } - .wkKalender > tbody > tr > td[data-title]:before { - display: none; - content: ""; - } - .wkKalender > tbody{ - display: table-row-group; - } - .wkKalender > tfoot{ - display: table-footer-group; - } - .wkKalender > tbody > tr { - border: 1px solid #e0e0e0; - border-radius: 2px; - margin-bottom: 1.6rem; - } - .wkKalender > tbody > tr > td { - vertical-align: middle; - text-align: initial; - } - .wkKalender > tbody > tr:nth-child(odd) { - background-color: #FF8100; - } - .wkKalender > tbody > tr > td:nth-child(odd) { - background-color: inherit; - } - .wkKalender > tbody > tr > td[data-title]:before { - content: initial; - } - .wkKalender tr, th, td { - border: 1px solid black; - } - .wkKalender th { - display: table-cell; - } - - .kalenderDatum{ - flex-direction: column; - align-items: center; - } - .kalenderDatum > span:nth-child(4)::after{ - content: initial; - white-space: initial; - } - .kalenderDatum > span:nth-child(4){ - display: none; - } - .kalenderDatum > span:nth-child(3)::after{ - content: "."; - white-space: pre; - } - .kalenderDatum > span:nth-child(2)::after{ - content: initial; - white-space: initial; - } - - - -/* https://codepen.io/denilsonsa/pen/Etrba */ - - /****************************************/ - /* Styling rules, such as font and colors */ - .date-as-calendar { - font-variant: normal; - font-style: normal; - font-weight: normal; - font-family: "Helvetica", "Arial", sans-serif; - - /* It seems vertical-align: baseline does not work correctly with display: inline-flex. */ - vertical-align: top; - - /* margin: 1ex; */ - - color: black; - background: white; - background : linear-gradient(to bottom right, #FFF 0%, #EEE 100%); - - border: 1px solid #888; - border-radius: 3px; - overflow: hidden; - - box-shadow: 2px 2px 2px -2px black; - } - .date-as-calendar .weekday, - .date-as-calendar .day, - .date-as-calendar .month, - .date-as-calendar .year { - text-align: center; - line-height: 1.0; - } - .date-as-calendar .month { - font-family: "Oswald", sans-serif; - text-transform: uppercase; - background: #B11; - background : linear-gradient(to bottom right, #D66 0%, #A00 100%); - color: white; - } - - /****************************************/ - /* Layout rules using position: absolute and pixels. */ - .position-pixels.date-as-calendar { - display: inline-block; - position: relative; - width: 64px; - height: 64px; - } - .position-pixels.date-as-calendar .weekday, - .position-pixels.date-as-calendar .day, - .position-pixels.date-as-calendar .month, - .position-pixels.date-as-calendar .year { - display: block; - position: absolute; - left: 0; - right: 0; - width: 100%; - height: 1em; - } - .position-pixels.date-as-calendar .month { - top: 0px; - font-size: 12px; - padding: 2px 0; - } - .position-pixels.date-as-calendar .weekday { - top: 16px; - font-size: 10px; - } - .position-pixels.date-as-calendar .day { - top: 26px; - font-size: 24px; - } - .position-pixels.date-as-calendar .year { - top: 50px; - font-size: 14px; - } - - /****************************************/ - /* Layout rules using position: absolute and relative dimensions using em. */ - .position-em.date-as-calendar { - display: inline-block; - position: relative; - - width: 4em; - height: 4em; - } - .position-em.date-as-calendar .weekday, - .position-em.date-as-calendar .day, - .position-em.date-as-calendar .month, - .position-em.date-as-calendar .year { - display: block; - position: absolute; - left: 0; - right: 0; - width: 100%; - height: 1em; - } - .position-em.date-as-calendar .month { - top: 0px; - font-size: 0.75em; - padding: 0.1em 0; - } - .position-em.date-as-calendar .weekday { - top: 1.6em; - font-size: 0.6125em; - } - .position-em.date-as-calendar .day { - top: 1.1em; - font-size: 1.5em - } - .position-em.date-as-calendar .year { - bottom: 0px; - font-size: 0.87750em; - } - - /****************************************/ - /* Layout rules using display: inline-flex and relative dimensions using em. */ - .inline-flex.date-as-calendar { - display: inline-flex; - flex-direction: column; - flex-wrap: nowrap; - justify-content: space-between; - - width: 4em; - height: 4em; - } - .inline-flex.date-as-calendar .weekday, - .inline-flex.date-as-calendar .day, - .inline-flex.date-as-calendar .month, - .inline-flex.date-as-calendar .year { - display: block; - flex: 1 1 auto; - } - .inline-flex.date-as-calendar .month { - order: 1; - font-size: 0.75em; - padding: 0.1em 0; - } - .inline-flex.date-as-calendar .weekday { - order: 2; - font-size: 0.6125em; - } - .inline-flex.date-as-calendar .day { - order: 3; - font-size: 1.5em; - } - .inline-flex.date-as-calendar .year { - order: 4; - font-size: 0.87750em; - } - - /****************************************/ - /* Multiple sizes. */ - .date-as-calendar.size0_5x { - font-size: 8px; - } - .date-as-calendar.size0_75x { - font-size: 12px; - } - .date-as-calendar.size1x { - font-size: 16px; - } - .date-as-calendar.size1_25x { - font-size: 20px; - } - .date-as-calendar.size1_5x { - font-size: 24px; - } - .date-as-calendar.size1_75x { - font-size: 28px; - } - .date-as-calendar.size2x { - font-size: 32px; - } - .date-as-calendar.size3x { - font-size: 48px; - } - - -} - -/*abgeschaut*/ -.shadow-z-1 { - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24); -} - - -/* -- Material Design Table style -------------- */ -/* -.wkKalender > thead > tr, -.wkKalender > tbody > tr, -.wkKalender > tfoot > tr { - transition: all 0.3s ease; -} - -.wkKalender > thead > tr > th, -.wkKalender > tbody > tr > th, -.wkKalender > tfoot > tr > th, -.wkKalender > thead > tr > td, -.wkKalender > tbody > tr > td, -.wkKalender > tfoot > tr > td { - text-align: left; - padding: 1.6rem; - vertical-align: top; - border-top: 0; - transition: all 0.3s ease; -} -.wkKalender > thead > tr > th { - font-weight: 400; - color: #757575; - vertical-align: bottom; - border-bottom: 1px solid rgba(0, 0, 0, 0.12); -} -.wkKalender > caption + thead > tr:first-child > th, -.wkKalender > colgroup + thead > tr:first-child > th, -.wkKalender > thead:first-child > tr:first-child > th, -.wkKalender > caption + thead > tr:first-child > td, -.wkKalender > colgroup + thead > tr:first-child > td, -.wkKalender > thead:first-child > tr:first-child > td { - border-top: 0; -} -.wkKalender > tbody + tbody { - border-top: 1px solid rgba(0, 0, 0, 0.12); -} -.wkKalender .table { - background-color: #fff; -} -.wkKalender .no-border { - border: 0; -} -@media screen and (max-width: 640px){ - .table-responsive-vertical.shadow-z-1 > .table > tbody > tr { - border: none; - -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24); - -moz-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24); - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24); - } - .wkKalender-bordered { - border: 0; - } - .wkKalender-bordered > tbody > tr > td { - border: 0; - border-bottom: 1px solid #e0e0e0; - } - .wkKalender-bordered > tbody > tr > td:last-child { - border-bottom: 0; - } - .wkKalender-striped > tbody > tr > td, - .wkKalender-striped > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .wkKalender-striped > tbody > tr > td:nth-child(odd) { - background-color: #f5f5f5; - } - .wkKalender-hover > tbody > tr:hover > td, - .wkKalender-hover > tbody > tr:hover { - background-color: #fff; - } - .wkKalender-hover > tbody > tr > td:hover { - background-color: rgba(0, 0, 0, 0.12); - } -} - -.wkKalender-striped.table-mc-red > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-red > tbody > tr:nth-child(odd) > th { - background-color: #fde0dc; -} -.wkKalender-hover.table-mc-red > tbody > tr:hover > td, -.wkKalender-hover.table-mc-red > tbody > tr:hover > th { - background-color: #f9bdbb; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-red > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-red > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-red > tbody > tr > td:nth-child(odd) { - background-color: #fde0dc; - } - .table-responsive-vertical .table-hover.table-mc-red > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-red > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-red > tbody > tr > td:hover { - background-color: #f9bdbb; - } -} -.wkKalender-striped.table-mc-pink > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-pink > tbody > tr:nth-child(odd) > th { - background-color: #fce4ec; -} -.wkKalender-hover.table-mc-pink > tbody > tr:hover > td, -.wkKalender-hover.table-mc-pink > tbody > tr:hover > th { - background-color: #f8bbd0; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-pink > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-pink > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-pink > tbody > tr > td:nth-child(odd) { - background-color: #fce4ec; - } - .table-responsive-vertical .table-hover.table-mc-pink > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-pink > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-pink > tbody > tr > td:hover { - background-color: #f8bbd0; - } -} -.wkKalender-striped.table-mc-purple > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-purple > tbody > tr:nth-child(odd) > th { - background-color: #f3e5f5; -} -.wkKalender-hover.table-mc-purple > tbody > tr:hover > td, -.wkKalender-hover.table-mc-purple > tbody > tr:hover > th { - background-color: #e1bee7; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-purple > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-purple > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-purple > tbody > tr > td:nth-child(odd) { - background-color: #f3e5f5; - } - .table-responsive-vertical .table-hover.table-mc-purple > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-purple > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-purple > tbody > tr > td:hover { - background-color: #e1bee7; - } -} -.wkKalender-striped.table-mc-deep-purple > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-deep-purple > tbody > tr:nth-child(odd) > th { - background-color: #ede7f6; -} -.wkKalender-hover.table-mc-deep-purple > tbody > tr:hover > td, -.wkKalender-hover.table-mc-deep-purple > tbody > tr:hover > th { - background-color: #d1c4e9; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-deep-purple > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-deep-purple > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-deep-purple > tbody > tr > td:nth-child(odd) { - background-color: #ede7f6; - } - .table-responsive-vertical .table-hover.table-mc-deep-purple > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-deep-purple > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-deep-purple > tbody > tr > td:hover { - background-color: #d1c4e9; - } -} -.wkKalender-striped.table-mc-indigo > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-indigo > tbody > tr:nth-child(odd) > th { - background-color: #e8eaf6; -} -.wkKalender-hover.table-mc-indigo > tbody > tr:hover > td, -.wkKalender-hover.table-mc-indigo > tbody > tr:hover > th { - background-color: #c5cae9; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-indigo > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-indigo > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-indigo > tbody > tr > td:nth-child(odd) { - background-color: #e8eaf6; - } - .table-responsive-vertical .table-hover.table-mc-indigo > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-indigo > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-indigo > tbody > tr > td:hover { - background-color: #c5cae9; - } -} -.wkKalender-striped.table-mc-blue > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-blue > tbody > tr:nth-child(odd) > th { - background-color: #e7e9fd; -} -.wkKalender-hover.table-mc-blue > tbody > tr:hover > td, -.wkKalender-hover.table-mc-blue > tbody > tr:hover > th { - background-color: #d0d9ff; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-blue > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-blue > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-blue > tbody > tr > td:nth-child(odd) { - background-color: #e7e9fd; - } - .table-responsive-vertical .table-hover.table-mc-blue > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-blue > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-blue > tbody > tr > td:hover { - background-color: #d0d9ff; - } -} -.wkKalender-striped.table-mc-light-blue > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-light-blue > tbody > tr:nth-child(odd) > th { - background-color: #e1f5fe; -} -.wkKalender-hover.table-mc-light-blue > tbody > tr:hover > td, -.wkKalender-hover.table-mc-light-blue > tbody > tr:hover > th { - background-color: #b3e5fc; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-light-blue > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-light-blue > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-light-blue > tbody > tr > td:nth-child(odd) { - background-color: #e1f5fe; - } - .table-responsive-vertical .table-hover.table-mc-light-blue > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-light-blue > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-light-blue > tbody > tr > td:hover { - background-color: #b3e5fc; - } -} -.wkKalender-striped.table-mc-cyan > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-cyan > tbody > tr:nth-child(odd) > th { - background-color: #e0f7fa; -} -.wkKalender-hover.table-mc-cyan > tbody > tr:hover > td, -.wkKalender-hover.table-mc-cyan > tbody > tr:hover > th { - background-color: #b2ebf2; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-cyan > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-cyan > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-cyan > tbody > tr > td:nth-child(odd) { - background-color: #e0f7fa; - } - .table-responsive-vertical .table-hover.table-mc-cyan > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-cyan > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-cyan > tbody > tr > td:hover { - background-color: #b2ebf2; - } -} -.wkKalender-striped.table-mc-teal > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-teal > tbody > tr:nth-child(odd) > th { - background-color: #e0f2f1; -} -.wkKalender-hover.table-mc-teal > tbody > tr:hover > td, -.wkKalender-hover.table-mc-teal > tbody > tr:hover > th { - background-color: #b2dfdb; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-teal > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-teal > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-teal > tbody > tr > td:nth-child(odd) { - background-color: #e0f2f1; - } - .table-responsive-vertical .table-hover.table-mc-teal > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-teal > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-teal > tbody > tr > td:hover { - background-color: #b2dfdb; - } -} -.wkKalender-striped.table-mc-green > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-green > tbody > tr:nth-child(odd) > th { - background-color: #d0f8ce; -} -.wkKalender-hover.table-mc-green > tbody > tr:hover > td, -.wkKalender-hover.table-mc-green > tbody > tr:hover > th { - background-color: #a3e9a4; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-green > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-green > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-green > tbody > tr > td:nth-child(odd) { - background-color: #d0f8ce; - } - .table-responsive-vertical .table-hover.table-mc-green > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-green > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-green > tbody > tr > td:hover { - background-color: #a3e9a4; - } -} -.wkKalender-striped.table-mc-light-green > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-light-green > tbody > tr:nth-child(odd) > th { - background-color: #f1f8e9; -} -.wkKalender-hover.table-mc-light-green > tbody > tr:hover > td, -.wkKalender-hover.table-mc-light-green > tbody > tr:hover > th { - background-color: #dcedc8; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-light-green > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-light-green > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-light-green > tbody > tr > td:nth-child(odd) { - background-color: #f1f8e9; - } - .table-responsive-vertical .table-hover.table-mc-light-green > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-light-green > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-light-green > tbody > tr > td:hover { - background-color: #dcedc8; - } -} -.wkKalender-striped.table-mc-lime > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-lime > tbody > tr:nth-child(odd) > th { - background-color: #f9fbe7; -} -.wkKalender-hover.table-mc-lime > tbody > tr:hover > td, -.wkKalender-hover.table-mc-lime > tbody > tr:hover > th { - background-color: #f0f4c3; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-lime > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-lime > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-lime > tbody > tr > td:nth-child(odd) { - background-color: #f9fbe7; - } - .table-responsive-vertical .table-hover.table-mc-lime > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-lime > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-lime > tbody > tr > td:hover { - background-color: #f0f4c3; - } -} -.wkKalender-striped.table-mc-yellow > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-yellow > tbody > tr:nth-child(odd) > th { - background-color: #fffde7; -} -.wkKalender-hover.table-mc-yellow > tbody > tr:hover > td, -.wkKalender-hover.table-mc-yellow > tbody > tr:hover > th { - background-color: #fff9c4; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-yellow > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-yellow > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-yellow > tbody > tr > td:nth-child(odd) { - background-color: #fffde7; - } - .table-responsive-vertical .table-hover.table-mc-yellow > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-yellow > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-yellow > tbody > tr > td:hover { - background-color: #fff9c4; - } -} -.wkKalender-striped.table-mc-amber > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-amber > tbody > tr:nth-child(odd) > th { - background-color: #fff8e1; -} -.wkKalender-hover.table-mc-amber > tbody > tr:hover > td, -.wkKalender-hover.table-mc-amber > tbody > tr:hover > th { - background-color: #ffecb3; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-amber > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-amber > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-amber > tbody > tr > td:nth-child(odd) { - background-color: #fff8e1; - } - .table-responsive-vertical .table-hover.table-mc-amber > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-amber > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-amber > tbody > tr > td:hover { - background-color: #ffecb3; - } -} -.wkKalender-striped.table-mc-orange > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-orange > tbody > tr:nth-child(odd) > th { - background-color: #fff3e0; -} -.wkKalender-hover.table-mc-orange > tbody > tr:hover > td, -.wkKalender-hover.table-mc-orange > tbody > tr:hover > th { - background-color: #ffe0b2; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-orange > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-orange > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-orange > tbody > tr > td:nth-child(odd) { - background-color: #fff3e0; - } - .table-responsive-vertical .table-hover.table-mc-orange > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-orange > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-orange > tbody > tr > td:hover { - background-color: #ffe0b2; - } -} -.wkKalender-striped.table-mc-deep-orange > tbody > tr:nth-child(odd) > td, -.wkKalender-striped.table-mc-deep-orange > tbody > tr:nth-child(odd) > th { - background-color: #fbe9e7; -} -.wkKalender-hover.table-mc-deep-orange > tbody > tr:hover > td, -.wkKalender-hover.table-mc-deep-orange > tbody > tr:hover > th { - background-color: #ffccbc; -} -@media screen and (max-width: 767px) { - .table-responsive-vertical .table-striped.table-mc-deep-orange > tbody > tr > td, - .table-responsive-vertical .table-striped.table-mc-deep-orange > tbody > tr:nth-child(odd) { - background-color: #fff; - } - .table-responsive-vertical .table-striped.table-mc-deep-orange > tbody > tr > td:nth-child(odd) { - background-color: #fbe9e7; - } - .table-responsive-vertical .table-hover.table-mc-deep-orange > tbody > tr:hover > td, - .table-responsive-vertical .table-hover.table-mc-deep-orange > tbody > tr:hover { - background-color: #fff; - } - .table-responsive-vertical .table-hover.table-mc-deep-orange > tbody > tr > td:hover { - background-color: #ffccbc; - } -} -*/ - -/* - * Mit Text overlay-tes Bild -*/ - -.textoverlayedImage{ - position: relative; - display: table; -} -.textoverlayedImage > img { - width: 100%; - height: auto; -} -.textoverlayedImage > div { - z-index: 99; - width: fit-content; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%,-50%); -} -.textoverlayedImage > div > p{ - text-align: center; - color: white; - font-weight: lighter; - line-height: 2; - padding: 0 10%; -} - -/* - * Die Galerie der Galerien in der wkInfoBox -*/ -.wkBoxMediaGallery{ - display: flex; - flex-flow: row wrap; - justify-content: space-around; - align-items: center; -} -.wkBoxMediaGallery > *{ - flex-basis:50%; - padding: 5%; -} - - -/* - * Tooltipps - */ - -/* Tooltip container */ -.tooltip { - position: relative; - display: inline-block; - border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ -} - -/* Tooltip text */ -.tooltip .tooltiptext { - visibility: hidden; - width: 120px; - background-color: black; - color: #fff; - text-align: center; - padding: 5px 0; - border-radius: 6px; - - /* Position the tooltip text - see examples below! */ - position: absolute; - z-index: 1; -} - - -/* Show the tooltip text when you mouse over the tooltip container */ -.tooltip:hover .tooltiptext { - visibility: visible; -} - -.wkMonthBar{ - display:flex; - flex-flow:wrap; - justify-content:space-evenly; -} - -.wkMonthBar > a { - text-align: center; - width:30%; - display: inline-block; - padding: 0.25em 0.25em 0.25em 0.25em; - margin: 0.25em 0.25em 0.25em 0.25em; - box-shadow: .1em .1em .05em grey; - background-color: #FF8100; - border-radius: .5em; -} - -@media print{ - .wkMonthBar - { - display: none; - } - .wkKalender > thead{ - display: table-header-group; - width: 100%; - } - .wkKalender > tbody > tr{ - display: table-row; - width: 100%; - } - .wkKalender > tbody > tr > td { - display: table-cell; - } - /*qrCode*/ - .wkKalender > tbody > tr > td > img{ - width: 1cm; - } - .wkKalender > tbody > tr > td:nth-of-type(5) > a{ - display: none; - } - .wkKalender > tbody > tr > td[data-title]:before { - display: none; - content: ""; - } - .wkKalender > tbody{ - display: table-row-group; - } - .wkKalender > tfoot{ - display: table-footer-group; - } - .wkKalender > tbody > tr { - border: 1px solid #e0e0e0; - border-radius: 2px; - margin-bottom: 1.6rem; - } - .wkKalender > tbody > tr > td { - vertical-align: middle; - text-align: initial; - } - .wkKalender > tbody > tr:nth-child(odd) { - background-color: #FF8100; - } - .wkKalender > tbody > tr > td:nth-child(odd) { - background-color: inherit; - } - .wkKalender > tbody > tr > td[data-title]:before { - content: initial; - } - .wkKalender tr, th, td { - border: 1px solid black; - } - .wkKalender th { - display: table-cell; - } - - .kalenderDatum{ - flex-direction: column; - align-items: center; - } - .kalenderDatum > span:nth-child(4)::after{ - content: initial; - white-space: initial; - } - .kalenderDatum > span:nth-child(4){ - display: none; - } - .kalenderDatum > span:nth-child(3)::after{ - content: "."; - white-space: pre; - } - .kalenderDatum > span:nth-child(2)::after{ - content: initial; - white-space: initial; - } - -/* https://codepen.io/denilsonsa/pen/Etrba */ - - /****************************************/ - /* Styling rules, such as font and colors */ - .date-as-calendar { - font-variant: normal; - font-style: normal; - font-weight: normal; - font-family: "Helvetica", "Arial", sans-serif; - - /* It seems vertical-align: baseline does not work correctly with display: inline-flex. */ - vertical-align: top; - - /* margin: 1ex; */ - - color: black; - background: white; - background : linear-gradient(to bottom right, #FFF 0%, #EEE 100%); - - border: 1px solid #888; - border-radius: 3px; - overflow: hidden; - - box-shadow: 2px 2px 2px -2px black; - } - .date-as-calendar .weekday, - .date-as-calendar .day, - .date-as-calendar .month, - .date-as-calendar .year { - text-align: center; - line-height: 1.0; - } - .date-as-calendar .month { - font-family: "Oswald", sans-serif; - text-transform: uppercase; - background: #B11; - background : linear-gradient(to bottom right, #D66 0%, #A00 100%); - color: white; - } - - /****************************************/ - /* Layout rules using position: absolute and pixels. */ - .position-pixels.date-as-calendar { - display: inline-block; - position: relative; - width: 64px; - height: 64px; - } - .position-pixels.date-as-calendar .weekday, - .position-pixels.date-as-calendar .day, - .position-pixels.date-as-calendar .month, - .position-pixels.date-as-calendar .year { - display: block; - position: absolute; - left: 0; - right: 0; - width: 100%; - height: 1em; - } - .position-pixels.date-as-calendar .month { - top: 0px; - font-size: 12px; - padding: 2px 0; - } - .position-pixels.date-as-calendar .weekday { - top: 16px; - font-size: 10px; - } - .position-pixels.date-as-calendar .day { - top: 26px; - font-size: 24px; - } - .position-pixels.date-as-calendar .year { - top: 50px; - font-size: 14px; - } - - /****************************************/ - /* Layout rules using position: absolute and relative dimensions using em. */ - .position-em.date-as-calendar { - display: inline-block; - position: relative; - - width: 4em; - height: 4em; - } - .position-em.date-as-calendar .weekday, - .position-em.date-as-calendar .day, - .position-em.date-as-calendar .month, - .position-em.date-as-calendar .year { - display: block; - position: absolute; - left: 0; - right: 0; - width: 100%; - height: 1em; - } - .position-em.date-as-calendar .month { - top: 0px; - font-size: 0.75em; - padding: 0.1em 0; - } - .position-em.date-as-calendar .weekday { - top: 1.6em; - font-size: 0.6125em; - } - .position-em.date-as-calendar .day { - top: 1.1em; - font-size: 1.5em - } - .position-em.date-as-calendar .year { - bottom: 0px; - font-size: 0.87750em; - } - - /****************************************/ - /* Layout rules using display: inline-flex and relative dimensions using em. */ - .inline-flex.date-as-calendar { - display: inline-flex; - flex-direction: column; - flex-wrap: nowrap; - justify-content: space-between; - - width: 4em; - height: 4em; - } - .inline-flex.date-as-calendar .weekday, - .inline-flex.date-as-calendar .day, - .inline-flex.date-as-calendar .month, - .inline-flex.date-as-calendar .year { - display: block; - flex: 1 1 auto; - } - .inline-flex.date-as-calendar .month { - order: 1; - font-size: 0.75em; - padding: 0.1em 0; - } - .inline-flex.date-as-calendar .weekday { - order: 2; - font-size: 0.6125em; - } - .inline-flex.date-as-calendar .day { - order: 3; - font-size: 1.5em; - } - .inline-flex.date-as-calendar .year { - order: 4; - font-size: 0.87750em; - } - - /****************************************/ - /* Multiple sizes. */ - .date-as-calendar.size0_5x { - font-size: 8px; - } - .date-as-calendar.size0_75x { - font-size: 12px; - } - .date-as-calendar.size1x { - font-size: 16px; - } - .date-as-calendar.size1_25x { - font-size: 20px; - } - .date-as-calendar.size1_5x { - font-size: 24px; - } - .date-as-calendar.size1_75x { - font-size: 28px; - } - .date-as-calendar.size2x { - font-size: 32px; - } - .date-as-calendar.size3x { - font-size: 48px; - } -} diff --git a/homepage/cwsvJudo/src/css/materialize/fonts.css b/homepage/cwsvJudo/src/css/materialize/fonts.css index cdee46f..9121ecf 100644 --- a/homepage/cwsvJudo/src/css/materialize/fonts.css +++ b/homepage/cwsvJudo/src/css/materialize/fonts.css @@ -5,14 +5,14 @@ } @font-face { - font-family: 'Material Icons'; + font-family: "Material Icons"; font-style: normal; font-weight: 400; src: url(/ressourcen/fonts/MaterialIcons-Regular.ttf); } .material-icons { - font-family: 'Material Icons'; + font-family: "Material Icons"; font-weight: normal; font-style: normal; font-size: 1em; @@ -23,7 +23,31 @@ white-space: nowrap; word-wrap: normal; direction: ltr; - font-feature-settings: 'liga'; + font-feature-settings: "liga"; +} + +/* fallback */ +@font-face { + font-family: "Material Symbols Outlined"; + font-style: normal; + font-weight: 400; + src: url(ressourcen/fonts/MaterialIconsOutlined-Regular.otf); +} + +.material-symbols-outlined { + font-family: "Material Symbols Outlined"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -moz-font-feature-settings: "liga"; + -moz-osx-font-smoothing: grayscale; } /* responsive font sizes */ diff --git a/homepage/cwsvJudo/src/css/materialize/shiai-calendar.css b/homepage/cwsvJudo/src/css/materialize/shiai-calendar.css new file mode 100644 index 0000000..6e3e5c4 --- /dev/null +++ b/homepage/cwsvJudo/src/css/materialize/shiai-calendar.css @@ -0,0 +1,680 @@ +.wkKalender { + width: 100%; + max-width: 100%; + /* background-color: #FFAE00; */ + margin-bottom: 0; +} + +.wkKalender > thead, +.wkKalender > tfoot { + display: none; +} + +.wkKalender > tbody { + display: block; +} + +.wkKalender > tbody > tr:empty, +.wkKalender > tbody > tr > th:empty { + display: none; +} +.wkKalender > tbody > tr { + display: block; + border: 1px solid #e0e0e0; + border-radius: 2px; + margin-bottom: 1.6rem; +} + +.wkKalender th { + display: block; + background-color: #666; + color: #fff; +} + +.wkKalender > tbody > tr > td { + display: block; + vertical-align: middle; + text-align: right; +} +.wkKalender > tbody > tr > td:nth-child(odd) { + /* background-color: #FF8100; */ +} +.wkKalender > tbody > tr > td[data-title]:before { + content: attr(data-title); + float: left; + font-size: inherit; + font-weight: 400; + color: #757575; +} + +.kalenderDatum { + display: flex; + justify-content: flex-end; +} +.kalenderDatum > span:nth-child(4)::after { + content: ", d. "; + white-space: pre; +} +.kalenderDatum > span:nth-child(4) { + order: 1; +} +.kalenderDatum > span:nth-child(3)::after { + content: ". "; + white-space: pre; +} +.kalenderDatum > span:nth-child(3) { + order: 2; +} +.kalenderDatum > span:nth-child(2)::after { + content: " "; + white-space: pre; +} +.kalenderDatum > span:nth-child(2) { + order: 3; +} +.kalenderDatum > span:nth-child(1) { + order: 4; +} + +@media screen and (min-width: 1280px) { + .wkKalender > thead { + display: table-header-group; + width: 100%; + } + .wkKalender > tbody > tr { + display: table-row; + width: 100%; + } + .wkKalender > tbody > tr > td { + display: table-cell; + } + .wkKalender > tbody > tr > td[data-title]:before { + display: none; + content: ""; + } + .wkKalender > tbody { + display: table-row-group; + } + .wkKalender > tfoot { + display: table-footer-group; + } + .wkKalender > tbody > tr { + border: 1px solid #e0e0e0; + border-radius: 2px; + margin-bottom: 1.6rem; + } + .wkKalender > tbody > tr > td { + vertical-align: middle; + text-align: initial; + } + .wkKalender > tbody > tr:nth-child(odd) { + /* background-color: #FF8100; */ + } + .wkKalender > tbody > tr > td:nth-child(odd) { + background-color: inherit; + } + .wkKalender > tbody > tr > td[data-title]:before { + content: initial; + } + .wkKalender tr, + th, + td { + border: 1px solid black; + } + .wkKalender th { + display: table-cell; + } + + .kalenderDatum { + flex-direction: column; + align-items: center; + } + .kalenderDatum > span:nth-child(4)::after { + content: initial; + white-space: initial; + } + .kalenderDatum > span:nth-child(4) { + display: none; + } + .kalenderDatum > span:nth-child(3)::after { + content: "."; + white-space: pre; + } + .kalenderDatum > span:nth-child(2)::after { + content: initial; + white-space: initial; + } + + /* https://codepen.io/denilsonsa/pen/Etrba */ + + /****************************************/ + /* Styling rules, such as font and colors */ + .date-as-calendar { + font-variant: normal; + font-style: normal; + font-weight: normal; + font-family: "Helvetica", "Arial", sans-serif; + + /* It seems vertical-align: baseline does not work correctly with display: inline-flex. */ + vertical-align: top; + + /* margin: 1ex; */ + + color: black; + background: white; + background: linear-gradient(to bottom right, #fff 0%, #eee 100%); + + border: 1px solid #888; + border-radius: 3px; + overflow: hidden; + + box-shadow: 2px 2px 2px -2px black; + } + .date-as-calendar .weekday, + .date-as-calendar .day, + .date-as-calendar .month, + .date-as-calendar .year { + text-align: center; + line-height: 1; + } + .date-as-calendar .month { + font-family: "Oswald", sans-serif; + text-transform: uppercase; + background: #b11; + background: linear-gradient(to bottom right, #d66 0%, #a00 100%); + color: white; + } + + /****************************************/ + /* Layout rules using position: absolute and pixels. */ + .position-pixels.date-as-calendar { + display: inline-block; + position: relative; + width: 64px; + height: 64px; + } + .position-pixels.date-as-calendar .weekday, + .position-pixels.date-as-calendar .day, + .position-pixels.date-as-calendar .month, + .position-pixels.date-as-calendar .year { + display: block; + position: absolute; + left: 0; + right: 0; + width: 100%; + height: 1em; + } + .position-pixels.date-as-calendar .month { + top: 0px; + font-size: 12px; + padding: 2px 0; + } + .position-pixels.date-as-calendar .weekday { + top: 16px; + font-size: 10px; + } + .position-pixels.date-as-calendar .day { + top: 26px; + font-size: 24px; + } + .position-pixels.date-as-calendar .year { + top: 50px; + font-size: 14px; + } + + /****************************************/ + /* Layout rules using position: absolute and relative dimensions using em. */ + .position-em.date-as-calendar { + display: inline-block; + position: relative; + + width: 4em; + height: 4em; + } + .position-em.date-as-calendar .weekday, + .position-em.date-as-calendar .day, + .position-em.date-as-calendar .month, + .position-em.date-as-calendar .year { + display: block; + position: absolute; + left: 0; + right: 0; + width: 100%; + height: 1em; + } + .position-em.date-as-calendar .month { + top: 0px; + font-size: 0.75em; + padding: 0.1em 0; + } + .position-em.date-as-calendar .weekday { + top: 1.6em; + font-size: 0.6125em; + } + .position-em.date-as-calendar .day { + top: 1.1em; + font-size: 1.5em; + } + .position-em.date-as-calendar .year { + bottom: 0px; + font-size: 0.8775em; + } + + /****************************************/ + /* Layout rules using display: inline-flex and relative dimensions using em. */ + .inline-flex.date-as-calendar { + display: inline-flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: space-between; + + width: 4em; + height: 4em; + } + .inline-flex.date-as-calendar .weekday, + .inline-flex.date-as-calendar .day, + .inline-flex.date-as-calendar .month, + .inline-flex.date-as-calendar .year { + display: block; + flex: 1 1 auto; + } + .inline-flex.date-as-calendar .month { + order: 1; + font-size: 0.75em; + padding: 0.1em 0; + } + .inline-flex.date-as-calendar .weekday { + order: 2; + font-size: 0.6125em; + } + .inline-flex.date-as-calendar .day { + order: 3; + font-size: 1.5em; + } + .inline-flex.date-as-calendar .year { + order: 4; + font-size: 0.8775em; + } + + /****************************************/ + /* Multiple sizes. */ + .date-as-calendar.size0_5x { + font-size: 8px; + } + .date-as-calendar.size0_75x { + font-size: 12px; + } + .date-as-calendar.size1x { + font-size: 16px; + } + .date-as-calendar.size1_25x { + font-size: 20px; + } + .date-as-calendar.size1_5x { + font-size: 24px; + } + .date-as-calendar.size1_75x { + font-size: 28px; + } + .date-as-calendar.size2x { + font-size: 32px; + } + .date-as-calendar.size3x { + font-size: 48px; + } +} + +/*abgeschaut*/ +.shadow-z-1 { + box-shadow: + 0 1px 3px 0 rgba(0, 0, 0, 0.12), + 0 1px 2px 0 rgba(0, 0, 0, 0.24); +} + +/* + * Mit Text overlay-tes Bild +*/ + +.textoverlayedImage { + position: relative; + display: table; +} +.textoverlayedImage > img { + width: 100%; + height: auto; +} +.textoverlayedImage > div { + z-index: 99; + width: fit-content; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.textoverlayedImage > div > p { + text-align: center; + color: white; + font-weight: lighter; + line-height: 2; + padding: 0 10%; +} + +/* + * Die Galerie der Galerien in der wkInfoBox +*/ +.wkBoxMediaGallery { + display: flex; + flex-flow: row wrap; + justify-content: space-around; + align-items: center; +} +.wkBoxMediaGallery > * { + flex-basis: 50%; + padding: 5%; +} + +/* + * Tooltipps + */ + +/* Tooltip container */ +.tooltip { + position: relative; + display: inline-block; + border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ +} + +/* Tooltip text */ +.tooltip .tooltiptext { + visibility: hidden; + width: 120px; + background-color: black; + color: #fff; + text-align: center; + padding: 5px 0; + border-radius: 6px; + + /* Position the tooltip text - see examples below! */ + position: absolute; + z-index: 1; +} + +/* Show the tooltip text when you mouse over the tooltip container */ +.tooltip:hover .tooltiptext { + visibility: visible; +} + +.wkMonthBar { + display: flex; + flex-flow: wrap; + justify-content: space-evenly; +} + +.wkMonthBar > a { + text-align: center; + width: 30%; + display: inline-block; + padding: 0.25em 0.25em 0.25em 0.25em; + margin: 0.25em 0.25em 0.25em 0.25em; + box-shadow: 0.1em 0.1em 0.05em grey; + /* background-color: #FF8100; */ + border-radius: 0.5em; +} + +@media print { + .wkMonthBar { + display: none; + } + .wkKalender > thead { + display: table-header-group; + width: 100%; + } + .wkKalender > tbody > tr { + display: table-row; + width: 100%; + } + .wkKalender > tbody > tr > td { + display: table-cell; + } + /*qrCode*/ + .wkKalender > tbody > tr > td > img { + width: 1cm; + } + .wkKalender > tbody > tr > td:nth-of-type(5) > a { + display: none; + } + .wkKalender > tbody > tr > td[data-title]:before { + display: none; + content: ""; + } + .wkKalender > tbody { + display: table-row-group; + } + .wkKalender > tfoot { + display: table-footer-group; + } + .wkKalender > tbody > tr { + border: 1px solid #e0e0e0; + border-radius: 2px; + margin-bottom: 1.6rem; + } + .wkKalender > tbody > tr > td { + vertical-align: middle; + text-align: initial; + } + .wkKalender > tbody > tr:nth-child(odd) { + /* background-color: #FF8100; */ + } + .wkKalender > tbody > tr > td:nth-child(odd) { + background-color: inherit; + } + .wkKalender > tbody > tr > td[data-title]:before { + content: initial; + } + .wkKalender tr, + th, + td { + border: 1px solid black; + } + .wkKalender th { + display: table-cell; + } + + .kalenderDatum { + flex-direction: column; + align-items: center; + } + .kalenderDatum > span:nth-child(4)::after { + content: initial; + white-space: initial; + } + .kalenderDatum > span:nth-child(4) { + display: none; + } + .kalenderDatum > span:nth-child(3)::after { + content: "."; + white-space: pre; + } + .kalenderDatum > span:nth-child(2)::after { + content: initial; + white-space: initial; + } + + /* https://codepen.io/denilsonsa/pen/Etrba */ + + /****************************************/ + /* Styling rules, such as font and colors */ + .date-as-calendar { + font-variant: normal; + font-style: normal; + font-weight: normal; + font-family: "Helvetica", "Arial", sans-serif; + + /* It seems vertical-align: baseline does not work correctly with display: inline-flex. */ + vertical-align: top; + + /* margin: 1ex; */ + + color: black; + background: white; + background: linear-gradient(to bottom right, #fff 0%, #eee 100%); + + border: 1px solid #888; + border-radius: 3px; + overflow: hidden; + + box-shadow: 2px 2px 2px -2px black; + } + .date-as-calendar .weekday, + .date-as-calendar .day, + .date-as-calendar .month, + .date-as-calendar .year { + text-align: center; + line-height: 1; + } + .date-as-calendar .month { + font-family: "Oswald", sans-serif; + text-transform: uppercase; + background: #b11; + background: linear-gradient(to bottom right, #d66 0%, #a00 100%); + color: white; + } + + /****************************************/ + /* Layout rules using position: absolute and pixels. */ + .position-pixels.date-as-calendar { + display: inline-block; + position: relative; + width: 64px; + height: 64px; + } + .position-pixels.date-as-calendar .weekday, + .position-pixels.date-as-calendar .day, + .position-pixels.date-as-calendar .month, + .position-pixels.date-as-calendar .year { + display: block; + position: absolute; + left: 0; + right: 0; + width: 100%; + height: 1em; + } + .position-pixels.date-as-calendar .month { + top: 0px; + font-size: 12px; + padding: 2px 0; + } + .position-pixels.date-as-calendar .weekday { + top: 16px; + font-size: 10px; + } + .position-pixels.date-as-calendar .day { + top: 26px; + font-size: 24px; + } + .position-pixels.date-as-calendar .year { + top: 50px; + font-size: 14px; + } + + /****************************************/ + /* Layout rules using position: absolute and relative dimensions using em. */ + .position-em.date-as-calendar { + display: inline-block; + position: relative; + + width: 4em; + height: 4em; + } + .position-em.date-as-calendar .weekday, + .position-em.date-as-calendar .day, + .position-em.date-as-calendar .month, + .position-em.date-as-calendar .year { + display: block; + position: absolute; + left: 0; + right: 0; + width: 100%; + height: 1em; + } + .position-em.date-as-calendar .month { + top: 0px; + font-size: 0.75em; + padding: 0.1em 0; + } + .position-em.date-as-calendar .weekday { + top: 1.6em; + font-size: 0.6125em; + } + .position-em.date-as-calendar .day { + top: 1.1em; + font-size: 1.5em; + } + .position-em.date-as-calendar .year { + bottom: 0px; + font-size: 0.8775em; + } + + /****************************************/ + /* Layout rules using display: inline-flex and relative dimensions using em. */ + .inline-flex.date-as-calendar { + display: inline-flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: space-between; + + width: 4em; + height: 4em; + } + .inline-flex.date-as-calendar .weekday, + .inline-flex.date-as-calendar .day, + .inline-flex.date-as-calendar .month, + .inline-flex.date-as-calendar .year { + display: block; + flex: 1 1 auto; + } + .inline-flex.date-as-calendar .month { + order: 1; + font-size: 0.75em; + padding: 0.1em 0; + } + .inline-flex.date-as-calendar .weekday { + order: 2; + font-size: 0.6125em; + } + .inline-flex.date-as-calendar .day { + order: 3; + font-size: 1.5em; + } + .inline-flex.date-as-calendar .year { + order: 4; + font-size: 0.8775em; + } + + /****************************************/ + /* Multiple sizes. */ + .date-as-calendar.size0_5x { + font-size: 8px; + } + .date-as-calendar.size0_75x { + font-size: 12px; + } + .date-as-calendar.size1x { + font-size: 16px; + } + .date-as-calendar.size1_25x { + font-size: 20px; + } + .date-as-calendar.size1_5x { + font-size: 24px; + } + .date-as-calendar.size1_75x { + font-size: 28px; + } + .date-as-calendar.size2x { + font-size: 32px; + } + .date-as-calendar.size3x { + font-size: 48px; + } +} diff --git a/homepage/cwsvJudo/src/favIcons/android-chrome-512x512.png b/homepage/cwsvJudo/src/favIcons/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..32c0c6db8982800076f9e2df64ae3542d9297686 GIT binary patch literal 38792 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 J+4lmlCC-l^O> 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�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

j3Ebub}*YY-5YWU)KGbrhhC2+N=%42% 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 m!-)avjSem8JF +ExpiresActive On +ExpiresByType image/jpg "access 1 year" +ExpiresByType image/jpeg "access 1 year" +ExpiresByType image/gif "access 1 year" +ExpiresByType image/png "access 1 year" +ExpiresByType text/css "access 1 month" +ExpiresByType text/html "access 1 month" +ExpiresByType application/pdf "access 1 month" +ExpiresByType text/x-javascript "access 1 month" +ExpiresByType image/x-icon "access 1 year" +ExpiresDefault "access 1 month" + +## EXPIRES CACHING ## + # Auf die Fontdatei wird von der Subdomain aus zugegriffen # - das gesamte ressourcenVerzeichnis wird auf die Maindomain umgeleitet # - die mainDomain erlaubt aber anscheinend nicht, das fremde domains bei ihr anfragen startet @@ -12,6 +28,10 @@ # Url-Rewriting aktivieren RewriteEngine on +# consequently using the non-www version +RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] +RewriteRule ^(.*)$ http://%1/$1 [R=301,L] + # if the requested resource doesn't exist as ... # - file or ... RewriteCond %{REQUEST_FILENAME} !-f @@ -26,7 +46,7 @@ RewriteCond %{REQUEST_URI} !^/pages/responsive/ # Die angeforderte Ressource (als Datei) ist nicht im Rootverzeichnis RewriteCond %{REQUEST_FILENAME} !-f -# Die angeforderte Ressource (als Verzeichnis) ist nicht im +# Die angeforderte Ressource (als Verzeichnis) ist nicht im # Rootverzeichnis RewriteCond %{REQUEST_FILENAME} !-d diff --git a/homepage/cwsvJudo/src/page_data/404/404.md b/homepage/cwsvJudo/src/page_data/404/404.md new file mode 100644 index 0000000..59e3954 --- /dev/null +++ b/homepage/cwsvJudo/src/page_data/404/404.md @@ -0,0 +1,7 @@ +# 404 + +Die gesuchte Seite wurde nicht gefunden! + +Vielleicht kann die [Startseite][startseite] weiterhelfen. + +[startseite]: / diff --git a/homepage/cwsvJudo/src/page_data/404/meta.json b/homepage/cwsvJudo/src/page_data/404/meta.json new file mode 100644 index 0000000..41befbd --- /dev/null +++ b/homepage/cwsvJudo/src/page_data/404/meta.json @@ -0,0 +1,24 @@ +{ + "head": { + "meta": { + "title": "404", + "description": "Fehlerseite" + }, + "navTargets": [ + { + "url": "training", + "caption": "Training", + "title": "Trainingszeiten und -orte der Judoka des Chemnitzer WSV" + } + ] + }, + "main": { + "wallpapers": { + "root_path": "/ressourcen/graphiken/wallpapers", + "images": ["osae-komi", "nage", "kata"] + }, + + "sections": [["404.md"]] + }, + "footer": {} +} diff --git a/homepage/cwsvJudo/src/page_data/index/promos.php b/homepage/cwsvJudo/src/page_data/index/promos.php index 777ac14..53ea21c 100644 --- a/homepage/cwsvJudo/src/page_data/index/promos.php +++ b/homepage/cwsvJudo/src/page_data/index/promos.php @@ -10,6 +10,12 @@ $promos = [ "caption"=> "Dojo", "target"=> "/training#karten-der-trainingsstätten", "text"=> "Wegbeschreibung zu unserem Dojo" + ], + [ + "icon"=> "calendar_today", + "caption"=> "Kalender", + "target"=> "/kalender", + "text"=> "Kalender mit anstehenden Wettkämpfen" ] ]; return CwsvJudo\Promo\promos_html($promos); diff --git a/homepage/cwsvJudo/src/page_data/kalender/meta.json b/homepage/cwsvJudo/src/page_data/kalender/meta.json index c7c9e32..46c6212 100644 --- a/homepage/cwsvJudo/src/page_data/kalender/meta.json +++ b/homepage/cwsvJudo/src/page_data/kalender/meta.json @@ -1,5 +1,9 @@ { "head": { + "meta": { + "title": "Wettkampfkalender der Judoka des Chemnitzer Freizeit- und Wohngebiets­sportvereines e. V.", + "description": "Ein Kalender mit Judo-Wettkampfterminen zur Übersicht" + }, "navTargets": [ { "url": "training", diff --git a/homepage/cwsvJudo/src/pages/responsive/config.php b/homepage/cwsvJudo/src/pages/responsive/config.php deleted file mode 100644 index 8fb4fc5..0000000 --- a/homepage/cwsvJudo/src/pages/responsive/config.php +++ /dev/null @@ -1,6 +0,0 @@ - Section::create( + file_names: $file, + root_directory: $root_path + ), array: $data["sections"] ), - wallpapers: array_map(function ($name) use ( - $wallpaper_root_path - ): Wallpaper { - return Wallpaper::create($name, $wallpaper_root_path); - }, array: $data["wallpapers"]["images"]) + wallpapers: array_map( + fn($name) => Wallpaper::create($name, $wallpaper_root_path), + array: $data["wallpapers"]["images"] + ) ); } } class Wallpaper { - private string $src; - private string $data_src; + private string $src_dir; - public function __construct(string $src, string $data_src) + public function __construct(string $src_dir) { - $this->src = $src; - $this->data_src = $data_src; + $this->src_dir = $src_dir; } public function get_html() { - return ""; + $format = "avif"; //"webp"; + $widths = [1200, 600, 992, 1200, 2400]; + $src_sets = implode( + ", ", + array_map(fn($w) => "{$this->src_dir}/1200.{$format}", $widths) + ); + // return "src}\" data-src=\"{$this->data_src}\" alt=\"Wallpaper\">"; + return "src_dir}/mosaic.svg\" data-src=\"{$this->src_dir}/1200.{$format}\" data-srcset=\"{$src_sets}\" class=\"lazyload\" alt=\"Wallpaper\">"; } public static function create(string $name, string $root_path) { - return new Wallpaper( - src: $root_path . "/" . $name . ".svg", - data_src: $root_path . "/" . $name . ".jpg" - ); + return new Wallpaper(src_dir: "{$root_path}/{$name}"); } } @@ -184,7 +178,7 @@ class Newsboard "outCharset" => Newsboard::$config["outCharset"], ] ); - if (!is_null($entries)) { + if ($entries !== null) { foreach ($entries as $entryData) { $entry = new \CwsvJudo\News\Entry($entryData); $html .= @@ -237,6 +231,7 @@ function mainNavTargets($mainNav) echo ""; } ?> + @@ -244,12 +239,17 @@ function mainNavTargets($mainNav) + + - Judo im Chemnitzer WSV - Kinder- und Erwachsenentraining + <?php echo $meta["head"]["meta"]["title"]; ?> setPattern($format); + return $formatter->format($time); +} + +setlocale(LC_ALL, "de_DE@euro", "de_DE", "de", "ge"); +function toAscii($str, $replace = [], $delimiter = "-") +{ + if (!empty($replace)) { + $str = str_replace((array) $replace, " ", $str); + } + + $clean = iconv("UTF-8", "ASCII//TRANSLIT", $str); + $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", "", $clean); + $clean = strtolower(trim($clean, "-")); + $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); + + return $clean; +} + class Kalender { private static array $config; @@ -17,6 +43,205 @@ class Kalender password: $password ); } + + /// Aus einer Liste von Wettkämpfen den htmlCode der Wettkampftabelle bereit stellen + private static function wkList2htmlWkTable( + $aWkList, + array $someOptions = [] + ) { + setlocale(LC_ALL, "de_DE.utf8"); + + // @todo bring back + // require_once $GLOBALS["basePath"] . + // "/ressourcen/phpLib/phpqrcode/qrlib.php"; + + if (empty($aWkList)) { + return ""; + } + + $htmlWkTableString = ""; + + $htmlWkTableString .= + "" . + "" . + "" . + "" . + "" . + "" . + "" . + // "" . + "" . + "" . + ""; + + $lastMonthName = ""; + + foreach ($aWkList as $wk) { + // Zeichensatzkonvertierung + array_walk($wk, function (&$value, $key) { + $value = iconv("ISO-8859-1", "UTF-8", $value); + }); + + if ( + $lastMonthName != + new_strftime("MMMM yyyy", strtotime($wk["Datum"])) + ) { + $lastMonthName = new_strftime( + "MMMM yyyy", + strtotime($wk["Datum"]) + ); + $htmlWkTableString .= + ""; + } + + // @todo reactivate strctured data + // $wkJsonSd = wkArray2jsonSdEvent($wk); + + // schlechter Hack solange die Browser nicht von selbst ordentlich trennen + $wk["Veranstaltung"] = str_replace( + "meisterschaft", + "­meisterschaft", + $wk["Veranstaltung"] + ); + $wk["Veranstaltung"] = str_replace( + "turnier", + "­turnier", + $wk["Veranstaltung"] + ); + $wk["Veranstaltung"] = str_replace( + "pokal", + "­pokal", + $wk["Veranstaltung"] + ); + $wk["Veranstaltung"] = str_replace( + "randori", + "­randori", + $wk["Veranstaltung"] + ); + $wk["Veranstaltung"] = str_replace( + "spiele", + "­spiele", + $wk["Veranstaltung"] + ); + $wk["Veranstaltung"] = str_replace( + "mannschaft", + "mann­schaft", + $wk["Veranstaltung"] + ); + + $htmlWkTableString .= + // "". + "" . + // "" . + "" . + "" . + "" . + "" . + // "" . + "\n"; + } + $htmlWkTableString .= + "" . + "" . + "" . + "" . + "" . + "" . + "" . + // "" . + "" . + "" . + "
DatumVeranstaltungOrtAltersklasse(n)iCal
" . + $lastMonthName . + "
" . + "" . + "" . + "" . + "" . + "" . + $wk["Veranstaltung"] . + "" . + "" . + "" . + $wk["Ort"] . + "" . + "" . + $wk["Altersklassen"] . + // @todo reactivate + // "" . + // json_encode(akListString2jgArray($wk["Altersklassen"])) . + // "" . + "" . + // "iCal" . + // "\"http://cwsvjudo.bplaced.net/wkKalender/"" . + "
DatumVeranstaltungOrtAltersklasse(n)iCal
"; + + // @todo evaluate if it should be reactivate + // Für den Fall einer ampSeite müssen die imgTags angepasst werden + // if (check_for_amp_site()) { + // $htmlWkTableString = str_replace( + // "", + // ">", + // $htmlWkTableString + // ); + // } + + return $htmlWkTableString; + } + public static function get_html() { $db_connection = Kalender::$dbHandle->getDbConnection(); @@ -71,7 +296,7 @@ class Kalender "

  • Datum:
  • " . "
  • Altersklassen: " . $wk["Altersklassen"] . @@ -193,11 +418,11 @@ class Kalender $siteData["mainContent"] .= htmlWkMonthBar($ergebnis); $ergebnis = $db_connection->query($query); - $siteData["mainContent"] .= wkList2htmlWkTable($ergebnis); + $siteData["mainContent"] .= Kalender::wkList2htmlWkTable($ergebnis); $siteData["mainContent"] .= - "
    Alle Angaben ohne Gewähr! Fehler und Ergänzungen dürfen gerne gemeldet werden.
    " . - "
    Link zum Archiv mit allen Ausschreibungen."; + "
    Alle Angaben ohne Gewähr!
    "; + // "Link zum Archiv mit allen Ausschreibungen."; /* @todo: Wettkampfselektor wieder ergänzen
    @@ -230,9 +455,7 @@ class Kalender // die(); } - //var_dump( $siteData['errors'] ); - echo $siteData["mainContent"]; - return; + return $siteData["mainContent"]; } } @@ -246,10 +469,12 @@ function htmlWkMonthBar($aWkList) $lastMonthName = ""; foreach ($aWkList as $wk) { - if ($lastMonthName != strftime("%b %Y", strtotime($wk["Datum"]))) { - $lastMonthName = strftime("%b %Y", strtotime($wk["Datum"])); + if ( + $lastMonthName != new_strftime("MMM yyyy", strtotime($wk["Datum"])) + ) { + $lastMonthName = new_strftime("MMM yyyy", strtotime($wk["Datum"])); $wkMonthBar .= - "" . $lastMonthName . diff --git a/homepage/cwsvJudo/src/shared/favicon.html.inc b/homepage/cwsvJudo/src/shared/favicon.html.inc index 45568e6..52b8eb5 100644 --- a/homepage/cwsvJudo/src/shared/favicon.html.inc +++ b/homepage/cwsvJudo/src/shared/favicon.html.inc @@ -2,35 +2,35 @@ rel="apple-touch-icon" sizes="180x180" href="/ressourcen/graphiken/logos/favIcons/apple-touch-icon.png" -/> +> +> +> +> +> +> - +> +