diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss deleted file mode 100644 index 678249df..00000000 --- a/assets/scss/_styles_project.scss +++ /dev/null @@ -1,653 +0,0 @@ -@import "./_variables_project.scss"; - -body { - line-height: 1.7em; -} - -.award { - width: 250px; - transform: rotate(0deg) translate(0,-50pt); - align: left; -} - -.td-navbar .navbar-brand svg { - transform: scale(1.5); - margin-right: 1.5rem; -} - -.td-navbar .navbar-brand .text-uppercase { - text-transform: none !important; - // font-weight: normal !important; -} - -.navbar-brand > .text-uppercase { - font-weight: 700; -} - -.td-content { - max-width: 60rem; -} - -.btn { - border-radius: 0.2rem; - - &-lg { - border-radius: 0.4rem; - } - - &-sm { - border-radius: 0.2rem; - } -} - -.btn-outline-light:hover { - background-color: #f1f1f6; - border-color: #f1f1f6; -} - -.youtube-video-wrapper { - display: block; - position: relative; - padding-bottom: 56.25%; - height: 0; - overflow: hidden; - width: 100%; - background: #000; - margin: 3rem 0; - - iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 100; - background: transparent; - } - - img { - object-fit: cover; - display: block; - left: 0; - bottom: 0; - margin: 0 auto; - max-width: 100%; - width: 100%; - position: absolute; - right: 0; - top: 0; - border: none; - height: auto; - cursor: pointer; - -webkit-transition: 0.4s all; - -moz-transition: 0.4s all; - transition: 0.4s all; - } - - &:hover img { - -webkit-filter: brightness(75%); - } - - .play { - height: 72px; - width: 72px; - left: 50%; - top: 50%; - margin-left: -36px; - margin-top: -36px; - position: absolute; - background: url("../images/play.png") no-repeat; - z-index: 1; - cursor: pointer; - } - - .comment { - left: 50%; - top: 50%; - transform: translate(-50%, 50px); - position: absolute; - z-index: 1; - cursor: pointer; - color: white; - } -} - -.ideal-image-slider { - max-width: 60rem; - margin: 2rem 0; -} - -.slider.small { - max-width: 30rem; -} - -.print-only .noprint, -.noprint .print-only { - display: none; -} - -pre { - max-width: 100%; -} - - -@media print { - html, - body { - font-size: 10pt; - min-width: 0 !important; - } - - .noprint { - display: none; - } - - .td-main main { - max-width: 100% !important; - flex: 1 1 0; - } - - .td-content { - max-width: 100%; - // columns: 2; - column-gap: 4rem; - font-size: 1rem; - - p, ul, ol, .alert { - line-height: 1.7em; - font-size: 1em; - } - - > h1, - > h2, - > h3, - > p, - > ul, - > ol, - > .alert, - > .highlight, - > .lead, - > dl dd, - > pre, - .footnotes, - > blockquote { - // column-span: all; - max-width: 100%; - } - - li { - margin-bottom: 0 !important; - } - - h2 { - font-size: 1.6em; - column-span: all; - // page-break-before: always; - } - h3 { - font-size: 1.3em; - } - - .print-figures { - counter-reset: step-figure; - margin: 1rem 0; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0.5rem; - } - - figure, .card { - // display: block; - position: relative; - // width: calc(50% - 0.25rem - 2px); - vertical-align: top; - margin: 0; - padding: 0 !important; - border: 1px solid black; - border-radius: 2mm; - overflow: hidden; - - break-inside: avoid; - counter-increment: step-figure; - figcaption, .card-body { - position: relative; - margin: 0; - padding: 0.2rem 0.5rem !important; - border-top: inherit; - } - } - - // .card { - // padding: 0 !important; - // border: 1px solid black; - // border-radius: 2mm; - // break-inside: avoid; - // overflow: hidden; - // - // .card-body { - // - // } - // } - - .section-index, - // "Last changed" row - > .text-muted:last-child { - display: none; - } - - // Uncomment this to print without figures and images - // .card, .print-figures, img { - // display: none; - // } - - .alert { - border-width: 2px; - break-inside: avoid; - } - - > table { - margin: 1rem auto; - break-inside: avoid; - - td, thead th { - border: 1px solid black; - padding: 0.25rem 0.75rem; - } - } - } -} - -@media screen { - .print-only { - display: none; - } -} - -#td-cover-block-0 { - background-position: center; -} - -.container { - figure { - img { - max-width: 100%; - } - } -} - -.homepage-container { - font-size: 13pt; -} - -.lead { - font-weight: 500; -} - -.donations { - background: white; - color: #212730; - border: 1px solid #ddd; - border-radius: 4px; - padding: 1rem 2rem; - display: inline-block; - margin: 1rem auto; -} - -.accordion .card-header { - cursor: pointer; - transition: background 0.1s; - - &:hover { - background-color: #fff; - } -} - -.alert.alert-info, -.alert.alert-warning, -.alert.alert-success { - border: 0; - border-radius: 4px; - font-size: 1rem; - - .alert-heading { - font-size: 1.2rem; - } - - @media print { - border-width: 2px; - border-style: solid; - } -} - -.alert.alert-info { - background: #e1f5fe; - border-color: #1e88e5; - - .alert-heading { - color: #1e88e5; - } -} - -.alert.alert-warning { - background: #ffe7e4; - border-color: #ed6a5a; - - .alert-heading { - color: #ed6a5a; - } -} - -.alert.alert-success { - background: #ccefc6; - border-color: #199f67; - - .alert-heading { - color: #199f67; - } -} - - -.alert > ul:last-child, -.alert > p:last-child { - margin-bottom: 0; -} - -.nav-item.dropdown .dropdown-menu { - margin-top: -1px; -} - -.nav-item.dropdown:hover .dropdown-menu { - display: block; -} - -.dropdown-item { - padding-left: 1rem; - - &:active, - &.active { - background: none; - font-weight: bold; - } -} - -.td-content, -.content { - blockquote { - padding: 0.5rem 1.5rem; - margin-left: 1rem; - border-left: 4px solid #ddd; - color: #777; - } -} - -.td-sidebar-nav { - padding: 1rem; - font-family: "Open Sans"; - - ul { - list-style: none; - padding: 0; - margin: 0; - - ul ul { - padding-left: 1.5rem; - } - - li { - margin-bottom: 2px; - } - } - - & > ul > li { - margin-bottom: 1rem; - - & > a { - font-weight: 700; - text-transform: uppercase; - } - } - - a { - display: block; - color: inherit; - border-radius: 3px; - padding: 0.25rem 0.75rem; - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - - &:hover { - color: inherit; - background: #f6f6f6; - } - - &.current-page { - font-weight: 700; - color: $link-color; - } - } -} - -@media (min-width: 768px) { - - .td-page-meta { - top: 4rem; - position: sticky; - } - .td-sidebar-nav { - // max-height: calc(100vh - 64px); - max-height: none; - overflow: initial; - } - - .td-sidebar__inner { - height: auto; - min-height: calc(100vh - 128px); - } - - .td-docs .td-main { - display: flex; - - .td-sidebar { - max-width: 20rem; - min-width: 15rem; - flex: 1 1 0; - margin-right: 2rem; - } - - .td-toc { - order:2; - .td-toc { - top: 4rem; - position: sticky; - border-left: solid; - border-left-width: 1pt; - border-left-color: rgb(222, 226, 230); - max-width: 20rem; - min-width: 12rem; - flex: 1 1 0; - margin-left: 2rem; - padding: 1rem; - line-height: 1.2; - - #TableOfContents a { - color: inherit; - &:hover { - color: #72A1E5; - } - } - - li ul { - margin-bottom: 0.5em; - } - - li li { - margin-left: 1.5em; - font-size: 0.9em; - list-style: inherit; - display: list-item; - } - li ul { - list-style: decimal; - } - } - } - - > main { - flex: 4 4 0; - } - } -} - -.feature-icon { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - font-size: 200px; - opacity: 0.06; - pointer-events: none; -} - -.feature-cell { - display: flex; - flex-direction: column; -} - -address { - padding-left: 2rem; - font-size: 1.1em; - line-height: 1.5em; - font-weight: 100; -} - -footer { - background: $primary; - color: white; - font-size: 0.8rem; - min-height: 0; - flex: 0 0 auto; - padding: 1rem 0; -} - -.footer-copyright { - line-height: 1.5em; -} - - -.print-qr-link { - border: 1px solid black; - background: white; - - display: none; - @media print { - display: flex; - } - align-items: center; - overflow: hidden; - padding: 1mm; - padding-left: 4mm; - - img { - width: 3cm; - flex: 0 0 auto; - } - - p { - flex: 1 1 0; - margin: 0; - padding: 0; - font-size: 11pt; - overflow: hidden; - word-wrap: break-word; - } - - a { - color: inherit; - display: block; - text-decoration: inherit; - font-weight: bold; - font-family: $font-family-monospace; - white-space: wrap; - letter-spacing: -0.5pt; - } -} - -@page { - size: A4 portrait; - margin: 0.6in; -} - -.td-default main section.device-types-row { - background: #F8F8F8; - padding: 0; -} - -.device-type-cell { - text-align: center; - padding-block: 4rem; - display: flex; - flex-direction: column; - - .label { - order: -2; - height: 40px; - align-self: center; - display: flex; - justify-content: center; - align-items: center; - padding: 0 1.5rem; - border-radius: 1000px; - margin-bottom: 1rem; - background: #EEE; - text-transform: uppercase; - letter-spacing: 0.7pt; - font-weight: 700; - font-size: 80%; - } - - h4 { - order: -1; - } - - &.light { - background: #FFF; - } - - img { - margin-block: 1rem; - width: 70%; - height: 200px; - object-fit: contain; - align-self: center; - } - - h4 > span { - display: block; - font-size: 120%; - opacity: 0.5; - margin-top: 0.2rem; - } - - &.construction { - .label { - background: #ffd600; - } - img { - opacity: 0.3; - } - } - - &.recommended { - .label { - background: #0029a7; - color: white; - } - } - - ul { - text-align: left; - // align-self: center; - } -} diff --git a/assets/scss/baseline.scss b/assets/scss/baseline.scss new file mode 100644 index 00000000..0dc378a9 --- /dev/null +++ b/assets/scss/baseline.scss @@ -0,0 +1,194 @@ +* { + box-sizing: border-box; +} + +html, body { + line-height: 1.7; + font-family: $font-family-base; + font-size: 12pt; + padding: 0; + margin: 0; +} + +.content-grid { + --padding-inline: 1rem; + --content-max-width: 140ch; + + display: grid; + grid-template-columns: + [full-width-start] #{"minmax(var(--padding-inline), 1fr)"} + [content-start] + #{"repeat(12, [col-start] calc(min(100% - (var(--padding-inline) * 2), var(--content-max-width)) / 12 - var(--padding-inline)) [col-end] var(--padding-inline) )"} + [content-end] + #{"minmax(var(--padding-inline), 1fr) [full-width-end]"}; +} + +.content-grid > :not(.full-width), +.full-width > :not(.full-width) { + grid-column: content; +} + +.content-grid > .full-width { + grid-column: full-width; +} + +.content-grid .content-grid { + display: grid; + grid-template-columns: inherit; +} + +a { + text-decoration: none; + + &, &:visited { + color: $link-color; + } + + &:hover { + color: lighten($link-color, 20%); + } +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 500; + line-height: 1.2em; + + &:first-child { + margin-block-start: 0; + } +} + +h1 { + font-size: 2.3rem; +} + +h2 { + font-size: 1.9rem; +} + +h3 { + font-size: 1.5rem; +} + +h4, h5, h6 { + font-weight: 700; +} +h4 { + font-size: 1.3rem; +} + +h5 { + font-size: 1.15rem; +} + +h6 { + font-size: 1rem; +} + +section { + padding-block: 4rem; + min-width: 0; +} + +figure { + text-align: center; + > a > img { + max-width: 100%; + } +} + +section.arrow { + position: relative; +} + +section.arrow::after { + --width: 60px; + --height: 45px; + + left: 50%; + margin-left: #{"calc(-1 * var(--width))"}; + bottom: #{"calc(-1 * var(--height))"}; + border-style: solid; + border-width: var(--height) var(--width) 0; + border-color: $gray transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; +} + +.docs { + .docs-footer { + font-size: $font-size-small; + } +} + +pre { + max-width: 100%; +} + +blockquote { + padding: 0.5rem 1.5rem; + margin-left: 1rem; + border-left: 4px solid #ddd; + color: #777; +} + +table { + border-collapse: collapse; + margin-block: 2rem; +} + +td, th { + padding: 0.25rem 0.5rem; + border: 1px solid $grayish; + border-width: 1px 0; + vertical-align: top; +} + +th { + text-align: left; + border-width: 2px 0; +} +tr:last-child td { + border-bottom-width: 2px; +} + +.table-wide { + overflow: auto; + + table { + width: 100%; + min-width: 60ch; + } +} + +.breadcrumb { + list-style: none; + display: flex; + flex-wrap: wrap; + padding: 0; + font-size: $font-size-small; + + li { + display: inline-block; + + &.active { + font-weight: 500; + } + + &:not(:last-child)::after { + display: inline-block; + content: '/'; + scale: 1.2; + opacity: 0.5; + margin-inline: 0.5rem; + } + } +} + +address { + padding-left: 2rem; + font-size: 1.1em; + line-height: 1.5em; + font-weight: 100; +} diff --git a/assets/scss/features.scss b/assets/scss/features.scss new file mode 100644 index 00000000..a6319369 --- /dev/null +++ b/assets/scss/features.scss @@ -0,0 +1,467 @@ +// Big intro text in a page or article + +.lead { + font-weight: 500; + font-size: 1.15rem; +} + +// Donations IBAN box + +.donations { + background: white; + color: #212730; + border: 1px solid #ddd; + border-radius: 4px; + padding: 1rem 2rem; + display: inline-block; + margin: 1rem auto; +} + +// Feature boxes + +.feature-cell { + display: flex; + flex-direction: column; + position: relative; + + .button { + margin-top: auto; + align-self: flex-start; + } + + h3 { + margin-block: 0; + } + + .inline-svg { + position: absolute; + left: 50%; + top: 50%; + translate: -50% -50%; + width: 60%; + height: auto; + opacity: 0.06; + pointer-events: none; + } +} + +// Buttons + +.button { + background: rgba(0, 0, 0, 0.02); + box-shadow: rgba(0, 0, 0, 0.2) 0 5px; + border: 1px solid rgba(0, 0, 0, 0.1); + color: $gray; + + &, &:visited { + color: $primary; + } + + &:hover { + background: white; + color: $gray; + } + + .dark &, .darkish &, .stage & { + background: rgba(255, 255, 255, 0.7); + box-shadow: rgba(0, 0, 0, 0.6) 0 5px; + &, &:visited, &:hover { + color: $primary; + } + + &:hover { + background: white; + } + } + + text-decoration: none; + padding: 0.4em 1.25em 0.3em; + border-radius: 0.25rem; + transition: all 0.25s ease-out; + font-weight: 500; + + &:hover { + transform: translateY(-3px); + } +} + +.action-buttons { + display: flex; + gap: 1em; +} + + +// Alerts + +.alert { + border: 0; + border-radius: 0.25rem; + font-size: 1rem; + padding: 1rem; + margin-block: 1rem; + + .alert-heading { + margin: 0; + margin-block-end: 0.5rem; + font-size: 1.15rem; + font-weight: 500; + } + + @media print { + border-width: 2px; + border-style: solid; + } +} + +.alert-info { + background: #e1f5fe; + border-color: #1e88e5; + + .alert-heading { + color: #1e88e5; + } +} + +.alert-warning { + background: #ffe7e4; + border-color: #ed6a5a; + + .alert-heading { + color: #ed6a5a; + } +} + +.alert-success { + background: #ccefc6; + border-color: #199f67; + + .alert-heading { + color: #199f67; + } +} + +.alert > ul:last-child, +.alert > p:last-child { + margin-bottom: 0; +} + +// Image slider + +.ideal-image-slider { + max-width: 60rem; + margin: 2rem 0; +} + +.slider.small { + max-width: 30rem; +} + +// Youtube video embed + +.youtube-video-wrapper { + display: block; + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + width: 100%; + background: #000; + margin: 1rem 0; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; + background: transparent; + } + + img { + object-fit: cover; + display: block; + left: 0; + bottom: 0; + margin: 0 auto; + max-width: 100%; + width: 100%; + position: absolute; + right: 0; + top: 0; + border: none; + height: auto; + cursor: pointer; + -webkit-transition: 0.4s all; + -moz-transition: 0.4s all; + transition: 0.4s all; + } + + &:hover img { + -webkit-filter: brightness(75%); + } + + .play { + height: 72px; + width: 72px; + left: 50%; + top: 50%; + margin-left: -36px; + margin-top: -36px; + position: absolute; + background: url("../images/play.png") no-repeat; + z-index: 1; + cursor: pointer; + } + + .comment { + left: 50%; + top: 50%; + transform: translate(-50%, 50px); + position: absolute; + z-index: 1; + cursor: pointer; + color: white; + text-align: center; + } +} + +// Main stage on home page + +.stage { + position: relative; + overflow: clip; + + &::before { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + background: $gray; + z-index: -1; + } + &::after { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + background: url('/featured-background.jpg'); + background-position: center; + background-size: cover; + z-index: -1; + + animation: stage-scroll-effect linear; + animation-timeline: view(); + animation-range: exit -60px; + } + + height: 50vh; + position: relative; + margin: 0; + + display: flex !important; + flex-direction: column; + align-items: center; + justify-content: center; + color: white; + gap: 1em; + + > h2 { + font-size: #{"min(4.5vw, 4rem)"}; + font-weight: 300; + margin: 0; + } + + > p { + font-weight: 500; + margin: 0; + font-size: 1.2rem; + } + + // Special banderole on the stage + .banderole { + display: block; + position: absolute; + left: 0; + top: 0; + z-index: 100; + width: 25ch; + padding: 0; + + > img { + width: 100%; + margin: 0; + } + } +} + +@keyframes stage-scroll-effect { + from {} + to {opacity: 0; scale: 1.2; translate: 0 20%;} +} + +// Special device variants page + +.device-types-row { + background: #F8F8F8; + padding: 0; +} + +.device-type-cell { + text-align: center; + padding-block: 4rem; + display: flex; + flex-direction: column; + + .label { + order: -2; + height: 40px; + align-self: center; + display: flex; + justify-content: center; + align-items: center; + padding: 0 1.5rem; + border-radius: 1000px; + margin-bottom: 1rem; + background: #EEE; + text-transform: uppercase; + letter-spacing: 0.7pt; + font-weight: 700; + font-size: 80%; + } + + h4 { + order: -1; + } + + &.light { + background: #FFF; + } + + img { + margin-block: 1rem; + width: 70%; + height: 200px; + object-fit: contain; + align-self: center; + } + + h4 > span { + display: block; + font-size: 120%; + opacity: 0.5; + margin-top: 0.2rem; + } + + &.construction { + .label { + background: #ffd600; + } + img { + opacity: 0.3; + } + } + + &.recommended { + .label { + background: #0029a7; + color: white; + } + } + + ul { + text-align: left; + // align-self: center; + } + + .button { + margin-top: auto; + align-self: center; + } +} + +// Resistors + +.resistor { + font-size: $font-size-small; + text-align: center; + svg { + display: block; + margin: 0 auto 0.5rem; + } +} + +// Buttons on bottom of blog entry to move around + +.blog-pager { + margin-block-start: 4rem; + font-size: 0.8rem; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; +} + +// Blog entry list + +ul.blog-posts, +ul.section-index { + list-style: none; + padding: 0; + + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + + > li { + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25rem; + padding: 1rem; + min-width: 0; + overflow: hidden; + + .date { + font-size: 1rem; + font-weight: 700; + } + + h5 { + font-size: 1.2rem; + font-weight: bold; + margin-block-start: 0; + margin-block-end: 0; + } + } +} +@media ($media-desktop) { + + ul.blog-posts, + ul.section-index { + grid-template-columns: 1fr; + } + +} + +ul.blog-posts > li > h5 > a { + color: inherit; +} + +// Icons + +.inline-svg { + display: inline-block; + height: 1rem; + aspect-ratio: 1; + translate: 0 15%; + + svg { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + } +} diff --git a/assets/scss/layout.scss b/assets/scss/layout.scss new file mode 100644 index 00000000..03b91e6b --- /dev/null +++ b/assets/scss/layout.scss @@ -0,0 +1,349 @@ +#header { + background: $gray; + color: white; + display: flex; + align-items: center; + height: 60px; + padding: 0 16px; + position: sticky; + top: 0; + z-index: 10000; + + .site-title { + color: inherit; + white-space: nowrap; + text-decoration: none; + font-weight: 500; + font-size: 1.3rem; + // text-transform: uppercase; + } + + .site-icon { + margin-right: 1rem; + display: block; + padding: 0; + + svg { + width: 50px; + height: 50px; + margin: 0; + display: block; + align-self: center; + } + } + + nav.menu { + margin-inline-start: auto; + display: flex; + align-self: stretch; + align-items: stretch; + + > ul { + list-style: none; + display: flex; + align-items: stretch; + padding: 0; + margin: 0; + + > li { + position: relative; + display: flex; + align-items: stretch; + + > a, span { + font-weight: 500; + align-self: stretch; + display: flex; + align-items: center; + padding: 0 1rem; + text-decoration: none; + color: inherit; + font-weight: 500; + font-size: 1.15rem; + cursor: pointer; + } + + > ul { + display: none; + position: absolute; + right: 0; + top: 100%; + background: $grayish; + margin: 0; + padding: 0.5rem 0; + + > li { + display: block; + white-space: nowrap; + + > a, > span { + color: inherit; + display: block; + text-decoration: none; + padding: 0.25rem 2rem 0.25rem 1rem; + + &:hover, &:focus-within { + background: rgba(255, 255, 255, 0.1); + } + } + } + } + + &:focus-within, &:hover { + > ul { + display: block; + } + + > a, span { + background: $grayish; + } + } + } + } + } +} + +nav.sidebar { + padding: 1rem; + font-family: "Open Sans"; + + ul { + list-style: none; + padding: 0; + margin: 0; + + ul ul { + padding-left: 1.5rem; + } + + li { + margin-bottom: 2px; + } + } + + & > ul > li { + margin-bottom: 1rem; + + & > a { + font-weight: 700; + text-transform: uppercase; + } + } + + a { + display: block; + color: inherit; + border-radius: 0.25rem; + padding: 0.25rem 0.75rem; + + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-decoration: none; + + &:hover { + color: inherit; + background: #f6f6f6; + } + + &.current-page { + font-weight: 700; + color: $link-color; + } + } +} + +aside.toc { + padding: 1rem; + + h6 { + margin: 0; + font-weight: 700; + text-transform: uppercase; + padding: 0.25rem 0.75rem; + line-height: inherit; + } + + ul { + padding-left: 3ch; + // margin: 0; + list-style: decimal; + } + + ul ul { + padding-left: 0; + list-style: decimal; + margin-bottom: 0.5em; + } + + li li { + margin-left: 1.5em; + font-size: 0.9em; + list-style: inherit; + display: list-item; + } +} + +footer { + background: $primary; + color: white; + font-size: $font-size-small; + min-height: 0; + flex: 0 0 auto; + padding: 1rem 0; +} + +.footer-copyright { + line-height: 1.5em; +} + +#mobile-sidebar-toggle { + display: none; +} + +@media ($media-mobile) { + #header { + position: relative; + min-width: 0; + + > nav.menu > ul { + flex-wrap: wrap-reverse; + > li { + position: initial; + + > a, > span { + font-size: $font-size-small; + white-space: nowrap; + } + + > ul { + position: absolute; + top: 100%; + left: 0; + right: 0; + bottom: initial; + } + } + } + } + + .site-title { + display: none; + } + + #header nav.menu > ul > li:first-child { + display: none; + } + + .docs { + aside.sidebar { + transition: all 0.5s; + overflow: auto; + position: absolute; + width: 100%; + background: white; + display: none; + + height: #{"calc(100vh - 100px)"}; + box-shadow: 0 10px 10px -5px rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + } + + aside.toc { + padding: 1rem; + h6 { + margin: 0; + } + } + + > main { + padding: 1rem; + } + + .mobile-sidebar-toggle-label { + background: $secondary; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding: 0 1rem; + height: 40px; + display: flex; + align-items: center; + + .inline-svg { + margin-right: 0.5rem; + height: 24px; + } + + > :last-child { display: none; } + } + + #mobile-sidebar-toggle:checked ~ { + .mobile-sidebar-toggle-label { + > :last-child { display: initial; } + > :first-child { display: none; } + } + + aside.sidebar { + display: block; + } + } + } + + ul.blog-posts { + grid-template-columns: 1fr; + } +} + +@media ($media-desktop) { + .mobile-sidebar-toggle-label { + display: none; + } + + .docs { + display: grid; + grid-column: full-width; + grid-template-columns: 20rem 1fr 20rem; + grid-template-areas: "left center right"; + gap: 2rem; + position: relative; + + aside.sidebar { + grid-area: left; + } + + aside.toc { + grid-area: right; + } + + > main { + max-width: 100ch; + min-width: 0x; + padding-bottom: 4rem; + } + } + + + .columns-2 { + > :nth-child(2n + 1) { grid-column: col-start 1 / col-end 6; } + > :nth-child(2n + 2) { grid-column: col-start 7 / col-end 12; } + } + + .columns-3 { + > :nth-child(3n + 1) { grid-column: col-start 1 / col-end 4; } + > :nth-child(3n + 2) { grid-column: col-start 5 / col-end 8; } + > :nth-child(3n + 3) { grid-column: col-start 9 / col-end 12; } + } +} + +section.dark { + background: $gray; + color: white; +} + +section.darkish { + background: $grayish; + color: white; +} + +.content-grid > section.narrow { + grid-column: col-start 3 / col-end 10; +} diff --git a/assets/scss/main.scss b/assets/scss/main.scss new file mode 100644 index 00000000..c3a2c3d6 --- /dev/null +++ b/assets/scss/main.scss @@ -0,0 +1,9 @@ +// @import "../vendor/Font-Awesome/scss/fontawesome.scss"; +// @import "../vendor/Font-Awesome/scss/solid.scss"; +// @import "../vendor/Font-Awesome/scss/brands.scss"; +// +@import "variables.scss"; +@import "baseline.scss"; +@import "layout.scss"; +@import "features.scss"; +@import "print.scss"; diff --git a/assets/scss/print.scss b/assets/scss/print.scss new file mode 100644 index 00000000..e28ba051 --- /dev/null +++ b/assets/scss/print.scss @@ -0,0 +1,180 @@ +@page { + size: A4 portrait; + margin: 0.6in; +} + +@media screen { + .print-only { + display: none; + } +} + +.print-only .noprint, +.noprint .print-only { + display: none; +} + + +@media print { + html, + body { + font-size: 10pt; + min-width: 0 !important; + } + + .noprint { + display: none; + } + + .td-main main { + max-width: 100% !important; + flex: 1 1 0; + } + + .td-content { + max-width: 100%; + // columns: 2; + column-gap: 4rem; + font-size: 1rem; + + p, ul, ol, .alert { + line-height: 1.7em; + font-size: 1em; + } + + > h1, + > h2, + > h3, + > p, + > ul, + > ol, + > .alert, + > .highlight, + > .lead, + > dl dd, + > pre, + .footnotes, + > blockquote { + // column-span: all; + max-width: 100%; + } + + li { + margin-bottom: 0 !important; + } + + h2 { + font-size: 1.6em; + column-span: all; + // page-break-before: always; + } + h3 { + font-size: 1.3em; + } + + .print-figures { + counter-reset: step-figure; + margin: 1rem 0; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.5rem; + } + + figure, .card { + // display: block; + position: relative; + // width: calc(50% - 0.25rem - 2px); + vertical-align: top; + margin: 0; + padding: 0 !important; + border: 1px solid black; + border-radius: 2mm; + overflow: hidden; + + break-inside: avoid; + counter-increment: step-figure; + figcaption, .card-body { + position: relative; + margin: 0; + padding: 0.2rem 0.5rem !important; + border-top: inherit; + } + } + + // .card { + // padding: 0 !important; + // border: 1px solid black; + // border-radius: 2mm; + // break-inside: avoid; + // overflow: hidden; + // + // .card-body { + // + // } + // } + + .section-index, + // "Last changed" row + > .text-muted:last-child { + display: none; + } + + // Uncomment this to print without figures and images + // .card, .print-figures, img { + // display: none; + // } + + .alert { + border-width: 2px; + break-inside: avoid; + } + + > table { + margin: 1rem auto; + break-inside: avoid; + + td, thead th { + border: 1px solid black; + padding: 0.25rem 0.75rem; + } + } + } +} + +.print-qr-link { + border: 1px solid black; + background: white; + + display: none; + @media print { + display: flex; + } + align-items: center; + overflow: hidden; + padding: 1mm; + padding-left: 4mm; + + img { + width: 3cm; + flex: 0 0 auto; + } + + p { + flex: 1 1 0; + margin: 0; + padding: 0; + font-size: 11pt; + overflow: hidden; + word-wrap: break-word; + } + + a { + color: inherit; + display: block; + text-decoration: inherit; + font-weight: bold; + font-family: $font-family-monospace; + white-space: wrap; + letter-spacing: -0.5pt; + } +} diff --git a/assets/scss/rtl/_main.scss b/assets/scss/rtl/_main.scss deleted file mode 100644 index 4391c470..00000000 --- a/assets/scss/rtl/_main.scss +++ /dev/null @@ -1 +0,0 @@ -// Empty file to disable docsy's RTL styles which pull in a lot of remote resources. diff --git a/assets/scss/_variables_project.scss b/assets/scss/variables.scss similarity index 77% rename from assets/scss/_variables_project.scss rename to assets/scss/variables.scss index ff9ee783..8ecb3ff9 100644 --- a/assets/scss/_variables_project.scss +++ b/assets/scss/variables.scss @@ -1,28 +1,22 @@ -/* - -Add styles or override variables from the theme here. - -*/ - - $primary: #212730; $primary-light: #3e4a5d; $secondary: #f1f1f6; - -// $td-sidebar-bg-color: #e9f1ff; -// $td-sidebar-border-color: #d4e4ff; -$td-sidebar-bg-color: #FFFFFF; +$gray: rgb(33, 39, 48); +$grayish: #403f4c; $td-sidebar-border-color: #d4e4ff; -$link-color: #3489DD; - -$td-enable-google-fonts: false; +$link-color: #1565C0; -$font-family-sans-serif: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +$font-family-sans-serif: "Open Sans", Roboto, sans-serif; +$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; +$font-family-base: $font-family-sans-serif !default; -// $font-size-base: 1.2rem; +$font-size-small: 0.85rem; +$font-size-base: 1rem; -$enable-rounded: false; +$desktop-size: 1024px; +$media-mobile: screen and (max-width: ($desktop-size - 1px)); +$media-desktop: screen and (min-width: $desktop-size); // Source: https://google-webfonts-helper.herokuapp.com/fonts/open-sans?subsets=latin diff --git a/config.toml b/config.toml index 2432e58e..102ae861 100644 --- a/config.toml +++ b/config.toml @@ -1,14 +1,7 @@ baseURL = "/" title = "Goldydocs" - enableRobotsTXT = true - -# Hugo allows theme composition (and inheritance). The precedence is from left to right. -theme = ["github.com/google/docsy"] - timeout = 500000 # uh oh - -# Will give values to .Lastmod etc. enableGitInfo = true # Language settings @@ -143,8 +136,6 @@ github_branch = "main" [params.ui] # Enable to show the side bar menu in its compact state. sidebar_menu_compact = false -# Set to true to disable breadcrumb navigation. -breadcrumb_disable = false # Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled) sidebar_search_disable = false # Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top nav bar diff --git a/content/_index.de.html b/content/_index.de.html index ccc09302..5adabdc8 100644 --- a/content/_index.de.html +++ b/content/_index.de.html @@ -10,176 +10,82 @@ byline: "Erstellt August 2020" --- -{{< blocks/cover title="OpenBikeSensor" image_anchor="top" height="400" >}}
mastodon
-
- -

Überholabstandsmessung für Radfahrende

-

Open Innovation, Open Source, Open Data, Open Science

-
- - Forum - - - - Matrix logo Matrix - - - - GitHub - - - }}"> - Dokumentation - - - - Unterstützen - - - - Mastodon - -
-
-{{< /blocks/cover >}} - -{{% blocks/section color="primary" %}} - -
-
-{{% blocks/feature icon="fab fa-discourse" title="Fragen und Diskutieren" url="https://forum.openbikesensor.org" url_text="Zum Forum" %}} -Komm in unser Discourse-Forum, und diskutiere mit den anderen Interessierten -und Aktiven. Hier findet fast alles einen Platz: Unterstützung bei Problemen, -Lokalgruppen, Forschungs­projekte, Events, Entwicklungsthemen, und vieles mehr. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fas fa-biking" title="Bauen & Daten sammeln" url="/bauanleitung" url_text="Zur Bauanleitung" %}} -Bau Dir Deinen eigenen Überholabstandsmesser. Wir unterstützen Dich dabei. Am -besten schließt Du Dich einer der Sammelbestellungen und einem unserer -Regio-Teams an. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fab fa-github" title="Weiterentwickeln" url="https://github.com/openbikesensor" url_text="Zu den GitHub-Repositories" %}} -Was wir erstellen ist quelloffen, auf GitHub veröffentlichen wir den kompletten -Code. Hier findest Du auch alle Pläne und Anleitungen sowie die Software zur -Visualisierung der gesammelten Daten. -{{% /blocks/feature %}} -
-
- -{{% /blocks/section %}} - - - -{{% blocks/section color="#fff" %}} -
- +
+ + +

