1<!DOCTYPE html> 2<html lang="de"> 3 <head> 4 5 <meta charset="UTF-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width, initial-scale=1"> 8 <title>Das Handwerk in der Region » Handwerkskammer Konstanz</title> 9 <link rel="shortcut icon" href="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/img/favicon.ico" type="image/x-icon" /> 10 <link rel="apple-touch-icon" href="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/img/apple-touch-icon-precomposed.png" /> 11 <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 12 13 <!-- This site is optimized with the Yoast SEO plugin v28.6 - https://yoast.com/product/yoast-seo-wordpress/ --> 14 <link rel="canonical" href="https://www.hwk-konstanz.de/handwerk/" /> 15 <meta property="og:locale" content="de_DE" /> 16 <meta property="og:type" content="article" /> 17 <meta property="og:title" content="Das Handwerk in der Region - Handwerkskammer Konstanz" /> 18 <meta property="og:url" content="https://www.hwk-konstanz.de/handwerk/" /> 19 <meta property="og:site_name" content="Handwerkskammer Konstanz" /> 20 <meta property="article:modified_time" content="2026-09-28T11:59:57+00:00" /> 21 <meta name="twitter:card" content="summary_large_image" /> 22 <!-- / Yoast SEO plugin. --> 23 24 25<link rel="preload" href="https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-config-de.json.js?ver=3.4.5-88" as="script"> 26<link rel="preload" href="https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-1-de.css?ver=3.4.5-51" as="style"> 27<link rel="preload" href="https://www.hwk-konstanz.de/wp-content/plugins/borlabs-cookie/assets/javascript/borlabs-cookie-prioritize.min.js?ver=3.4.5" as="script"> 28<style id="wp-img-auto-sizes-contain-inline-css"> 29img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 30/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 31</style> 32<link rel='stylesheet' id='wp-block-library-css' href='https://www.hwk-konstanz.de/wp-includes/css/dist/block-library/style.min.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 33<style id="global-styles-inline-css"> 34:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
34--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--source-sans: 'Source Sans 3', 'Segoe UI', sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:root { --wp--style--global--content-size: 800px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{font-family: var(--wp--preset--font-family--source-sans);padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
34.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-source-sans-font-family{font-family: var(--wp--preset--font-family--source-sans) !important;} 35:root :where(.wp-block-icon svg){width: 24px;} 36:where(.wp-block-gallery.is-layout-flex){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}:where(.wp-block-gallery.is-layout-grid){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );} 37:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;} 38:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} 39:where(.wp-block-term-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-term-template.is-layout-grid){gap: 1.25em;} 40:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} 41:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} 42/*# sourceURL=global-styles-inline-css */ 43</style> 44<link rel='stylesheet' id='uniplus-base-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/css/uniplus_base.css?ver=1.0.5' media='all' /> 45<link rel='stylesheet' id='leaflet-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet/leaflet.css?ver=1.0.0' media='all' /> 46<link rel='stylesheet' id='leaflet-fullscreen-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet-fullscreen/leaflet-fullscreen.css?ver=1.0.0' media='all' /> 47<link rel='stylesheet' id='styles-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-angebotsboerseV2/css/angebotsboerse-styles.css?ver=1.0.1' media='all' /> 48<link rel='stylesheet' id='bschulen-v2-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-berufsdatenbank/css/bschulen-v2.css?ver=1.0.0' media='all' /> 49<link rel='stylesheet' id='ladda-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/ladda.min.css?ver=1.0' media='all' /> 50<link rel='stylesheet' id='ladda-theme-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/ladda-themeless.min.css?ver=1.0' media='all' /> 51<link rel='stylesheet' id='uniplus-clientside-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/uniplus_clientside.css?ver=1.0.7' media='all' /> 52<link rel='stylesheet' id='uniplus-mp-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/uni_mp.css?ver=1.1' media='all' /> 53<link rel='stylesheet' id='uniplus-style-1-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/uniplus.css?ver=1.0' media='all' /> 54<link rel='stylesheet' id='jquery-ui-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/jquery-ui.css?ver=1.0' media='all' /> 55<link rel='stylesheet' id='jquery-confirm-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/jquery-confirm.css?ver=1.0' media='all' /> 56<link rel='stylesheet' id='multiselect-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/multiselect.css?ver=1.0' media='all' /> 57<link rel='stylesheet' id='animate-css-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/animate.css?ver=1.0' media='all' /> 58<link rel='stylesheet' id='pure-css-grid-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/grids-min.css?ver=1.0' media='all' /> 59<link rel='stylesheet' id='evaluation-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-evaluation/css/evaluation.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 60<link rel='stylesheet' id='eval-callout-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-evaluation/css/callouts.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 61<link rel='stylesheet' id='uni_faq.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-faq/css/uni_faq_style.css?ver=1.1.1' media='all' /> 62<style id="ufe-styles-inline-css"> 63 64 .ufe-wrap *{box-sizing:border-box;} 65 .ufe-panel{background:#fff;border:1px solid #d6dce8;border-radius:8px;overflow:hidden;font-family:system-ui,-apple-system,sans-serif;max-width:640px;} 66 .ufe-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #d6dce8;background:#f4f6fa;} 67 .ufe-header-left{display:flex;flex-direction:column;gap:2px;} 68 .ufe-heading{font-size:13px;font-weight:600;color:#1b2b3c;letter-spacing:.01em;text-transform:uppercase;} 69 .ufe-subheading{font-size:12px;color:#6b7f96;font-variant-numeric:tabular-nums;} 70 .ufe-btn-all{display:inline-flex;align-items:center;gap:6px;background:#2e5fa3;color:#fff;font-size:12.5px;font-weight:500;padding:7px 14px;border-radius:5px;text-decoration:none;border:none;cursor:pointer;transition:background .15s;} 71 .ufe-btn-all:hover{background:#1e4a85;color:#fff;} 72 .ufe-btn-all svg{flex-shrink:0;} 73 .ufe-list{padding:6px 0;} 74 .ufe-row{display:flex;align-items:center;padding:9px 18px;gap:10px;border-bottom:1px solid #edf0f5;transition:background .1s;} 75 .ufe-row:last-child{border-bottom:none;} 76 .ufe-row:hover{background:#f7f9fd;} 77 .ufe-name{flex:1;font-size:13.5px;color:#1b2b3c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} 78 .ufe-badge{flex-shrink:0;font-size:11.5px;font-weight:600;color:#2e5fa3;background:#e6ecf6;border-radius:12px;padding:2px 9px;font-variant-numeric:tabular-nums;letter-spacing:.01em;} 79 .ufe-btn-dl{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:5px;color:#4c6ead;text-decoration:none;border:1px solid #c8d4e8;background:#fff;transition:background .1s,color .1s,border-color .1s;} 80 .ufe-btn-dl:hover{background:#2e5fa3;color:#fff;border-color:#2e5fa3;} 81 .ufe-btn-dl svg{display:block;} 82 .ufe-empty{padding:20px 18px;font-size:13px;color:#6b7f96;} 83 .ufe-table-wrap{margin-top:24px;overflow-x:auto;} 84 .ufe-table{width:100%;border-collapse:collapse;font-family:system-ui,-apple-system,sans-serif;font-size:13px;} 85 .ufe-table th{background:#f4f6fa;color:#4c6070;font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:9px 12px;border-bottom:2px solid #d6dce8;text-align:left;white-space:nowrap;} 86 .ufe-table td{padding:8px 12px;border-bottom:1px solid #edf0f5;color:#1b2b3c;vertical-align:top;} 87 .ufe-table tr:last-child td{border-bottom:none;} 88 .ufe-table tbody tr:hover td{background:#f7f9fd;} 89 .ufe-table .ufe-td-id{color:#8898a8;font-variant-numeric:tabular-nums;font-size:12px;white-space:nowrap;} 90 .ufe-table .ufe-td-type{font-weight:500;white-space:nowrap;} 91 .ufe-table .ufe-td-date{color:#6b7f96;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;} 92 .ufe-meta-table{width:100%;border-collapse:collapse;margin:0;} 93 .ufe-meta-table td{padding:3px 0;font-size:12px;vertical-align:top;border:none;} 94 .ufe-meta-table td:first-child{color:#6b7f96;width:180px;padding-right:12px;white-space:nowrap;} 95 .ufe-meta-table td:last-child{color:#1b2b3c;} 96 97/*# sourceURL=ufe-styles-inline-css */ 98</style> 99<link rel='stylesheet' id='uni-formularwesen-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-formularwesen/view/style.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 100<link rel='stylesheet' id='gewewrke-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-gewerkedatenbank/css/gewerksanzeige-styles.css?ver=1.0.3' media='all' /> 101<link rel='stylesheet' id='uni-akt-llr-detail-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-lehrlingsrolle-aktive/css/detail.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 102<link rel='stylesheet' id='uni_pruefer_v2_css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-prueferportal-v2/css/prueferportalv2.css?ver=1.0' media='all' /> 103<link rel='stylesheet' id='uni_pruefungsdaten_css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-pruefungsdaten/css/uni-pruefungsdaten.css?ver=1.1' media='all' /> 104<link rel='stylesheet' id='gebarchiv.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-raumverwaltung/css/gebarchiv.css?ver=1.0.1' media='all' /> 105<link rel='stylesheet' id='uni-rvw-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-rechteverwaltung/css/rvw-style.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 106<link rel='stylesheet' id='speiseplan.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-speiseplan/css/speiseplan.css?ver=1.0.1' media='all' /> 107<link rel='stylesheet' id='veranstaltungs-tabelle-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-veranstaltungen/css/veranstaltungen.css?ver=1.0.1' media='all' /> 108<link rel='stylesheet' id='uni-gpr-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vue-gpr/view/css/uni-gpr-style.css?ver=1.0.2' media='all' /> 109<link rel='stylesheet' id='uni-gpr-style-ergebniserfassung-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vue-gpr/view/css/uni-gpr-style-ergebniserfassung.css?ver=1.0.0' media='all' /> 110<link rel='stylesheet' id='uni-vue-lvt-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vue-lvt/css/uni_vue_lvt_style.css?ver=1.1' media='all' /> 111<link rel='stylesheet' id='select2_style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vuejs/helper/../dist/select2-4.0.13/css/select2.css?ver=4.0.13' media='all' /> 112<link rel='stylesheet' id='select2_style_min-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vuejs/helper/../dist/select2-4.0.13/css/select2.min.css?ver=4.0.13' media='all' /> 113<link rel='stylesheet' id='uni-warenkorb-callout-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-warenkorb-vuejs/css/callouts.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 114<link rel='stylesheet' id='uni-warenkorb-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-warenkorb-vuejs/css/warenkorb.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 115<link rel='stylesheet' id='uni_zulassungsantrag_gp_style.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-zulassungsantrag-gp/css/uni_zulassungsantrag_gp_style.css?ver=1.0' media='all' /> 116<link rel='stylesheet' id='uni_zulassungsantrag_mpfp_style.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-zulassungsantrag-mpfp/css/uni_zulassungsantrag_mpfp_style.css?ver=1.0' media='all' /> 117<link rel='stylesheet' id='style-common-css' href='https://www.hwk-konstanz.de/wp-content/themes/chatty/css/common.min.css?ver=1791085335' media='all' /> 118<style id="style-common-inline-css"> 119 120 img, div.bg-image, .appear { 121 opacity: 1; 122 } 123/*# sourceURL=style-common-inline-css */ 124</style> 125<link rel='stylesheet' id='style-main-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/main.min.css?ver=1791085335' media='screen' /> 126<link rel='stylesheet' id='style-print-css' href='https://www.hwk-konstanz.de/wp-content/themes/chatty/css/print.min.css?ver=1791085335' media='print' /> 127<style id="borlabs-cookie-critical-inline-css"> 128body div.brlbs-cmpnt-container a,body div.brlbs-cmpnt-container abbr,body div.brlbs-cmpnt-container acronym,body div.brlbs-cmpnt-container address,body div.brlbs-cmpnt-container applet,body div.brlbs-cmpnt-container article,body div.brlbs-cmpnt-container aside,body div.brlbs-cmpnt-container audio,body div.brlbs-cmpnt-container b,body div.brlbs-cmpnt-container big,body div.brlbs-cmpnt-container blockquote,body div.brlbs-cmpnt-container canvas,body div.brlbs-cmpnt-container caption,body div.brlbs-cmpnt-container center,body div.brlbs-cmpnt-container cite,body div.brlbs-cmpnt-container code,body div.brlbs-cmpnt-container dd,body div.brlbs-cmpnt-container del,body div.brlbs-cmpnt-container details,body div.brlbs-cmpnt-container dfn,body div.brlbs-cmpnt-container div,body div.brlbs-cmpnt-container dl,body div.brlbs-cmpnt-container dt,body div.brlbs-cmpnt-container em,body div.brlbs-cmpnt-container embed,body div.brlbs-cmpnt-container fieldset,body div.brlbs-cmpnt-container figcaption,body div.brlbs-cmpnt-container figure,body div.brlbs-cmpnt-container footer,body div.brlbs-cmpnt-container form,body div.brlbs-cmpnt-container h1,body div.brlbs-cmpnt-container h2,body div.brlbs-cmpnt-container h3,body div.brlbs-cmpnt-container h4,body div.brlbs-cmpnt-container h5,body div.brlbs-cmpnt-container h6,body div.brlbs-cmpnt-container header,body div.brlbs-cmpnt-container hgroup,body div.brlbs-cmpnt-container i,body div.brlbs-cmpnt-container iframe,body div.brlbs-cmpnt-container img,body div.brlbs-cmpnt-container ins,body div.brlbs-cmpnt-container kbd,body div.brlbs-cmpnt-container label,body div.brlbs-cmpnt-container legend,body div.brlbs-cmpnt-container li,body div.brlbs-cmpnt-container mark,body div.brlbs-cmpnt-container menu,body div.brlbs-cmpnt-container nav,body div.brlbs-cmpnt-container object,body div.brlbs-cmpnt-container ol,body div.brlbs-cmpnt-container output,body div.brlbs-cmpnt-container p,body div.brlbs-cmpnt-container pre,body div.brlbs-cmpnt-container q,body div.brlbs-cmpnt-container ruby,body div.brlbs-cmpnt-container s,body div.brlbs-cmpnt-container samp,body div.brlbs-cmpnt-container section,body div.brlbs-cmpnt-container small,body div.brlbs-cmpnt-container span,body div.brlbs-cmpnt-container strike,body div.brlbs-cmpnt-container strong,body div.brlbs-cmpnt-container sub,body div.brlbs-cmpnt-container summary,body div.brlbs-cmpnt-container sup,body div.brlbs-cmpnt-container table,body div.brlbs-cmpnt-container tbody,body div.brlbs-cmpnt-container td,body div.brlbs-cmpnt-container tfoot,body div.brlbs-cmpnt-container th,body div.brlbs-cmpnt-container thead,body div.brlbs-cmpnt-container time,body div.brlbs-cmpnt-container tr,body div.brlbs-cmpnt-container tt,body div.brlbs-cmpnt-container u,body div.brlbs-cmpnt-container ul,body div.brlbs-cmpnt-container var,body div.brlbs-cmpnt-container video{margin:0;padding:0;border:0;font-size:100%;font-family:inherit;vertical-align:baseline}body div.brlbs-cmpnt-container article,body div.brlbs-cmpnt-container aside,body div.brlbs-cmpnt-container details,body div.brlbs-cmpnt-container figcaption,body div.brlbs-cmpnt-container figure,body div.brlbs-cmpnt-container footer,body div.brlbs-cmpnt-container header,body div.brlbs-cmpnt-container hgroup,body div.brlbs-cmpnt-container menu,body div.brlbs-cmpnt-container nav,body div.brlbs-cmpnt-container section{dis
128play:block}body div.brlbs-cmpnt-container blockquote,body div.brlbs-cmpnt-container q{quotes:none}body div.brlbs-cmpnt-container blockquote:after,body div.brlbs-cmpnt-container blockquote:before,body div.brlbs-cmpnt-container q:after,body div.brlbs-cmpnt-container q:before{content:none}body div.brlbs-cmpnt-container table{border-spacing:0}body div.brlbs-cmpnt-container,body div.brlbs-cmpnt-container *{box-sizing:border-box;color:inherit;font-family:inherit;line-height:inherit;position:static;inset:auto;width:auto;height:auto}body div.brlbs-cmpnt-container button,body div.brlbs-cmpnt-container input,body div.brlbs-cmpnt-container optgroup,body div.brlbs-cmpnt-container select,body div.brlbs-cmpnt-container textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}body div.brlbs-cmpnt-container button:after,body div.brlbs-cmpnt-container button:before{content:none}body div.brlbs-cmpnt-container button,body div.brlbs-cmpnt-container select{text-transform:none}body div.brlbs-cmpnt-container [type=button],body div.brlbs-cmpnt-container [type=reset],body div.brlbs-cmpnt-container [type=submit],body div.brlbs-cmpnt-container button{-webkit-appearance:button}body div.brlbs-cmpnt-container ::-moz-focus-inner{border-style:none;padding:0}body div.brlbs-cmpnt-container :-moz-focusring{outline:1px dotted ButtonText}body div.brlbs-cmpnt-container :-moz-ui-invalid{box-shadow:none}body div.brlbs-cmpnt-container legend{padding:0}body div.brlbs-cmpnt-container progress{vertical-align:baseline}body div.brlbs-cmpnt-container ::-webkit-inner-spin-button,body div.brlbs-cmpnt-container ::-webkit-outer-spin-button{height:auto}body div.brlbs-cmpnt-container [type=search]{-webkit-appearance:textfield;outline-offset:-2px}body div.brlbs-cmpnt-container ::-webkit-search-decoration{-webkit-appearance:none}body div.brlbs-cmpnt-container ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}body div.brlbs-cmpnt-container summary{display:list-item}body div.brlbs-cmpnt-container blockquote,body div.brlbs-cmpnt-container dd,body div.brlbs-cmpnt-container dl,body div.brlbs-cmpnt-container figure,body div.brlbs-cmpnt-container h1,body div.brlbs-cmpnt-container h2,body div.brlbs-cmpnt-container h3,body div.brlbs-cmpnt-container h4,body div.brlbs-cmpnt-container h5,body div.brlbs-cmpnt-container h6,body div.brlbs-cmpnt-container hr,body div.brlbs-cmpnt-container p,body div.brlbs-cmpnt-container pre{margin:0}body div.brlbs-cmpnt-container button{background-color:transparent;background-image:none}body div.brlbs-cmpnt-container button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}body div.brlbs-cmpnt-container fieldset{margin:0;padding:0}body div.brlbs-cmpnt-container ol,body div.brlbs-cmpnt-container ul{list-style:none;margin:0;padding:0}body div.brlbs-cmpnt-container *,body div.brlbs-cmpnt-container :after,body div.brlbs-cmpnt-container :before{box-sizing:border-box;border-color:#e5e7eb;border-style:solid;border-width:0}body div.brlbs-cmpnt-container hr{border-top-width:1px}body div.brlbs-cmpnt-container img{border-style:solid}body div.brlbs-cmpnt-container textarea{resize:vertical}body div.brlbs-cmpnt-container input::-moz-placeholder,body div.brlbs-cmpnt-container textarea::-moz-placeholder{color:#9ca3af}body div.brlbs-cmpnt-container input::placeholder,body div.brlbs-cmpnt-container textarea::placeholder{color:#9ca3af}body div.brlbs-cmpnt-container [role=button],body div.brlbs-cmpnt-container button{curs
128or:pointer}body div.brlbs-cmpnt-container table{border-collapse:collapse}body div.brlbs-cmpnt-container h1,body div.brlbs-cmpnt-container h2,body div.brlbs-cmpnt-container h3,body div.brlbs-cmpnt-container h4,body div.brlbs-cmpnt-container h5,body div.brlbs-cmpnt-container h6{font-size:inherit;font-weight:inherit}body div.brlbs-cmpnt-container a{color:inherit;text-decoration:inherit}body div.brlbs-cmpnt-container button,body div.brlbs-cmpnt-container input,body div.brlbs-cmpnt-container optgroup,body div.brlbs-cmpnt-container select,body div.brlbs-cmpnt-container textarea{padding:0;line-height:inherit;color:inherit}body div.brlbs-cmpnt-container code,body div.brlbs-cmpnt-container kbd,body div.brlbs-cmpnt-container pre,body div.brlbs-cmpnt-container samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}body div.brlbs-cmpnt-container audio,body div.brlbs-cmpnt-container canvas,body div.brlbs-cmpnt-container embed,body div.brlbs-cmpnt-container iframe,body div.brlbs-cmpnt-container img,body div.brlbs-cmpnt-container object,body div.brlbs-cmpnt-container svg,body div.brlbs-cmpnt-container video{display:block;vertical-align:middle}body div.brlbs-cmpnt-container img,body div.brlbs-cmpnt-container video{max-width:100%;height:auto}body div.brlbs-cmpnt-container [multiple],body div.brlbs-cmpnt-container [type=date],body div.brlbs-cmpnt-container [type=datetime-local],body div.brlbs-cmpnt-container [type=email],body div.brlbs-cmpnt-container [type=month],body div.brlbs-cmpnt-container [type=number],body div.brlbs-cmpnt-container [type=password],body div.brlbs-cmpnt-container [type=search],body div.brlbs-cmpnt-container [type=tel],body div.brlbs-cmpnt-container [type=text],body div.brlbs-cmpnt-container [type=time],body div.brlbs-cmpnt-container [type=url],body div.brlbs-cmpnt-container [type=week],body div.brlbs-cmpnt-container select,body div.brlbs-cmpnt-container textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem}body div.brlbs-cmpnt-container [multiple]:focus,body div.brlbs-cmpnt-container [type=date]:focus,body div.brlbs-cmpnt-container [type=datetime-local]:focus,body div.brlbs-cmpnt-container [type=email]:focus,body div.brlbs-cmpnt-container [type=month]:focus,body div.brlbs-cmpnt-container [type=number]:focus,body div.brlbs-cmpnt-container [type=password]:focus,body div.brlbs-cmpnt-container [type=search]:focus,body div.brlbs-cmpnt-container [type=tel]:focus,body div.brlbs-cmpnt-container [type=text]:focus,body div.brlbs-cmpnt-container [type=time]:focus,body div.brlbs-cmpnt-container [type=url]:focus,body div.brlbs-cmpnt-container [type=week]:focus,body div.brlbs-cmpnt-container select:focus,body div.brlbs-cmpnt-container textarea:focus{outline:2px solid transparent;outline-offset:2px;--brlbs-tw-ring-inset:var(--brlbs-tw-empty, );--brlbs-tw-ring-offset-width:0px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:#2563eb;--brlbs-tw-ring-offset-shadow:var(--brlbs-tw-ring-inset) 0 0 0 var(--brlbs-tw-ring-offset-width) var(--brlbs-tw-ring-offset-color);--brlbs-tw-ring-shadow:var(--brlbs-tw-ring-inset) 0 0 0 calc(1px + var(--brlbs-tw-ring-offset-width)) var(--brlbs-tw-ring-color);box-shadow:var(--brlbs-tw-ring-offset-shadow),var(--brlbs-tw-ring-shadow),var(--brlbs-tw-shadow,0 0 transparent);border-color:#2563eb}body div.brlbs-cmpnt-container input::-moz-placeholder,body div.brlbs-cmpnt-container textarea::-moz-placeholder{color:#6b7280;opacity:1}body div.brlbs-cmpnt-container input::placeholder,body div.brlbs-cmpnt-container textarea::placeholder{color:#6b7280;opacity:1}body div.brlbs-cmpnt-container ::-webkit-datetime-edit-fields-wrapper{padding:0}body div.brlbs-cmpnt-container ::-webkit-date-and-time-value{min-height:1.5em}body div.brlbs-cmpnt-container select{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20stroke%3D%22%236b7280%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%221.5%22%20d%3D%22m6%208%204%204%204-4%22%2F%3
128E%3C%2Fsvg%3E);background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}body div.brlbs-cmpnt-container [multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}body div.brlbs-cmpnt-container [type=checkbox],body div.brlbs-cmpnt-container [type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px}body div.brlbs-cmpnt-container [type=checkbox]{border-radius:0}body div.brlbs-cmpnt-container [type=radio]{border-radius:100%}body div.brlbs-cmpnt-container [type=checkbox]:focus,body div.brlbs-cmpnt-container [type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--brlbs-tw-ring-inset:var(--brlbs-tw-empty, );--brlbs-tw-ring-offset-width:2px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:#2563eb;--brlbs-tw-ring-offset-shadow:var(--brlbs-tw-ring-inset) 0 0 0 var(--brlbs-tw-ring-offset-width) var(--brlbs-tw-ring-offset-color);--brlbs-tw-ring-shadow:var(--brlbs-tw-ring-inset) 0 0 0 calc(2px + var(--brlbs-tw-ring-offset-width)) var(--brlbs-tw-ring-color);box-shadow:var(--brlbs-tw-ring-offset-shadow),var(--brlbs-tw-ring-shadow),var(--brlbs-tw-shadow,0 0 transparent)}body div.brlbs-cmpnt-container [type=checkbox]:checked,body div.brlbs-cmpnt-container [type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}body div.brlbs-cmpnt-container [type=checkbox]:checked{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M12.207%204.793a1%201%200%200%201%200%201.414l-5%205a1%201%200%200%201-1.414%200l-2-2a1%201%200%200%201%201.414-1.414L6.5%209.086l4.293-4.293a1%201%200%200%201%201.414%200%22%2F%3E%3C%2Fsvg%3E)}body div.brlbs-cmpnt-container [type=radio]:checked{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2016%2016%22%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%223%22%2F%3E%3C%2Fsvg%3E)}body div.brlbs-cmpnt-container [type=checkbox]:checked:focus,body div.brlbs-cmpnt-container [type=checkbox]:checked:hover,body div.brlbs-cmpnt-container [type=radio]:checked:focus,body div.brlbs-cmpnt-container [type=radio]:checked:hover{border-color:transparent;background-color:currentColor}body div.brlbs-cmpnt-container [type=checkbox]:indeterminate{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20stroke%3D%22%23fff%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22M4%208h8%22%2F%3E%3C%2Fsvg%3E);border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}body div.brlbs-cmpnt-container [type=checkbox]:indeterminate:focus,body div.brlbs-cmpnt-container [type=checkbox]:indeterminate:hover{border-color:transparent;background-color:currentColor}body div.brlbs-cmpnt-container [type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}:root{--brlbs-tw-border-spacing-x:0;--brlbs-tw-border-spacing-y:0;--brlbs-tw-translate-x:0;--brlbs-tw-translate-y:0;--brlbs-tw-rotate:0;--brlbs-tw-skew-x:0;--brlbs-tw-skew-y:0;--brlbs-tw-scale-x:1;--brlbs-tw-scale-y:1;--brlbs-tw-pan-x:;--brlbs-tw-pan-y:;--brlbs-tw-pinch-zoom:;--brlbs-tw-scroll-snap-strictness:proximity;--brlbs-tw-gradient-from-position:;
128--brlbs-tw-gradient-via-position:;--brlbs-tw-gradient-to-position:;--brlbs-tw-ordinal:;--brlbs-tw-slashed-zero:;--brlbs-tw-numeric-figure:;--brlbs-tw-numeric-spacing:;--brlbs-tw-numeric-fraction:;--brlbs-tw-ring-inset:;--brlbs-tw-ring-offset-width:0px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:rgba(59,130,246,.5);--brlbs-tw-ring-offset-shadow:0 0 #0000;--brlbs-tw-ring-shadow:0 0 #0000;--brlbs-tw-shadow:0 0 #0000;--brlbs-tw-shadow-colored:0 0 #0000;--brlbs-tw-blur:;--brlbs-tw-brightness:;--brlbs-tw-contrast:;--brlbs-tw-grayscale:;--brlbs-tw-hue-rotate:;--brlbs-tw-invert:;--brlbs-tw-saturate:;--brlbs-tw-sepia:;--brlbs-tw-drop-shadow:;--brlbs-tw-backdrop-blur:;--brlbs-tw-backdrop-brightness:;--brlbs-tw-backdrop-contrast:;--brlbs-tw-backdrop-grayscale:;--brlbs-tw-backdrop-hue-rotate:;--brlbs-tw-backdrop-invert:;--brlbs-tw-backdrop-opacity:;--brlbs-tw-backdrop-saturate:;--brlbs-tw-backdrop-sepia:;--brlbs-tw-contain-size:;--brlbs-tw-contain-layout:;--brlbs-tw-contain-paint:;--brlbs-tw-contain-style:}::backdrop{--brlbs-tw-border-spacing-x:0;--brlbs-tw-border-spacing-y:0;--brlbs-tw-translate-x:0;--brlbs-tw-translate-y:0;--brlbs-tw-rotate:0;--brlbs-tw-skew-x:0;--brlbs-tw-skew-y:0;--brlbs-tw-scale-x:1;--brlbs-tw-scale-y:1;--brlbs-tw-pan-x:;--brlbs-tw-pan-y:;--brlbs-tw-pinch-zoom:;--brlbs-tw-scroll-snap-strictness:proximity;--brlbs-tw-gradient-from-position:;--brlbs-tw-gradient-via-position:;--brlbs-tw-gradient-to-position:;--brlbs-tw-ordinal:;--brlbs-tw-slashed-zero:;--brlbs-tw-numeric-figure:;--brlbs-tw-numeric-spacing:;--brlbs-tw-numeric-fraction:;--brlbs-tw-ring-inset:;--brlbs-tw-ring-offset-width:0px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:rgba(59,130,246,.5);--brlbs-tw-ring-offset-shadow:0 0 #0000;--brlbs-tw-ring-shadow:0 0 #0000;--brlbs-tw-shadow:0 0 #0000;--brlbs-tw-shadow-colored:0 0 #0000;--brlbs-tw-blur:;--brlbs-tw-brightness:;--brlbs-tw-contrast:;--brlbs-tw-grayscale:;--brlbs-tw-hue-rotate:;--brlbs-tw-invert:;--brlbs-tw-saturate:;--brlbs-tw-sepia:;--brlbs-tw-drop-shadow:;--brlbs-tw-backdrop-blur:;--brlbs-tw-backdrop-brightness:;--brlbs-tw-backdrop-contrast:;--brlbs-tw-backdrop-grayscale:;--brlbs-tw-backdrop-hue-rotate:;--brlbs-tw-backdrop-invert:;--brlbs-tw-backdrop-opacity:;--brlbs-tw-backdrop-saturate:;--brlbs-tw-backdrop-sepia:;--brlbs-tw-contain-size:;--brlbs-tw-contain-layout:;--brlbs-tw-contain-paint:;--brlbs-tw-contain-style:}.brlbs-cmpnt-container .brlbs-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.brlbs-cmpnt-container .\!brlbs-hidden{display:none!important}.brlbs-cmpnt-container .brlbs-overflow-auto{overflow:auto}.brlbs-cmpnt-container .brlbs-overflow-hidden{overflow:hidden}.brlbs-cmpnt-container .brlbs-pt-4{padding-top:16px}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker{container-name:brlbsCmpntContentBlocker;container-type:inline-size;line-height:1.25em;height:100%;font-size:var(--content-blocker-font-size);font-family:var(--content-blocker-font-family)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a{color:var(--content-blocker-link-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a:hover{color:var(--content-blocker-link-color-hover)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker.brlbs-cmpnt-cb-card,body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker.brlbs-cmpnt-cb-provider-card{container-type:normal}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-details{position:relative;padding:16px;text-align:left}@media(min-width:768px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-details{padding:24px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-header{display:flex;align-items:center}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-header.brlbs-cmpnt-with-separator{margin-bottom:16px;border-bottom-width:1px;border-style:solid;padding-bottom:16px}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-button{display:flex;padding-bottom:16px}@media(min-width:768px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-button{padding-bottom:24px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a{align-items:center;justify-content:center;padding:16px;text-align:center;background:var(--content-blocker-background-color);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description{padding-bottom:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description{padding-bottom:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description{border-color:var(--content-blocker-separator-color);border-style:solid;border-bottom-width:var(--content-blocker-separator-width)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description strong{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b{position:relative;display:flex;height:100%;padding-top:96px;padding-bottom:96px;text-align:center;background:var(--content-blocker-background-color);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color);width:100%}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{position:relative;display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{flex-direction:row;gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{background:var(--content-blocker-background);color:var(--content-blocker-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-content{flex-basis:66.666667%}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-description{padding-bottom:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-description{padding-bottom:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-description strong{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-buttons{margin:0;display:flex;flex-basis:33.333333%;flex-direction:column;align-items:stretch;justify-content:center;gap:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-buttons{gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c{position:relative;display:flex;height:100%;text-align:center;background:var(--content-blocker-background-color);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color);width:100%}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{position:relative;margin:48px;display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{margin:96px;
128gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{background:var(--content-blocker-background);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-description{padding-bottom:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-description{padding-bottom:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-description strong{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-buttons{margin:0;display:flex;width:100%;flex-direction:column;align-items:stretch;justify-content:center;gap:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-buttons{gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-play-button{border-radius:50%;background:#fff;box-shadow:0 1px 5px #00000026;width:34px;height:34px;margin:0 auto;display:flex;align-items:center;justify-content:center;position:absolute;top:-17px;left:calc(50% - 17px)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-play-button:before{background:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2278%22%20height%3D%2278%22%20viewBox%3D%220%200%2078%2078%22%3E%3Cpath%20d%3D%22M7.5%2071.5v-64l48%2030.328z%22%2F%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%2212%22%20d%3D%22M7.5%2071.5v-64l48%2030.328z%22%2F%3E%3C%2Fsvg%3E) no-repeat 50%;background-size:contain;content:" ";margin-left:4px;display:inline-block;height:1.142857143em;width:.857142857em}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-thumbnail{position:absolute;top:0;left:0;height:100%;width:100%;background-size:cover;background-position:50%;border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-buttons{margin-top:8px;margin-bottom:8px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-buttons{margin-top:16px;margin-bottom:16px;flex-direction:row;gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-buttons .brlbs-cmpnt-cb-btn{display:flex;width:100%;align-items:center;justify-content:center;text-decoration-line:none}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d){position:fixed;height:auto}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-left\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-right\]){top:var(--content-blocker-icon-margin)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-left\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-right\]){bottom:var(--content-blocker-icon-margin)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-right\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-right\]){right:calc(var(--content-blocker-icon-width) + var(--content-blocker-icon-margin))}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-left\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-left\]){left:var(--content-blocker-icon-margin)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-display\[flex\]){position:relative;display:inline-block;display:flex}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[float-left\]){float:left}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[float-right\]){float:right}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-d .brlbs-cmpnt-cb-icon{display:inline-block;height:var(--content-blocker-icon-height);width:var(--content-blocker-icon-width)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list{display:table}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list>div{display:table-row}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list dt{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list dd,body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list dt{display:table-cell;padding:2px 4px}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn{all:unset;box-sizing:border-box;
128cursor:pointer;align-items:center;justify-content:center;padding:12px 20px;text-align:center;font-size:var(--dialog-font-size);line-height:calc(1.5 * var(--dialog-font-size));font-weight:600;text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.4s;border-top-left-radius:var(--content-blocker-button-border-radius-top-left);border-top-right-radius:var(--content-blocker-button-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-button-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-button-border-radius-bottom-right);background-color:var(--content-blocker-button-color);color:var(--content-blocker-button-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn:hover{background-color:var(--content-blocker-button-color-hover);color:var(--content-blocker-button-text-color-hover)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn:active,body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn:focus{outline:2px solid transparent;outline-offset:2px;--brlbs-tw-ring-offset-shadow:var(--brlbs-tw-ring-inset) 0 0 0 var(--brlbs-tw-ring-offset-width) var(--brlbs-tw-ring-offset-color);--brlbs-tw-ring-shadow:var(--brlbs-tw-ring-inset) 0 0 0 calc(2px + var(--brlbs-tw-ring-offset-width)) var(--brlbs-tw-ring-color);box-shadow:var(--brlbs-tw-ring-offset-shadow),var(--brlbs-tw-ring-shadow),var(--brlbs-tw-shadow,0 0 #0000)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-provider-toggle{all:unset;box-sizing:border-box;color:var(--content-blocker-link-color);cursor:pointer;display:flex;align-items:center;justify-content:center;text-decoration-line:none}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-provider-toggle:hover{all:unset;box-sizing:border-box;color:var(--content-blocker-link-color-hover);cursor:pointer;display:flex;align-items:center;justify-content:center;text-decoration-line:none}@container brlbsCmpntContentBlocker (480px <= width < 620px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b{padding-top:12%;padding-bottom:12%}}@container brlbsCmpntContentBlocker (width < 480px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b{padding:0}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{margin:6%;flex-direction:column;gap:8px;justify-content:normal;overflow:auto}}@container brlbsCmpntContentBlocker (640px <= width < 750px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{margin:10%!important}}@container brlbsCmpntContentBlocker (540px <= width < 640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{margin:6%!important}}@container brlbsCmpntContentBlocker (width < 540px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker{position:static}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{gap:8px;margin:6%!important;justify-content:normal;overflow:auto}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main .brlbs-cmpnt-cb-play-button{display:none}}@container brlbsCmpntContentBlocker (width < 375px){.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main,.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{height:100%;justify-content:normal;overflow:auto}.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main .brlbs-cmpnt-cb-play-button,.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main .brlbs-cmpnt-cb-play-button{display:none}}.wp-embed-aspect-16-9:has(.brlbs-cmpnt-container.brlbs-cmpnt-content-blocker) div.wp-block-embed__wrapper{padding:0}.wp-embed-aspect-16-9:has(.brlbs-cmpnt-container.brlbs-cmpnt-content-blocker) div.wp-block-embed__wrapper:before{padding:0}#BorlabsCookieBox,.brlbs-cmpnt-container{font-family:var(--dialog-font-family);font-weight:400;line-height:calc(1.2 * var(--dialog-font-size))}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element{container-name:brlbsCmpntShortcodeElement;container-type:inline-size;line-height:1.25em;height:100%}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list{display:table}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list>div{display:table-row}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list dt{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list dd,body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list dt{display:table-cell;padding:2px 4px} 129:root{--content-blocker-background-color: #fafafa; 130--content-blocker-button-color: #0063e3; 131--content-blocker-button-color-hover: #1a66ff; 132--content-blocker-button-text-color: #fff; 133--content-blocker-button-text-color-hover: #fff; 134--content-blocker-font-family: inherit; 135--content-blocker-link-color: #2563eb; 136--content-blocker-link-color-hover: #1e40af; 137--content-blocker-separator-color: #e5e5e5; 138--content-blocker-text-color: #555; 139--content-blocker-border-radius-top-left: 4px; 140--content-blocker-border-radius-top-right: 4px; 141--content-blocker-border-radius-bottom-left: 4px; 142--content-blocker-border-radius-bottom-right: 4px; 143--content-blocker-button-border-radius-top-left: 4px; 144--content-blocker-button-border-radius-top-right: 4px; 145--content-blocker-button-border-radius-bottom-left: 4px; 146--content-blocker-button-border-radius-bottom-right: 4px; 147--content-blocker-font-size: 14px; 148--content-blocker-separator-width: 1px; 149--content-blocker-background-opacity: 0.85; 150--content-blocker-background: rgba(250, 250, 250 ,0.85); 151} 152 153/*# sourceURL=borlabs-cookie-critical-inline-css */ 154</style> 155<link onload="this.media='all';this.onload=null" data-borlabs-cookie-deferred-style="1" rel='stylesheet' id='borlabs-cookie-custom-css' href='https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-1-de.css?ver=3.4.5-51' media="print" /> 156<noscript><link rel='stylesheet' id='borlabs-cookie-custom-css' href='https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-1-de.css?ver=3.4.5-51' media='all' /> 157</noscript> 158<link rel='stylesheet' id='uni_vrgngverarb_style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vorgangsverarbeitung/css/uni_vrgngverarb_style.css?ver=1.0.2' media='all' /> 159<link rel='stylesheet' id='print-css-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/print.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='print' /> 160<link rel='stylesheet' id='style-font-awesome-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/fontawesome-free-5.15.4-web/css/all.css?ver=5.15.4' media='all' /> 161<link rel='stylesheet' id='evaluation-hwk-style-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/evaluation-hwk.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
162<link rel='stylesheet' id='bs4-margin-padding-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/bootstrap4-padding-and-margin-classes.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 163<link rel='stylesheet' id='bs4-form-check-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/bootstrap4-form-check-classes.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 164<link rel='stylesheet' id='toastr-css-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/toastr-2.1.4-dist/toastr.min.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 165<link rel='stylesheet' id='chart-css-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/Chart.js-2.8.0/dist/Chart.min.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' /> 166<link rel='stylesheet' id='uni-hwk-redesign-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/style-uni.css?ver=1.1.47' media='all' /> 167<link rel='stylesheet' id='uni-base-custom-style-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/custom-hwkkonstanz.css?ver=1.2.4' media='all' /> 168<link rel='stylesheet' id='navbar-brand-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/navbar-brand-hwkkonstanz.css?ver=1.3.52' media='all' />
169<script id="jquery-core-js" src="https://www.hwk-konstanz.de/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 169
169
170<script id="moment-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/moment-with-locales-2.29.4.js?ver=2.29.4"></script>
vendor: 1 bytes, line 170
170
171<script id="moment-precise-range-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/moment-precise-range.js?ver=23aa77011f2741f8761f3b53cd9d29b9"></script>
vendor: 1 bytes, line 171
171
172<script id="leaflet-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet/leaflet.js?ver=23aa77011f2741f8761f3b53cd9d29b9"></script>
vendor: 1 bytes, line 172
172
173<script id="leaflet-fullscreen-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet-fullscreen/leaflet-fullscreen.min.js?ver=23aa77011f2741f8761f3b53cd9d29b9"></script>
vendor: 1 bytes, line 173
173
174<script id="vue-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/vue-2.7.14.min.js?ver=2.7.14"></script>
vendor: 1 bytes, line 174
174
175<script id="vue-js-router-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/vue-router.min.js?ver=3.0.7"></script>
vendor: 1 bytes, line 175
175
176<script id="vue-js-resource-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/vue-resource.min.js?ver=3.0.7"></script>
vendor: 1 bytes, line 176
176
177<script id="uni_helper_js-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/helper/js/uni_helper_js.js?ver=1.0.1"></script>
vendor: 1 bytes, line 177
177
178<script id="select2_script_min-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vuejs/helper/../dist/select2-4.0.13/js/select2.full.min.js?ver=4.0.13"></script>
vendor: 1 bytes, line 178
178
179<script data-no-optimize="1" data-no-minify="1" data-cfasync="false" id="borlabs-cookie-config-js" src="https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-config-de.json.js?ver=3.4.5-88"></script>
vendor: 1 bytes, line 179
179
180<script data-no-optimize="1" data-no-minify="1" data-cfasync="false" id="borlabs-cookie-prioritize-js" src="https://www.hwk-konstanz.de/wp-content/plugins/borlabs-cookie/assets/javascript/borlabs-cookie-prioritize.min.js?ver=3.4.5"></script>
vendor: 1 bytes, line 180
180
181<script id="uni_vrgngverarb_apvars_x3_calc_fields_functions-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vorgangsverarbeitung/helper/uni_vrgngverarb_apvars_x3_calc_fields_functions.js?ver=1.0.2"></script>
vendor: 1 bytes, line 181
181
182<script id="uni-hwk-comments-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/js/uni-hwk-comments.js?ver=1.0"></script>
vendor: 1 bytes, line 182
182
183<script id="uni-hwk-theme-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/js/uni-hwk.js?ver=1782710209"></script>
vendor: 1 bytes, line 183
183
184<script id="toastr-script-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/toastr-2.1.4-dist/toastr.min.js?ver=1.0"></script>
vendor: 1 bytes, line 184
184
185<script id="chart-script-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/Chart.js-2.8.0/dist/Chart.js?ver=1.0"></script>
vendor: 1 bytes, line 185
185
186<script async data-wp-strategy="async" id="eyeable-client-config-js" src="https://www.hwk-konstanz.de/eyeable/clientConfig.js"></script>
vendor: 1 bytes, line 186
186
187<script async data-wp-strategy="async" id="eyeable-js-js" src="https://www.hwk-konstanz.de/eyeable/public/js/eyeAble.js"></script>
187 188<link rel="https://api.w.org/" href="https://www.hwk-konstanz.de/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.hwk-konstanz.de/wp-json/wp/v2/pages/273005" /><link rel='shortlink' href='https://www.hwk-konstanz.de/?p=273005' /> 189 <link rel="stylesheet" href="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/bootstrap-icons-1.13.1/bootstrap-icons.css"> 190 <meta name="ai-tools" content="client=29f014e522b01969173c26401e75a41a;baseUrl=https://ai.uniplus-software.de;elementId=uni-ai-tools-language;title=Language" /> 191 <meta property="og:image" content="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/img/hwk_schraube.png"/> 192 <meta property="og:image:width" content="200"/> 193 <meta property="og:image:height" content="200"/> 194 <meta name="description" content=""/> 195 <meta property="og:description" content=""/> 196 </head> 197 <body data-spy="scroll" data-target="#scrollspyContent" class="wp-singular page-template page-template-page-scrollspy page-template-page-scrollspy-php page page-id-273005 wp-theme-chatty wp-child-theme-uni-hwk-redesign has-menu-top top-parent-slug-handwerk top-parent-id-273005 has-header header-collapse standard form-no-floating-label submenu-default" id="handwerk"> 198 <div id="browser-warning" class="sr-only"></div> 199 200 <div id="wrapper" class="container"> 201<div id="header" class="hidden-print"> 202 <a href="https://www.hwk-konstanz.de" class="home-link-xs visible-xs"><span class="sr-only">Home Link auf dem Handy</span></a> 203 <header class="site-header-bar"> 204 <div class="container"> 205 <div class="row"> 206 <div id="logo" class="col-md-3 col-sm-4"><a class="navbar-brand" href="https://www.hwk-konstanz.de"><span class="screen-reader">Logo</span></a><a class="search visible-xs" title="Suche" role="button" aria-label="Öffnet die Suche" aria-describedby="searchbar"><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></a></div> <div class="col-md-9 col-sm-8 hidden-xs"> 207 <div class="row"> 208 <div class="header-menu col-sm-12"> 209 <nav class="header-menu-nav" role="navigation" aria-label="Kopfnavigation"> 210 <ul class="nav header-menu-ul"> 211 <li class="dropdown"> 212 <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 213 Über uns <span class="caret"></span> 214 </a> 215 <ul class="dropdown-menu"> 216 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 217 <a href="https://www.hwk-konstanz.de/hwk/" target=""> 218 Die Handwerkskammer </a> 219 </li> 220 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 221 <a href="https://www.hwk-konstanz.de/handwerk/" target=""> 222 Das Handwerk in der Region </a> 223 </li> 224 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 225 <a href="https://www.hwk-konstanz.de/unsere-funktionstraeger-gremien-und-strukturen/" target=""> 226 Organe und Ehrenamt </a> 227 </li> 228 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 229 <a href="https://www.hwk-konstanz.de/organisation/" target=""> 230 Die Organisationen des Handwerks </a> 231 </li> 232 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 233 <a href="https://www.hwk-konstanz.de/partner-und-kooperationen/" target=""> 234 Partner und Kooperationen </a> 235 </li> 236 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 237 <a href="https://www.hwk-konstanz.de/bekanntmachungen/" target=""> 238 Amtliche Bekanntmachungen </a> 239 </li> 240 </ul> 241 242 </li> 243 <li role="presentation" class="divider"></li> 244 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 245 <a href="https://www.hwk-konstanz.de/stellen/" target=""> 246 Karriere</a> 247 </li> 248 <li role="presentation" class="divider"></li> 249 <li class="dropdown"> 250 <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
251 Presse & Medien <span class="caret"></span> 252 </a> 253 <ul class="dropdown-menu"> 254 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 255 <a href="https://www.hwk-konstanz.de/pressebereich/" target=""> 256 Pressebereich </a> 257 </li> 258 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 259 <a href="https://www.hwk-konstanz.de/presse/" target=""> 260 Pressemitteilungen </a> 261 </li> 262 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 263 <a href="https://www.hwk-konstanz.de/politische-statements/" target=""> 264 Politische Statements </a> 265 </li> 266 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 267 <a href="https://www.hwk-konstanz.de/dhz/" target=""> 268 Deutsche Handwerks Zeitung (DHZ) </a> 269 </li> 270 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 271 <a href="https://www.hwk-konstanz.de/handwerk-kompakt/" target=""> 272 Newsletter </a> 273 </li> 274 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 275 <a href="https://www.hwk-konstanz.de/mit-handwerk-heroes-das-handwerk-erkunden/" target=""> 276 Imagekampagne </a> 277 </li> 278 </ul> 279 280 </li> 281 <li role="presentation" class="divider"></li> 282 <li class="dropdown"> 283 <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 284 Kontakt <span class="caret"></span> 285 </a> 286 <ul class="dropdown-menu"> 287 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 288 <a href="https://www.hwk-konstanz.de/ansprechpersonen/" target=""> 289 Ansprechpersonen </a> 290 </li> 291 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 292 <a href="https://www.hwk-konstanz.de/oeffnungszeiten/" target=""> 293 Öffnungszeiten </a> 294 </li> 295 <li class="menu-item menu-item-type-custom menu-item-object-custom "> 296 <a href="https://www.hwk-konstanz.de/kontaktformular/" target=""> 297 Kontaktformular </a> 298 </li> 299 </ul> 300 301 </li> 302 <li role="presentation" class="divider"></li> 303 <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden"> 304 <a href="https://youtube.com/@hwkkonstanz" target="_blank">
305 <span class="glyphicon glyphicon-youtube"></span> 306 </a> 307 </li> 308 <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden"> 309 <a href="https://www.facebook.com/hwkkonstanz/" target="_blank"> 310 <span class="glyphicon glyphicon-facebook"></span> 311 </a> 312 </li> 313 <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden"> 314 <a href="https://www.instagram.com/handwerkskammer_konstanz/#" target="_blank"> 315 <span class="glyphicon fab fa-instagram "></span> 316 </a> 317 </li> 318 <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden"> 319 <a href="http://www.linkedin.com/company/handwerkskammer-konstanz/" target="_blank"> 320 <span class="glyphicon glyphicon-linked-in"></span> 321 </a> 322 </li> 323 324 325 326 <li id="uni-ai-tools-language-divider" role="presentation" class="divider"></li> 327 <li id="uni-ai-tools-language" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item current_page_item "> 328 329 </li> 330 331 332 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 333 <a href="https://www.hwk-konstanz.de/bestellung"><span style="padding-right: 0px;" class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span><span class="hidden hidden-sm hidden-md">Warenkorb</span></a> 334 </li> 335 336 337 338 <li class="dropdown dropdown-login"> 339 340 <a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 341 <span class="text-white"><i class="fas fa-user"></i><span class="hidden-xs hidden-sm"> Anmelden </span><span class="caret"></span></span> 342 </a> 343 <ul class="dropdown-menu login_wrapper" style=""> 344 <li class="login"> 345 <div class="" role="form"><!-- .login --> 346 <form name="loginform" id="loginform" method="post" action="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/inc/forms/login.php"> 347 <div class="login-username form-group has-feedback"> 348 <label class="control-label" for="username">Benutzername:</label> 349 <input name="log" id="username" placeholder="Benutzername" class="input form-control" value="" size="20" type="text" style="margin-bottom: 0px"> 350 </div> 351 <div class="login-password login-username form-group has-feedback"> 352 <label class="control-label" for="password">Passwort:</label> 353 <input name="pwd" id="password" placeholder="Passwort" class="form-control input" value="" size="20" type="password" style="margin-bottom: 0px"> 354 <span class="pt-3 pb-1 cursor-pointer d-block" onclick="uni_toggle_show_password('password')"><i class="far fa-eye"></i> Passwort anzeigen</span> 355 </div> 356 <p class="login-submit"> 357 <button 358 id="btn-login" 359 class="btn btn-primary btn-login btn-login" 360 data-style="expand-right" 361 type="submit" 362 onclick="return login_submit()" 363 style="width: 100%; margin-bottom: 0px">
364 <span class="ladda-label">Anmelden</span> 365 </button> 366 </p> 367 <input name="redirect_to" value="https://www.hwk-konstanz.de/kundenportal" type="hidden"> 368 <input name="redirect_error_to" value="https://www.hwk-konstanz.de/login" type="hidden"> 369 <a href="https://www.hwk-konstanz.de/password-recover/" class="" style="">Passwort vergessen</a> 370 </form> 371</div><!-- /.login --> </li> 372 </ul> 373 </li> 374 375</ul> <ul class="nav header-menu-ul"> 376 <li class="text-hidden hidden-xs"><a class="search" role="button" aria-label="Öffnet die Suche" aria-controls="searchbar"><span class="glyphicon glyphicon-suche"></span> Suche</a></li> 377 </ul> 378 </nav> 379 </div><!-- /.header-menu --> 380 </div> 381 </div> 382 </div> 383 </div><!-- .container --> 384 </header> 385</div><!-- /header --> <div class="main-menu navbar navbar-default navbar-fixed-top top has-header"> 386 <nav> 387 <div class="container"> 388 <a href="https://www.hwk-konstanz.de" class="home-link-xs visible-xs"><span class="sr-only">Home Link auf dem Handy</span></a> 389 <div class="navbar-header"> 390 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse" data-menu-mobile="top"> 391 <span class="sr-only">Toggle navigation</span> 392 <span class="icon-bar"></span> 393 <span class="icon-bar"></span> 394 <span class="icon-bar"></span> </button> 395 </div><!-- /.navbar-header --> 396 397 <div class="navbar-collapse collapse"> 398 399 400 <ul id="main-menu-ul" class="nav navbar-nav"><li id="menu-item-43156" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43156 dropdown"><a title="Ausbildung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Ausbildung <span class="caret"></span></a> 401<ul role="menu" class=" dropdown-menu"> 402 <li id="menu-item-338161" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-338161"><a title="Ausbildungsberufe A-Z" href="/beruf/">Ausbildungsberufe A-Z</a></li> 403 <li id="menu-item-300576" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300576"><a title="Schüler" href="https://www.hwk-konstanz.de/ausbildung/">Schüler</a></li> 404 <li id="menu-item-300612" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300612"><a title="Eltern" href="https://www.hwk-konstanz.de/eltern/">Eltern</a></li> 405 <li id="menu-item-300797" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300797"><a title="Schulen" href="https://www.hwk-konstanz.de/schulen/">Schulen</a></li> 406 <li id="menu-item-303885" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-303885"><a title="Auszubildende" href="https://www.hwk-konstanz.de/azubi/">Auszubildende</a></li> 407 <li id="menu-item-303839" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-303839"><a title="Betriebe" href="https://www.hwk-konstanz.de/ausbilden/">Betriebe</a></li> 408 <li id="menu-item-300805" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300805"><a title="Studienaussteiger" href="https://www.hwk-konstanz.de/studienaussteiger/">Studienaussteiger</a></li> 409 <li id="menu-item-472152" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-472152"><a title="Design Thinking" href="https://www.hwk-konstanz.de/dtm/">Design Thinking</a></li> 410 <li id="menu-item-631416" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-631416"><a title="Qualifikationen anerkennen" href="https://www.hwk-konstanz.de/qualifikationen-anerkennen/">Qualifikationen anerkennen</a></li> 411</ul> 412</li> 413<li id="menu-item-43163" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43163 dropdown"><a title="Weiterbildung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Weiterbildung <span class="caret"></span></a> 414<ul role="menu" class=" dropdown-menu"> 415 <li id="menu-item-305049" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305049"><a title="Der Weg zum Meister" href="https://www.hwk-konstanz.de/meister/">Der Weg zum Meister</a></li> 416 <li id="menu-item-305051" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-305051"><a title="Kurse und Seminare" href="https://www.bildungsakademie.de/seminare/suche/">Kurse und Seminare</a></li> 417 <li id="menu-item-304724" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-304724"><a title="Unsere Bildungshäuser" href="https://bildungsakademie.hwk-konstanz.uniplus-software.de/">Unsere Bildungshäuser</a></li> 418 <li id="menu-item-304738" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-304738"><a title="Fördermöglichkeiten" href="https://bildungsakademie.hwk-konstanz.uniplus-software.de/foerderungen">Fördermöglichkeiten</a></li> 419 <li id="menu-item-305050" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305050"><a title="Studium" href="https://www.hwk-konstanz.de/studium/">Studium</a></li> 420</ul> 421</li>
422<li id="menu-item-43172" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43172 dropdown"><a title="Existenzgründung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Existenzgründung <span class="caret"></span></a> 423<ul role="menu" class=" dropdown-menu"> 424 <li id="menu-item-320502" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320502"><a title="Existenzgründungsberatung" href="https://www.hwk-konstanz.de/existenzgruendung/">Existenzgründungsberatung</a></li> 425 <li id="menu-item-320504" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320504"><a title="Betriebsanmeldung (Starter-Center)" href="https://www.hwk-konstanz.de/starter-center/">Betriebsanmeldung (Starter-Center)</a></li> 426 <li id="menu-item-320644" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320644"><a title="Eintragung und Mitgliedschaft" href="https://www.hwk-konstanz.de/eintragung-und-mitgliedschaft/">Eintragung und Mitgliedschaft</a></li> 427 <li id="menu-item-320515" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320515"><a title="Betriebsübernahme" href="https://www.hwk-konstanz.de/betriebsuebernahme/">Betriebsübernahme</a></li> 428 <li id="menu-item-338160" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-338160"><a title="Förderung und Finanzierung" href="https://www.hwk-konstanz.de/finanzierung/">Förderung und Finanzierung</a></li> 429 <li id="menu-item-320509" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320509"><a title="Seminare und Workshops" href="https://www.hwk-konstanz.de/gruenderwissen/">Seminare und Workshops</a></li> 430</ul> 431</li> 432<li id="menu-item-43180" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43180 dropdown"><a title="Betriebsführung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Betriebsführung <span class="caret"></span></a> 433<ul role="menu" class=" dropdown-menu"> 434 <li id="menu-item-300920" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300920"><a title="Arbeitsschutz und Betriebssicherheit" href="https://www.hwk-konstanz.de/arbeitsschutz/">Arbeitsschutz und Betriebssicherheit</a></li> 435 <li id="menu-item-336755" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336755"><a title="Außenwirtschaftsberatung" href="https://www.hwk-konstanz.de/ch/">Außenwirtschaftsberatung</a></li> 436 <li id="menu-item-320094" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320094"><a title="Betriebswirtschaftliche Beratung" href="https://www.hwk-konstanz.de/betriebswirtschaft/">Betriebswirtschaftliche Beratung</a></li> 437 <li id="menu-item-305454" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305454"><a title="Betriebsnachfolge" href="https://www.hwk-konstanz.de/betriebsnachfolge/">Betriebsnachfolge</a></li> 438 <li id="menu-item-301985" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-301985"><a title="Denkmalschutz und Restaurierung" href="https://www.hwk-konstanz.de/denkmalschutz/">Denkmalschutz und Restaurierung</a></li> 439 <li id="menu-item-306400" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-306400"><a title="Fachkräftesicherung" href="https://www.hwk-konstanz.de/fachkraeftesicherung/">Fachkräftesicherung</a></li> 440 <li id="menu-item-336920" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336920"><a title="Innovation und Technologie" href="https://www.hwk-konstanz.de/innovation/">Innovation und Technologie</a></li> 441 <li id="menu-item-301980" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-301980"><a title="Rechtsberatung" href="https://www.hwk-konstanz.de/rechtsberatung/">Rechtsberatung</a></li> 442 <li id="menu-item-307882" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-307882"><a title="Umweltschutzberatung" href="https://www.hwk-konstanz.de/umwelt/">Umweltschutzberatung</a></li> 443</ul> 444</li> 445<li id="menu-item-43188" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43188 dropdown"><a title="Service-Center" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Service-Center <span class="caret"></span></a> 446<ul role="menu" class=" dropdown-menu"> 447 <li id="menu-item-305456" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305456"><a title="Ausbildungsvertrag" href="https://www.hwk-konstanz.de/bav/">Ausbildungsvertrag</a></li> 448 <li id="menu-item-305455" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305455"><a title="Handwerkersuche" href="https://www.hwk-konstanz.de/handwerker-suchen/">Handwerkersuche</a></li> 449 <li id="menu-item-444100" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-444100"><a title="Online-Börsen" href="https://www.hwk-konstanz.de/online-boersen/">Online-Börsen</a></li> 450 <li id="menu-item-305490" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305490"><a title="Sachverständige" href="https://www.hwk-konstanz.de/sachverstaendige/">Sachverständige</a></li> 451 <li id="menu-item-339405" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-339405"><a title="Ehrungen und Urkunden" href="https://www.hwk-konstanz.de/ehrungen/">Ehrungen und Urkunden</a></li> 452 <li id="menu-item-336673" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336673"><a title="Dokumente und Verträge" href="https://www.hwk-konstanz.de/download/">Dokumente und Verträge</a></li> 453 <li id="menu-item-336672" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336672"><a title="Publikationen" href="https://www.hwk-konstanz.de/publikationen/">Publikationen</a></li> 454 <li id="menu-item-479404" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-479404"><a title="Veranstaltungen" href="https://www.hwk-konstanz.de/veranstaltung/">Veranstaltungen</a></li> 455</ul> 456</li> 457</ul> <div class="header-menu visible-xs"> 458 459 <div class="clearfix"> 460<form role="search" method="get" class="search-form" action="https://www.hwk-konstanz.de/"> 461 <div class="search-bar"> 462 <div class="form-group" onclick=" 463 document.getElementById('inputSearch40732').focus(); 464 document.getElementById('inputSearch40732').select(); "> 465 <input type="search" class="form-control search-field" name="s" id="inputSearch40732" placeholder=""> 466 <label for="inputSearch">Suche </label> 467 </div> 468 <button type="submit" value="search" class="btn btn-default" aria-label="Suche "><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></button> 469 </div> 470</form></div> 471 <nav> 472 <ul class="nav navbar-nav"> 473 <li class="dropdown"> 474 <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Über uns <span class="caret"></span></a> 475 <ul class="dropdown-menu"> 476 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 477 <a href="https://www.hwk-konstanz.de/hwk/" target=""><span class="glyphicon "></span>Die Handwerkskammer</a> 478 </li> 479 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 480 <a href="https://www.hwk-konstanz.de/handwerk/" target=""><span class="glyphicon "></span>Das Handwerk in der Region</a> 481 </li> 482 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 483 <a href="https://www.hwk-konstanz.de/unsere-funktionstraeger-gremien-und-strukturen/" target=""><span class="glyphicon "></span>Organe und Ehrenamt</a> 484 </li> 485 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 486 <a href="https://www.hwk-konstanz.de/organisation/" target=""><span class="glyphicon "></span>Die Organisationen des Handwerks</a> 487 </li> 488 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 489 <a href="https://www.hwk-konstanz.de/partner-und-kooperationen/" target=""><span class="glyphicon "></span>Partner und Kooperationen</a> 490 </li> 491 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 492 <a href="https://www.hwk-konstanz.de/bekanntmachungen/" target=""><span class="glyphicon "></span>Amtliche Bekanntmachungen</a> 493 </li> 494 </ul> 495 </li> 496 497 <li role="presentation" class="divider"></li> 498 499 500 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 501 <a href="https://www.hwk-konstanz.de/stellen/" target=""><span class="glyphicon "></span> Karriere</a> 502 </li> 503 504 <li role="presentation" class="divider"></li> 505 506 <li class="dropdown"> 507 <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
507Presse & Medien <span class="caret"></span></a> 508 <ul class="dropdown-menu"> 509 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 510 <a href="https://www.hwk-konstanz.de/pressebereich/" target=""><span class="glyphicon "></span>Pressebereich</a> 511 </li> 512 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 513 <a href="https://www.hwk-konstanz.de/presse/" target=""><span class="glyphicon "></span>Pressemitteilungen</a> 514 </li> 515 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 516 <a href="https://www.hwk-konstanz.de/politische-statements/" target=""><span class="glyphicon "></span>Politische Statements</a> 517 </li> 518 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 519 <a href="https://www.hwk-konstanz.de/dhz/" target=""><span class="glyphicon "></span>Deutsche Handwerks Zeitung (DHZ)</a> 520 </li> 521 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 522 <a href="https://www.hwk-konstanz.de/handwerk-kompakt/" target=""><span class="glyphicon "></span>Newsletter</a> 523 </li> 524 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 525 <a href="https://www.hwk-konstanz.de/mit-handwerk-heroes-das-handwerk-erkunden/" target=""><span class="glyphicon "></span>Imagekampagne</a> 526 </li> 527 </ul> 528 </li> 529 530 <li role="presentation" class="divider"></li> 531 532 <li class="dropdown"> 533 <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Kontakt <span class="caret"></span></a> 534 <ul class="dropdown-menu"> 535 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 536 <a href="https://www.hwk-konstanz.de/ansprechpersonen/" target=""><span class="glyphicon "></span>Ansprechpersonen</a> 537 </li> 538 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 539 <a href="https://www.hwk-konstanz.de/oeffnungszeiten/" target=""><span class="glyphicon "></span>Öffnungszeiten</a> 540 </li> 541 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 542 <a href="https://www.hwk-konstanz.de/kontaktformular/" target=""><span class="glyphicon "></span>Kontaktformular</a> 543 </li> 544 </ul> 545 </li> 546 547 <li role="presentation" class="divider"></li> 548 549 550 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 551 <a href="https://youtube.com/@hwkkonstanz" target="_blank"><span class="glyphicon glyphicon-youtube"></span> YouTube</a> 552 </li> 553 554 555 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 556 <a href="https://www.facebook.com/hwkkonstanz/" target="_blank"><span class="glyphicon glyphicon-facebook"></span> Facebook</a> 557 </li> 558 559 560 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 561 <a href="https://www.instagram.com/handwerkskammer_konstanz/#" target="_blank"><span class="glyphicon fab fa-instagram "></span> Instagram</a> 562 </li> 563 564 565 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item "> 566 <a href="http://www.linkedin.com/company/handwerkskammer-konstanz/" target="_blank"><span class="glyphicon glyphicon-linked-in"></span> LinkedIn</a> 567 </li> 568 569 570</ul> 571 572 573 574 <a href="/login"> 575 <div class="p-3 m-3 dropdown-login-xs">
576 <span class="text-white"><i class="fas fa-user"></i> Anmelden</span> 577 </div> 578 </a> 579 580 581 <a href="/bestellung"> 582 <div class="p-3 m-3"> 583 <span class="color-hwk-blue-dark"><i class="fas fa-shopping-cart"></i> Warenkorb</span> 584 </div> 585 </a> 586 </nav> 587 588 </div> 589 590 <div id="logo-s" class="hide"><a class="navbar-brand" href="https://www.hwk-konstanz.de"><span class="screen-reader">Logo</span></a><a class="search visible-xs" title="Suche" role="button" aria-label="Öffnet die Suche" aria-describedby="searchbar"><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></a></div> 591 592 </div><!-- /.navbar-collapse --> 593 594 </div><!-- /.container --> 595 </nav> 596 597 <div id="searchbar" aria-expanded="false"> 598 <div class="container"> 599 <div class="row"> 600 <div class="col col-sm-12"> 601 602<form role="search" method="get" class="search-form" action="https://www.hwk-konstanz.de/"> 603 <div class="search-bar"> 604 <div class="form-group" onclick=" 605 document.getElementById('inputSearch78953').focus(); 606 document.getElementById('inputSearch78953').select(); "> 607 <input type="search" class="form-control search-field" name="s" id="inputSearch78953" placeholder=""> 608 <label for="inputSearch">Suche </label> 609 </div> 610 <button type="submit" value="search" class="btn btn-default" aria-label="Suche "><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></button> 611 </div> 612</form> </div> 613 </div> 614 </div> 615 </div> 616 617 </div><!-- /.navbar --> 618 619 620 <div id="page"><!-- everything except menu --> 621 <div id="content"> 622 <div id="vue_app"> 623 <div class="container"> 624 <div class="uni-breadcrump-menu"> 625 626 <div class="row"> 627 <div class="col-xs-12 col-12 col-sm-10"> 628 <p> 629 <a class="uni-breadcrump-item" class="" href="https://www.hwk-konstanz.de/">Startseite</a> 630 <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span> 631 <label style="font-weight: unset;">Über uns</label> 632 <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span> 633 <a class=" uni-breadcrump-item" href="https://www.hwk-konstanz.de/handwerk/">Das Handwerk in der Region</a> 634 </p> 635 </div> 636 637 </div> 638 639 </div> 640 </div> 641 <div id="header-nav-3" class="container"><!-- nav 3rd level --> 642 <div class="row"> 643 <div class="col-md-12"> 644 <div id="div-head-nav-3"> 645 <p id="head-nav-3" class="h1"></p> 646 </div> 647 <div id="nav-level-3"></div> 648 <div class="clearfix"></div> 649 <hr/> 650 </div> 651 </div> 652 </div><!-- / nav 3rd level --> 653 <div class="container scroll-adjust"> 654 <div class="row"> 655 <div class="col-md-9 content"> 656 <section id="section-0"> 657 658 <div class="row margin-bottom-m new-chapter" > 659 <div id="handwerk_0" class="col col-md-12 col-sm-12"><div><img decoding="async" data-id="305085" data-src-thumbnail="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-150x64.jpg" data-src-medium="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-768x329.jpg" data-src-medium_large="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-768x329.jpg" data-src-large="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-1024x439.jpg" data-src-small="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-480x206.jpg" data-src-full="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung.jpg" src="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-150x64.jpg" alt="Dachdecker- und
659Klempnermeister Thomas Pfingst (rechts) bearbeitet mit seinem Mitarbeiter Necho Haziri die Messing-Spitze auf dem Dach der Handwerkskammer Konstanz." class="img-responsive" width="150" height="64" /><div class="w-100 no-padding no-margin" style="display: inline-block"><p style="float: right;" class="note copyright no-padding no-margin">© HWK KN</p></div></div> 660</div><div id="handwerk_1" class="col col-md-12 col-sm-12"><h2><span>Zahlen, Daten, Fakten</span></h2> 661<h1>Das Handwerk in der Region</h1> 662</div> </div><!-- /. row --> 663 664 <div class="row " > 665 <div id="handwerk_2" class="col col-md-6 col-sm-6"><p>Auf einer Grundfläche von 4.478 Quadratkilometern erstreckt sich im südlichen Teil von Baden-Württemberg der Bezirk der Handwerkskammer Konstanz – von Bad Säckingen im Westen bis Konstanz im Osten und von Waldshut-Tiengen im Süden bis Oberndorf im Norden.</p> 666<p>In dieser Region zwischen Schwarzwald, Hochrhein und Bodensee stellt das Handwerk eine wichtige Säule der Wirtschaft dar. Knapp 70.000 Beschäftigte arbeiten hier in über 13.000 Handwerksbetrieben.</p> 667</div><div id="handwerk_3" class="col col-md-6 col-sm-6"><img src="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-150x125.png" title="" alt="Karte-des-Bezirks-der-Handwerkskammer-Konstanz" data-id="273038" data-src-thumbnail="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-150x125.png" data-src-small="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-480x400.png" data-src-medium="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-768x639.png" data-src-large="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-1024x853.png" data-src-full="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz.png" class="img-responsive" /></div><div class="clearfix hidden-xs"></div> </div><!-- /. row --> 668 </section> 669 <section id="section-1"> 670 671 <div class="row new-chapter" > 672 <div id="handwerk_4" class="col col-md-12 col-sm-12"><h2>Das Handwerk in Zahlen</h2> 673<p><span>Das Handwerk bildet mit seinen vorwiegend kleinen und mittleren Betrieben das Herzstück der deutschen Wirtschaft. Für den Bezirk der Handwerkskammer Konstanz bedeutet das in Zahlen (Stichtag: 31.12.2025):</span></p> 674<h3>Überblick</h3> 675<table class=" alignleft" width="533" height="170" style="height: 170px;"> 676<tbody> 677<tr> 678<td><strong>Landkreis</strong></td> 679<td><strong>Betriebe</strong></td> 680<td><strong>Auszubildende</strong></td> 681</tr> 682<tr> 683<td>Konstanz</td> 684<td>3.711</td> 685<td>1.117</td> 686</tr> 687<tr> 688<td>Rottweil</td> 689<td>2.120</td> 690<td>585</td> 691</tr> 692<tr> 693<td>Schwarzwald-Baar-Kreis</td> 694<td>2.800</td> 695<td>892</td> 696</tr> 697<tr> 698<td>Tuttlingen</td> 699<td>2.091</td> 700<td>611</td> 701</tr> 702<tr> 703<td>Waldshut</td> 704<td>2.614</td> 705<td>972</td> 706</tr> 707<tr> 708<td><strong>gesamt</strong></td> 709<td><strong>13.336</strong></td> 710<td><strong>4.177</strong></td> 711</tr> 712</tbody> 713</table> 714<h3></h3> 715<h3></h3> 716<h3></h3> 717<h3></h3> 718<h3></h3> 719<h4>Entwicklung der Betriebszahlen</h4> 720<p>Die niedrigere Zahl der Betriebe im Jahr 2025 hängt mit einer veränderten statistischen Auswertung hinsichtlich der Filialbetriebe zusammen, so dass eine Vergleichbarkeit mit den Vorjahren nur bedingt gegeben ist.</p> 721<img decoding="async" data-id="561142" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-150x32.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-768x163.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-768x163.png" data-src-large="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-1024x217.png" data-src-1536x1536="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-1536x326.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-480x102.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-1600x339.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-150x32.png" alt="Grafik: Entwicklung der Betriebszahlen im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" /> 722<p><strong>Zulassungspflichtiges Handwerk</strong>: 53 Berufe, deren selbständige Ausübung in der Regel den Meisterbrief voraussetzt, zum Beispiel Maurer/-in, Kraftfahrzeugtechniker/-in, Bäcker/-in, Friseur/-in oder Schreiner/-in.</p> 723<p><strong>Zulassungsfreies Handwerk</strong>: 41 Berufe, die auch ohne speziellen Qualifikationsnachweis und Meisterbrief ausgeübt werden können, zum Beispiel Uhrmacher/-in, Brauer/-in, Geigenbauer/-in oder Fotograf/-in.</p> 724<p><strong>Handwerksähnliche Gewerbe</strong>: 54 Gewerbe wie Rohr- und Kanalreiniger/-in, Klavierstimmer/-in, Kosmetikerin/-in, Änderungsschneider/-in oder Metallschleifer/-in, die ebenfalls keinen speziellen Qualifikationsnachweis erfordern.</p> 725</div> </div><!-- /. row --> 726 </section> 727 <section id="section-2"> 728 729 <div class="row new-chapter" > 730 <div id="handwerk_5" class="col col-md-12 col-sm-12"><h4>Top Ten der Gewerke (nach Anzahl der Betriebe)</h4> 731<table width="646" height="343"> 732<tbody> 733<tr> 734<td><strong>Beruf</strong></td> 735<td><strong>Anzahl der Betriebe im Kammerbezirk </strong></td> 736</tr> 737<tr> 738<td>Friseur/-in</td> 739<td>1.036</td> 740</tr> 741<tr> 742<td>Elektrotechniker/-in</td> 743<td>759</td> 744</tr> 745<tr> 746<td>Kraftfahrzeugtechniker/-in</td> 747<td>749</td> 748</tr> 749<tr> 750<td>Installateur/-in und Heizungsbauer/-in</td> 751<td>595</td> 752</tr> 753<tr> 754<td>Fliesen-, Platten- und Mosaikleger/-in</td> 755<td>465</td> 756</tr> 757<tr> 758<td>Maler/-in und Lackierer/-in</td> 759<td>463</td> 760</tr> 761<tr> 762<td>Zimmerer/-in</td> 763<td>432</td> 764</tr> 765<tr> 766<td>Schreiner/-in</td> 767<td>400</td> 768</tr> 769<tr> 770<td>Maurer/-in und Betonbauer/-in</td> 771<td>320</td> 772</tr> 773<tr> 774<td>Metallbauer/-in</td> 775<td>258</td> 776</tr> 777</tbody> 778</table> 779</div> </div><!-- /. row --> 780 </section> 781 <section id="section-3"> 782 783 <div class="row new-chapter" > 784 <div id="handwerk_6" class="col col-md-12 col-sm-12"><h3>Ausbildung</h3> 785<p>Handwerk hat Zukunft: Von A wie Augenoptiker/in bis Z wie Zweiradmechaniker/in eröffnen über 130 Ausbildungsberufe in den unter
785schiedlichsten Fachrichtungen und Gewerken mindestens ebenso viele Perspektiven. Die Handwerkskammer informiert junge Berufseinsteiger über die vielfältigen<span> </span><a href="https://hwk-konstanz.uniplus-software.de/ausbildung/">Chancen einer Ausbildung im Handwerk</a>. Informationen für Schüler, Eltern und Lehrer gibt es auch auf <a href="https://www.hwk-konstanz.de/">https://www.hwk-konstanz.de/</a>.</p> 786<p>4.177 junge Menschen waren Ende 2025 im Bezirk der Handwerkskammer Konstanz in einer handwerklichen Ausbildung, rund 2,55 Prozent mehr als im Vorjahr. Der Anteil der Frauen unter den Auszubildenden liegt bei 18,51 Prozent.</p> 787<h4>Die häufigsten Ausbildungsberufe</h4> 788<table width="711" height="233"> 789<tbody> 790<tr> 791<td><strong>Beruf</strong></td> 792<td><strong>2024 gesamt</strong></td> 793<td><strong>Männer</strong></td> 794<td><strong>Frauen</strong></td> 795<td><strong>2025 gesamt</strong></td> 796<td><strong>Männer</strong></td> 797<td><strong>Frauen</strong></td> 798</tr> 799<tr> 800<td>Kfz-Mechatroniker/-in</td> 801<td>645</td> 802<td>621</td> 803<td>24</td> 804<td>647</td> 805<td>607</td> 806<td>40</td> 807</tr> 808<tr> 809<td>Elektroniker/-in</td> 810<td>523</td> 811<td>507</td> 812<td>16</td> 813<td>524</td> 814<td>504</td> 815<td>20</td> 816</tr> 817<tr> 818<td>Anlagenmechaniker/-in SHK</td> 819<td>454</td> 820<td>443</td> 821<td>11</td> 822<td>463</td> 823<td>448</td> 824<td>15</td> 825</tr> 826<tr> 827<td>Zimmerer/-in</td> 828<td>342</td> 829<td>321</td> 830<td>21</td> 831<td>366</td> 832<td>339</td> 833<td>27</td> 834</tr> 835<tr> 836<td>Friseur/-in</td> 837<td>221</td> 838<td>86</td> 839<td>135</td> 840<td>217</td> 841<td>84</td> 842<td>133</td> 843</tr> 844<tr> 845<td>Schreiner/-in</td> 846<td>191</td> 847<td>134</td> 848<td>57</td> 849<td>195</td> 850<td>136</td> 851<td>59</td> 852</tr> 853<tr> 854<td>Maler/-in und Lackierer/-in</td> 855<td>119</td> 856<td>85</td> 857<td>34</td> 858<td>121</td> 859<td>83</td> 860<td>38</td> 861</tr> 862<tr> 863<td>Metallbauer/-in</td> 864<td>110</td> 865<td>109</td> 866<td>1</td> 867<td>112</td> 868<td>111</td> 869<td>1</td> 870</tr> 871<tr> 872<td>Chirurgiemechaniker/-in</td> 873<td>96</td> 874<td>75</td> 875<td>21</td> 876<td>100</td> 877<td>80</td> 878<td>20</td> 879</tr> 880<tr> 881<td>Augenoptiker/-in</td> 882<td>109</td> 883<td>39</td> 884<td>70</td> 885<td>94</td> 886<td>29</td> 887<td>65</td> 888</tr> 889<tr> 890<td>Feinwerkmechaniker/-in</td> 891<td>37</td> 892<td>36</td> 893<td>1</td> 894<td>31</td> 895<td>31</td> 896<td>0</td> 897</tr> 898</tbody> 899</table> 900</div> </div><!-- /. row --> 901 </section> 902 <section id="section-4"> 903 904 <div class="row new-chapter" > 905 <div id="handwerk_7" class="col col-md-12 col-sm-12"><h4>Entwicklung der Ausbildungsverhältnisse</h4> 906<img decoding="async" data-id="561141" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-150x88.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-768x450.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-768x450.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-480x281.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-150x88.png" alt="Grafik: Entwicklung der Ausbildungsverhältnisse im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" /> 907</div> </div><!-- /. row --> 908 </section> 909 <section id="section-5"> 910 911 <div class="row new-chapter" > 912 <div id="handwerk_8" class="col col-md-12 col-sm-12"><h4>Anzahl der Auszubildenden nach Landkreisen</h4> 913<img decoding="async" data-id="561140" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-150x60.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-768x305.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-768x305.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-480x191.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-150x60.png" alt="Grafik: Auszubildende nach Landkreisen und Geschlecht im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" /> 914</div> </div><!-- /. row --> 915 </section> 916 <section id="section-6"> 917 918 <div class="row new-chapter" > 919 <div id="handwerk_9" class="col col-md-12 col-sm-12"><h4>Schulische Vorbildung der Lehranfänger/-innen</h4>
920<img decoding="async" data-id="561143" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-150x88.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-768x452.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-768x452.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-480x282.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-150x88.png" alt="Grafik: Schulische Vorbildung der Lehranfänger im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" /> 921<p><span>Die meisten Berufsanfänger-/innen kommen aus der Realschule und der Haupt- bzw. Werkrealschule. Allmählich entdecken aber auch immer mehr Abiturienten das Handwerk für sich.</span></p> 922</div> </div><!-- /. row --> 923 </section> 924 <section id="section-7"> 925 926 <div class="row new-chapter" > 927 <div id="handwerk_10" class="col col-md-12 col-sm-12"><h3>Weiterbildung</h3> 928<p>Der Meistertitel ist das Herzstück des Handwerks. Wer ihn besitzt, verfügt über das fachliche, betriebswirtschaftliche und pädagogische Know-how, einen Betrieb selbstständig zu führen, als Führungskraft besondere Aufgaben zu übernehmen und Lehrlinge auszubilden. Bei Kunden, Kreditgebern und Ausrüstern genießt der Meisterbrief hohes Ansehen und bürgt für fachliche Kompetenz, Zuverlässigkeit, Qualität und unternehmerisches Können.</p> 929<h4>Meisterprüfungen nach Berufen</h4> 930<table width="455" height="233"> 931<tbody> 932<tr> 933<td><strong>Beruf</strong></td> 934<td><strong>2024</strong></td> 935<td><strong>2025</strong></td> 936</tr> 937<tr> 938<td><span>Bäcker/-in</span></td> 939<td>2</td> 940<td>0</td> 941</tr> 942<tr> 943<td><span>Chirurgiemechaniker/-in</span></td> 944<td>8</td> 945<td>3</td> 946</tr> 947<tr> 948<td><span>Dachdecker/-in</span></td> 949<td>12</td> 950<td>29</td> 951</tr> 952<tr> 953<td><span>Elektrotechniker/-in</span></td> 954<td>35</td> 955<td>23</td> 956</tr> 957<tr> 958<td><span>Feinwerkmechaniker/-in</span></td> 959<td>3</td> 960<td>17</td> 961</tr> 962<tr> 963<td><span>Fliesen-, Platten- und Mosaikleger/-in</span></td> 964<td>12</td> 965<td>19</td> 966</tr> 967<tr> 968<td><span>Friseur/-in</span></td> 969<td>56</td> 970<td>51</td> 971</tr> 972<tr> 973<td><span>Graveur/-in</span></td> 974<td>4</td> 975<td>2</td> 976</tr> 977<tr> 978<td><span>Installateur/-in und Heizungsbauer/-in</span></td> 979<td>36</td> 980<td>46</td> 981</tr> 982<tr> 983<td><span>Kfz-Techniker/-in</span></td> 984<td>58</td> 985<td>46</td> 986</tr> 987<tr> 988<td><span>Klempner/-in</span></td> 989<td>8</td> 990<td>2</td> 991</tr> 992<tr> 993<td><span>Konditor/-in</span></td> 994<td>7</td> 995<td>9</td> 996</tr> 997<tr> 998<td><span>Maler/-in</span></td> 999<td>5</td> 1000<td>1</td> 1001</tr> 1002<tr> 1003<td><span>Maurer/-in</span></td> 1004<td>14</td> 1005<td>17</td> 1006</tr> 1007<tr> 1008<td><span>Metallbauer/-in</span></td> 1009<td>18</td> 1010<td>15</td> 1011</tr> 1012<tr> 1013<td><span>Metallbildner/-in</span></td> 1014<td>0</td> 1015<td>0</td> 1016</tr> 1017<tr> 1018<td><span>Schreiner/-in</span></td> 1019<td>11</td> 1020<td>0</td> 1021</tr> 1022<tr> 1023<td><span>Stuckateur/-in</span></td> 1024<td>14</td> 1025<td>11</td> 1026</tr> 1027<tr> 1028<td><span>Uhrmacher/-in</span></td> 1029<td>7</td> 1030<td>0</td> 1031</tr> 1032<tr> 1033<td><span>Zimmerer/-in</span></td> 1034<td>27</td> 1035<td>21</td> 1036</tr> 1037<tr> 1038<td><span><strong>gesamt</strong></span></td> 1039<td><strong>337</strong></td> 1040<td><strong>312</strong></td> 1041</tr> 1042</tbody> 1043</table> 1044</div> </div><!-- /. row --> 1045 </section> 1046 <section id="section-8"> 1047 1048 <div class="row new-chapter" > 1049 <div id="handwerk_11" class="col col-md-12 col-sm-12"><h4>Meisterprüfungen nach Geschlecht</h4> 1050<table width="467" height="99"> 1051<tbody> 1052<tr> 1053<td></td> 1054<td><strong>2020</strong></td> 1055<td><strong>2021</strong></td> 1056<td><strong>2022</strong></td> 1057<td><strong>2023</strong></td> 1058<td><strong>2024</strong></td> 1059<td><strong>2025</strong></td> 1060</tr> 1061<tr> 1062<td>Männer</td> 1063<td>199</td> 1064<td>249</td> 1065<td>246</td> 1066<td>261</td> 1067<td>283</td> 1068<td>267</td> 1069</tr> 1070<tr> 1071<td>Frauen</td> 1072<td>66</td> 1073<td>83</td> 1074<td>66</td> 1075<td>54</td> 1076<td>54</td> 1077<td>45</td> 1078</tr> 1079<tr> 1080<td><strong>gesamt</strong></td> 1081<td><strong>265</strong></td> 1082<td><strong>332</strong></td> 1083<td><strong>312</strong></td> 1084<td><strong>315</strong></td> 1085<td><strong>337</strong></td> 1086<td><strong>312</strong></td> 1087</tr> 1088</tbody> 1089</table> 1090</div> </div><!-- /. row --> 1091 </section> 1092 <section id="section-9"> 1093 1094 <div class="row new-chapter" > 1095 <div id="handwerk_12" class="col col-md-12 col-sm-12"><h2>Berufsbildungsreport</h2> 1096<p>Informationen über die Ausbildung in der Region finden Sie in unserem jährlich erscheinenden Berufsbildungsreport.</p> 1097<p>
1097 <span class="uni-glyphicon-parent no-margin no-padding glyphicon glyphicon-pdf-download-2" 1098 ></span> 1099   <a href="https://www.hwk-konstanz.de/wp-content/uploads/hwk-kn-berufsbildungsreport-2026.pdf">Berufsbildungsreport 2026 (Berichtszeitraum: 01.01. – 31.12.2025)</a></p> 1100</div> </div><!-- /. row --> 1101 </section> 1102 <section id="section-10"> 1103 1104 <div class="row new-chapter" > 1105 <div id="handwerk_13" class="col col-md-12 col-sm-12"><h2>Konjunktur</h2> 1106<p><span>Das Handwerk ist ein bedeutender Wirtschaftsfaktor in der Region. Die aktuelle Lage und die erwartete Entwicklung im Gesamthandwerk und den einzelnen Berufsgruppen finden Sie in unserem Konjunkturbericht, der jedes Quartal veröffentlicht wird.</span></p> 1107<p> <span class="uni-glyphicon-parent no-margin no-padding glyphicon glyphicon-pdf-download-2" 1108 ></span> 1109  <a href="https://www.hwk-konstanz.de/wp-content/uploads/hwk-kn-konjunkturbericht-3-2026.pdf">Konjunkturbericht 3. Quartal 2026</a></p> 1110<p> <i class="fas fas fa-link " 1111 style=""></i> 1112  <a href="https://www.hwk-konstanz.de/konjunktur/">Konjunkturberichte-Archiv</a></p> 1113</div> </div><!-- /. row --> 1114 </section> 1115 </div><!-- /.content --> 1116 1117 <div id="scrollspyContent" class="scrollspy col-md-3 visible-md visible-lg hidden-print"> 1118 <ul class="nav nav-tabs nav-stacked affix-top" data-spy="affix" data-offset-top="10"> 1119 <li class="static">Inhalt</li> 1120 <li id="uni-section-id-0" class="active"><a href="#section-0">Allgemeines</a></li><li id="uni-section-id-1" ><a href="#section-1">Betriebszahlen </a></li><li id="uni-section-id-2" ><a href="#section-2">Top Ten Berufe </a></li><li id="uni-section-id-3" ><a href="#section-3">Ausbildungsberufe </a></li><li id="uni-section-id-4" ><a href="#section-4">Ausbildungsverhältnisse </a></li><li id="uni-section-id-5" ><a href="#section-5">Auszubildende nach Landkreisen </a></li><li id="uni-section-id-6" ><a href="#section-6">Schulische Vorbildung </a></li><li id="uni-section-id-7" ><a href="#section-7">Meisterprüfungen (Berufe)</a></li><li id="uni-section-id-8" ><a href="#section-8">Meisterprüfungen (Geschlecht)</a></li><li id="uni-section-id-9" ><a href="#section-9">Berufsbildungsreport</a></li><li id="uni-section-id-10" ><a href="#section-10">Konjunktur</a></li> </ul> 1121 1122 </div> 1123 </div> 1124 </div><!-- /.scroll-adjust --> 1125 </div><!-- /#vue_app --> 1126 </div><!-- /#content --> 1127 <div class="hidden-print"> 1128 <footer class="site-footer"> 1129 <div class="container-fluid bg-white"><!-- footer content -->
1130 <div id="footer-content" class="container"> 1131 <hr> 1132 <div class="row"> 1133 <div class="col-sm-12"> 1134 <!-- new structure for accessibility --> 1135 1136 <ul class="aria-structure"> 1137 <li><a role="button"> <div> 1138 1139 <a href="mailto:?subject=Seite empfehlen&body="><span class="glyphicon glyphicon-mail"></span>Seite empfehlen</a> 1140 </div> 1141 </a></li> 1142 <li onclick="window.print();"><a role="button"><span class="glyphicon glyphicon-drucker" aria-hidden="true"></span>Seite drucken</a></li> 1143 <li><p>Seite aktualisiert am 28. September 2026<span class="hidden-sm hidden-xs">, online seit 1. September 2025</span></p></li> 1144 </ul> 1145 </div> 1146 </div> 1147 </div> 1148 </div> 1149 <div id="footer-bottom" class="container-fluid"> 1150 <div class="container"> 1151 <div class="row"> 1152 <div class="col-xs-12 col-md-12 mt-4 mb-5 pb-3"> 1153 1154 <div class="uni-breadcrump-menu"> 1155 1156 <div class="row"> 1157 <div class="col-xs-12 col-12 col-sm-10"> 1158 <p> 1159 <a class="uni-breadcrump-item" class="" href="https://www.hwk-konstanz.de/">Startseite</a> 1160 <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span> 1161 <label style="font-weight: unset;">Über uns</label> 1162 <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span> 1163 <a class=" uni-breadcrump-item" href="https://www.hwk-konstanz.de/handwerk/">Das Handwerk in der Region</a> 1164 </p> 1165 </div> 1166 1167 </div> 1168 1169 </div> 1170 </div> 1171 </div> 1172 <div class="row stretch"> 1173 <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top"> 1174 <ul> 1175 <li><strong>Wir fürs Handwerk</strong></li> 1176 <li><a href="https://hwk-konstanz.uniplus-software.de/ansprechpersonen/" class=" ">Ansprechpersonen</a></li> 1177 <li><a href="https://hwk-konstanz.uniplus-software.de/oeffnungszeiten/" class=" ">Öffnungszeiten</a></li> 1178 <li><a href="https://hwk-konstanz.uniplus-software.de/stellen" class=" ">Stellenangebote</a></li> 1179 <li><a href="https://hwk-konstanz.uniplus-software.de/pressebereich/" class=" ">Presse</a></li> 1180 </ul> 1181 </div> 1182 <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top"> 1183 <ul> 1184 <li><strong>Dokumente und Verträge</strong></li> 1185 <li><a href="https://www.hwk-konstanz.de/download-ausbildung/" class=" ">Downloads Ausbildung</a></li> 1186 <li><a href="https://www.hwk-konstanz.de/download-beratung/" class=" ">Downloads Beratung</a></li> 1187 <li><a href="https://www.hwk-konstanz.de/download-handwerksrolle/" class=" ">Downloads Handwerksrolle</a></li> 1188 </ul> 1189 </div> 1190 <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top"> 1191 <ul> 1192 <li><strong>Barrierefreiheit</strong></li> 1193 <li><a href="https://www.hwk-konstanz.de/leichte-sprache/" class=" ">Leichte Sprache</a></li> 1194 <li><a href="https://www.hwk-konstanz.de/gebaerdensprache/" class=" ">Gebärdensprache</a></li> 1195 <li><a href="https://www.hwk-konstanz.de/erklaerung-zur-barrierefreiheit/" class=" ">Erklärung zur Barrierefreiheit</a></li> 1196 </ul> 1197 </div> 1198 <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top"> 1199 <p><strong>Handwerkskammer Konstanz</strong></p> 1200 <p> 1201 Webersteig 3 <br> 1202 78462 Konstanz </p> 1203 <p> 1204 Telefon 07531 205-0<br> 1205 <a href="mailto:[email protected]">[email protected]</a> 1206 </p> 1207 </div> 1208 </div> 1209 <div class="row border-top"> 1210 <div class="col-xs-12 col-sm-6 copyright"><p>Copyright © 2026 UNIPLUS Software GmbH</p></div> 1211 <div class="col-xs-12 col-sm-6 text-right"> 1212 <a style="margin-left: 15px;" class="" href="https://www.hwk-konstanz.de/impressum/"><i class="fas fa-caret-right"></i> Impressum</a> 1213 <a style="margin-left: 15px;" class="" href="https://www.hwk-konstanz.de/datenschutz/"><i class="fas fa-caret-right"></i> Datenschutzerklärung</a> 1214 <a style="margin-left: 15px;
1214" class="borlabs-cookie-preference cookie-settings-link" title="Cookie Einstellungen" href="#"><i class="fas fa-caret-right"></i> Cookie Einstellungen</a> 1215 </div> 1216 1217 </div> 1218 </div><!-- /.container --> 1219 </div><!-- /#footer-bottom --> 1220 1221 </footer> 1222 1223 </div><!-- /everything except menu --> 1224 1225 </div><!-- / #wrapper --> 1226 1227
1227<script type="speculationrules"> 1228{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/uni-hwk-redesign/*","/wp-content/themes/chatty/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 1229</script>
1229 1230
1230<script> 1231 jQuery(document).ready(function($) { 1232 $('.klappbox-head').each(function(e) { 1233 $(this).click(function(e) { 1234 $(this).find('span:nth-child(2) i').toggleClass('fas fa-chevron-down'); 1235 $(this).find('span:nth-child(2) i').toggleClass('fas fa-chevron-up'); 1236 }); 1237 }); 1238 }); 1239 </script>
1239 1240
1240<script type=text/javascript> 1241 jQuery(document).ready(function ($) { 1242 function addLogoutTrigger() { 1243 $("a[href*='action=logout']").each(function(id, e) { 1244 $(e).click(function() { 1245 $(document).trigger('uni-logout'); 1246 }); 1247 }); 1248 } 1249 addLogoutTrigger(); 1250 setTimeout(addLogoutTrigger, 1000); 1251 setTimeout(addLogoutTrigger, 3000); 1252 1253 }); 1254 </script>
1254 1255
1255<script src="https://ai.uniplus-software.de/dist/aitools.js" defer></script>
1255 1256
1256<script> 1257 jQuery(document).ready(function($) { 1258 $(window).scroll(function() { 1259 let div = $('#geolocation-map-wrapper'); 1260 var parentwidth = div.parent().width(); 1261 div.width(parentwidth); 1262 $(".child").toggleClass("fixed").width(parentwidth); 1263 if ($(window).scrollTop() >= 887) { 1264 div.addClass('sticky'); 1265 } 1266 else { 1267 div.removeClass('sticky'); 1268 } 1269 }); 1270 }); 1271 1272 </script>
1272 1273
1273<script> 1274 jQuery(document).ready(function($) { 1275 $(window).scroll(function() { 1276 let div = $('#rezeptsst-map-wrapper'); 1277 var parentwidth = div.parent().width(); 1278 div.width(parentwidth); 1279 $(".child").toggleClass("fixed").width(parentwidth); 1280 if ($(window).scrollTop() >= 887) { 1281 div.addClass('sticky'); 1282 } 1283 else { 1284 div.removeClass('sticky'); 1285 } 1286 }); 1287 }); 1288 1289 </script>
1289 1290
1290<script> 1291 jQuery(document).ready(function($) { 1292 $(window).scroll(function() { 1293 let div = $('#lbo-map-wrapper'); 1294 var parentwidth = div.parent().width(); 1295 $(".child").toggleClass("fixed").width(parentwidth); 1296 if ($(window).scrollTop() >= 887) { 1297 div.addClass('sticky'); 1298 } 1299 else { 1300 div.removeClass('sticky'); 1301 } 1302 }); 1303 }); 1304 1305 </script>
1305 1306 1307
1307<script> 1308 function toggle_sem_pfeil(a, b) { 1309 (function($) { 1310 $('#' + b).show(); 1311 $('#' + a).hide(); 1312 })(jQuery); 1313 } 1314 </script>
1314 1315
1315<script> 1316 jQuery(document).ready(function($) { 1317 $('.btn-toggle-kurs-data').each(function(i, obj) { 1318 $(this).on('click', function(e) { 1319 var self = $(this); 1320 var div = $('#kursData_' + $(this).attr('with-id')); 1321 div.toggle('show'); 1322 1323 setTimeout(function() { 1324 if(div.is(':visible')) { 1325 self.val('weniger\u2026'); 1326 } else { 1327 self.val('mehr\u2026'); 1328 } 1329 }, 500); 1330 setTimeout(function() { 1331 $(div)[0].scrollIntoView({ behavior: 'smooth', block: 'nearest' }); 1332 }, 500); 1333 $(div)[0].scrollTop -= 20; 1334 }); 1335 }); 1336 }); 1337 </script>
1337 1338
1338<script> 1339 1340 jQuery(document).ready(function($) { 1341 var selected = $('#fbgr_select option:selected').val(); 1342 if(selected > 0) { 1343 $('#fbunter_select').prop('disabled', false); 1344 } 1345 else { 1346 $('#fbunter_select').prop('disabled', true); 1347 } 1348 if(selected > 0) { 1349 $.ajax({ 1350 url: "https://www.hwk-konstanz.de/wp-content/plugins/uniplus-seminarwesen-fachbereiche/inc/unterfachbereich.php", 1351 data: { 1352 format: 'json', 1353 fbgr: selected, 1354 nonce: '2fc3df3416', 1355 }, 1356 error: function() { 1357 //$('#info').html('<p>An error has occurred</p>'); 1358 //console.log('An error has occurred'); 1359 }, 1360 dataType: 'json', 1361 success: function(result) { 1362 $('#fbunter_select').empty(); 1363 $('#fbunter_select').append('<option value=\'0\'> Bitte auswählen</option>'); 1364 $.each(result, function(index, value){ 1365 var sub_category_selected = $('#hidden_fbunter_select').val(); 1366 if(sub_category_selected == value || sub_category_selected == index) { 1367 $('#fbunter_select').append('<option selected value=\'' + value + '\'> ' + index + '</option>'); 1368 } else { 1369 $('#fbunter_select').append('<option value=\'' + value + '\'> ' + index + '</option>'); 1370 } 1371 }); 1372 }, 1373 type: 'POST' 1374 }); 1375 } 1376 $('#fbgr_select').change(function() { 1377 1378 var selected = $('#fbgr_select option:selected').val(); 1379 if(selected > 0) { 1380 $('#fbunter_select').prop('disabled', false); 1381 } 1382 else { 1383 $('#fbunter_select').prop('disabled', true); 1384 } 1385 $.ajax({
1386 url: "https://www.hwk-konstanz.de/wp-content/plugins/uniplus-seminarwesen-fachbereiche/inc/unterfachbereich.php", 1387 data: { 1388 format: 'json', 1389 fbgr: selected, 1390 nonce: '2fc3df3416', 1391 }, 1392 error: function() { 1393 //$('#info').html('<p>An error has occurred</p>'); 1394 //console.log('An error has occurred'); 1395 }, 1396 dataType: 'json', 1397 success: function(result) { 1398 $('#fbunter_select').empty(); 1399 $('#fbunter_select').append('<option value=\'0\'> Bitte auswählen</option>'); 1400 $.each(result, function(index, value){ 1401 $('#fbunter_select').append('<option value=\'' + value + '\'> ' + index + '</option>'); 1402 }); 1403 }, 1404 type: 'POST' 1405 }); 1406 1407 }); 1408 }); 1409 </script>
1409 1410
1410<script> 1411 jQuery(document).ready(function($) { 1412 let user_id = null; 1413 let client = 'hwkkonstanz'; 1414 1415 let ls_key = 'uni_wk_kurse_'+client; 1416 if(user_id) { 1417 ls_key += '_'+user_id; 1418 } 1419 let items = localStorage.getItem(ls_key); 1420 if(!items) { 1421 items = localStorage.getItem('uni_wk_kurse_'+client); // item added to local storage before logging in 1422 } 1423 if(!items) { 1424 items = localStorage.getItem('items'); // This can be removed in the future. 1425 } 1426 1427 //const items = localStorage.getItem('items'); 1428 if(items) { 1429 const numItems = JSON.parse(items).length; 1430 if(numItems > 0) { 1431 [ 'span.glyphicon-shopping-cart' ] 1432 .forEach(function(_e) { 1433 const es = $(_e); 1434 for(let i = 0; i < es.length; i++) { 1435 const e = $(es[i]); 1436 e.css('color', '#ff8d25'); 1437 } 1438 }); 1439 } 1440 } 1441 }); 1442 </script>
1442 1443
1443<script> 1444 window.addEventListener('load', init); 1445 1446 function init() { 1447 // Add event listener to "In den Warenkorb" button 1448 document.querySelectorAll('.uni_warenkorb_buy_form > button[type="submit"]').forEach(function(element){ 1449 element.addEventListener('click', addItemToCart); 1450 }, this); 1451 1452 // console.log('Warenkorb init'); 1453 // // Add event listener to logout-links 1454 // document.querySelectorAll('a[href*="action=logout"]').forEach(function(element){ 1455 // element.addEventListener('click', clearLocalStorage); 1456 // }, this); 1457 } 1458 1459 jQuery(document).ready(function ($) { 1460 $(document).on('uni-logout', function () { 1461 // Clean all the data 1462 Object.keys(localStorage) 1463 .filter(ls_key => 1464 ls_key.startsWith('uni_wk_')) 1465 .forEach(ls_key => 1466 localStorage.removeItem(ls_key)); 1467 1468 localStorage.clear(); // Delete this line in the future, so that only items related to warenkorb get removed. 1469 }); 1470 }); 1471 1472 function clearLocalStorage(event) { 1473 Object.keys(localStorage) 1474 .filter(ls_key => 1475 ls_key.startsWith('uni_wk_')) 1476 .forEach(ls_key => 1477 localStorage.removeItem(ls_key)); 1478 1479 localStorage.clear(); // Delete this line in the future, so that only items related to warenkorb get removed. 1480 } 1481 1482 function item_already_in_cart(item, itemsArray) { 1483 for(var i=0; i<itemsArray.length; i++) { 1484 if(itemsArray[i].semnr == item.semnr && itemsArray[i].vernr == item.vernr) { 1485 return true; 1486 } 1487 }; 1488 return false; 1489 } 1490 1491 function addItemToCart(event) { 1492 event.target.innerHTML = '<i class="fas fa-spinner fa-spin"></i>'; 1493 1494 var parentForm = event.target.closest('form'); // In uni_hwk theme, event.target is NOT the button, but a child span of the button 1495 1496 let semnr = parentForm.querySelector('[name="semnr"]').value; 1497 let vernr = parentForm.querySelector('[name="vernr"]').value; 1498 let booked_modules = parentForm.querySelector('[name="modules"]').value; // = Modul-Nr. or 'all' or 'none' 1499 let waitlist = (parentForm.querySelector('[name="waitlist"]').value == 'true'); 1500 let interessenbekundung = (parentForm.querySelector('[name="interessenbekundung"]').value == 'true'); 1501 1502 let new_item = { 1503 'semnr': semnr, 1504 'vernr': vernr, 1505 'booked_modules': booked_modules, 1506 'waitlist': waitlist, 1507 'interessenbekundung': interessenbekundung, 1508 }; 1509 1510 let user_id = null; 1511 let client = 'hwkkonstanz'; 1512 let ls_key = 'uni_wk_kurse_'+client; 1513 if(user_id) { 1514 ls_key += '_'+user_id; 1515 } 1516 let items = localStorage.getItem(ls_key); 1517 if(!items) { 1518 items = localStorage.getItem('uni_wk_kurse_'+client); // item added to local storage before logging in 1519 } 1520 if(!items) { 1521 items = localStorage.getItem('items'); // This can be removed in the future. 1522 } 1523 if(items) { 1524 items = JSON.parse(items); 1525 } else { // no items stored yet 1526 items = []; 1527 } 1528 1529 /* 1530 * If item not in cart => add item to cart 1531 * If item in cart and adding whole course => do nothing (because the user might have manually un-selected some modules) 1532 * If item in cart and adding single module => Search for this module and set it to 'booked' 1533 */ 1534 for(var i=0; i<items.length; i++) { 1535 if(items[i].semnr == new_item.semnr && items[i].vernr == new_item.vernr) { 1536 if(new_item.booked_modules != 'all' && new_item.booked_modules != 'none') { 1537 // Look for module, set booked 1538 for(var j=0; j<items[i].modules.length; j++) { 1539 if(items[i].modules[j].modulnr === new_item.booked_modules) { 1540 items[i].modules[j].gebucht = true; 1541 items[i].modules[j].anzahl = 1; 1542 //localStorage.setItem('items', JSON.stringify(items)); 1543 localStorage.setItem(ls_key, JSON.stringify(items)); 1544 return; 1545 } 1546 } 1547 } else { 1548 return; 1549 } 1550 } 1551 } 1552 // Add new item to cart via local storage 1553 items.push(new_item); 1554 //localStorage.setItem('items', JSON.stringify(items)); 1555 localStorage.setItem(ls_key, JSON.stringify(items)); 1556 } 1557 </script>
1557 1558
1558<script> 1559 jQuery(document).ready(function ($) { 1560 $(':input[id="inputSearch"]').click(function () { 1561 if ($('#inputSearch').val().length === 0) { 1562 return false; 1563 } 1564 }); 1565 }); 1566 </script>
1566 1567
1567<script data-cfasync="false" data-no-minify="1" data-no-optimize="1" id="borlabs-cookie-core-js-module" src="https://www.hwk-konstanz.de/wp-content/plugins/borlabs-cookie/assets/javascript/borlabs-cookie.min.js?ver=3.4.5" type="module"></script>
1567 1568<!--googleoff: all--><div data-nosnippet data-borlabs-cookie-consent-required='true' id='BorlabsCookieBox'></div><div id='BorlabsCookieWidget' class='brlbs-cmpnt-container'></div><!--googleon: all-->
1568<script> 1569 jQuery(document).ready(function($){ 1570 setTimeout(function(){ 1571 $('#scrollspyContent').find('li.active').removeClass('active'); 1572 $('#uni-section-id-0').addClass('active'); 1573 }, 1); 1574 }); 1575 </script>
1575 1576
1576<script id="uniplus-base-script-js-extra"> 1577var uniplus = {"ajax_url":"https://www.hwk-konstanz.de/wp-admin/admin-ajax.php"}; 1578//# sourceURL=uniplus-base-script-js-extra 1579</script>
vendor: 1 bytes, line 1579
1579
1580<script id="uniplus-base-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/uniplus_base.js?ver=1.0.2"></script>
vendor: 1 bytes, line 1580
1580
1581<script id="uniplus-maps-cluster-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/markerclusterer.js?ver=1.0.2"></script>
vendor: 1 bytes, line 1581
1581
1582<script id="uniplus-clientside-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/uniplus_clientside.js?ver=1.2"></script>
vendor: 1 bytes, line 1582
1582
1583<script id="jquery-ui-core-js-before"> 1584jQuery.uiBackCompat = true; 1585//# sourceURL=jquery-ui-core-js-before 1586</script>
vendor: 1 bytes, line 1586
1586
1587<script id="jquery-ui-core-js" src="https://www.hwk-konstanz.de/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 1587
1587
1588<script id="jquery-ui-datepicker-js" src="https://www.hwk-konstanz.de/wp-includes/js/jquery/ui/datepicker.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 1588
1588
1589<script id="jquery-ui-datepicker-js-after"> 1590jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Schlie\u00dfen","currentText":"Heute","monthNames":["Januar","Februar","M\u00e4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"monthNamesShort":["Jan.","Feb.","M\u00e4rz","Apr.","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez."],"nextText":"N\u00e4chster","prevText":"Vorheriger","dayNames":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dayNamesShort":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayNamesMin":["S","M","D","M","D","F","S"],"dateFormat":"d. MM yy","firstDay":1,"isRTL":false});}); 1591//# sourceURL=jquery-ui-datepicker-js-after 1592</script>
vendor: 1 bytes, line 1592
1592
1593<script id="datepicker-min-lang-de-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/jquery.datepicker.de.js?ver=1.0"></script>
vendor: 1 bytes, line 1593
1593
1594<script id="validate-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/jquery.validate.js?ver=1.0"></script>
vendor: 1 bytes, line 1594
1594
1595<script id="jquery-confirm-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/jquery-confirm.js?ver=1.0"></script>
vendor: 1 bytes, line 1595
1595
1596<script id="multiselect-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/multiselect.js?ver=1.0"></script>
vendor: 1 bytes, line 1596
1596
1597<script id="uni_faq_live_search.js-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-faq/js/uni_faq_live_search.js?ver=1.1"></script>
vendor: 1 bytes, line 1597
1597
1598<script id="uni_base_filter-letter-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-glossar/js/filter-letters.js?ver=1.0"></script>
vendor: 1 bytes, line 1598
1598
1599<script id="uniplus-kundenportal-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-kundenportal/js/uni-kundenportal.js?ver=1.0"></script>
vendor: 1 bytes, line 1599
1599
1600<script id="uni_zulassungsantrag_mpfp_test.js-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-zulassungsantrag-mpfp/test/uni_zulassungsantrag_mpfp_test.js?ver=1.0"></script>
vendor: 1 bytes, line 1600
1600
1601<script id="script-main-js-extra"> 1602var wp_variables = {"browserWarning":"Diese Internetseite ist nicht f\u00fcr diesen Browser optimiert. Bitte benutzen Sie einen aktuelleren Browser, um diese Seite optimal angezeigt zu bekommen.","googlemapSettings":{"confirm_load":false,"placeholder_map":"https://www.hwk-konstanz.de/wp-content/themes/chatty/img/placeholder_map.jpg","placeholder_map_sw":"https://www.hwk-konstanz.de/wp-content/themes/chatty/img/placeholder_map_sw.jpg"},"jqueryFitvidsEnabled":"1","jqueryAppearEnabled":"","jqueryStickyEnabled":"1","retinaDisabled":"1","scrollOffsetTopAdd":"40","scrollDuration":"1000","scrollDurationExternal":"1","templateUrl":"https://www.hwk-konstanz.de/wp-content/themes/chatty","teaserTileSameHeightImage":"0","teaserTileSameHeightImageMd":"0","teaserTileSameHeightImageSm":"0"}; 1603//# sourceURL=script-main-js-extra 1604</script>
vendor: 1 bytes, line 1604
1604
1605<script id="script-main-js" src="https://www.hwk-konstanz.de/wp-content/themes/chatty/js/main.min.js?ver=1791085335"></script>
vendor: 1 bytes, line 1605
1605
1606<script id="chatty-load-google-map-js" src="https://www.hwk-konstanz.de/wp-content/themes/chatty/js/chatty-google-map.min.js?ver=1791085335"></script>
vendor: 1 bytes, line 1606
1606
1607<script id="script-child-js-extra"> 1608var hwk_variables = {"hwk_form_floating_labels":"","hwk_mega_menu":"","hwk_no_retina":"1"}; 1609var hwk_variables = {"hwk_form_floating_labels":"","hwk_mega_menu":"","hwk_no_retina":"1"}; 1610//# sourceURL=script-child-js-extra 1611</script>
vendor: 1 bytes, line 1611
1611
1612<script id="script-child-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/js/child.min.js?ver=1791085335"></script>
1612 1613 <!-- UNIPLUS-CACHE-9F726243D38434738CAD93E159E41-2026-10-04T03:42:16+00:00 --> 1614 1615
1615<script type="text/javascript"> 1616 function appendStyle(styles) { 1617 var css = document.createElement('style'); 1618 css.type = 'text/css'; 1619 if (css.styleSheet) css.styleSheet.cssText = styles; // IE check 1620 else css.appendChild(document.createTextNode(styles)); // needs appendChild to also work in Chrome 1621 document.getElementsByTagName("head")[0].appendChild(css); 1622 } 1623 var styles = 'div.color-blue-light-25 { background-color: #d1e3f6; } div.color-blue-dark-25 { background-color: #c1cbdb; } div.color-grey-light { background-color: #eeeeee; } h1.color-hwk-blue-light, h2.color-hwk-blue-light, h3.color-hwk-blue-light, h4.color-hwk-blue-light, h5.color-hwk-blue-light, h6.color-hwk-blue-light, p.color-hwk-blue-light, span.color-hwk-blue-light, a.color-hwk-blue-light, li.color-hwk-blue-light, input.color-hwk-blue-light, label.color-hwk-blue-light, textarea.color-hwk-blue-light, caption.color-hwk-blue-light, blockquote.color-hwk-blue-light, font.color-hwk-blue-light, code.color-hwk-blue-light { color: #448dde !important; } div.color-hwk-blue-light { background-color: #448dde !important; } div.color-hwk-blue-light-secondary { background-color: #76abe4 !important; } h1.color-hwk-blue-dark, h2.color-hwk-blue-dark, h3.color-hwk-blue-dark, h4.color-hwk-blue-dark, h5.color-hwk-blue-dark, h6.color-hwk-blue-dark, p.color-hwk-blue-dark, span.color-hwk-blue-dark, a.color-hwk-blue-dark, li.color-hwk-blue-dark, input.color-hwk-blue-dark, label.color-hwk-blue-dark, textarea.color-hwk-blue-dark, caption.color-hwk-blue-dark, blockquote.color-hwk-blue-dark, font.color-hwk-blue-dark, code.color-hwk-blue-dark { color: #073070 !important; } div.color-hwk-blue-dark { background-color: #073070 !important; } div.color-hwk-blue-dark-secondary { background-color: #456494 !important; } h1.color-hwk-red-dark, h2.color-hwk-red-dark, h3.color-hwk-red-dark, h4.color-hwk-red-dark, h5.color-hwk-red-dark, h6.color-hwk-red-dark, p.color-hwk-red-dark, span.color-hwk-red-dark, a.color-hwk-red-dark, li.color-hwk-red-dark, input.color-hwk-red-dark, label.color-hwk-red-dark, textarea.color-hwk-red-dark, caption.color-hwk-red-dark, blockquote.color-hwk-red-dark, font.color-hwk-red-dark, code.color-hwk-red-dark { color: #b82c44 !important; } div.color-hwk-red-dark { background-color: #b82c44 !important; } div.color-hwk-red-dark-secondary { background-color: #ca6173 !important; } h1.color-hwk-red-light, h2.color-hwk-red-light, h3.color-hwk-red-light, h4.color-hwk-red-light, h5.color-hwk-red-light, h6.color-hwk-red-light, p.color-hwk-red-light, span.color-hwk-red-light, a.color-hwk-red-light, li.color-hwk-red-light, input.color-hwk-red-light, label.color-hwk-red-light, textarea.color-hwk-red-light, caption.color-hwk-red-light, blockquote.color-hwk-red-light, font.color-hwk-red-light, code.color-hwk-red-light { color: #ee234a !important; } div.color-hwk-red-light { background-color: #ee234a !important; } div.color-hwk-red-light-secondary { background-color: #f25a77 !important; } h1.color-hwk-yellow, h2.color-hwk-yellow, h3.color-hwk-yellow, h4.color-hwk-yellow, h5.color-hwk-yellow, h6.color-hwk-yellow, p.color-hwk-yellow, span.color-hwk-yellow, a.color-hwk-yellow, li.color-hwk-yellow, input.color-hwk-yellow, label.color-hwk-yellow, textarea.color-hwk-yellow, caption.color-hwk-yellow, blockquote.color-hwk-yellow, font.color-hwk-yellow, code.color-hwk-yellow { color: #fbcb3d !important; } div.color-hwk-yellow { background-color: #fbcb3d !important; } div.color-hwk-yellow-secondary { background-color: #fcd86e !important; } h1.color-hwk-orange, h2.color-hwk-orange, h3.color-hwk-orange, h4.color-hwk-orange, h5.color-hwk-orange, h6.color-hwk-orange, p.color-hwk-orange, span.color-hwk-orange, a.color-hwk-orange, li.color-hwk-orange, input.color-hwk-orange, label.color-hwk-orange, textarea.color-hwk-orange, caption.color-hwk-orange, blockquote.color-hwk-orange, font.color-hwk-orange, code.color-hwk-orange { color: #ff9933 !important; } div.color-hwk-orange { background-color: #ff9933 !important; } div.color-hwk-orange-secondary { background-color: #ffb366 !important; } h1.color-hwk-green-dark, h2.color-hwk-green-dark, h3.color-hwk-green-dark, h4.color-hwk-green-dark, h5.color-hwk-green-dark, h6.color-hwk-green-dark, p.color-hwk-green-dark, span.color-hwk-green-dark, a.color-hwk-green-dark, li.color-hwk-green-dark, input.color-hwk-green-dark, label.color-hwk-green-dark, textarea.color-hwk-green-dark, caption.color-hwk-green-dark, blockquote.color-hwk-green-dark, font.color-hwk-green-dark, code.color-hwk-green-dark { color: #5a8e1e !important; } div.color-hwk-green-dark { background-color: #5a8e1e !important; } div.color-hwk-green-dark-secondary { background-color: #83aa56 !important; } h1.color-hwk-green-light, h2.color-hwk-green-light, h3.color-hwk-green-light, h4.color-hwk-green-light, h5.color-hwk-green-light, h6.color-hwk-green-light, p.color-hwk-green-light, span.color-hwk-green-light, a.color-hwk-green-light, li.color-hwk-green-light, input.color-hwk-green-light, label.color-hwk-green-light, textarea.color-hwk-green-light, caption.color-hwk-green-light, blockquote.color-hwk-green-light, font.color-hwk-green-light, code.color-hwk-green-light { color: #b4bd00 !important; } div.color-hwk-green-light { background-color: #b4bd00 !important; } div.color-hwk-green-light-secondary { background-color: #c7ce40 !important; } #scrollspyContent ul.nav-tabs { margin-top: 50px; } '; 1624 //window.onload = function() { appendStyle(styles) }; 1625 (function() { // self executing function here 1626 appendStyle(styles); // the DOM will be available here 1627 })(); 1628 </script>
1628 1629 1630 <a id="top" href="#" class="hidden-print"><span class="glyphicon glyphicon-chevron-up"></span></a> 1631 1632
1632<script type="text/x-template" id="eval-submit-template"> 1633 <div> 1634 <div class="row"> 1635 <div v-if="show_progress_bar" class="col-xs-12 col-12 mb-4"> 1636 <progress id="uni-eval-progress-bar" :value="progress"></progress> 1637 </div> 1638 <div v-if="args.total_page_nr > 1" class="col-xs-12 col-12 mb-4"> 1639 <button v-if="!isFirstPage" @click="go_to_previous_page" class="btn btn-primary btn-back"><span class="uni-eval-nav-button-icon">⟨ </span> Vorherige Seite</button> 1640 <button v-if="!isLastPageWithContent" @click="go_to_next_page" class="btn btn-primary float-right">Nächste Seite <span class="uni-eval-nav-button-icon"> ⟩</span></button> 1641 </div> 1642 <div class="col-xs-12 col-12 d-flex justify-content-center"> 1643 <button v-if="!isLastPageWithContent" @click="save_locally" class="btn btn-primary">Zwischenspeichern</button> 1644 <button v-if="isLastPageWithContent" @click="$eventBus.$emit('eval-submit-form', $event.target)" class="btn btn-primary">Absenden</button> 1645 </div> 1646 </div> 1647 <div v-if="error_code == 'insert' || error_code == 'json'" class="col-xs-12 col-12 callout callout-danger"> 1648 <h4>Fehler</h4> 1649 Ihre Angaben konnten nicht gespeichert werden. 1650 </div> 1651 <div v-else-if="error_code == 'export'" class="col-xs-12 col-12 callout callout-danger"> 1652 <h4>Fehler</h4> 1653 Ihre Angaben konnten nicht übermittelt werden. 1654 </div> 1655 <div v-else-if="error_code == 'token'" class="col-xs-12 col-12 callout callout-danger"> 1656 <h4>Fehler</h4> 1657 Ihr Token ist ungültig. 1658 </div>
1659 <div v-else-if="error_code == 'invalid'" class="col-xs-12 col-12 callout callout-warning"> 1660 <h4>Fehlende oder ungültige Eingabe</h4> 1661 Die Seite enthält eine unzulässige Eingabe oder ein Pflichtfeld fehlt.<br> 1662 Bitte kontrollieren Sie Ihre Eingaben. Die betroffenen Felder sind rot hervorgehoben. 1663 </div> 1664 <div v-else-if="error_code == 'pruefungsmerkmalauswahl_gesperrt'" class="col-xs-12 col-12 callout callout-danger"> 1665 <h4>Eintragung fehlgeschlagen</h4> 1666 Sie können keine Änderungen mehr vornehmen. 1667 </div> 1668 <div v-else-if="error_code == 'pruefungsmerkmalauswahl_nicht_angemeldet'" class="col-xs-12 col-12 callout callout-danger"> 1669 <h4>Eintragung fehlgeschlagen</h4> 1670 Sie sind nicht zu der ausgewählten Prüfung angemeldet. Bitte überprüfen Sie Ihre Angaben, insbesondere die Lehrlingsrollennummer. 1671 </div> 1672 </div> 1673 </script>
1673 1674 <template id="uni_vue_prueferportal_ausschuesse_template"> 1675 <div class="row"> 1676 <div v-if="error"> 1677 <div class="bs-callout bs-callout-danger"> 1678 <h4 class="m-0"><i class="fas fa-exclamation-triangle"></i> 1679 Ein Fehler ist aufgetreten 1680 </h4> 1681 </div> 1682 </div> 1683 <div class="col-12 col-xs-12" v-else-if="content == 'loading'"> 1684 <div class="bs-callout bs-callout-info"> 1685 <h4 class="m-0"><i class="fas fa-circle-notch fa-spin"></i> 1686 Wird geladen … 1687 </h4> 1688</div> </div> 1689 <div v-else-if="content == 'success'"> 1690 <div class="col-12 col-xs-12"> 1691 <div class="row"> 1692 <div class="col-12 col-xs-12"> 1693 <div id="tabs" class="tabs-custom tabs-horizontal tabs-corporate product"> 1694 <ul v-if="!hidepr" role="tablist" class="nav nav-tabs text-center myTabs mb-4" style="text-align: left !important;"> 1695 <li role="presentation" class="nav-item round-large text-dark-variant-3 active"> 1696 <a href="#tab1" aria-controls="tab1" role="tab" aria-selected="true" 1697 data-toggle="tab" class="nav-link round-large active"> 1698 Ausschussmitglieder 1699 </a> 1700 </li> 1701 <li role="presentation" class="nav-item round-large text-dark-variant-3"> 1702 <a href="#tab2" aria-controls="tab2" role="tab" aria-selected="false" 1703 data-toggle="tab" class="nav-link round-large"> 1704 Prüfungen 1705 </a> 1706 </li> 1707 </ul> 1708 <div :class="{'tab-content' : !hidepr}" class=" text-md-left"> 1709 <div role="tabpanel" id="tab1" class="tab-pane fade row active in"> 1710 <div class="col-12 col-xs-12"> 1711 <div class="row"> 1712 <div class="col-sm-3 d-sm-block d-none col-xs-12"> 1713 <strong>Name</strong> 1714 </div> 1715 <div class="col-sm-3 d-sm-block d-none col-xs-12"> 1716 <strong>Funktionen</strong> 1717 </div> 1718 <div class="col-sm-3 d-sm-block d-none col-xs-12"> 1719 <strong>Telefon</strong> 1720 </div> 1721 <div class="col-sm-3 d-sm-block d-none col-xs-12"> 1722 <strong>Email</strong> 1723 </div> 1724 <div class="col-12 col-xs-12"> 1725 <hr style="width: 100%; margin-top: 10px; margin-bottom: 10px;"> 1726 </div> 1727 </div> 1728 <div class="row" v-for="m in mitglieder"> 1729 <div class="col-sm-3 col-xs-12">
1730 <span>{{m.v_xad_vname}} {{m.v_xad_name1}}</span> 1731 </div> 1732 <div class="col-sm-3 col-xs-12"> 1733 <span v-for="f in mitgliederFunktionen[m.v_xaz_idnr]"> 1734 {{f.meta.unixam_bez}} 1735 </span> 1736 </div> 1737 <div class="col-sm-3 col-xs-12"> 1738 <span v-if="m.v_kom_telnr_h"> {{m.v_kom_telnr_h}} </span> 1739 <span v-else>-</span> 1740 </div> 1741 <div class="col-sm-3 col-xs-12"> 1742 <span class="word-break" v-if="m.v_kom_email_h"> {{m.v_kom_email_h}} </span> 1743 <span v-else>-</span> 1744 </div> 1745 <div class="col-12 col-xs-12"> 1746 <hr style="width: 100%; margin-top: 10px; margin-bottom: 10px;"> 1747 </div> 1748 </div> 1749 </div> 1750 </div> 1751 <div v-if="!hidepr" role="tabpanel" id="tab2" class="tab-pane fade row p-3"> 1752 <div class="col-12 col-xs-12"> 1753 <h2>Prüfungen dieses Ausschusses</h2> 1754 <hr class="my-3"> 1755 <div class="row" v-if="aart == 'GPA'" v-for="p in pruefungen"> 1756 <div class="col-xs-12 col-12"> 1757 <h3> 1758 <a :href="'/kundenportal/pruefungen/GPA/'+p.hwkpst_prnummer">{{p.hwkpst_prfbez}} ({{p.hwkpst_prnummer}})</a> 1759 </h3> 1760 </div> 1761 <div class="col-sm-3 col-xs-12"> 1762 <strong>Beruf:</strong> 1763 </div> 1764 <div class="col-sm-9 col-xs-12"> 1765 <span>{{p.berufBez}}</span> 1766 </div> 1767 <div class="col-sm-3 col-xs-12"> 1768 <strong>Jahr:</strong> 1769 </div> 1770 <div class="col-sm-9 col-xs-12"> 1771 <span>{{p.meta.hwkpst_prjahr}}</span> 1772 </div> 1773 <div class="col-xs-12 col-12 "> 1774 <hr class="my-3"> 1775 </div> 1776 </div> 1777 <div class="row" v-else-if="aart == 'MPA'" v-for="p in pruefungen"> 1778 <div class="col-xs-12 col-12"> 1779 <h3> 1780 <a :href="'/kundenportal/pruefungen/MPA/'+p.hwkmpk_mpprnr">{{p.hwkmpk_prbez}} ({{p.hwkmpk_mpprnr}})</a> 1781 </h3> 1782 </div> 1783 <div class="col-sm-3 col-xs-12"> 1784 <strong>Beruf:</strong> 1785 </div> 1786 <div class="col-sm-9 col-xs-12">
1787 <span>{{p.berufBez}}</span> 1788 </div> 1789 <div class="col-sm-3 col-xs-12"> 1790 <strong>Beruf-Nr.:</strong> 1791 </div> 1792 <div class="col-sm-9 col-xs-12"> 1793 <span>{{p.meta.hwkmpk_mpberuf}}</span> 1794 </div> 1795 <div class="col-xs-12 col-12 "> 1796 <hr class="my-3"> 1797 </div> 1798 </div> 1799 </div> 1800 </div> 1801 </div> 1802 </div> 1803 </div> 1804 </div> 1805 </div> 1806 </div> 1807 </div> 1808 </template> 1809 <template id="uni_vue_login_template"> 1810 <div class="uni-login-form"> 1811 <div v-if="login_failed" class="bs-callout bs-callout-danger"> 1812 <h5>Login fehlgeschlagen</h5> 1813 <label>Benutzername oder Passwort ist falsch.</label> 1814 </div> 1815 <div v-if="wrong_pin" class="bs-callout bs-callout-danger"> 1816 <h5>Login fehlgeschlagen</h5> 1817 <label>Die eingegebene PIN ist nicht korrekt.</label> 1818 </div> 1819 <div v-if="content == 'form'" class="uni-form"> 1820 <form enctype="multipart/form-data" v-bind:action="action" method="POST" v-on:submit.prevent="onLoginHandler"> 1821 <fieldset> 1822 <input type="hidden" name="nonce" v-bind:value="nonce" /> 1823 <input type="hidden" name="post_id" v-bind:value="post_id" /> 1824 <div v-if="confirmed" class="col-xs-12 col-12"> 1825 <div class="bs-callout bs-callout-info"> 1826 <h5>Konto bestätigt</h5> 1827 <label>Sie können sich nun am {{ getTheTitle() }} anmelden.</label> 1828 </div> 1829 </div> 1830 1831 <div class="pt-2 row"> 1832 <template v-for="input in inputs"> 1833 <div v-if="!input.hidden" v-bind:class="getInputClass(input.width)"> 1834 <label v-if="!compact" class="control-label"> 1835 {{ input.display_name }} 1836 <span v-if="input.required">*</span>: 1837 </label> 1838 <input 1839 autocomplete="off" 1840 autocapitalize="off" 1841 v-model="input.value" 1842 v-bind:type="input.type" 1843 v-bind:name="input.name" 1844 v-bind:placeholder="input.display_name" 1845 class="form-control" 1846 v-on:keyup.enter="onLoginHandler" 1847 v-bind:class="[ input.invalid ? 'is-invalid has-error' : '', input.class ? input.class : '']" 1848 /> 1849 </div> 1850 </template> 1851 <div v-if="!inputs.password.hidden" class="col-xs-12 col-12 pb-2"> 1852 <span class="cursor-pointer" @click="toggleShowPassword()"> 1853 <span v-if="inputs.password.type !== 'password'"> 1854 <i class="bi bi-eye"></i> 1855 Passwort verstecken 1856 </span>
1857 <span v-else> 1858 <i class="bi bi-eye-slash"></i> 1859 Passwort anzeigen 1860 </span> 1861 </span> 1862 </div> 1863 <div class="col-xs-12 col-sm-12 text-right form-group has-feedback"> 1864 <a v-if="otp" 1865 class="btn btn-link d-inline" 1866 v-on:click.prevent="newOTP" 1867 >neue PIN anfordern</a> 1868 <a 1869 type="submit" 1870 class="btn btn-primary d-inline" 1871 v-on:click.prevent="onLoginHandler" 1872 >Anmelden</a> 1873 </div> 1874 1875 </div> 1876 </fieldset> 1877 </form> 1878 </div> 1879 <div v-else-if="content == 'loading'" class> 1880 <template v-if="show_progress_bar"> 1881 <div class="bs-callout bs-callout-info"> 1882 <h4 class="mb-3"><i class="fas fa-circle-notch fa-spin"></i> Wird geladen …</h4> 1883 <div v-if="progress_hint"> 1884 <p class="mb-0 pb-0" v-html="progress_hint"></p> 1885 </div> 1886 <div v-else-if="progress > 1"> 1887 <div id="uni-login-progress-bar" style="height:18px; background-color: #9FC8F2; border-radius: 5px;" :style="{ width: progress + '%' }"> </div> 1888 </div> 1889 </div> 1890 </template> 1891 <template v-else> 1892 <div class="bs-callout bs-callout-info"> 1893 <h4 class="m-0"><i class="fas fa-circle-notch fa-spin"></i> 1894 Wird geladen … 1895 </h4> 1896</div> </template> 1897 </div> 1898 <div v-else-if="content == 'logged_in'" class> 1899 <div class="bs-callout bs-callout-info"> 1900 <h4>Sie sind angemeldet <span v-if="data.first_name" class="uni-just-a-hack-for-hwk-theme">als </span><span v-if="data.first_name" class="logged-in-as" v-html="data.first_name+' '+data.name1"></span></h4> 1901 <p class="mt-3 mb-0 p-0"> 1902 <a href="/kundenportal"> 1903 <i class="bi bi-house"></i> 1904 {{ getTheTitle() }} 1905 </a> 1906 </p> 1907 <p class="mt-3 mb-0 p-0"> 1908 <a href="https://www.hwk-konstanz.de/wp-login.php?action=logout&redirect_to=https%3A%2F%2Fwww.hwk-konstanz.de&_wpnonce=9524c2c613"> 1909 <i class="bi bi-box-arrow-right"></i> 1910 1911 Abmelden 1912 </a> 1913 </p> 1914 </div> 1915 </div> 1916 <div v-else-if="content == 'logging_in'" class> 1917 <div class="bs-callout bs-callout-info"> 1918 <h4>Anmeldung erfolgreich</h4> 1919 <p>Sie werden automatisch weitergeleitet …</p> 1920 </div> 1921 </div> 1922 </div> 1923</template>
1924<script setup lang="ts"> 1925</script>
1925 <template id="uni-warenkorb-button-icon-template"> 1926 <div v-if="!route.path.includes('bestellung') && count > 0" id="uni-warenkorb-button-icon" @click="handleClick"> 1927 <i class="bi bi-cart-check"></i> 1928 </div> 1929 </template> 1930 1931
1931<script> 1932 Vue.component('eval-submit-component', { 1933 props: ['name'], 1934 template: '#eval-submit-template', 1935 1936 data: function() { 1937 return { 1938 post_id: '273005', 1939 action: 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-evaluation/inc/forms/submit.php', 1940 nonce: '707847e599', 1941 restriction_nonce: '2f446fcf90', 1942 redirect_page: '', 1943 endpoints: [], 1944 return_after_sending: 0, 1945 args: { 1946 current_page_nr: 1, 1947 total_page_nr: 0 }, 1948 page_has_visible_content: new Array(1).fill(false), // "+1" so that the indexes range from [1] to [total_page_nr]. Index [0] is not used. 1949 previousPageWithContent: false, 1950 nextPageWithContent: false, 1951 sending_data: false, 1952 error_code: '', 1953 show_progress_bar: false, 1954 progress: 0, 1955 }; 1956 }, 1957 methods: { 1958 go_to_previous_page: function() { 1959 if( !this.isFirstPage ) { 1960 current_page = document.getElementById('page-' + this.args.current_page_nr); 1961 current_page.classList.remove('show'); 1962 current_page.classList.remove('in'); 1963 current_page.classList.remove('active'); 1964 previous_page_nr = this.previousPageWithContent; 1965 previous_page = document.getElementById('page-' + previous_page_nr); 1966 previous_page.classList.add('show'); 1967 previous_page.classList.add('in'); 1968 previous_page.classList.add('active'); 1969 this.args.current_page_nr = this.previousPageWithContent; 1970 window.scrollTo(0, 0); 1971 } 1972 }, 1973 go_to_next_page: function() { 1974 if(this.validateCurrentPageQuestions()) { 1975 if(!this.isLastPageWithContent) { 1976 current_page = document.getElementById('page-' + this.args.current_page_nr); 1977 current_page.classList.remove('show'); 1978 current_page.classList.remove('in'); 1979 current_page.classList.remove('active'); 1980 next_page_nr = this.nextPageWithContent; 1981 next_page = document.getElementById('page-' + next_page_nr); 1982 next_page.classList.add('show'); 1983 next_page.classList.add('in'); 1984 next_page.classList.add('active'); 1985 this.args.current_page_nr = this.nextPageWithContent; 1986 window.scrollTo(0, 0); 1987 } 1988 } 1989 }, 1990 validateCurrentPageQuestions: function() { 1991 var ret = true; 1992 for(var question of this.$evaluation.questions) { 1993 if(this.$evaluation.getPageNr(question) == this.args.current_page_nr) { 1994 var should_scroll = true; 1995 if(!question.validate()) { 1996 ret = false; 1997 if(should_scroll) { 1998 question.$el.scrollIntoView(false); 1999 should_scroll = false; 2000 } 2001 } 2002 } 2003 } 2004 this.error_code = ret ? '' : 'invalid'; 2005 return ret; 2006 }, 2007 save_locally: function() { 2008 for(var q_id in this.$evaluation.questions) { 2009 let question = this.$evaluation.questions[q_id]; 2010 var entry = {}; 2011 if(question.value !== undefined) {entry.value = question.value;} 2012 if(question.values !== undefined) {entry.values = question.values;} 2013 if(question.customCaptions !== undefined) {entry.customCaptions = question.customCaptions;} 2014 localStorage.setItem('UniEvalFormSave_' + this.name + '_q' + q_id, JSON.stringify(entry)); 2015 } 2016 }, 2017 checkVisibility: function() { 2018 // Check which pages have visible content 2019 for(var i=1; i<= this.args.total_page_nr; i++) { 2020 // this.page_has_visible_content[i] = false; 2021 this.page_has_visible_content[i] = 0; 2022 } 2023 for(var question of this.$evaluation.questions) { 2024 if(!question.hide && question.qtype != 'summary') { 2025 var pageNr = this.$evaluation.getPageNr(question); 2026 // this.page_has_visible_content[pageNr] = true; 2027 this.page_has_visible_content[pageNr]++; 2028 } 2029 } 2030 this.updatePageWithContent(); 2031 this.updateProgress(); 2032 }, 2033 updatePageWithContent: function() { 2034 var pageNr; 2035 pageNr = this.args.current_page_nr; 2036 if(1 == this.args.current_page_nr) { 2037 this.previousPageWithContent = false; 2038 } else { 2039 this.previousPageWithContent = 1; // Always treat page 1 as page with content. 2040 } 2041 while(pageNr > 1) { 2042 pageNr--; 2043 if(this.page_has_visible_content[pageNr]) { 2044 this.previousPageWithContent = pageNr; 2045 break; 2046 } 2047 } 2048 pageNr = this.args.current_page_nr; 2049 this.nextPageWithContent = false; 2050 while(pageNr < this.args.total_page_nr) { 2051 pageNr++; 2052 if(this.page_has_visible_content[pageNr]) { 2053 this.nextPageWithContent = pageNr; 2054 break; 2055 } 2056 } 2057 }, 2058 updateProgress() { 2059 var num_past_questions = 0; 2060 var total_num_questions = 0; 2061 for(var i=1; i < this.page_has_visible_content.length; i++) { 2062 total_num_questions += this.page_has_visible_content[i]; 2063 if(i < this.args.current_page_nr) { 2064 num_past_questions += this.page_has_visible_content[i]; 2065 } 2066 } 2067 if(total_num_questions > 0) { 2068 this.progress = num_past_questions/total_num_questions; 2069 } else { 2070 this.progress = 1; 2071 } 2072 } 2073 }, 2074 mounted: function() { 2075 // Check local storage for saved data 2076 for(var q_id in this.$evaluation.questions) { 2077 if (localStorage.getItem('UniEvalFormSave_' + this.name + '_q' + q_id)) { 2078 let object_from_local_storage = JSON.parse(localStorage.getItem('UniEvalFormSave_' + this.name + '_q' + q_id)); 2079 var vue_component = this.$evaluation.questions[q_id]; 2080 if(object_from_local_storage.value !== undefined) {vue_component.value = object_from_local_storage.value;} 2081 if(object_from_local_storage.values !== undefined) {vue_component.values = object_from_local_storage.values;} 2082 if(object_from_local_storage.customCaptions !== undefined) {vue_component.customCaptions = object_from_local_storage.customCaptions;} 2083 } 2084 } 2085 2086 2087 this.$eventBus.$on('eval-submit-form', function(event_target) { 2088 if(!this.sending_data) { 2089 event_target.innerHTML = '<i class="fas fa-spinner fa-spin"></i>'; 2090 this.sending_data = true; 2091 this.error_code = ''; 2092 var is_valid = true; 2093 for(var question of this.$evaluation.questions) { 2094 var should_scroll = true; 2095 if(!question.validate()) { 2096 is_valid = false; 2097 if(should_scroll) { 2098 question.$el.scrollIntoView(false); 2099 should_scroll = false; 2100 } 2101 } 2102 } 2103 if(is_valid) { 2104 // Submit the form... 2105 var formData = this.$root.createFormData(this.inputs); 2106 formData.append('post_id', this.post_id); 2107 formData.append('nonce', this.nonce); 2108 formData.append('restriction_nonce',this.restriction_nonce); 2109 formData.append('token_id', ''); 2110 formData.append('fragebogen_name', this.name); 2111 formData.append('semnr', ''); 2112 formData.append('modnr', ''); 2113 formData.append('vernr', ''); 2114 formData.append('group', ''); 2115 formData.append('generic_parameter_1', ''); 2116 formData.append('generic_parameter_2', ''); 2117 formData.append('generic_parameter_3', ''); 2118 formData.append('generic_parameter_4', ''); 2119 formData.append('lfdnr', ''); 2120 formData.append('kurs_vdat', ''); 2121 formData.append('kurs_bdat', ''); 2122 formData.append('token_vdat', ''); 2123 formData.append('export', 0); 2124 formData.append('endpoints', JSON.stringify(this.endpoints)); 2125 formData.append('immediate_mail', 'null'); 2126 2127 // console.log(this.$evaluation.question_bundles); 2128 var q_data_bundle = {}; 2129 for(var category in this.$evaluation.question_bundles) { 2130 q_data_bundle[category] = {}; 2131 for(var bundle_index in this.$evaluation.question_bundles[category]) { 2132 var bundle = this.$evaluation.question_bundles[category][bundle_index]; 2133 q_data_bundle[category][bundle_index] = {}; 2134 q_data_bundle[category][bundle_index].doznr = bundle.doznr; 2135 q_data_bundle[category][bundle_index].dozent = bundle.dozent; 2136 q_data_bundle[category][bundle_index].thema_id = bundle.thema_id; 2137 q_data_bundle[category][bundle_index].thema_bez = bundle.thema_bez; 2138 q_data_bundle[category][bundle_index].questions = []; 2139 var questions = bundle.questions; 2140 for(var q_id in questions) { 2141 let question = questions[q_id]; 2142 q_data_bundle[category][bundle_index].questions.push( 2143 { 2144 data: question._data 2145 } 2146 ) 2147 } 2148 } 2149 } 2150 var q_data_bundle_json = JSON.stringify(q_data_bundle) 2151 formData.append('q_data_bundle_json', q_data_bundle_json); 2152 2153 this.$http.post(this.action, formData).then(function(res) { 2154 let response = JSON.parse(res.bodyText); 2155 console.log(response); // XXX DEV 2156 // Ok, wir haben die Request an den Server geschickt und Antwort erhalten. 2157 /* Delete local storage */ 2158 for(var q_id in this.$evaluation.questions) { 2159 var question = this.$evaluation.questions[q_id]; 2160 if(!(question.args.do_not_delete_on_submit || ('options' in question.args && question.args.options.do_not_delete_on_submit))) { 2161 localStorage.removeItem('UniEvalFormSave_' + this.name + '_q' + q_id); 2162 } 2163 } 2164 /* Pruefungswesen PDF export */ 2165 if(false) { 2166 // TODO: Aufruf von createPdf nur im endpoint-Erfolgsfall! 2167 // if(response.ergebnis_post_id != 0) { 2168 if(response.success) { 2169 // Check if q-type pruefungswesen_merkmalliste is present 2170 if(q_data_bundle_json.indexOf('pruefungswesen_merkmalliste') >= 0) { 2171 var nonce = response.pruefungswesen_pdf_nonce; 2172 var post_id = response.ergebnis_post_id; 2173 var url = 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-pruefungswesen/inc/forms/createPdf.php' + '?post_id='+post_id+'&nonce='+nonce; 2174 // window.open(url); 2175 this.redirect_page = url; 2176 } 2177 } 2178 } 2179 /* On error: show error message. On success: redirect. */ 2180 if(response.success) { 2181 /* Redirect */ 2182 if(this.return_after_sending) { 2183 location.reload(); 2184 } else { 2185 document.location = this.redirect_page; 2186 } 2187 } else { 2188 this.error_code = response.error_code; 2189 } 2190 this.sending_data = false; 2191 event_target.innerHTML = 'Absenden'; 2192 }, function(res) { 2193 console.log('err'); 2194 this.sending_data = false; 2195 event_target.innerHTML = 'Absenden'; 2196 });
2197 } else { 2198 this.sending_data = false; 2199 event_target.innerHTML = 'Absenden'; 2200 this.error_code = 'invalid'; 2201 } 2202 } 2203 }.bind(this)); 2204 2205 // this.$eventBus.$on('eval-page-changed', function(page_id) { 2206 // this.args.current_page_nr = page_id; 2207 // }.bind(this)); 2208 2209 this.$eventBus.$on('eval-visibility-changed', function() { 2210 this.checkVisibility(); 2211 }.bind(this)); 2212 2213 /* Check query string, preset values */ 2214 /* Won't work on Multiple Choice because query string only provides strings and arrays of strings */ 2215 let query = this.$root.$route.query; 2216 Object.keys(query).forEach(function (item) { 2217 // key: item 2218 // value: query[item] 2219 if(item.substr(0,1) == 'q') { 2220 var qindex = item.substr(1) -1; 2221 if(this.$evaluation.questions[qindex]) { 2222 var the_question = this.$evaluation.questions[qindex]; 2223 if(the_question.value !== undefined) {the_question.value = query[item];} 2224 else if(the_question.values !== undefined) {the_question.values = query[item];} 2225 } 2226 } 2227 2228 }, this); 2229 2230 this.$nextTick(function () { 2231 // Code that will run only after the entire view has been rendered 2232 this.checkVisibility(); 2233 }) 2234 }, 2235 computed: { 2236 isFirstPage: function() { 2237 return this.args.current_page_nr == 1; 2238 }, 2239 isLastPage: function() { 2240 return this.args.current_page_nr == this.args.total_page_nr; 2241 }, 2242 isFirstPageWithContent: function() { 2243 return !this.previousPageWithContent; 2244 }, 2245 isLastPageWithContent: function() { 2246 return !this.nextPageWithContent; 2247 }, 2248 }, 2249 watch: { 2250 args: { 2251 handler: function() { 2252 this.updatePageWithContent(); 2253 this.updateProgress(); 2254 }, 2255 deep: true, 2256 immediate: false, 2257 }, 2258 } 2259 2260 }); 2261 2262 </script>
2262 2263
2263<script> 2264 Vue.component('uni-vue-prueferportal-ausschuesse', { 2265 template: '#uni_vue_prueferportal_ausschuesse_template', 2266 props: ['ausschussnr','aart','hidepr'], 2267 data: function () { 2268 return { 2269 rand: '74493', 2270 nonce: '930bc49029', 2271 content: 'loading', 2272 error: false, 2273 mitglieder: [], 2274 mitgliederFunktionen: [], 2275 pruefungen: [], 2276 ausschuss: [], 2277 } 2278 }, 2279 computed: {}, 2280 watch: {}, 2281 methods: { 2282 2283 getData() { 2284 const action = '/wp-json/uniplus/prueferportal/v2/'+this.aart+'/'+this.ausschussnr+'/getAusschuss'; 2285 var formData = new FormData(); 2286 formData.append('random', this.rand); 2287 formData.append('nonce', this.nonce); 2288 this.$http.post(action, formData, 2289 {headers: {'X-WP-Nonce': '3fb8454cb6'}}) 2290 .then(async function (response) { 2291 response.json().then(async json => { 2292 if (json.status === 'success') { 2293 this.mitglieder = json.data.mitglieder; 2294 this.pruefungen = json.data.pruefungen; 2295 this.ausschuss = json.data.ausschuss; 2296 this.mitgliederFunktionen = json.data.mitgliederFunktionen; 2297 this.content = 'success'; 2298 } else { 2299 2300 } 2301 }); 2302 }.bind(this), async function (reason) { 2303 2304 }.bind(this)); 2305 }, 2306 2307 }, 2308 created() { 2309 2310 }, 2311 2312 mounted() { 2313 this.getData(); 2314 } 2315 }); 2316 2317 </script>
2317 2318
2318<script> 2319 Vue.component('uni-vue-login', { 2320 template: '#uni_vue_login_template', 2321 props: { 2322 compact: Boolean, 2323 redirect: String, 2324 keepsignedin: Boolean, 2325 redirect_while_logged_in: Boolean, 2326 show_progress_bar: Boolean 2327 }, 2328 kundenportal_title: '', 2329 data: function() { 2330 return { 2331 post_id: '40219', 2332 action: 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-signup/inc/forms/signin.php', 2333 nonce: '4c2977b327', 2334 zfaNonce: '6a81f3dc54', 2335 apiNonce: 'abaa113e3f', 2336 login_failed: false, 2337 wrong_pin: '', 2338 confirmed: false, 2339 content: 'loading', 2340 client: 'hwkkonstanz', 2341 data: false,
2342 otp: false, 2343 otp_success: false, 2344 otp_error: false, 2345 progress: 0, 2346 progress_ticks: 0, 2347 progress_hint: '', 2348 saveDevice: false, 2349 zfaToken: '', 2350 inputs: { 2351 email: { 2352 value: '', 2353 type: 'text', 2354 display_name: 'Benutzername', 2355 required: true, 2356 width: 12, 2357 name: 'username', 2358 invalid: false, 2359 hidden: false, 2360 autocapitalize: false 2361 }, 2362 password: { 2363 value: '', 2364 type: 'password', 2365 display_name: 'Passwort', 2366 required: true, 2367 width: 12, 2368 name: 'password', 2369 invalid: false, 2370 hidden: false 2371 }, 2372 pin: { 2373 value: '', 2374 type: 'text', 2375 display_name: 'Ihre PIN', 2376 required: true, 2377 width: 12, 2378 name: 'pin', 2379 hidden: true, 2380 class: 'input-letter-spacing-3', 2381 invalid: false, 2382 autocapitalize: false 2383 }, 2384 } 2385 } 2386 }, 2387 methods: { 2388 toggleShowPassword: function() { 2389 this.inputs.password.type = this.inputs.password.type === 'password' ? 'text' : 'password'; 2390 }, 2391 getTheTitle: function() { 2392 this.kundenportal_title = 'Kundenportal'; 2393 return this.kundenportal_title; 2394 }, 2395 getInputClass : function(w) { 2396 return 'col-xs-12 col-12 col-sm-' + w + ' form-group has-feedback'; 2397 }, 2398 onLoginHandler : function() { 2399 setTimeout(function() { 2400 if(this.compact && document.querySelector('.uni-dropdown-menu')) { 2401 document.querySelector('.uni-dropdown-menu').classList.add('show'); 2402 } 2403 }.bind(this), 50); 2404 2405 this.inputs.email.invalid = (!this.inputs.email.value); 2406 this.inputs.password.invalid = (!this.inputs.password.value); 2407 2408 if(this.inputs.email.value && this.inputs.password.value) { 2409 this.$eventBus.$emit('uni-on-logging-in'); 2410 this.login_failed = false; 2411 this.wrong_pin = false; 2412 var formData = this.$form.createFormData(this.inputs); 2413 formData.append('post_id', this.post_id); 2414 formData.append('nonce', this.nonce); 2415 formData.append('keepsignedin', this.keepsignedin ? 'J' : 'N'); 2416 formData.append('saveDevice', this.saveDevice ? 'J': 'N'); 2417 formData.append('token', this.zfaToken); 2418 2419 this.$http.post(this.action, formData).then(function(res) { 2420 let json = JSON.parse(res.bodyText); 2421 if(json.success) { 2422 if(this.saveDevice && json.token) { 2423 let a = new Date(); 2424 a = new Date(a.getTime() +1000*60*60*24*30); 2425 document.cookie = this.client+'_zfa_token='+json.token+'; expires='+ 2426 a.toGMTString()+';'; 2427 } 2428 this.$eventBus.$emit('uni-on-login-success'); 2429 } else { 2430 this.content = 'form'; 2431 if(!json.success) { 2432 if(json.zfa) { 2433 if(this.otp === true && this.inputs.pin.hidden === false) { 2434 this.wrong_pin = true; 2435 } 2436 this.content = 'loading'; 2437 this.inputs.email.hidden = true; 2438 this.inputs.password.hidden = true; 2439 this.inputs.pin.hidden = false; 2440 this.otp = true; 2441 setTimeout((e) => { 2442 this.content = 'form'; 2443 }, 1); 2444 } else { 2445 this.$eventBus.$emit('uni-on-login-failed'); 2446 } 2447 } 2448 // Show login box with error message 2449 if(this.compact && document.querySelector('.uni-dropdown-menu') && !json.zfa) { 2450 document.querySelector('.uni-dropdown-menu').classList.add('show'); 2451 document.location = 'https://www.hwk-konstanz.de/login?state=failed'; 2452 } 2453 } 2454 2455 }.bind(this), function(res) { 2456 this.$eventBus.$emit('uni-on-login-failed'); 2457 }); 2458 } 2459 }, 2460 newOTP() { 2461 this.content = 'loading'; 2462 this.otp_error = false;
2463 this.otp_success = false; 2464 var formData = this.$form.createFormData(this.inputs); 2465 formData.append('post_id', this.post_id); 2466 formData.append('nonce', this.zfaNonce); 2467 this.$http.post('/wp-json/uniplus/2FA/v1/new-otp', formData, 2468 {headers: {'X-WP-Nonce': '3fb8454cb6'}}) 2469 .then(function (response) { 2470 response.json().then(json => { 2471 if (!json.status == 'success') { 2472 this.otp_error = true; 2473 this.content = 'form'; 2474 } else { 2475 this.otp_success = true; 2476 this.content = 'form'; 2477 } 2478 }); 2479 }.bind(this)); 2480 }, 2481 init : function() { 2482 let formData = new FormData(); 2483 formData.append('post_id', this.post_id); 2484 formData.append('nonce', this.apiNonce); 2485 this.$uniplus.apiRequest('/wp-json/uniplus/signup/v1/userdata', formData, 2486 (json) => { 2487 if(json.status === 'success' && json.data.is_user_logged_in) { 2488 this.data = json.data.user_data; 2489 2490 if(this.redirect_while_logged_in) { 2491 this.content = 'logging_in'; 2492 setTimeout(() => { 2493 document.location = this.redirect ? this.redirect : '/kundenportal'; 2494 }, 2000); 2495 } else { 2496 this.content = 'logged_in'; 2497 } 2498 } else { 2499 this.content = 'form'; 2500 } 2501 }, 2502 (err) => { 2503 this.content = 'form'; 2504 }); 2505 2506 if(this.$route.query.state === 'failed') { 2507 this.login_failed = true; 2508 this.inputs.email.invalid = true; 2509 this.inputs.password.invalid = true; 2510 } 2511 }, 2512 updateLoginProgress() { 2513 this.progress_ticks += Math.floor(Math.random() * 10); 2514 2515 if(this.progress_ticks > 100 && !this.progress_hint) { 2516 this.progress = 100; 2517 this.progress_hint = 'Einen Moment Geduld bitte, wir müssen Ihre Daten noch aufbereiten.'; 2518 } else { 2519 this.progress = this.progress_ticks % 100; 2520 } 2521 } 2522 }, 2523 watch: { 2524 content(newVal, oldVal) { 2525 if(oldVal === 'form' && newVal === 'loading') { 2526 this.progress = 0; 2527 this.progress_ticks = 0; 2528 this.progress_hint = ''; 2529 } 2530 2531 if(oldVal === 'loading' && newVal === 'logged_in') { 2532 this.progress = 100; 2533 this.progress_ticks = 100; 2534 this.progress_hint = ''; 2535 } 2536 } 2537 }, 2538 mounted: function() { 2539 if(typeof this.$route.query.confirmed !== 'undefined') { 2540 this.confirmed = true; 2541 } 2542 2543 this.$eventBus.$on('uni-on-logging-in', () => { 2544 this.login_failed = false; 2545 this.content = 'loading'; 2546 }); 2547 2548 this.$eventBus.$on('uni-on-login-success', () => { 2549 this.content = 'logging_in'; 2550 setTimeout(() => { 2551 document.location = this.redirect ? this.redirect : '/kundenportal'; 2552 }, 250); 2553 }); 2554 2555 this.$eventBus.$on('uni-on-login-failed', () => { 2556 this.content = 'form'; 2557 this.login_failed = true; 2558 this.inputs.email.invalid = true; 2559 this.inputs.password.invalid = true; 2560 }); 2561 2562 this.init(); 2563 if(document.cookie) { 2564 let cookieStr = document.cookie; 2565 let cookieArr = cookieStr.split('; '); 2566 let name = this.client+'_zfa_token='; 2567 for(let i = 0; i < cookieArr.length; i++) { 2568 let cookie = cookieArr[i]; 2569 while (cookie.charAt(0) == ' ') { 2570 cookie = cookie.substring(1); 2571 } 2572 if (cookie.indexOf(name) == 0) { 2573 this.zfaToken = cookie.substring(name.length, cookie.length); 2574 } 2575 } 2576 } 2577 setInterval(() => this.updateLoginProgress(), 980); 2578 2579 } 2580 }); 2581 2582 </script>
2582 2583
2583<script> 2584 Vue.component('warenkorb-button-icon-page', { 2585 template: '#uni-warenkorb-button-icon-template', 2586 2587 data: function() { 2588 return { 2589 route: this.$route, 2590 client: 'hwkkonstanz', 2591 user_id: null, 2592 }; 2593 }, 2594 methods: { 2595 handleClick(e) { 2596 window.location.href = '/bestellung/'; 2597 }, 2598 read_kurse_from_local_storage: function() { 2599 let ls_key = 'uni_wk_kurse_'+this.client; 2600 if(this.user_id) { 2601 ls_key += '_'+this.user_id; 2602 } 2603 let kurse = localStorage.getItem(ls_key); 2604 if(!kurse) { 2605 kurse = localStorage.getItem('uni_wk_kurse_'+this.client); // item added to local storage before logging in 2606 } 2607 if(!kurse) { 2608 kurse = localStorage.getItem('items'); // This can be removed in the future. 2609 } 2610 return kurse; 2611 }, 2612 }, 2613 watch:{ 2614 $route (to, from){ 2615 this.route = this.$route; 2616 let kurse = this.read_kurse_from_local_storage(); 2617 this.items = JSON.parse(kurse); 2618 if(this.items !== null) { 2619 this.count = this.items.length; 2620 } 2621 }, 2622 }, 2623 computed: { 2624 items() { 2625 let kurse = this.read_kurse_from_local_storage(); 2626 return JSON.parse(kurse); 2627 }, 2628 count() { 2629 let kurse = this.read_kurse_from_local_storage(); 2630 return JSON.parse(kurse)?.length; 2631 } 2632 }, 2633 mounted: function() { 2634 this.route = this.$route; 2635 } 2636 }); 2637 </script>
2637 2638
2638<script> 2639 2640 if(!!document.getElementById("vue_app")) { 2641 2642 Vue.prototype.$evaluation = new Vue({ 2643 data: function() { 2644 return { 2645 questions: [], 2646 question_bundles: { 2647 Normal: {}, 2648 Dozenten: {}, 2649 Themen: {} 2650 }, 2651 } 2652 }, 2653 methods: { 2654 getPageNr: function($question) { 2655 // let the_question = document.getElementById('uni_q' + $question.args.qnr); 2656 // let the_section = the_question.parentElement; 2657 let the_section = $question.$el.parentElement; 2658 let pageNr = the_section.getAttribute('uni-with-page'); 2659 return pageNr; 2660 }, 2661 addQuestion: function(question) { 2662 var category = 'Normal'; 2663 var index = '0'; 2664 // if(question.args.hasOwnProperty('personenid')) { 2665 // personenid = question.args.personenid; 2666 // } 2667 let the_section = question.$el.parentElement; 2668 2669 var doznr = the_section.getAttribute('doznr'); 2670 var dozent = the_section.getAttribute('dozent'); 2671 if(doznr === null) { 2672 doznr = 'none'; 2673 } else { // Ist Dozentenfrage 2674 category = 'Dozenten'; 2675 index = doznr; 2676 } 2677 if(dozent === null) { 2678 dozent = ''; 2679 } 2680 2681 var thema_id = the_section.getAttribute('thema_id'); 2682 var thema_bez = the_section.getAttribute('thema_bez'); 2683 if(thema_id === null) { 2684 thema_id = 'none'; 2685 } else { // Ist Themen-Frage 2686 category = 'Themen'; 2687 index = thema_id; 2688 } 2689 if(thema_bez === null) { 2690 thema_bez = ''; 2691 } 2692 2693 if(!this.question_bundles[category].hasOwnProperty(index)) { 2694 this.question_bundles[category][index] = { 2695 doznr: doznr, 2696 dozent: dozent, 2697 thema_id: thema_id, 2698 thema_bez: thema_bez, 2699 questions: [] 2700 }; 2701 } 2702 this.question_bundles[category][index].questions.push(question); 2703 // console.log(this.question_bundles); 2704 } 2705 } 2706 }); 2707 2708 } 2709 </script>
2709 2710
2710<script> 2711 Vue.prototype.$vgb = new Vue({ 2712 data: function() { 2713 return { 2714 clientPluginOptions: Object.freeze(JSON.parse('{"kundenportal_items":{"formulare":{"create":true},"meine_vorgaenge":{"create":true}},"show_in_admin_menu":{"uni_uni01_apstamm":false,"uni_uni01_apgang":false,"uni_uni01_apvar":false,"uni_uni01_apgkrit":false,"uni_vrgngverarb_workflow":false,"uni_vrgngverarb":false},"file_context":["allgemein"],"links":[],"forms":{"zulassungsantrag_gp":[]},"wording":{"lehrlingsrolle_aktive":{".nav.nav-tabs.nav-item#vorgang-tab":"Antr\u00e4ge einsehen und stellen"}},"styling":{"formulare":{"klappbox-head":{"collapsed":false}},"meine_vorgaenge":{"klappbox-head":{"collapsed":true}}},"fields":{"_GetOptions_lvtvorl":{"ausbildungsende":false},"_GetOptions_lvtaktive":{"ausbildungsende":false}},"endcard":{"exclude":[],"lehrlingsrolle_aktive":{"exclude":["link_formulare","link_meine_vorgaenge"]},"zulassungsantrag_gp":{"exclude":[]}},"filter":{"formulare":{"kritnr":null,"xeig":null},"meine_vorgaenge":{"kritnr":null,"xeig":null},"lehrlingsrolle_aktive":{"formulare":{"kritnr":"0003","xeig":null},"meine_vorgaenge":{"kritnr":"0003","xeig":null}},"zulassungsantrag_gp":{"formulare":{"kritnr":null,"xeig":null},"meine_vorgaenge":{"kritnr":null,"xeig":null}}},"header":{"formulare":{"exclude":false},"meine_vorgaenge":{"exclude":false},"vorgang":{"exclude":false},"lehrlingsrolle_aktive":{"formulare":{"exclude":true},"meine_vorgaenge":{"exclude":true},"vorgang":{"exclude":true}},"zulassungsantrag_gp":{"formulare":{"exclude":true},"meine_vorgaenge":{"exclude":true},"vorgang":{"exclude":true}}},"confirmation":{"init_user_status_show_always":false,"confirmation_user_status_show_always":false,"status_block_confirmation_show":false},"besch":{"impl":[],"options":{"UniVrgngverarbBeschEintragungsbestaetigung":{"display_name":"Eintragungsbest\u00e4tigung","description":"Hier erhalten Sie eine Eintragungsbest\u00e4tigung f\u00fcr Ihren Betrieb."},"UniVrgngverarbBeschUnbedenklichkeitsbescheinigung":{"display_name":"Unbedenklichkeitsbescheinigung","description":"Hier erhalten Sie eine Unbedenklichkeitsbescheinigung f\u00fcr Ihren Betrieb.","opart":"01"}}}}')), 2715 confirmationUserTypes: Object.freeze(JSON.parse('{"L":{"display_name":"Auszubildenden"},"B":{"display_name":"Betrieb"}}')), 2716 fieldTypes: [ 2717 { 2718 name: 'number', 2719 nameShort: 'N', 2720 formats: [ 2721 { 2722 pattern: '###,###,##0.00', 2723 //regexp: new RegExp(/^\d+(?:\.\d{1,2})?$/), 2724 step: '0.01', 2725 formatterOptions: { 2726 locale: 'de', 2727 options: { 2728 style: "decimal", 2729 useGrouping: true, 2730 minimumFractionDigits: 2, 2731 maximumFractionDigits: 2, 2732 } 2733 }, 2734 }, 2735 { 2736 pattern: '###,###,##0', 2737 //regexp: new RegExp(/^\d+$/), 2738 step: '1', 2739 formatterOptions: { 2740 locale: 'de', 2741 options: { 2742 style: "decimal", 2743 useGrouping: true, 2744 minimumFractionDigits: 0, 2745 maximumFractionDigits: 0, 2746 } 2747 }, 2748 }, 2749 { 2750 pattern: '0.00', 2751 //regexp: new RegExp(/^\d(?:\.\d{1,2})?$/), 2752 step: '0.01', 2753 formatterOptions: { 2754 locale: 'de', 2755 options: { 2756 style: "decimal", 2757 useGrouping: false, 2758 minimumFractionDigits: 2, 2759 maximumFractionDigits: 2, 2760 } 2761 }, 2762 }, 2763 { 2764 pattern: '0', 2765 //regexp: new RegExp(/^\d(?:\.\d{1,2})?$/), 2766 step: '1', 2767 formatterOptions: { 2768 locale: 'de', 2769 options: { 2770 style: "decimal", 2771 useGrouping: false, 2772 minimumFractionDigits: 0, 2773 maximumFractionDigits: 0, 2774 } 2775 }, 2776 }, 2777 ], 2778 } 2779 ], 2780 } 2781 }, 2782 computed: { 2783 hasClientPluginOptions() { 2784 return (this.clientPluginOptions !== undefined ) 2785 }, 2786 fieldTypesSupported() { 2787 return this.fieldTypes.map((type) =>
2787 type.name); 2788 }, 2789 fieldTypeNumberFormats() { 2790 return this.fieldTypes.find((type) => type.name === 'number').formats; 2791 }, 2792 fieldTypeNumberFormatsSupportedPattern() { 2793 return this.fieldTypeNumberFormats.map((format) => format.pattern); 2794 }, 2795 }, 2796 methods: { 2797 getFieldTypeNumberFormatData(pattern) { 2798 if(!this.fieldTypeNumberFormatsSupportedPattern.includes[pattern]) { return null; } 2799 2800 return this.fieldTypeNumberFormats.find((format) => format.pattern === pattern); 2801 }, 2802 getFieldTypeNumberFormatFormatter(pattern) { 2803 const formatData = this.getFieldTypeNumberFormatData(pattern); 2804 if(formatData.formatterOptions === undefined) { return null; } 2805 2806 return Intl.NumberFormat( 2807 formatData.formatterOptions.locale, 2808 formatData.formatterOptions.options, 2809 ); 2810 }, 2811 parseProps() { 2812 // TODO @skoelgen : ... 2813 }, 2814 parsePropString: function(propString) { 2815 if(typeof propString == 'undefined' || propString === '') { 2816 return false; 2817 } 2818 2819 let data = {}; 2820 2821 let splitString = propString.split(';'); 2822 if(splitString.length > 0) { 2823 splitString.forEach(element => { 2824 let propPair = element.split(':'); 2825 if(propPair.length === 2) { 2826 data[propPair[0]] = propPair[1]; 2827 } 2828 }); 2829 } 2830 2831 return data 2832 }, 2833 getClientForms() { 2834 2835 }, 2836 getClientForm() { 2837 2838 }, 2839 }, 2840 }); 2841 </script>
2841 2842
2842<script> 2843 2844 let __uniHasUnsavedChanges = false; 2845 2846 window.addEventListener("beforeunload", (e) => { 2847 if (__uniHasUnsavedChanges) { 2848 e.preventDefault(); 2849 e.returnValue = ''; 2850 } 2851 }); 2852 2853 Vue.prototype.$uniplus = new Vue({ 2854 data: function() { 2855 return { 2856 post_id: '273005', 2857 action: 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-signup/inc/forms/userdata.php', 2858 nonce: '03ac79572e', 2859 2860 } 2861 }, 2862 methods: { 2863 apiRequest(action, formData, successHandler, errorHandler) { 2864 2865 this.$http.post(action, formData, 2866 { headers: {'X-WP-Nonce': '3fb8454cb6'} }) 2867 .then(async function(response) { 2868 response.json().then(async json => { 2869 if(json.status === 'success') { 2870 successHandler(json); 2871 } else { 2872 errorHandler(json); 2873 } 2874 }).catch(ex => errorHandler(ex)); 2875 }, function(reason) { 2876 errorHandler(reason); 2877 }); 2878 }, 2879 apiGetRequest(action, successHandler, errorHandler) { 2880 this.$http.get(action, 2881 { headers: {'X-WP-Nonce': '3fb8454cb6'} }) 2882 .then(async function(response) { 2883 response.json().then(async json => { 2884 if(json.status === 'success') { 2885 successHandler(json); 2886 } else { 2887 errorHandler(json); 2888 } 2889 }); 2890 }, function(reason) { 2891 errorHandler(reason); 2892 }); 2893 }, 2894 toast(status, title, message) { 2895 toastr.options = { 2896 "closeButton": true, 2897 "debug": false, 2898 "newestOnTop": true, 2899 "progressBar": false, 2900 "positionClass": "toast-bottom-right", 2901 "preventDuplicates": false, 2902 "onclick": null, 2903 "showDuration": "300", 2904 "hideDuration": "1000", 2905 "timeOut": "7000", 2906 "extendedTimeOut": "1000", 2907 "showEasing": "swing", 2908 "hideEasing": "linear", 2909 "showMethod": "fadeIn", 2910 "hideMethod": "fadeOut" 2911 } 2912 let msg = '<small><i>'+ moment(new Date()).format('DD.MM.YYYY HH:mm') +' Uhr</i></small></br>'; 2913 if(typeof message !== 'undefined') { 2914 msg += message; 2915 } 2916 toastr[status](msg, title); 2917 }, 2918 toastInfo : function(title, message) { 2919 this.toast('info', title, message); 2920 }, 2921 toastSuccess : function(title, message) { 2922 this.toast('success', title, message); 2923 }, 2924 toastError : function(title, message) { 2925 this.toast('error', title, message); 2926 }, 2927 uniDecimalToTime : function(val) { 2928 let str = String(val); 2929 if(str.includes('.')) { 2930 let h = str.split('.')[0]; 2931 let m = str.split('.')[1]; 2932 if(h.length === 1) { 2933 h = '0' + h; 2934 } 2935 if(m.length === 1) { 2936 m = m + '0'; 2937 } 2938 return `${h}:${m}`; 2939 } else if(str.includes(',')) { 2940 let h = str.split(',')[0]; 2941 let m = str.split(',')[1]; 2942 if(h.length === 1) { 2943 h = '0' + h; 2944 } 2945 if(m.length === 1) { 2946 m = m + '0'; 2947 } 2948 return `${h}:${m}`; 2949 } else { 2950 let h = str; 2951 if(h.length === 1) { 2952 h = '0' + h; 2953 } 2954 return `${h}:00`; 2955 } 2956 }, 2957 loadUserData: function(handler) { 2958 var formData = new FormData(); 2959 formData.append('get_user_data', 'get_user_data'); 2960 formData.append('post_id', this.post_id); 2961 formData.append('nonce', this.nonce); 2962 this.$http.post(this.action, formData).then(function(res) { 2963 let json = JSON.parse(res.bodyText); 2964 handler(json); 2965 }, function(res) { 2966 console.log('err'); 2967 // this.content = 'error'; 2968 }); 2969 }, 2970 downloadFile: function(guid, fileName, type, successCallback, errorCallback, controller = 'file') { 2971 let action = 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-download-center/inc/forms/UniVueDownloadCenterSingleItem.php'; 2972 var formData = new FormData(); 2973 formData.append('post_id', 479429); 2974 formData.append('nonce', '00c8fe6d13'); 2975 formData.append('guid', guid); 2976 formData.append('fileName', fileName); 2977 formData.append('type', type); 2978 formData.append('controller', controller); 2979 2980 this.$http.post(action, formData).then(function(res) { 2981 if(res == null || res.body == '') { 2982 if(typeof errorCallback !== 'undefined') { 2983 errorCallback(res); 2984 } 2985 } else { 2986 let binaryString = window.atob(res.data); 2987 let binaryLen = binaryString.length; 2988 let bytes = new Uint8Array(binaryLen); 2989 for (let i = 0; i < binaryLen; i++) { 2990 let ascii = binaryString.charCodeAt(i); 2991 bytes[i] = ascii; 2992 } 2993 const blob = new Blob([bytes], {type: type}); 2994 const link = document.createElement('a'); 2995 link.href = URL.createObjectURL(blob); 2996 link.download = fileName; 2997 link.click(); 2998 URL.revokeObjectURL(link.href); 2999 if(typeof successCallback !== 'undefined') { 3000 successCallback(res); 3001 } 3002 } 3003 }).catch(console.error); 3004 },
3005 initUnsavedChanges(formIdWrapper) { 3006 setTimeout(function() { 3007 const div = document.getElementById(formIdWrapper); 3008 if(div !== null) { 3009 const self = this; 3010 div.querySelectorAll(`input, select, textarea`).forEach(el => { 3011 el.addEventListener("input", () => { 3012 __uniHasUnsavedChanges = true; 3013 }); 3014 3015 // für select / checkbox / radio zuverlässiger 3016 el.addEventListener("change", () => { 3017 __uniHasUnsavedChanges = true; 3018 }); 3019 }); 3020 } 3021 }, 2000); 3022 3023 }, 3024 resetUnsavedChanges() { 3025 __uniHasUnsavedChanges = false; 3026 }, 3027 clearUnsavedChanges() { 3028 this.resetUnsavedChanges(); 3029 } 3030 } 3031 }); 3032 </script>
3032 3033
3033<script> 3034 Vue.prototype.$openStreetMap = new Vue({ 3035 data: function() { 3036 return { 3037 done: false, 3038 } 3039 }, 3040 methods: { 3041 addBorlabsEventListener() { 3042 3043 window.addEventListener('borlabs-cookie-after-init', () => { 3044 3045 if(this.checkConsent()) { 3046 this.$eventBus.$on('ready_for_leaflet', function() { 3047 this.createMapIfConsent(); 3048 }.bind(this)); 3049 } else { 3050 window.addEventListener('borlabs-cookie-consent-saved', () => { 3051 this.$eventBus.$on('ready_for_leaflet', function() { 3052 this.createMapIfConsent(); 3053 }.bind(this)); 3054 }); 3055 } 3056 return false; 3057 }); 3058 }, 3059 createMapIfConsent() { 3060 if(!window.BorlabsCookie) { 3061 console.log('h') 3062 // this.$eventBus.$emit('load_osm_leaflet'); 3063 return true; 3064 } 3065 if(this.checkConsent()) { 3066 this.unblockOpenStreetMap(); 3067 if(!this.done) { 3068 this.$eventBus.$emit('load_osm_leaflet'); 3069 this.done = true; 3070 } 3071 return true; 3072 } 3073 return false; 3074 }, 3075 setConsent() { 3076 if(!window.BorlabsCookie) { 3077 this.$eventBus.$emit('load_osm_leaflet'); 3078 return true; 3079 } 3080 window.BorlabsCookie.Consents.addConsent('open-street-map','external-media'); 3081 if(this.checkConsent()) { 3082 this.unblockOpenStreetMap(); 3083 if(!this.done) { 3084 this.$eventBus.$emit('load_osm_leaflet'); 3085 this.done = true; 3086 } 3087 return true; 3088 } 3089 }, 3090 checkConsent() { 3091 3092 return window.BorlabsCookie.Consents.hasConsent('open-street-map','external-media'); 3093 }, 3094 unblockOpenStreetMap() { 3095 window.BorlabsCookie.Unblock.unblockScriptBlockerId('open-street-map-leaflet-map'); 3096 window.BorlabsCookie.Unblock.unblockStyleBlockerId('open-street-map-leaflet-map'); 3097 }, 3098 } 3099 }); 3100 </script>
3100 3101
3101<script> 3102 Vue.prototype.$form = new Vue({ 3103 data: function() { 3104 return { 3105 date_names: ["wfvar_geburtstag","wfvar_geburtsdatum","wfvar_gebdat","wfvar_gebdatum","hwkgop_geburtsname"], 3106 types: { 3107 file: { 3108 /** @var {int} */ 3109 maxFileSizeDefault: 5000000, 3110 /** @var {object} */ 3111 acceptedMediaTypesDefault: JSON.parse('{"application\/pdf":{"type":"application","subtype":"pdf","file_extensions":[".pdf"]},"image\/jpeg":{"type":"image","subtype":"jpeg","file_extensions":[".jpeg",".jpg"]},"image\/png":{"type":"image","subtype":"pdf","file_extensions":[".png"]}}'), 3112 }, 3113 }, 3114 } 3115 }, 3116 computed: { 3117 /** 3118 * 3119 * 3120 * @return {object} 3121 */ 3122 acceptedMediaTypesDefaultMap() { 3123 let acceptedMediaTypesDefaultMap = {}; 3124 3125 if(this.types.file.acceptedMediaTypesDefault) { 3126 Object.entries(this.types.file.acceptedMediaTypesDefault).forEach(([key, val]) => { 3127 acceptedMediaTypesDefaultMap[key] = val.file_extensions; 3128 }); 3129 } 3130 3131 return acceptedMediaTypesDefaultMap; 3132 } 3133 }, 3134 methods: { 3135 ensureInput: function(inputs, logInvalidFields = false) { 3136 let success = true; 3137 3138 for(let inp in inputs) { 3139 let input = inputs[inp]; 3140 input.invalid = false; 3141 3142 if(input.type === 'hidden') { continue; } 3143 if(input.readonly) { continue; } 3144 if(input.type === 'file' && !input.hidden) { 3145 /** @var {File} */ 3146 let inputFile = this.getFile(input); 3147 3148 // test if file not exists but required 3149 if(!inputFile) { 3150 if(input.required) { 3151 input.invalid = true; 3152 success = false; 3153 } 3154 3155 continue; 3156 } 3157 3158 // test if file-size too large 3159 if(inputFile.size > this.types.file.maxFileSizeDefault) { 3160 input.invalid = true; 3161 input.invalidationMessage = `Die maximal erlaubte Dateigröße beträgt: 5MB` 3162 success = false; 3163 3164 continue; 3165 } 3166 3167 let acceptedMediaTypes = {}; 3168 3169 if(input.accept?.length > 1) { 3170 let accept = []; 3171 3172 if(typeof input.accept === 'string') { 3173 accept = input.accept.split(','); 3174 } 3175 else if(input.accept instanceof Array) { 3176 accept = input.accept; 3177 } 3178 3179 accept = accept.map((item) => item.trim()); 3180 3181 acceptedMediaTypes = this.parseFileAccept(accept); 3182 } 3183 else { 3184 acceptedMediaTypes = this.acceptedMediaTypesDefaultMap; 3185 } 3186 3187 //console.debug(Object.keys(acceptedMediaTypes)); 3188 //console.debug(Object.values(acceptedMediaTypes).flat()); 3189 3190 // get input-file-extension 3191 const parts = inputFile.name.split('.'); 3192 //console.debug(parts); 3193 const inputFileExt = ('.' + parts[parts.length - 1]).trim().toLowerCase(); 3194 //console.debug(inputFileExt); 3195 3196 // test if file-media-type not allowed (mime-type) 3197 const acceptedMimeTypes = Object.keys(acceptedMediaTypes); 3198 if(inputFile.type && inputFile.type !== '' && !acceptedMimeTypes.includes(inputFile.type)) { 3199 console.error(`Error: MIME-Type "${inputFile.type}" not accepted.`); 3200 input.invalid = true; 3201 success = false; 3202 3203 continue; 3204 } 3205 3206 // test if file-media-type not allowed (file-extension) 3207 const acceptedFileExtensions = Object.values(acceptedMediaTypes).flat(); 3208 if(inputFileExt && !acceptedFileExtensions.includes(inputFileExt)) { 3209 console.error(`Error: File-Extensions "${inputFileExt}" not accepted.`); 3210 input.invalid = true; 3211 success = false; 3212 3213 continue; 3214 } 3215 3216 //if((input.required && !length) || (length && (typeof input.accept === 'string') && !input.accept.includes(fileInputs[0].files[0].type))) { 3217 // input.invalid = true; 3218 // success = false; 3219 //} 3220 } 3221 else if((input.type === 'file_storage') && input.required && input.value === '' && !input.hidden) { 3222 input.invalid = true; 3223 success = false; 3224 } 3225 else if((input.type === 'email') && !(input.value === null || input.value === '' || (/^[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(input.value)))) { 3226 input.invalid = true; 3227 success = false; 3228 } 3229 else if(input.type === 'date') { 3230 // console.log(input.min); 3231 // console.log(moment(input.value, 'YYYY-MM-DD')); 3232 // console.log(moment(input.min, 'YYYY-MM-DD')); 3233 // console.log(moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.min, 'YYYY-MM-DD'))); 3234 // console.log(input.max); 3235 // console.log(moment(input.value, 'YYYY-MM-DD')); 3236 // console.log(moment(input.max, 'YYYY-MM-DD')); 3237 // console.log(moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.max, 'YYYY-MM-DD'))); 3238 if(((this.date_names.includes(input.name)) && (new Date(input.value) >= new Date())) || // e.g. birth date cant be in the future 3239 (input.min && moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.min, 'YYYY-MM-DD'))) || 3240 (input.max && moment(input.value, 'YYYY-MM-DD').isAfter(moment(input.max, 'YYYY-MM-DD')))) { 3241 input.invalid = true; 3242 success = false; 3243 } 3244 if(new Date(input.value) < new Date('1800-01-01')) { 3245 input.invalid = true; 3246 success = false; 3247 } 3248 if(input.required && !input.hidden && !input.value) { 3249 input.invalid = true; 3250 success = false; 3251 } 3252 // commented out because of other date-formats that are longer than 10 chars and often not user input (HTML-Element ) 3253 //if(input.value.length > 10) { 3254 // input.invalid = true; 3255 // success = false; 3256 //} 3257 } 3258 else if(input.type === 'termin') { 3259 input.ft_invalid = false; 3260 input.tt_invalid = false; 3261 if(((this.date_names.includes(input.name)) && (new Date(input.value) >= new Date())) || // e.g. birth date cant be in the future 3262 (input.min && moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.min, 'YYYY-MM-DD'))) || 3263 (input.max && moment(input.value, 'YYYY-MM-DD').isAfter(moment(input.max, 'YYYY-MM-DD')))) { 3264 input.invalid = true; 3265 success = false; 3266 } 3267 if(new Date(input.value) < new Date('1800-01-01')) { 3268 input.invalid = true; 3269 success = false; 3270 } 3271 if(input.required && !input.hidden && !input.value) { 3272 input.invalid = true; 3273 success = false; 3274 } 3275 if(input.ft_required && !input.hidden && !input.ft) { 3276 input.ft_invalid = true; 3277 success = false; 3278 } 3279 if(input.tt_required && !input.hidden && !input.tt) { 3280 input.tt_invalid = true; 3281 success = false; 3282 } 3283 } 3284 else if(input.type === 'number') { 3285 if( 3286 ( 3287 (input.max && (Number(input.value) > Number(input.max))) 3288 || 3289 (input.min && (Number(input.value) < Number(input.min))) 3290 || 3291 input.value === '' 3292 ) && 3293 (input.value !== '' || input.required)) { 3294 input.invalid = true; 3295 success = false; 3296 } 3297 // check number format/pattern, if set 3298 if(input.format && input.pattern) { 3299 let regex = new RegExp(input.pattern); 3300 if(!regex.test(input.value)) { 3301 input.invalid = true; 3302 success = false; 3303 } 3304 } 3305 } 3306 else if((input.type === 'numeric') && !(input.value === null || /^\d*$/.test(input.value))) { // e.g. for telephone numbers 3307 input.invalid = true; 3308 success = false; 3309 } 3310 else if((input.type === 'plz') && !(input.value === null || input.value === '' || /^[0-9A-Z -]{4,10}$/.test(input.value))) { 3311 input.invalid = true; 3312 success = false; 3313 } 3314 else if((input.type === 'phone_number_apo_berlin') && !(input.value === null || input.value === '' || /^\+[1-9][0-9]{0,3} [1-9][0-9]* [1-9][0-9]*(\-[0-9]+)?$/.test(input.value))) { 3315 input.invalid = true; 3316 success = false; 3317 } 3318 else if((input.type === 'iban') && !(input.value === null || input.value === '' || uni_helper_js__validate_iban(input.value))) { 3319 input.invalid = true; 3320 success = false; 3321 } 3322 else if(input.required && (!input.hidden)) { 3323 if(input.type === 'checkbox') { 3324 let truevalue = 'J'; 3325 if(input.truevalue) { 3326 truevalue = input.truevalue; 3327 } 3328 if(input.value !== truevalue) { 3329 input.invalid = true; 3330 success = false; 3331 } 3332 } 3333 else if(input.type === 'selectable2' && ((!input.value) || (input.value === -1) || (input.value === '-1'))) { 3334 let go_on = false; 3335 for(let field in input.option_fields) { 3336 if(input.option_fields[field] === 'J') { 3337 go_on = true; 3338 input.invalid = false; 3339 break; 3340 } 3341 } 3342 if(!go_on) { 3343 input.invalid = true; 3344 success = false; 3345 } 3346 } 3347 else if((input.type === 'select' || input.type === 'select2') && (input.value === -1 || input.value === '-1' || input.value === '__null__' || input.value === null || input.value.length === 0 )) { 3348 input.invalid = true; 3349 success = false; 3350 } 3351 else if((input.type === 'checkboxgroup') && (!input.value || input.value.length === 0 )) { 3352 input.invalid = true; 3353 success = false; 3354 } 3355 else if((input.type === 'pruefberufe')) { 3356 if(Object.keys(input.option_fields).length === 0) { 3357 input.invalid = true; 3358 success = false; 3359 } 3360 } 3361 else if((input.type === 'berufe')) { 3362 if(Object.keys(input.option_fields).length === 0) { 3363 input.invalid = true; 3364 success = false; 3365 } 3366 } 3367 else if((input.type === 'beruf_fachrichtung')) { 3368 if(Object.keys(input.option_fields).length === 0) { 3369 input.invalid = true; 3370
3370 success = false; 3371 } 3372 } 3373 else if((input.type === 'beruf_fachrichtung_vue_lvt')) { 3374 if(Object.keys(input.option_fields).length === 0) { 3375 input.invalid = true; 3376 success = false; 3377 } else { 3378 if(input.option_fields.l_aberuf === '-1' || input.option_fields.l_fachr === '-1') { 3379 input.invalid = true; 3380 success = false; 3381 } 3382 } 3383 } 3384 else if((!input.value) && (input.value !== 0)) { 3385 input.invalid = true; 3386 success = false; 3387 } 3388 } 3389 if((input.type === 'text' || input.type === 'textarea' || input.type === 'wp_editor' ) && input.max) { 3390 if(input.value) { 3391 if(input.value.length > input.max) { 3392 input.invalid = true; 3393 success = false; 3394 } 3395 } 3396 } 3397 // if(input.minlen && Number(input.minlen) > 0) { 3398 // valuelen = String(input.value).length; 3399 // if(valuelen < Number(input.minlen)) { 3400 // input.invalid = true; 3401 // success = false; 3402 // } 3403 // } else if(input.maxlen && Number(input.maxlen) > 0) { 3404 // valuelen = String(input.value).length; 3405 // if(valuelen > Number(input.maxlen)) { 3406 // input.invalid = true; 3407 // success = false; 3408 // } 3409 // } 3410 3411 //if(input.invalid && logInvalidFields && //) { 3412 // console.log(input); 3413 //} 3414 } 3415 3416 let rtnObj = {}; 3417 rtnObj.success = success; 3418 rtnObj.inputs = inputs; 3419 3420 //for(let inp in inputs) { 3421 // let input = inputs[inp]; 3422 // if(input.invalid === true) { 3423 // console.log(input); 3424 // } 3425 //} 3426 3427 return rtnObj; 3428 }, 3429 postData: function(action, formData) { 3430 let promise = new Promise(function(res) { 3431 this.$http.post(action, 3432 formData) 3433 .then( function(response) { 3434 var data = response.data; 3435 res({ success:true, data: data }); 3436 }) 3437 .catch( function(e) { 3438 res({ success:false, data: e }); 3439 }); 3440 }.bind(this)); 3441 return promise; 3442 }, 3443 /** 3444 * Do not use this method. 3445 * Use $this.uniplus.apiRequest instead. 3446 * 3447 * @param successHandler 3448 * @param errorHandler 3449 * @param action 3450 * @param data 3451 */ 3452 wpApiRequest(successHandler, errorHandler, action, data = {}) { 3453 let formData = new FormData(); 3454 if(data instanceof FormData) { 3455 formData = data; 3456 } else { 3457 formData = this.$form.createFormData(this.inputs, this.post_id, this.nonce); 3458 if(data) { 3459 for(const formDataKey of Object.keys(data)) { 3460 formData.append(formDataKey, data[formDataKey]); 3461 } 3462 } 3463 } 3464 this.$http.post(action, formData, 3465 { headers: {'X-WP-Nonce': '3fb8454cb6'} }) 3466 .then(async function(response) { 3467 response.json().then(async json => { 3468 if(json.status === 'success') { 3469 successHandler(json); 3470 } else { 3471 errorHandler(json); 3472 } 3473 }); 3474 }.bind(this), function(reason) { 3475 errorHandler(reason); 3476 }.bind(this)); 3477 }, 3478 getInputClass: function(input) { 3479 if(input.hidden || input.type === 'hidden') { return ''; } 3480 if(input.type === 'hr') { return 'col-xs-12 col-12'; } 3481 return input.width ? 3482 'col-xs-12 col-12 col-sm-' + 3483 input.width + 3484 ' form-group has-feedback' + 3485 (input.inputclass ? 3486 ' ' + 3487 input.inputclass 3488 : '') 3489 : ''; 3490 }, 3491 createFormTypeDesc: function(inputs) { 3492 var types = {}; 3493 for (var input_key in inputs) { 3494 let input = inputs[input_key]; 3495 types[input_key] = { 3496 type: input.type 3497 }; 3498 } 3499 return types; 3500 }, 3501 formatDate(date, format = 'DD.MM.YYYY') { 3502 var rtnDate = date; 3503 var momentDate = moment(new Date(date)); 3504 if (momentDate.isValid()) { 3505 rtnDate = momentDate.format(format); 3506 } 3507 return rtnDate; 3508 }, 3509 createFormData: function(inputs, post_id, nonce, fix_dates, save_empty_fields = false) { 3510 /* Never set save_empty_fields = true when the formData are to be sent to the Middleware! 3511 * This is only meant for saving the formData, e.g. in a custom post type. 3512 */ 3513 var formData = new FormData(); 3514 post_id = (typeof post_id !== 'undefined') ? post_id : false; 3515 nonce = (typeof nonce !== 'undefined') ? nonce : false; 3516 fix_dates = (typeof fix_dates !== 'undefined') ? fix_dates : false; 3517 if(post_id) { 3518 formData.append('post_id', post_id); 3519 } 3520 if(nonce) { 3521 formData.append('nonce', nonce); 3522 } 3523 3524 if(!inputs) { return formData; } 3525 3526 for (var input_key in inputs) { 3527 let input = inputs[input_key]; 3528 switch(input.type) { 3529 case 'headline': 3530 case 'headline2': 3531 case 'headline3': 3532 case 'headline4': 3533 case 'label': 3534 case 'small': 3535 case 'link': 3536 case 'clearfix': 3537 case 'clear': 3538 case 'callout': 3539 case 'offset': 3540 case 'hr': 3541 case 'paragraph': 3542 continue; 3543 case 'file': 3544 /** @var {File} */ 3545 let inputFile = this.getFile(input); 3546 3547 if(inputFile) { 3548 let inputFileData = { 3549 name: inputFile.name, 3550 size: inputFile.size, 3551 type: inputFile.type, 3552 } 3553 formData.append(input.name, inputFile); 3554 formData.append(input.name, JSON.stringify(inputFileData)); 3555 } 3556 break; 3557 case 'file_storage': 3558 if(input.value) { 3559 formData.append(input.name, input.value); 3560 } 3561 break; 3562 case 'select': 3563 if(input.name === 'ausbilder_berufauswahl') { 3564 formData.append(input.name, input.value); 3565 } else if(input.name === 'averh') { 3566 formData.append(input.name, input.value); 3567 } else if(input.name === 'l_mitlz') { 3568 formData.append(input.name, input.value); 3569 } else if(input.name === 'l_lehrzver') { 3570 formData.append(input.name, input.value); 3571 } else if(typeof input.value !== 'undefined' && input.value && input.value !== '-1' && input.value !== -1 && input.value !== '__null__') { 3572 formData.append(input.name, input.value); 3573 } 3574 break; 3575 case 'selectable2': 3576 case 'beruf_fachrichtung': 3577 var option_fields = input.option_fields; 3578 for(let field in option_fields) { 3579 formData.append(field, option_fields[field]); 3580 } 3581 break; 3582 case 'beruf_fachrichtung_vue_lvt': 3583 var option_fields = input.option_fields; 3584 for(let field in option_fields) { 3585 formData.append(field, option_fields[field]); 3586 } 3587 break; 3588 case 'pruefberufe': 3589 var option_fields = input.option_fields; 3590 for(let field in option_fields) { 3591 formData.append(field, option_fields[field]); 3592 } 3593 break; 3594 case 'berufe': 3595 var option_fields = input.option_fields; 3596 for(let field in option_fields) { 3597 formData.append(field, option_fields[field]); 3598 } 3599 break; 3600 case 'checkbox': 3601 if(input.checked) { 3602 formData.append(input.name, input.checked); 3603 } else { 3604 formData.append(input.name, input.value); 3605 } 3606 break; 3607 case 'checkboxgroup': 3608 if(typeof input.value === 'object' && input.value && input.value.length > 0 ) { 3609 formData.append(input.name, input.value); 3610 } 3611 break; 3612 case 'date': 3613 if(fix_dates) { 3614 if(typeof input.value !== 'undefined' && input.value && input.value !== '-1' && input.value !== -1) { 3615 // if(input.format) 3616 formData.append(input.name, input.value); 3617 } 3618 } else if(input.value !== null) { 3619 formData.append(input.name, input.value); 3620 } 3621 break; 3622 case 'number': 3623 if(typeof input.value !== 'undefined' && input.value !== '' && input.value !== null) { 3624 if(input.format && input.pattern) { 3625 let convValue = input.value.replace(/\./, ','); 3626 formData.append(input.name, convValue); 3627 } else { 3628 formData.append(input.name, input.value); 3629 } 3630 } 3631 break; 3632 case 'seminare-gaeste': 3633 let guests = []; 3634 for(const guest of input.value) { 3635 let anotherGuest = {}; 3636 for(const inputKey of Object.keys(guest)) { 3637 const input = guest[inputKey]; 3638 anotherGuest[input.name] = input.value; 3639 } 3640 guests.push(anotherGuest); 3641 } 3642 formData.append(input.name, JSON.stringify(guests)); 3643 break; 3644 case 'hidden': 3645 if(input.name === 'p_persnr' && input.value == 0) { 3646 formData.append(input.name, input.value); 3647 } else if(typeof input.value !== 'undefined' && input.value && input.value !== '-1' && input.value !== -1) { 3648 formData.append(input.name, input.value); 3649 } 3650 break; 3651 default: 3652 if(typeof input.value !== 'undefined' && input.value !== null) { 3653 if((input.value !== '' && input.value !== '-1' && input.value !== -1) || save_empty_fields) { 3654 if((input.value.constructor === Object || input.value.constructor === Ar
3654ray)) { 3655 formData.append(input.name, JSON.stringify(input.value)); 3656 } else { 3657 formData.append(input.name, input.value); 3658 } 3659 } 3660 } 3661 break; 3662 } 3663 } 3664 return formData; 3665 }, 3666 3667 // region Form-Helper--Input-Getter 3668 3669 /** 3670 * @param {object} input 3671 * 3672 * @returns {FileList|undefined} 3673 */ 3674 getFiles(input) { 3675 let inputElement; 3676 let inputFiles; 3677 3678 if(input.id) { 3679 inputElement = document.getElementById(input.id); 3680 } 3681 else if(input.name) { 3682 let inputElements = document.getElementsByName(input.name); 3683 3684 if(inputElements && inputElements.length > 0) { 3685 inputElement = inputElements[0]; 3686 } 3687 } 3688 3689 if(inputElement 3690 && inputElement instanceof HTMLInputElement 3691 && inputElement.files 3692 && inputElement.files instanceof FileList 3693 && inputElement.files.length > 0 3694 ) { 3695 inputFiles = inputElement.files; 3696 } 3697 3698 return inputFiles; 3699 }, 3700 3701 /** 3702 * @param {object} input 3703 * 3704 * @returns {File|undefined} 3705 */ 3706 getFile(input) { 3707 let inputFile; 3708 3709 let inputFiles = this.getFiles(input); 3710 3711 if(inputFiles 3712 && inputFiles instanceof FileList 3713 && inputFiles.length > 0 3714 ) { 3715 inputFile = inputFiles[0]; 3716 } 3717 3718 return inputFile; 3719 }, 3720 3721 // endregion Form-Helper--Input-Getter 3722 3723 // region Form-Helper--Input-Setter 3724 3725 setValue : function(input, value) { 3726 if(input !== undefined) { 3727 input.value = value; 3728 } 3729 }, 3730 setHidden : function(input, value) { 3731 if(input !== undefined) { 3732 input.hidden = value; 3733 } 3734 }, 3735 setRequired : function(input, value) { 3736 if(input !== undefined) { 3737 input.required = value; 3738 } 3739 }, 3740 setReadonly : function(input, value) { 3741 if(input !== undefined) { 3742 input.readonly = value; 3743 } 3744 }, 3745 setDisabled : function(input, value) { 3746 if(input !== undefined) { 3747 input.disabled = value; 3748 } 3749 }, 3750 setOptions : function(input, value) { 3751 if(input !== undefined) { 3752 input.options = value; 3753 } 3754 }, 3755 setWidth : function(input, value) { 3756 if(input !== undefined) { 3757 input.width = value; 3758 } 3759 }, 3760 setType : function(input, value) { 3761 if(input !== undefined) { 3762 input.type = value; 3763 } 3764 }, 3765 3766 // endregion Form-Helper--Input-Setter 3767 3768 submitFileStorage : function(input) { 3769 3770 }, 3771 reset : function(input) { 3772 if(input !== undefined && 'initial_value' in input) { 3773 input.value = input.initial_value; 3774 } 3775 }, 3776 /** 3777 * parses/filters accept attribut of input type 'file' against defaults 3778 * 3779 * @param {array} accept 3780 * 3781 * @return {object} 3782 */ 3783 parseFileAccept(accept) { 3784 let parsedAccept = {}; 3785 3786 const regex = /^(image|application)\/\*$/; 3787 3788 if(Object.keys(this.acceptedMediaTypesDefaultMap).length > 0) { 3789 accept.forEach((acceptItem) => { 3790 3791 let acceptItemTopLevel = false; 3792 if(regex.test(acceptItem)) { 3793 acceptItemTopLevel = acceptItem.split('/')[0]; 3794 } 3795 3796 Object.entries(this.acceptedMediaTypesDefaultMap).forEac
3796h(([k,v]) => { 3797 // check mime-type-top-level 3798 if(acceptItemTopLevel && k.startsWith(acceptItemTopLevel + '/')) { 3799 if(!Object.hasOwn(parsedAccept, k)) { 3800 parsedAccept[k] = v; 3801 } 3802 // check mime-type 3803 } else if(acceptItem === k) { 3804 if(!Object.hasOwn(parsedAccept, k)) { 3805 parsedAccept[acceptItem] = v; 3806 } 3807 // check file-extension 3808 } else if(v.includes(acceptItem)) { 3809 if(!Object.hasOwn(parsedAccept, k) || !(parsedAccept[k] instanceof Array)) { 3810 parsedAccept[k] = []; 3811 } 3812 parsedAccept[k].push(acceptItem); 3813 } 3814 }); 3815 }); 3816 } 3817 3818 return parsedAccept; 3819 } 3820 }, 3821 }); 3822 </script>
3822 3823
3823<script> 3824 3825 function scrollToTop() { 3826 window.scrollTo({ top: 0, left: 0, behavior: 'smooth' }); 3827 } 3828 3829 function scrollToElement(elementId, offset = 0) { 3830 const element = document.getElementById(elementId); 3831 if(typeof element !== "undefined") { 3832 3833 const y = element.getBoundingClientRect().top + window.scrollY; 3834 //console.log(y + offset); 3835 window.scroll({ 3836 top: y + offset, 3837 behavior: 'smooth' 3838 }); 3839 } 3840 } 3841 3842 function openInNewTab(url) { 3843 window.open(url, '_blank').focus(); 3844 } 3845 3846 if(!!document.getElementById("vue_app")) { 3847 3848 Vue.prototype.$window = window; 3849 3850 Vue.prototype.$eventBus = new Vue(); 3851 3852 Vue.prototype.$storage = new Vue({ 3853 data: function() { 3854 return { 3855 cachePrefix: 'unicache_', 3856 defaultCacheTimeoutInSeconds: 60 * 60 3857 } 3858 }, 3859 methods: { 3860 cacheKey(key) { 3861 return `${this.cachePrefix}${key}`; 3862 }, 3863 getCache(_key, fallbackHandler, _cacheTimeoutInSeconds = null) { 3864 const timeout = _cacheTimeoutInSeconds ? _cacheTimeoutInSeconds : this.defaultCacheTimeoutInSeconds; 3865 const key = this.cacheKey(_key); 3866 const cData = localStorage.getItem(key); 3867 if(cData !== null) { 3868 const cDataObj = JSON.parse(cData); 3869 const now = Math.round((new Date()).getTime() / 1000); 3870 if(cDataObj.time + timeout > now) { 3871 return cDataObj.data; 3872 } 3873 } 3874 const data = fallbackHandler(key); 3875 this.setCache(_key, data); 3876 return data; 3877 }, 3878 setCache(_key, data) { 3879 const key = this.cacheKey(_key); 3880 const now = Math.round((new Date()).getTime() / 1000); 3881 localStorage.setItem(key, JSON.stringify({ 3882 time: now, 3883 data: data 3884 })); 3885 }, 3886 unsetCache(_key) { 3887 const key = this.cacheKey(_key); 3888 localStorage.removeItem(key); 3889 }, 3890 clear() { 3891 localStorage.Clear(); 3892 } 3893 } 3894 }); 3895 3896 Vue.prototype.getTheId = function(input) { 3897 if(!input.id) { 3898 input.id = 'input-' + Math.floor(Math.random() * 999999); 3899 } 3900 3901 return input.id; 3902 3903 } 3904 3905 3906 Vue.prototype.$gematik = new Vue({ 3907 data: function() { 3908 return { 3909 3910 } 3911 }, 3912 methods: { 3913 getInputClass : function(input) { 3914 if(input.hidden || input.type == 'hidden') { return ''; } 3915 return input.width ? 'col-xs-12 col-12 col-sm-' + input.width + ' form-group has-feedback' : ''; 3916 }, 3917 getPrefillData : function(korrnr, token, atyp){ 3918 var action = 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-gematik/inc/forms/UniGematikValidate.php'; 3919 var formData = new FormData(); 3920 formData.append('korrnr', korrnr); 3921 formData.append('token', token); 3922 formData.append('atyp', atyp); 3923 3924 return this.$form.postData(action, formData); 3925 }, 3926 setPrefillData : function(inputs, data) { 3927 //PersonenDaten 3928 var person_data = data['person_data']; 3929 inputs = this.prefill(inputs, person_data); 3930 3931 // Betriebsdaten 3932 if(data['betriebs_data'].length > 0) { 3933 var firstApotheke = data['betriebs_data'][0]; 3934 inputs = this.prefill(inputs, firstApotheke, 'inst_'); 3935 } 3936
3937 return inputs; 3938 }, 3939 prefill : function(inputs, data, prefix) { 3940 prefix = prefix ? prefix : ''; 3941 for(var item in data) { 3942 if(inputs[prefix+item]) { 3943 if(inputs[prefix+item].type == 'date') { 3944 if(data[item]) { 3945 var gebdatSplitted = data[item].split('.', 3); 3946 var theGebdat = gebdatSplitted[2] + '-' + gebdatSplitted[1] + '-' + gebdatSplitted[0]; 3947 // inputs[prefix+item].value = moment(theGebdat).format('YYYY-MM-DD'); 3948 inputs[prefix+item].value = theGebdat; 3949 } else { 3950 if(typeof inputs[prefix+item].readonly !== 'undefined') { 3951 delete inputs[prefix+item].readonly 3952 } 3953 } 3954 } else { 3955 inputs[prefix+item].value = data[item]; 3956 3957 } 3958 } 3959 } 3960 return inputs; 3961 }, 3962 prefillInputField : function(inputs, name, data){ 3963 inputs[name].value = data; 3964 return inputs; 3965 }, 3966 substitution : function(inputs, body) { 3967 for(var input in inputs ) { 3968 if(inputs[input].type == 'select') { 3969 var options = inputs[input].options; 3970 for(var option in options){ 3971 if(options[option].value == inputs[input].value){ 3972 body = body.replace('__'+inputs[input].name+'__', options[option].name); 3973 } 3974 } 3975 } else { 3976 body = body.replace('__'+inputs[input].name+'__', inputs[input].value); 3977 } 3978 } 3979 return body; 3980 }, 3981 resetApotheke : function(inputs) { 3982 items = [ 'inst_name', 'inst_street', 'inst_zusatztext', 'inst_zip', 'inst_city' ]; 3983 items.forEach( function(item) { 3984 inputs[item].value = ''; 3985 }); 3986 return inputs; 3987 } 3988 } 3989 3990}); 3991 var router = new VueRouter({ 3992 mode: 'history', 3993 routes: [] 3994 }); 3995 new Vue({ 3996 router: router, 3997 el: '#vue_app', 3998 methods: { 3999 createFormData: function(inputs) { 4000 console.log('createFormData have been moved to $form.createFormData'); 4001 return this.$form.createFormData(inputs); 4002 } 4003 } 4004 }); 4005 } 4006 </script>
4006 4007 4008 </div> <!-- <div class="hidden-print"> --> 4009 </body> 4010</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.