Der OpenBikeSensor ist ein offenes System zur

+

Überholabstandsmessung für Radfahrende

+ + +
+ +
+ {{% blocks/feature icon="discourse" title="Fragen und Diskutieren" url="https://forum.openbikesensor.org" url_text="Zum Forum" %}} + Komm in unser Discourse-Forum, und diskutiere mit den anderen Interessierten + und Aktiven. Hier findet fast alles einen Platz: Unterstützung bei Problemen, + Lokalgruppen, Forschungs­projekte, Events, Entwicklungsthemen, und vieles mehr. + {{% /blocks/feature %}} + + {{% blocks/feature icon="person-biking" title="Bauen & Daten sammeln" url="/bauanleitung" url_text="Zur Bauanleitung" %}} + Bau Dir Deinen eigenen Überholabstandsmesser. Wir unterstützen Dich dabei. Am + besten schließt Du Dich einer der Sammelbestellungen und einem unserer + Regio-Teams an. + {{% /blocks/feature %}} + + {{% blocks/feature icon="github" title="Weiterentwickeln" url="https://github.com/openbikesensor" url_text="Zu den GitHub-Repositories" %}} + Was wir erstellen ist quelloffen, auf GitHub veröffentlichen wir den kompletten + Code. Hier findest Du auch alle Pläne und Anleitungen sowie die Software zur + Visualisierung der gesammelten Daten. + {{% /blocks/feature %}} +
+ +

OpenBikeSensor – OpenCitizenScience

-Wir sind eine Gruppe von aktiven Alltagsradler:innen und möchten Radfahren sicherer und populärer machen. Überall! - -Wie oft passiert es uns, dass uns ein Auto beinahe vom Sattel holt? Was wir alle kennen, überprüfen wir nun wissenschaftlich. Dazu haben wir einen Sensor entwickelt, der den Abstand misst und Überholmanöver Geodaten zuordnet. Wo ist es sicher? Wo nicht? Welche Uhrzeit? Welche Strecken? Der Sensor soll helfen, das zu erkennen und zu belegen. - -{{< yt id=Ym3BeUaSrWo thumbnail="/thumbnails/Ym3BeUaSrWo.jpg" >}} - -
-{{% /blocks/section %}} - -{{% blocks/section color="secondary" %}} -
-{{% md %}} - -## Teil der Lösung - -Unser Ziel ist, Schwachstellen und Verbesserungspotenzial in der Verkehrsinfrastruktur aufzuzeigen und diese in Kooperation mit Stadtplaner:innen zu beheben. Zudem wollen wir die gesellschaftliche Wirkung von Kampagnen wie beispielsweise #AnderthalbMeter (in Städten) messen. Um statistisch verlässliche Open Data zu erhalten, ist es wichtig, dass möglichst viele Alltagsradler:innen mit unseren Sensoren offene Daten erfassen. Mit den von allen gesammelten Daten wiederum lassen sich individuelle Auswertungen vornehmen; von Initiativen, Kommunen und von Euch (Open Citizen Science). - -Zentrales Hilfsmittel und Namensgeber des OpenBikeSensors ist unser Überholabstandsmesser, ein kleines technisches Gerät am Fahrrad. Während der Fahrt misst es den Abstand nach links und rechts (minus Lenkerbreite) und zeichnet die Fahrt via GPS auf. Überholmanöver kann die:der Radler:in per Taste am Lenker bestätigen. Nicht aufgezeichnet werden Fahrzeug- oder Personendaten der Überholenden. Uns geht es hauptsächlich um die Seitenabstände zu anderen Verkehrsteilnehmer:innen. - -Wir wünschen uns, dass unser Sensor von vielen genutzt und weiterentwickelt wird. Die }}">Anleitung zum Selberbauen und Montieren ist für alle als Open Source verfügbar – hier auf unserer Website und quelloffen via GitHub. Wir entwickeln für die offenen Daten zudem }}">Visualisierungskonzepte (inklusive Visualisierungssoftware) und werten die Ergebnisse gemeinsam mit Forschungspartner:innen aus. +

Wir sind eine Gruppe von aktiven Alltagsradler:innen und möchten Radfahren sicherer und populärer machen. Überall!

-Uns geht es jedoch nicht nur um die Technik. Ergänzend entwickeln wir gemeinsam mit zivilgesellschaftlichen Organisationen und Kommunen regionale Aktionen, Kampagnen und Verkehrskonzepte. Wir gestalten Gesellschaft und leisten so einen Beitrag für mehr Lebensqualität in den Städten und auf dem Land. +

Wie oft passiert es uns, dass uns ein Auto beinahe vom Sattel holt? Was wir alle kennen, überprüfen wir nun wissenschaftlich. Dazu haben wir einen Sensor entwickelt, der den Abstand misst und Überholmanöver Geodaten zuordnet. Wo ist es sicher? Wo nicht? Welche Uhrzeit? Welche Strecken? Der Sensor soll helfen, das zu erkennen und zu belegen.

+ +
-Es wäre toll, wenn schon bald viele mitmachen, und wir so zusammen Bewegung in die Sache bringen. - -Klingt interessant? }}">Hier kannst Du Teil der Community werden. -{{% /md %}} - - -
-{{% /blocks/section %}} - - - -{{% blocks/section color="#000" %}} -
- -

Visualisierung

-{{% md %}} -Ein wichtiger Bestandteil des Projektes ist die Auswertbarkeit der gesammelten Daten. Daher arbeiten wir fleißig daran, die in den jeweiligen "Tracks" gespeicherten Werte zu extrahieren und visuell aufzubereiten. - -Hier zeigen wir nur ein Beispiel einer Auswertung von einigen Überholvorgängen in Stuttgart. Es handelt sich dabei um einen erfahrenen Radfahrer, der routiniert und selbstbewusst im Straßenverkehr unterwegs ist. Natürlich wurde auch er sehr oft mit weniger als 1,5 m Abstand überholt. Der Überholabstandsmesser erfasste sogar Messwerte unter 50 cm. - -{{< imgproc visualisierung Resize "800x" />}} - -Ein anderes Beispiel zeigt einen einzelnen Überholvorgang, von dem auch eine Videoaufzeichnung vorhanden war. Wir blenden dazu einige GPS-Informationen ein, sowie den gemessenen Seitenabstand im jeweiligen Moment des Videos. Die Gefahrensituation für den:die Radfahrer:in wird dadurch nachempfindbar. +{{< yt id=Ym3BeUaSrWo thumbnail="/thumbnails/Ym3BeUaSrWo.jpg" >}} {{< yt id=izUD16ffs_Q thumbnail="/thumbnails/izUD16ffs_Q.jpg" >}} -Wer noch Ideen zur Visualisierung, Automatisierung, Programmierung, Auswertung, etc. hat oder einfach am Projekt interessiert ist und mitgestalten will, ist herzlich }}">in die Community eingeladen. - -{{% /md %}}
-{{% /blocks/section %}} - +
+

Teil der Lösung

-{{% blocks/section color="primary" %}} -
+

Unser Ziel ist, Schwachstellen und Verbesserungspotenzial in der Verkehrsinfrastruktur aufzuzeigen und diese in Kooperation mit Stadtplaner:innen zu beheben. Zudem wollen wir die gesellschaftliche Wirkung von Kampagnen wie beispielsweise #AnderthalbMeter (in Städten) messen. Um statistisch verlässliche Open Data zu erhalten, ist es wichtig, dass möglichst viele Alltagsradler:innen mit unseren Sensoren offene Daten erfassen. Mit den von allen gesammelten Daten wiederum lassen sich individuelle Auswertungen vornehmen; von Initiativen, Kommunen und von Euch (Open Citizen Science).

-

Sei treibende Kraft

+

Zentrales Hilfsmittel und Namensgeber des OpenBikeSensors ist unser Überholabstandsmesser, ein kleines technisches Gerät am Fahrrad. Während der Fahrt misst es den Abstand nach links und rechts (minus Lenkerbreite) und zeichnet die Fahrt via GPS auf. Überholmanöver kann die:der Radler:in per Taste am Lenker bestätigen. Nicht aufgezeichnet werden Fahrzeug- oder Personendaten der Überholenden. Uns geht es hauptsächlich um die Seitenabstände zu anderen Verkehrsteilnehmer:innen.

-{{% md %}} +

Wir wünschen uns, dass unser Sensor von vielen genutzt und weiterentwickelt wird. Die }}">Anleitung zum Selberbauen und Montieren ist für alle als Open Source verfügbar – hier auf unserer Website und quelloffen via GitHub. Wir entwickeln für die offenen Daten zudem }}">Visualisierungskonzepte (inklusive Visualisierungssoftware) und werten die Ergebnisse gemeinsam mit Forschungspartner:innen aus.

-Es gibt viele Arten, wie Du das OpenCitizenScience-Projekt OpenBikeSensor unterstützen kannst, auch wenn Du nicht selbst aktiv werden möchtest. +

Uns geht es jedoch nicht nur um die Technik. Ergänzend entwickeln wir gemeinsam mit zivilgesellschaftlichen Organisationen und Kommunen regionale Aktionen, Kampagnen und Verkehrskonzepte. Wir gestalten Gesellschaft und leisten so einen Beitrag für mehr Lebensqualität in den Städten und auf dem Land.

-### Weitersagen heißt Unterstützen - -Erzähle Freund:innen, Verwandten, Kolleg:innen und Geschäftspartner:innen von uns. - -Folge uns via Twitter @OpenBikeSensor und werde Teil unserer Twitterei. - -### Spenden – jeder Beitrag zählt - -Die Arbeit rund um den OpenBikeSensor ist sehr zeitaufwändig und kostspielig. -Der [OpenBikeSensor e. V.]({{< relref "verein" >}}) nimmt gern Spenden -entgegen, die in die Arbeit der Community fließen und künftige Projekte -unterstützen. - -Bis 200 € reicht der Kontoauszug, um Spenden steuerlich absetzen zu können. -Dafür unbedingt den Verwendungszweck so ausfüllen - -
-IBAN: DE40 4306 0967 1294 8595 00 (GLS)
-Kontoinhaber: OpenBikeSensor e. V.
-Verwendungszweck: Spende OpenBikeSensor
-
- -Hier ein paar Beispiele, was wir mit Euren Spenden alles erreichen können: - -- Wir kaufen mit Mengenrabatt und reduzierten Versandkosten neue Hardware und Bauteile ein. Diese bringen wir Euch dann zu Workshops mit, welche wir veranstalten. -- Wir stellen Bausätze zusammen, damit Interessierte keine 6-8 Wochen auf Teile aus China warten müssen, sondern zügig loslegen können. -- Wir bauen Geräte, die wir für Aktionszeiträume an Engagierte ausleihen. Die Koordination übernehmen unsere Regio-Teams. -- Unsere Entwickler:innen können Hardware für Verbesserungen und Erweiterungen bestellen, ohne das Geld selbst vorschießen zu müssen. -- Wir finanzieren die IT-Infrastruktur für Ko-Kreation und Kollaboration unseres Netzwerks. - -Die Ausgaben des Vereins werden transparent gegenüber der Community kommuniziert und mit allen abgestimmt. Mehr dazu findest Du -auf den Unterseiten [des Vereins]({{< relref "verein" >}}). - -{{% /md %}} -
-{{% /blocks/section %}} +

Es wäre toll, wenn schon bald viele mitmachen, und wir so zusammen Bewegung in die Sache bringen.

+

Klingt interessant? }}">Hier kannst Du Teil der Community werden.

+
diff --git a/content/blog/2024-02-01-nachruf-natenom/index.de.md b/content/blog/2024-02-01-nachruf-natenom/index.de.md index b0c52d53..47853af2 100644 --- a/content/blog/2024-02-01-nachruf-natenom/index.de.md +++ b/content/blog/2024-02-01-nachruf-natenom/index.de.md @@ -4,6 +4,10 @@ date: '2024-02-01' linkTitle: Nachruf Natenom description: > Wir trauern um Natenom, den engagierten Fahrradaktivisten aus Pforzheim +resources: +- src: natenom_nachruf_scale.jpg + params: + byline: "Example" --- diff --git a/content/community/_index.de.md b/content/community/_index.de.md index eb2f3542..8c57c7c7 100644 --- a/content/community/_index.de.md +++ b/content/community/_index.de.md @@ -10,10 +10,7 @@ aliases: - /project --- -
-
-
- +
# Werde Teil der OpenBikeSensor-Community @@ -21,40 +18,33 @@ Der OpenBikeSensor ist ein offenes Projekt an dem alle teilnehmen können. Hilf mit, den Sensor weiterzuentwickeln, auszuprobieren, Daten zu sammeln und auszuwerten. So kannst du mitmachen: - -
-
-{{% blocks/section color="dark" %}} -
-
+
-{{% blocks/feature icon="fab fa-discourse" title="Fragen und Diskutieren" url="https://forum.openbikesensor.org" url_text="Zum Forum" %}} +{{% blocks/feature icon="discourse" title="Fragen und Diskutieren" url="https://forum.openbikesensor.org" url_text="Zum Forum" %}} Komm in unser Discourse-Forum, und diskutiere mit den anderen Interessierten und Aktiven. Hier findet fast alles einen Platz: Unterstützung bei Problemen, Lokalgruppen, Forschungs­projekte, Events, Entwicklungsthemen, und vieles mehr. {{% /blocks/feature %}} -{{% blocks/feature icon="fab fa-github" title="Weiterentwickeln" url="https://github.com/openbikesensor" url_text="Zu den GitHub-Repositories" %}} +{{% blocks/feature icon="github" title="Weiterentwickeln" url="https://github.com/openbikesensor" url_text="Zu den GitHub-Repositories" %}} Was wir erstellen ist quelloffen, auf GitHub veröffentlichen wir den kompletten Code. Hier findest Du auch alle Pläne und Anleitungen sowie die Software zur Visualisierung der gesammelten Daten. {{% /blocks/feature %}} -{{% blocks/feature icon="fa fa-video" title="Austauschen" url="#treffen" url_text="So nimmst du teil" %}} +{{% blocks/feature icon="video" title="Austauschen" url="#treffen" url_text="So nimmst du teil" %}} Fast wöchentlich tauschen wir uns zu aktuellen Themen und zum Fortschritt der Entwicklung aus. Neulinge und Interessierte sind hier herzlich willkommen, so können wir einander gut kennen lernen und gemeinsam das Projekt voranbringen. {{% /blocks/feature %}} -
-
-{{% /blocks/section %}} + -
-
-
+
+ +
### Offene Treffen per Videochat {#treffen} @@ -70,7 +60,7 @@ Auch wenn sich das aufgrund der Sicherheitsmaßnahmen nicht so anfühlt -- du bist herzlich zu diesen Treffen eingeladen, Neulinge sind immer willkommen!
-
+
### Das Forum @@ -79,7 +69,7 @@ Für langlebige Kommunikation verwenden wir in der Community noch gut zu finden, und Besucher können auch ohne Anmeldung mitlesen. ### Matrix -Echtzeitkommunikation findet [in unserem Matrix-Space](https://matrix.to/#/#openbikesensor:matrix.org) statt - Das ist ein föderiertes Netzwerk, +Echtzeitkommunikation findet [in unserem Matrix-Space](https://matrix.to/#/#openbikesensor:matrix.org) statt - Das ist ein föderiertes Netzwerk, das sehr nutzerfreundliche Chatclients bietet - wenn du Slack und Konsorten bedienen kannst, kannst auch einen Matrix Client bedienen. @@ -88,5 +78,4 @@ blättern willst, kannst du uns im Forum ansprechen - noch kann man dort 'rein schauen.
-
-
+ diff --git a/content/device.de.md b/content/device.de.md index 1d152508..7d213bbe 100644 --- a/content/device.de.md +++ b/content/device.de.md @@ -6,10 +6,7 @@ menu: parent: device --- -
-
- -
+
# Das Messgerät @@ -18,34 +15,30 @@ aufzeichnet. Dieses Gerät haben wir als quelloffenes Design entwickelt, sodass du, wenn du magst, dir selbst eines bauen kannst und darfst! Hier siehst du alle Varianten. -
-
-
-
-
+
-{{% device-type-cell - variant="Lite" - image_file="images/obs-lite.svg" - class="construction" - label="In Entwicklung" - link_text="Entwicklung verfolgen" +{{% device-type-cell + variant="Lite" + image_file="images/obs-lite.svg" + class="construction" + label="In Entwicklung" + link_text="Entwicklung verfolgen" link="#" %}} - klein und leicht - minimaler Bauaufwand -- wird mit Android-Handy und App kombiniert +- wird mit Android-Handy und App kombiniert - sehr kostengünstig - wetterfest {{% /device-type-cell %}} -{{% device-type-cell - variant="Classic" - image_file="images/obs-classic.svg" - class="light recommended" - label="Jetzt verfügbar" - link_text="Zur Bauanleitung" +{{% device-type-cell + variant="Classic" + image_file="images/obs-classic.svg" + class="light recommended" + label="Jetzt verfügbar" + link_text="Zur Bauanleitung" link="/bauanleitung" %}} - robust und erprobt - voller Funktionsumfang ohne Handy @@ -54,19 +47,17 @@ Varianten. - erweiterbar {{% /device-type-cell %}} -{{% device-type-cell - variant="Pro" +{{% device-type-cell + variant="Pro" image_file="images/obs-pro.svg" - class="construction" - label="In Entwicklung" - link_text="Entwicklung verfolgen" + class="construction" + label="In Entwicklung" + link_text="Entwicklung verfolgen" link="https://forum.openbikesensor.org/t/automatisiert-bestueckbare-hardware/1263" %}} - voller Funktionsumfang ohne Handy - bestückt bestellbar - wetterfest {{% /device-type-cell %}} -
-
diff --git a/content/docs/classic/about/_index.de.md b/content/docs/classic/about/_index.de.md index b07986b3..c1814b42 100644 --- a/content/docs/classic/about/_index.de.md +++ b/content/docs/classic/about/_index.de.md @@ -24,12 +24,12 @@ zum Gehäuse und Hilfen beim Beschaffen der Teile. * [Die Hauptplatine]({{< relref "pcb" >}}) wurde speziell für den OpenBikeSensor entworfen und kann als Spezialanfertigung bei einem Platinenhersteller anhand der bereitgestellten Designdateien bestellt - werden. + werden. * [Die Bauanleitung]({{< relref "../build-instructions" >}}) beschreibt, wie die Bauteile auf der Hauptplatine installiert und das ganze ins Gehäuse eingesetzt werden. - -### Muss ich den OpenBikeSensor selbst bauen? + +## Muss ich den OpenBikeSensor selbst bauen? Ja! Es gibt den OpenBikeSensor nicht als fertiges Gerät zu kaufen. Stattdessen baust du ihn dir selbst zusammen. @@ -38,7 +38,7 @@ Du brauchst auch keine Angst zu haben, damit loszulegen -- selbst wenn nicht immer sofort offensichtlich ist, wie alles funktioniert, so ist es trotzdem auch für Anfänger:innen möglich, erfolgreich einen Sensor anhand dieser Anleitungen zu bauen. Und wenn das mal nicht klappt, gibt es genug Leute, die -dir gern weiterhelfen, und ihr Wissen teilen. +dir gern weiterhelfen, und ihr Wissen teilen. Vielleicht kannst du dich auch mit einigen Anderen in deiner Gegend zusammentun. Schau in [der Community]({{< relref "community" >}}) vorbei oder @@ -54,13 +54,13 @@ der [Community]({{< relref "/community" >}}) organsiert. {{< imgproc construction-kit Resize 600x >}} OpenBikeSensor Classic Bausatz (alte Version) {{< /imgproc >}} - -### Hinweis für den Bau großer Stückzahlen + +## Hinweis für den Bau großer Stückzahlen Leider hatten wir in der Vergangenheit immer wieder Probleme damit, dass die aus China gelieferten fertigen Module nicht, oder nur teilweise den Spezifikationen entsprachen. Auch die Abmaße von Teilen ändern sich manchmal, z.B. bekamen wir -vom Lieferanten plötzlich größere Displays als üblich. +vom Lieferanten plötzlich größere Displays als üblich. Wenn du mehrere Geräte vom Typ *OpenBikeSensor Classic* herstellen möchtest, empfiehlt es sich daher, zunächst einen Probelauf zu machen. So stellst du @@ -75,7 +75,7 @@ einfache Änderung am Gehäuse, um auch mit den neuen Teilen kompatibel zu werden. Der:die nächste freut sich! -### Alternativen +## Alternativen Aufgrund der Vielfalt in dem Projekt und der unterschiedlichen Anforderungen der Beteiligten gibt es auch eine Vielzahl Varianten für fast jedes Teil. Der diff --git a/content/docs/classic/build-instructions/_index.de.md b/content/docs/classic/build-instructions/_index.de.md index 644b6532..8f30f0bb 100644 --- a/content/docs/classic/build-instructions/_index.de.md +++ b/content/docs/classic/build-instructions/_index.de.md @@ -9,7 +9,7 @@ aliases: description: > Sobald der Bausatz für den OpenBikeSensor Classic zusammengestellt ist, kann anhand dieser Anleitung der Bau begonnen werden. Der Zusammenbau - besteht aus einer Menge Lötarbeit, sowie dem Test der Elektronik und + besteht aus einer Menge Lötarbeit, sowie dem Test der Elektronik und dem Einbau in das Gehäuse. --- @@ -209,12 +209,16 @@ sich mit 1.0.0 geändert haben. Ordne zunächst alle Widerstände richtig zu, indem du die Farbcodes abliest oder mit einem Multimeter misst: +
+ | Bauteil | Wert | Farbcode 4 Ringe | Farbcode 5 Ringe | SMD Code | -| ----------- | -------------: | :------------------------------------------- | :---------------------------------------------- | ------ | -| **R1, R2** | 1,2 kΩ | {{< resistor "brown,red,red,gold" >}} | {{< resistor "brown,red,black,brown,brown" >}} | 122 / 1201 | -| **R3** | 10 kΩ | {{< resistor "brown,black,orange,gold" >}} | {{< resistor "brown,black,black,red,brown" >}} | 103 / 1002 | -| **R4** | 150 kΩ | {{< resistor "brown,green,yellow,gold" >}} | {{< resistor "brown,green,black,orange,brown" >}} | 154 / 1503 | -| **R5** | 300 kΩ | {{< resistor "orange,black,yellow,gold" >}} | {{< resistor "orange,black,black,orange,brown" >}} | 304 / 3003 | +| ----------- | -------------: | :------------------------------------------: | :------------------------------------------------: | ------ | +| **R1, R2** | 1,2 kΩ | {{< resistor "brown,red,red,gold" >}} | {{< resistor "brown,red,black,brown,brown" >}} | 122 / 1201 | +| **R3** | 10 kΩ | {{< resistor "brown,black,orange,gold" >}} | {{< resistor "brown,black,black,red,brown" >}} | 103 / 1002 | +| **R4** | 150 kΩ | {{< resistor "brown,green,yellow,gold" >}} | {{< resistor "brown,green,black,orange,brown" >}} | 154 / 1503 | +| **R5** | 300 kΩ | {{< resistor "orange,black,yellow,gold" >}} | {{< resistor "orange,black,black,orange,brown" >}} | 304 / 3003 | + +
Nachdem du alle Widerstände zugeordnet hast, platziere sie an den dafür vorgesehenen Stellen auf der Vorderseite der Hautplatine. Stecke die Beinchen @@ -464,14 +468,18 @@ Nach den Sensorboards kann das Adafruit Spannungsreglermodul verbaut werden. - Kürze die mitgelieferte Pinleiste auf drei Pins. - Stecke die Pinleiste von der Bestückungsseite auf das Board des Spannungsreglers. - Stecke den Spannungsregler von unten auf die OpenBikeSensor Platine, so dass - folgende Verbindungen entstehen (keine Sorge: das Ada board liefert auch 3.3v, hatte aber nicht genug Platz für die Nachkommastelle): - - | 3V3 Ada | OBS | - |---------|-------| - | VIN | VDC | - | 3V | 3.3V | - | GND | GND | - + folgende Verbindungen entstehen (keine Sorge: das Adafruit-Modul liefert auch 3.3V, hatte aber nicht genug Platz für die Nachkommastelle): + +
+ +| Adafruit-Board | | OpenBikeSensor Platine | +| ---------------: | - | :----------------------- | +| VIN | = | VDC | +| 3V | = | 3.3V | +| GND | = | GND | + +
+ - Klebe etwas Isolierband über die Lötstellen des Ultraschall boards unter das 3.3V board - Verlöte die Pins auf beiden Seiten, wie immer erst einen Pin, Orientierung nachjustieren @@ -538,8 +546,6 @@ Verlöte erst dann die restlichen Pins und kürze sie. des Moduls zeigt in Richtung der Buchsenleiste für den ESP32. {{}} ---- - {{% alert title="Glückwunsch!" color="success" %}} Mit diesem Schritt ist die Hauptplatine des OpenBikeSensors fertig bestückt. @@ -580,7 +586,7 @@ Insbesondere der mittlere Pin ist hierbei kritisch, er muss dieselbe Länge wie wird aber bei zu hoher Temperatur herausgedrückt. Verdrille nun beide Kabel auf voller Länge zu einem und führe dann die zwei Crimps in -das Steckergehäuse ein. Die Verdrillung wird sich wieder ein wenig lockern, +das Steckergehäuse ein. Die Verdrillung wird sich wieder ein wenig lockern, aber sollte wie ein Kabel wirken und keine große Schlaufe mehr bilden. {{< imgproc "v00.03.12/12_Switch/DSC08041.JPG" Fit "500x500" >}} @@ -997,7 +1003,7 @@ hilft dir vielleicht eine der Anleitung auf der [Fehlersuche-Seite]({{< relref - Bei Bedarf Unreinheiten des Gehäuses (vom 3D-Druck) entfernen, wenn das PCB daran hängen bleibt. - Mit 3 Stück M3x6 oder M3x8 im Gehäuse verschrauben. - - Nun kann der ESP wieder aufgesteckt werden. Dabei die Richtung der + - Nun kann der ESP wieder aufgesteckt werden. Dabei die Richtung der USB-Markierung mit Mikro-USB-Buchse dem ESP32 abgleichen, und sicherstellen, dass die Pins nicht um ein oder zwei Löcher verrutscht eingesteckt werden. diff --git a/content/docs/classic/parts/_index.de.md b/content/docs/classic/parts/_index.de.md index 9f4cec9b..20565098 100644 --- a/content/docs/classic/parts/_index.de.md +++ b/content/docs/classic/parts/_index.de.md @@ -1,13 +1,14 @@ --- title: Bauteile weight: 20 +notoc: true aliases: - /bauteile - /bauteile/v00.03.12 - /docs/hardware/v00.03.12/parts description: > Diese Seite listet alle Bauteile auf, die bestellt oder hergestellt werden - müssen, um einen OpenBikeSensor Classic zusammenzubauen. + müssen, um einen OpenBikeSensor Classic zusammenzubauen. --- @@ -21,6 +22,7 @@ Wenn du gerade bestellst, kannst du `@gluap` im Forum kontaktieren, um bei der T ## Bauteile +
@@ -68,7 +70,7 @@ Wenn du gerade bestellst, kannst du `@gluap` im Forum kontaktieren, um bei der T @@ -96,7 +98,7 @@ Wenn du gerade bestellst, kannst du `@gluap` im Forum kontaktieren, um bei der T @@ -108,7 +110,7 @@ Wenn du gerade bestellst, kannst du `@gluap` im Forum kontaktieren, um bei der T aliexpress.com 2
aliexpress.com 3 -
+
aliexpress.com 4 @@ -377,6 +379,7 @@ Wenn du gerade bestellst, kannst du `@gluap` im Forum kontaktieren, um bei der T
1 Alternative A "Rotes Modul" Buck-Boost Modul for LiPo, 3.3V (Spannungsregler). Eines der verlinkten Module reicht. - Derzeit ist kein zuverlässiger Händler für dieses Modul bekannt. Module mit Beschriftung `A1731i` auf dem sechsbeinigen Bauteil **funktionieren NICHT**. + Derzeit ist kein zuverlässiger Händler für dieses Modul bekannt. Module mit Beschriftung `A1731i` auf dem sechsbeinigen Bauteil **funktionieren NICHT**.
amazon.de
- google Suche + google Suche
+
{{< include-markdown-partial "parts-tools.md" >}} diff --git a/content/docs/firmware/_index.de.md b/content/docs/firmware/_index.de.md index 51d6c22c..24f707ef 100644 --- a/content/docs/firmware/_index.de.md +++ b/content/docs/firmware/_index.de.md @@ -52,12 +52,16 @@ GGF musst du zunächst das "Flashtool" (über die OpenBikeSensor Oberfläche) in Danach kannst du, wenn dein OpenBikeSensor in einem internetfähigen WLAN eingebucht ist über das Wlan-Menü deines OpenBikeSensors Firmwareupdates anstoßen. -## Bauen und Flashen der Firmware aus dem GitHub-Repository +## Firmware aus Quelltext kompilieren -### mit VisualStudio Code und PlatformIO +Du kannst die Firmware auch selbst bauen und flashen, wenn du dir den Quelltext +aus dem GitHub-Repository herunterlädst. -Zunächst [VS Code](https://code.visualstudio.com/) und darin die Erweiterung [PlatformIO](https://platformio.org/) -installieren. - -Danach den gewünschten Stand der OBS-Firmware aus dem [github-Repository](https://github.com/openbikesensor/OpenBikeSensorFirmware) klonen und das Verzeichnis in VS Code öffnen. Dann mit dem Upload-Befehl (Pfeil nach rechts in der Fußzeile von VS Code) oder per `pio run -t upload` in der PlatformIO CLI auf den ESP32 flashen. +Zunächst musst du [VS Code](https://code.visualstudio.com/) und darin die +Erweiterung [PlatformIO](https://platformio.org/) installieren. Clone dann den +gewünschten Stand der OBS-Firmware aus dem +[github-Repository](https://github.com/openbikesensor/OpenBikeSensorFirmware) +und öffne das Verzeichnis in VS Code. Dann kannst du mit dem Upload-Befehl +(Pfeil nach rechts in der Fußzeile von VS Code) oder per `pio run -t upload` in +der PlatformIO CLI die Firmware kompilieren und auf den ESP32 flashen. diff --git a/content/docs/firmware/flash-python.md b/content/docs/firmware/flash-python.md index 57d696b7..0e989d32 100644 --- a/content/docs/firmware/flash-python.md +++ b/content/docs/firmware/flash-python.md @@ -1,6 +1,8 @@ --- title: Flashen mit platformio weight: 10 +description: > + xx --- Hast du `git` und `python3` installiert, kannst du mit folgenden Kommandos die OpenBikeSensor Firmware bauen und flashen. diff --git a/content/docs/user-guide/mounting/index.de.md b/content/docs/user-guide/mounting/index.de.md index f67c2b32..9ca30844 100644 --- a/content/docs/user-guide/mounting/index.de.md +++ b/content/docs/user-guide/mounting/index.de.md @@ -4,6 +4,9 @@ title: Montage des Sensors am Fahrrad weight: 15 aliases: - /montage +description: > + Es gibt einige Optionen den OpenBikeSensor am Fahrrad anzubringen. Hier + erfährst du, wie sie aussehen, und worauf du achten solltest. --- {{% alert title="Hinweis" color="info" %}} diff --git a/content/docs/user-guide/quickstart.de.md b/content/docs/user-guide/quickstart.de.md index fda7f4c0..af31d528 100644 --- a/content/docs/user-guide/quickstart.de.md +++ b/content/docs/user-guide/quickstart.de.md @@ -4,9 +4,11 @@ linkTitle: Schnellstart weight: 10 aliases: - /start +description: > + So bereitest du deinen neuen OpenBikeSensor auf die erste Fahrt vor. --- -Diese Anleitung geht davon aus, dass du einen funktionierenden +Diese Anleitung geht davon aus, dass du einen funktionierenden [OpenBikeSensor Classic]({{< ref "/docs/classic" >}}) hast. Sobald du einen OpenBikeSensor hast, solltest du ein paar Dinge damit tun: @@ -40,8 +42,8 @@ Um sicherzugehen, dass dein Gerät voll funktionsfähig ist, führe vor der ersten Montage und danach regelmäßig (z.B. jedes Mal nach dem Aufladen des Akkus oder wöchentlich) folgenden Test durch: -Halte dein Gerät im Freien eingeschaltet mit der linken Seite zum Himmel und -der rechten Seite nach unten in die Luft. Nachdem die Haltezeit für den +Halte dein Gerät im Freien eingeschaltet mit der linken Seite zum Himmel und +der rechten Seite nach unten in die Luft. Nachdem die Haltezeit für den linksseitigen Messwert abgelaufen ist, sollte kein Messwert mehr angezeigt. Hast du noch keinen GPS-Empfang und möchtest nicht warten, bis das GPS Empfang hat, kannst du durch kurzes Drücken auf den Knopf am Display in die Messansicht diff --git a/content/map.de.md b/content/map.de.md deleted file mode 100644 index 0f5fe91b..00000000 --- a/content/map.de.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Karte der Initiativen -menu: - main: - parent: project - weight: 40 -aliases: -- /map ---- - -
- -
- -# Karte - -
- -
- -In vielen Regionen gibt es schon OpenBikeSensoren! Suchst du Gleichgesinnte oder Ansprechpartner in deiner Gegend? Die Karte hilft dir dabei. Möchtest du selbst oder deine Initiative noch auf der Karte auftauchen? [Im Forum](https://forum.openbikesensor.org/t/karte-der-lokalinitiativen-und-nutzer/389) erfährst du, wie! - -
- -
- -
diff --git a/content/map.en.md b/content/map.en.md deleted file mode 100644 index d4f28898..00000000 --- a/content/map.en.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Map -menu: - main: - weight: 25 -aliases: -- en/map ---- - -
- -
- -# Map - -
- -
- -There are many places where you can find OpenBikeSensors! Are you looking for like-minded people or contacts in your -area? This map will help you find them. Do you or your group want to appear on the map? Find out how -[in the forum](https://forum.openbikesensor.org/t/karte-der-lokalinitiativen-und-nutzer/389)! -
- -
- -
diff --git a/content/map.md b/content/map.md new file mode 100644 index 00000000..12f5aa51 --- /dev/null +++ b/content/map.md @@ -0,0 +1,22 @@ +--- +title: Karte der Initiativen +menu: + main: + parent: project + weight: 40 +aliases: +- /map +--- + +# Karte + +In vielen Regionen gibt es schon OpenBikeSensoren! Suchst du Gleichgesinnte +oder Ansprechpartner in deiner Gegend? Die Karte hilft dir dabei. Möchtest du +selbst oder deine Initiative noch auf der Karte auftauchen? [Im +Forum](https://forum.openbikesensor.org/t/karte-der-lokalinitiativen-und-nutzer/389) +erfährst du, wie! + +
+ +
diff --git a/content/verein.de.md b/content/verein.de.md index bcef7577..786864a8 100644 --- a/content/verein.de.md +++ b/content/verein.de.md @@ -8,16 +8,10 @@ aliases: - /ev --- -
-
+
# OpenBikeSensor e. V. -
-
- -
- Im Dezember 2021 haben wir gemeinsam einen Verein gegründet, um uns künftig die Arbeit zu erleichtern. Der Verein trägt den Namen *OpenBikeSensor e. V.* und ist beim Amtsgericht Stuttgart im Vereinsregister eingetragen. @@ -35,7 +29,7 @@ können, um vor allem Einzelpersonen leichter mit Sensoren ausstatten zu können Möglicherweise kann der Verein auch Fördergelder beantragen bzw. erhalten und für den Vereinszweck aufwenden. -### Vereinszweck +## Vereinszweck Der Vereinszweck ist in der [Satzung](/docs/Satzung.pdf) festgelegt und lautet: @@ -51,7 +45,7 @@ Der Vereinszweck ist in der [Satzung](/docs/Satzung.pdf) festgelegt und lautet: > > -- *Quelle: [Gründungssatzung des Vereins OpenBikeSensor](/docs/Satzung.pdf)* -### Mitgliedschaft +## Mitgliedschaft Eine Mitgliedschaft im Verein ist ausdrücklich **keine Voraussetzung für die Mitarbeit** am Projekt. Die Community besteht nach wie vor unabhängig vom Verein @@ -73,4 +67,31 @@ für Mitglieder sind auf dem Beitrittsformular (siehe oben) beschrieben. Zur Kontaktaufnahme mit dem Vorstand kann die E-Mail-Adresse aus dem [Impressum]({{< relref "contact" >}}) genutzt werden. + + +## Spenden + +Die Arbeit rund um den OpenBikeSensor ist sehr zeitaufwändig und kostspielig. +Der OpenBikeSensor e. V. nimmt gern Spenden entgegen, die in die Arbeit der +Community fließen und künftige Projekte unterstützen. + +Bis 200 € reicht der Kontoauszug, um Spenden steuerlich absetzen zu +können. Dafür unbedingt den Verwendungszweck so ausfüllen. + +
+IBAN: DE40 4306 0967 1294 8595 00 (GLS)
+Kontoinhaber: OpenBikeSensor e. V.
+Verwendungszweck: Spende OpenBikeSensor
+
+ +Hier ein paar Beispiele, was wir mit Euren Spenden alles erreichen können: + +- Wir kaufen mit Mengenrabatt und reduzierten Versandkosten neue Hardware und Bauteile ein. Diese bringen wir Euch dann zu Workshops mit, welche wir veranstalten. +- Wir stellen Bausätze zusammen, damit Interessierte keine 6-8 Wochen auf Teile aus China warten müssen, sondern zügig loslegen können. +- Wir bauen Geräte, die wir für Aktionszeiträume an Engagierte ausleihen. Die Koordination übernehmen unsere Regio-Teams. +- Unsere Entwickler:innen können Hardware für Verbesserungen und Erweiterungen bestellen, ohne das Geld selbst vorschießen zu müssen. +- Wir finanzieren die IT-Infrastruktur für Ko-Kreation und Kollaboration unseres Netzwerks. + +Die Ausgaben des Vereins werden transparent gegenüber der Community kommuniziert und mit allen abgestimmt. +
diff --git a/fontawesome-download.sh b/fontawesome-download.sh new file mode 100755 index 00000000..cf27c0c0 --- /dev/null +++ b/fontawesome-download.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -ex +icons="brands/discourse brands/github brands/mastodon solid/video solid/person-biking solid/arrow-right solid/arrow-left solid/lightbulb solid/bars solid/xmark" + +dest=fontawesome +url=https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs + +mkdir -p "${dest}" +for path in $icons; do + name=$(basename ${path}) + wget -O "${dest}/${name}.svg" "${url}/${path}.svg" +done diff --git a/fontawesome/arrow-left.svg b/fontawesome/arrow-left.svg new file mode 100644 index 00000000..c6233a44 --- /dev/null +++ b/fontawesome/arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/arrow-right.svg b/fontawesome/arrow-right.svg new file mode 100644 index 00000000..947f2a3a --- /dev/null +++ b/fontawesome/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/bars.svg b/fontawesome/bars.svg new file mode 100644 index 00000000..02dd6bcf --- /dev/null +++ b/fontawesome/bars.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/discourse.svg b/fontawesome/discourse.svg new file mode 100644 index 00000000..c41b1083 --- /dev/null +++ b/fontawesome/discourse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/github.svg b/fontawesome/github.svg new file mode 100644 index 00000000..eda7c3f4 --- /dev/null +++ b/fontawesome/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/lightbulb.svg b/fontawesome/lightbulb.svg new file mode 100644 index 00000000..696fa4e0 --- /dev/null +++ b/fontawesome/lightbulb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/mastodon.svg b/fontawesome/mastodon.svg new file mode 100644 index 00000000..bb36bf3c --- /dev/null +++ b/fontawesome/mastodon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/person-biking.svg b/fontawesome/person-biking.svg new file mode 100644 index 00000000..c7c493c3 --- /dev/null +++ b/fontawesome/person-biking.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/video.svg b/fontawesome/video.svg new file mode 100644 index 00000000..b1a6c1fa --- /dev/null +++ b/fontawesome/video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fontawesome/xmark.svg b/fontawesome/xmark.svg new file mode 100644 index 00000000..a1c48211 --- /dev/null +++ b/fontawesome/xmark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/go.mod b/go.mod index 3f271ef7..a86a9b9f 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,3 @@ module github.com/openbikesensor/openbikesensor.github.io go 1.21 - -require github.com/google/docsy v0.8.0 // indirect diff --git a/go.sum b/go.sum index e3bb394d..e69de29b 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +0,0 @@ -github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/google/docsy v0.8.0 h1:RgHyKRTo8YwScMThrf01Ky2yCGpUS1hpkspwNv6szT4= -github.com/google/docsy v0.8.0/go.mod h1:FqTNN2T7pWEGW8dc+v5hQ5VF29W5uaL00PQ1LdVw5F8= -github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= diff --git a/i18n/de.toml b/i18n/de.toml index 9aa6abcc..8646e747 100644 --- a/i18n/de.toml +++ b/i18n/de.toml @@ -1,8 +1,5 @@ [page_not_translated] other = "Diese Seite gibt es noch nicht auf Deutsch, aber vielleicht sprichst Du ja..." -[footer_all_rights_reserved] -other = "– veröffentlicht unter LGPL-3.0" - [print_entire_section] other = "Kapitel drucken" diff --git a/i18n/en.toml b/i18n/en.toml index dace4648..932b4806 100644 --- a/i18n/en.toml +++ b/i18n/en.toml @@ -1,6 +1,2 @@ [page_not_translated] other = "This page is not yet available in English. You might be able to read it in..." - - -[footer_all_rights_reserved] -other = "– published under terms of LGPL-3.0" diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 00000000..8270014d --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,14 @@ + + + + {{ partial "head.html" . }} + + + {{ partial "navbar.html" . }} + + {{ block "main" . }}{{ end }} + {{ partial "footer.html" . }} + + {{ partial "scripts.html" . }} + + diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 00000000..8362338e --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,3 @@ +{{ define "main" -}} +{{ .Content -}} +{{ end }} diff --git a/layouts/blog/baseof.html b/layouts/blog/baseof.html new file mode 100644 index 00000000..8270014d --- /dev/null +++ b/layouts/blog/baseof.html @@ -0,0 +1,14 @@ + + + + {{ partial "head.html" . }} + + + {{ partial "navbar.html" . }} + + {{ block "main" . }}{{ end }} + {{ partial "footer.html" . }} + + {{ partial "scripts.html" . }} + + diff --git a/layouts/blog/list.html b/layouts/blog/list.html new file mode 100644 index 00000000..548c5c06 --- /dev/null +++ b/layouts/blog/list.html @@ -0,0 +1,21 @@ +{{ define "main" }} + +
+

Blog

+ + +
+ +{{ end -}} diff --git a/layouts/blog/single.html b/layouts/blog/single.html new file mode 100644 index 00000000..313078ed --- /dev/null +++ b/layouts/blog/single.html @@ -0,0 +1,15 @@ +{{ define "main" }} + +
+

{{ .Title }}

+ {{ with .Params.description }}
{{ . | markdownify }}
{{ end }} + + {{ .Content }} + + {{ partial "pager.html" . }} +
+ +{{ end }} diff --git a/layouts/docs/baseof.html b/layouts/docs/baseof.html index 5403cd85..cc70de8e 100644 --- a/layouts/docs/baseof.html +++ b/layouts/docs/baseof.html @@ -3,27 +3,28 @@ {{ partial "head.html" . }} - -
- {{ partial "navbar.html" . }} -
-
-
-
- {{ partial "sidebar.html" . }} -
-
- {{ partial "page-meta-links.html" . }} - {{ partial "toc.html" . }} -
-
- {{ partial "version-banner.html" . }} - {{ if not .Site.Params.ui.breadcrumb_disable }}{{ partial "breadcrumb.html" . }}{{ end }} + + {{ partial "navbar.html" . }} + +
+ + + + + {{ partial "toc.html" . }} + +
+ {{ partial "breadcrumb.html" . }} {{ block "main" . }}{{ end }} -
-
- {{ partial "footer.html" . }} +
+ {{ partial "footer.html" . }} + {{ partial "scripts.html" . }} diff --git a/layouts/docs/list.html b/layouts/docs/list.html index 3cf49f4d..0c60432d 100644 --- a/layouts/docs/list.html +++ b/layouts/docs/list.html @@ -1,25 +1,12 @@ {{ define "main" }} -
-

{{ .Title }}

- - {{ with .Params.description }}
{{ . | markdownify }}
{{ end }} - {{ .Content }} - - {{ partial "section-index.html" . }} +

{{ .Title }}

-
- {{ partial "page-meta-lastmod.html" . }} +{{ with .Params.description }}
{{ . | markdownify }}
{{ end }} -
+{{ .Content }} - Du möchtest etwas zu dieser Seite beitragen? Eine Anleitung findest du im Forum. +{{ partial "section-index.html" . }} -
- - {{ with .CurrentSection.AlternativeOutputFormats.Get "print" }} - Druckansicht dieses Kapitels - {{ end }} -
-
+{{ partial "docs-footer.html" . }} {{ end }} diff --git a/layouts/docs/parts.html b/layouts/docs/parts.html deleted file mode 100644 index d0c42550..00000000 --- a/layouts/docs/parts.html +++ /dev/null @@ -1,25 +0,0 @@ -{{ define "main" }} - -{{ partial "parts-notes.md" . | markdownify }} - -{{ .Render "content" }} - -
-

{{ .Title }}

- {{ with .Params.description }}
{{ . | markdownify }}
{{ end }} - {{ if (and (not .Params.hide_readingtime) (.Site.Params.ui.readingtime.enable)) }} - {{ partial "reading-time.html" . }} - {{ end }} - {{ .Content }} - {{ if (and (not .Params.hide_feedback) (.Site.Params.ui.feedback.enable) (.Site.GoogleAnalytics)) }} - {{ partial "feedback.html" .Site.Params.ui.feedback }} -
- {{ end }} - {{ if (.Site.Params.DisqusShortname) }} -
- {{ partial "disqus-comment.html" . }} - {{ end }} -
{{ partial "page-meta-lastmod.html" . }}
-
- -{{ end }} diff --git a/layouts/docs/single.html b/layouts/docs/single.html new file mode 100644 index 00000000..0c60432d --- /dev/null +++ b/layouts/docs/single.html @@ -0,0 +1,12 @@ +{{ define "main" }} + +

{{ .Title }}

+ +{{ with .Params.description }}
{{ . | markdownify }}
{{ end }} + +{{ .Content }} + +{{ partial "section-index.html" . }} + +{{ partial "docs-footer.html" . }} +{{ end }} diff --git a/layouts/faq/li.html b/layouts/faq/li.html index d9ccc39b..df8531bf 100644 --- a/layouts/faq/li.html +++ b/layouts/faq/li.html @@ -10,7 +10,7 @@

{{ .Title }}

{{ else }} {{ end }} diff --git a/layouts/home.html b/layouts/home.html new file mode 100644 index 00000000..9569b16b --- /dev/null +++ b/layouts/home.html @@ -0,0 +1,5 @@ +{{ define "main" }} +{{ with .Content }} +{{ . }} +{{ end }} +{{ end }} diff --git a/layouts/partials/breadcrumb.html b/layouts/partials/breadcrumb.html new file mode 100644 index 00000000..92e00791 --- /dev/null +++ b/layouts/partials/breadcrumb.html @@ -0,0 +1,28 @@ +{{ $isSingle := true -}} +{{ with .Parent -}} + {{ $isSingle = .IsHome -}} +{{ end -}} + + +{{- define "breadcrumbnav" -}} + {{ if .p1.Parent -}} + {{ if not .p1.Parent.IsHome -}} + {{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 ) -}} + {{ end -}} + {{ else if not .p1.IsHome -}} + {{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) -}} + {{ end -}} + {{ $isActive := eq .p1 .p2 }} + +{{- end -}} diff --git a/layouts/partials/docs-footer.html b/layouts/partials/docs-footer.html new file mode 100644 index 00000000..d2577563 --- /dev/null +++ b/layouts/partials/docs-footer.html @@ -0,0 +1,15 @@ +{{ if and .GitInfo .Site.Params.github_repo -}} + +{{ end -}} diff --git a/layouts/partials/fa.html b/layouts/partials/fa.html new file mode 100644 index 00000000..879eb377 --- /dev/null +++ b/layouts/partials/fa.html @@ -0,0 +1,6 @@ + +{{- $fname:=print "fontawesome/" . ".svg" -}} +{{- $path:=" diff --git a/layouts/partials/favicons.html b/layouts/partials/favicons.html new file mode 100644 index 00000000..69e7f053 --- /dev/null +++ b/layouts/partials/favicons.html @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index 1cfdaf52..35d6f004 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -1,16 +1,6 @@ -