From abbd54942800409d24b36b1988ff5ad48aad98f3 Mon Sep 17 00:00:00 2001 From: Julie Blanc Date: Mon, 19 Jan 2026 22:14:03 +0100 Subject: [PATCH] initial commit --- .gitignore | 4 + .gitlab-ci.yml | 28 + ReadMe.md | 10 + css/modules/_footnotes.scss | 39 + css/modules/_init.scss | 20 + css/modules/_layout.scss | 79 + css/modules/_list-of-abbr.scss | 4 + css/modules/_text.scss | 108 + css/modules/_titles-counters.scss | 50 + css/modules/_titles.scss | 124 + css/modules/_var.scss | 11 + css/style.css | 427 + css/style.css.map | 1 + css/style.scss | 9 + csspageweaver/.gitignore | 1 + csspageweaver/.gitlab-ci.yml | 104 + csspageweaver/README.md | 177 + csspageweaver/interface/css/grid.css | 46 + csspageweaver/interface/css/interface.css | 136 + csspageweaver/interface/css/panel.css | 532 + .../IBM_Plex_Mono/IBMPlexMono-Italic.woff | Bin 0 -> 56520 bytes .../IBM_Plex_Mono/IBMPlexMono-Italic.woff2 | Bin 0 -> 39964 bytes .../IBM_Plex_Mono/IBMPlexMono-Medium.woff | Bin 0 -> 51872 bytes .../IBM_Plex_Mono/IBMPlexMono-Medium.woff2 | Bin 0 -> 36648 bytes .../IBMPlexMono-MediumItalic.woff | Bin 0 -> 57840 bytes .../IBMPlexMono-MediumItalic.woff2 | Bin 0 -> 41156 bytes .../IBM_Plex_Mono/IBMPlexMono-Regular.woff | Bin 0 -> 50664 bytes .../IBM_Plex_Mono/IBMPlexMono-Regular.woff2 | Bin 0 -> 35536 bytes .../IBM_Plex_Mono/IBMPlexMono-SemiBold.woff | Bin 0 -> 52936 bytes .../IBM_Plex_Mono/IBMPlexMono-SemiBold.woff2 | Bin 0 -> 37592 bytes .../IBMPlexMono-SemiBoldItalic.woff | Bin 0 -> 58712 bytes .../IBMPlexMono-SemiBoldItalic.woff2 | Bin 0 -> 41848 bytes .../fonts/IBM_Plex_Mono/stylesheet.css | 42 + csspageweaver/lib/csstree.min.js | 1 + csspageweaver/lib/paged.esm.js | 33190 ++++++++++++++++ csspageweaver/main.js | 119 + csspageweaver/manifest.json | 18 + csspageweaver/modules/dict.js | 333 + csspageweaver/modules/frame_render.js | 410 + csspageweaver/modules/gui.js | 510 + csspageweaver/modules/pre_render.js | 160 + csspageweaver/modules/render.js | 58 + csspageweaver/plugins/.gitignore | 1 + csspageweaver/plugins/baseline/.gitignore | 1 + csspageweaver/plugins/baseline/README.md | 8 + csspageweaver/plugins/baseline/baseline.css | 21 + csspageweaver/plugins/baseline/baseline.js | 100 + csspageweaver/plugins/baseline/config.json | 13 + csspageweaver/plugins/baseline/template.html | 8 + csspageweaver/plugins/fullPage/.gitignore | 1 + csspageweaver/plugins/fullPage/README.md | 126 + csspageweaver/plugins/fullPage/config.json | 9 + csspageweaver/plugins/fullPage/fullPage.css | 49 + csspageweaver/plugins/fullPage/fullPage.js | 294 + csspageweaver/plugins/grid/.gitignore | 1 + csspageweaver/plugins/grid/README.md | 70 + csspageweaver/plugins/grid/config.json | 14 + csspageweaver/plugins/grid/grid-hook.js | 17 + csspageweaver/plugins/grid/grid-ui.js | 115 + csspageweaver/plugins/grid/grid.css | 124 + csspageweaver/plugins/grid/template.html | 16 + csspageweaver/plugins/imposition/.gitignore | 1 + csspageweaver/plugins/imposition/config.json | 17 + csspageweaver/plugins/imposition/index.js | 363 + .../plugins/imposition/stylesheet.css | 0 .../plugins/imposition/template.html | 22 + csspageweaver/plugins/inlineNotes/.gitignore | 1 + csspageweaver/plugins/inlineNotes/README.md | 77 + csspageweaver/plugins/inlineNotes/config.json | 8 + .../plugins/inlineNotes/inlineNotes.js | 98 + csspageweaver/plugins/marginBox/.gitignore | 1 + csspageweaver/plugins/marginBox/config.json | 10 + csspageweaver/plugins/marginBox/marginBox.css | 7 + csspageweaver/plugins/marginBox/marginBox.js | 26 + csspageweaver/plugins/previewPage/.gitignore | 1 + csspageweaver/plugins/previewPage/config.json | 19 + csspageweaver/plugins/previewPage/event.js | 52 + .../plugins/previewPage/stylesheet.css | 39 + .../plugins/previewPage/template.html | 31 + .../plugins/reloadInPlace/.gitignore | 1 + csspageweaver/plugins/reloadInPlace/Readme.md | 17 + .../plugins/reloadInPlace/config.json | 9 + .../plugins/reloadInPlace/reloadInPlace.js | 202 + csspageweaver/plugins/spread/.gitignore | 1 + csspageweaver/plugins/spread/config.json | 15 + csspageweaver/plugins/spread/spread-hook.js | 25 + csspageweaver/plugins/spread/spread-ui.js | 38 + csspageweaver/plugins/spread/spread.css | 33 + csspageweaver/plugins/spread/spread.html | 61 + index.html | 28765 ++++++++++++++ js/custom-handler-example-1.js | 21 + js/custom-handler-example-2.js | 16 + keep.html | 1175 + lua/add-style-as-class.lua | 11 + lua/blockquote.lua | 6 + src/input.docx | Bin 0 -> 609674 bytes src/output.html | 28706 +++++++++++++ 97 files changed, 97614 insertions(+) create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 ReadMe.md create mode 100644 css/modules/_footnotes.scss create mode 100644 css/modules/_init.scss create mode 100644 css/modules/_layout.scss create mode 100644 css/modules/_list-of-abbr.scss create mode 100644 css/modules/_text.scss create mode 100644 css/modules/_titles-counters.scss create mode 100644 css/modules/_titles.scss create mode 100644 css/modules/_var.scss create mode 100644 css/style.css create mode 100644 css/style.css.map create mode 100644 css/style.scss create mode 100644 csspageweaver/.gitignore create mode 100644 csspageweaver/.gitlab-ci.yml create mode 100644 csspageweaver/README.md create mode 100644 csspageweaver/interface/css/grid.css create mode 100644 csspageweaver/interface/css/interface.css create mode 100644 csspageweaver/interface/css/panel.css create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff2 create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff2 create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff2 create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff2 create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff2 create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff2 create mode 100644 csspageweaver/interface/fonts/IBM_Plex_Mono/stylesheet.css create mode 100644 csspageweaver/lib/csstree.min.js create mode 100644 csspageweaver/lib/paged.esm.js create mode 100644 csspageweaver/main.js create mode 100644 csspageweaver/manifest.json create mode 100644 csspageweaver/modules/dict.js create mode 100644 csspageweaver/modules/frame_render.js create mode 100644 csspageweaver/modules/gui.js create mode 100644 csspageweaver/modules/pre_render.js create mode 100644 csspageweaver/modules/render.js create mode 100644 csspageweaver/plugins/.gitignore create mode 100644 csspageweaver/plugins/baseline/.gitignore create mode 100644 csspageweaver/plugins/baseline/README.md create mode 100644 csspageweaver/plugins/baseline/baseline.css create mode 100644 csspageweaver/plugins/baseline/baseline.js create mode 100644 csspageweaver/plugins/baseline/config.json create mode 100644 csspageweaver/plugins/baseline/template.html create mode 100644 csspageweaver/plugins/fullPage/.gitignore create mode 100755 csspageweaver/plugins/fullPage/README.md create mode 100644 csspageweaver/plugins/fullPage/config.json create mode 100644 csspageweaver/plugins/fullPage/fullPage.css create mode 100644 csspageweaver/plugins/fullPage/fullPage.js create mode 100644 csspageweaver/plugins/grid/.gitignore create mode 100644 csspageweaver/plugins/grid/README.md create mode 100644 csspageweaver/plugins/grid/config.json create mode 100644 csspageweaver/plugins/grid/grid-hook.js create mode 100644 csspageweaver/plugins/grid/grid-ui.js create mode 100644 csspageweaver/plugins/grid/grid.css create mode 100644 csspageweaver/plugins/grid/template.html create mode 100644 csspageweaver/plugins/imposition/.gitignore create mode 100644 csspageweaver/plugins/imposition/config.json create mode 100644 csspageweaver/plugins/imposition/index.js create mode 100644 csspageweaver/plugins/imposition/stylesheet.css create mode 100644 csspageweaver/plugins/imposition/template.html create mode 100644 csspageweaver/plugins/inlineNotes/.gitignore create mode 100644 csspageweaver/plugins/inlineNotes/README.md create mode 100644 csspageweaver/plugins/inlineNotes/config.json create mode 100644 csspageweaver/plugins/inlineNotes/inlineNotes.js create mode 100644 csspageweaver/plugins/marginBox/.gitignore create mode 100644 csspageweaver/plugins/marginBox/config.json create mode 100644 csspageweaver/plugins/marginBox/marginBox.css create mode 100644 csspageweaver/plugins/marginBox/marginBox.js create mode 100644 csspageweaver/plugins/previewPage/.gitignore create mode 100644 csspageweaver/plugins/previewPage/config.json create mode 100644 csspageweaver/plugins/previewPage/event.js create mode 100644 csspageweaver/plugins/previewPage/stylesheet.css create mode 100644 csspageweaver/plugins/previewPage/template.html create mode 100644 csspageweaver/plugins/reloadInPlace/.gitignore create mode 100644 csspageweaver/plugins/reloadInPlace/Readme.md create mode 100644 csspageweaver/plugins/reloadInPlace/config.json create mode 100644 csspageweaver/plugins/reloadInPlace/reloadInPlace.js create mode 100644 csspageweaver/plugins/spread/.gitignore create mode 100644 csspageweaver/plugins/spread/config.json create mode 100644 csspageweaver/plugins/spread/spread-hook.js create mode 100644 csspageweaver/plugins/spread/spread-ui.js create mode 100644 csspageweaver/plugins/spread/spread.css create mode 100644 csspageweaver/plugins/spread/spread.html create mode 100644 index.html create mode 100644 js/custom-handler-example-1.js create mode 100644 js/custom-handler-example-2.js create mode 100644 keep.html create mode 100644 lua/add-style-as-class.lua create mode 100644 lua/blockquote.lua create mode 100644 src/input.docx create mode 100644 src/output.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..587a7e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +.zip +weaver_manager.sh +fonts/* \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..5bf5534 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,28 @@ +stages: + - update + +update_subtree: + stage: update + script: + - echo "Configuring Git user..." + - git config --global user.email "bot@csspageweaver.org" + - git config --global user.name "Update Bot" + + - echo "Updating subtree..." + - git subtree pull --prefix=csspageweaver https://gitlab.com/csspageweaver/csspageweaver.git main --squash + + # Fetch the latest changes from the remote to compare + - git fetch origin + + # Check if there are any changes to push + - | + if git diff --quiet origin/main; then + echo "No changes to push." + else + echo "Pushing changes..." + git push https://oauth2:${ACCESS_TOKEN}@gitlab.com/csspageweaver/boilerplate.git HEAD:main + fi + + only: + - schedules + - triggered diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 0000000..1f42a3f --- /dev/null +++ b/ReadMe.md @@ -0,0 +1,10 @@ +# Book + + +## PAndoc command line + +``` +pandoc src/input.docx \ + --lua-filter=lua/add-style-as-class.lua \ + -o src/output.html +``` \ No newline at end of file diff --git a/css/modules/_footnotes.scss b/css/modules/_footnotes.scss new file mode 100644 index 0000000..8284658 --- /dev/null +++ b/css/modules/_footnotes.scss @@ -0,0 +1,39 @@ +@page { + @footnote { + float: bottom; + + } + } + + .pagedjs_footnote_content{ + padding-top: calc(var(--baseline)*1); + } + +.inline-note { + float: footnote; + font-size: 9px; + line-height: calc(var(--baseline)*0.9); + padding-left: var(--indent); + position: relative; + font-weight: 100; + + &::marker{ + display: none; + content: ""; + } + +} + + +[data-counter-note]{ +&::before{ + content: attr(data-counter-note) "."; + position: absolute; + // left: calc(var(--indent)*-1); + left: 0px; + } +} + +[data-footnote-call]{ + font-size: 9px; +} diff --git a/css/modules/_init.scss b/css/modules/_init.scss new file mode 100644 index 0000000..7516d89 --- /dev/null +++ b/css/modules/_init.scss @@ -0,0 +1,20 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +a { + color: currentColor; +} + +body { + -webkit-font-smoothing: antialiased; /* Chrome, Safari, iOS */ + -moz-osx-font-smoothing: grayscale; /* Firefox macOS */ + + text-rendering: optimizeLegibility; /* meilleure lisibilité, ligatures, kerning */ + font-feature-settings: "liga" 1; /* active les ligatures si la police les supporte */ + + font-family: var(--font); + font-size: var(--font-size); + line-height: var(--baseline); +} \ No newline at end of file diff --git a/css/modules/_layout.scss b/css/modules/_layout.scss new file mode 100644 index 0000000..278356f --- /dev/null +++ b/css/modules/_layout.scss @@ -0,0 +1,79 @@ +@media print { + @page { + size: 134mm 205mm; + // size: 150mm 220mm; + margin-top: 67px; + margin-bottom: 10mm; + margin-left: 10mm; + margin-right: 10mm; + bleed: 6mm; + marks: crop; + } + @page:left { + margin-left: 12mm; + margin-right: 32mm; + @top-left { + content: counter(page); + } + // @top-right { + // content: "Höchstpersönlichkeit"; + // font-variant-caps: small-caps; + // letter-spacing: 0.01em; + // } + } + @page:right { + margin-left: 32mm; + margin-right: 12mm; + @top-right { + content: counter(page); + } + @top-left { + content: "Höchstpersönlichkeit"; + font-variant-caps: small-caps; + letter-spacing: 0.05em; + } + + } + @page:first { + @top-left-corner { content: none; } + @top-left { content: none; } + @top-center { content: none; } + @top-right { content: none; } + @top-right-corner { content: none; } + @left-top { content: none; } + @left-middle { content: none; } + @left-bottom { content: none; } + @right-top { content: none; } + @right-middle { content: none; } + @right-bottom { content: none; } + @bottom-left-corner { content: none; } + @bottom-left { content: none; } + @bottom-center { content: none; } + @bottom-right { content: none; } + @bottom-right-corner { content: none; } + } + @page:blank { + @top-left-corner { content: none; } + @top-left { content: none; } + @top-center { content: none; } + @top-right { content: none; } + @top-right-corner { content: none; } + @left-top { content: none; } + @left-middle { content: none; } + @left-bottom { content: none; } + @right-top { content: none; } + @right-middle { content: none; } + @right-bottom { content: none; } + @bottom-left-corner { content: none; } + @bottom-left { content: none; } + @bottom-center { content: none; } + @bottom-right { content: none; } + @bottom-right-corner { content: none; } + } +} + + +#section__content{ + break-before: right; + +} \ No newline at end of file diff --git a/css/modules/_list-of-abbr.scss b/css/modules/_list-of-abbr.scss new file mode 100644 index 0000000..dc9bed9 --- /dev/null +++ b/css/modules/_list-of-abbr.scss @@ -0,0 +1,4 @@ +#section__list-of-abbr{ + display: none; + color: red; +} \ No newline at end of file diff --git a/css/modules/_text.scss b/css/modules/_text.scss new file mode 100644 index 0000000..0fd8176 --- /dev/null +++ b/css/modules/_text.scss @@ -0,0 +1,108 @@ +sup{ + line-height: 0; +} + +hr{ + border: none; + height: var(--baseline); +} + +a{ + color: currentColor; + text-decoration: none; +} + +p{ + text-align: justify; + orphans: 2; + widows: 2; +} + +p, li{ + hyphens: auto; + hyphenate-limit-chars: 7 3 4; + hyphenate-limit-lines: 2; + hyphenate-limit-zone: 8%; + word-spacing: -0.004em; +} + + + +ol[type="1"]{ + list-style-type: none; + position: relative; + break-after: avoid; + + position: absolute; + left: calc(var(--indent)*-3); + &::before{ + content: attr(start); + font-family: var(--font-sans); + // font-weight: 200; + font-size: 0.6rem; + color: #999; + display: block; + padding: 0px 2px; + border: 1px solid #efefef; + + min-width: 1.5ch; + display: flex; + justify-content: center; + } + + + +} + +.pagedjs_left_page{ + ol[type="1"] { + left: inherit; + right: calc(var(--indent)*-3); + } +} + +p + p, +ol[type="1"] + p{ + text-indent: calc(var(--indent)*0.5); +} + + + +blockquote{ + padding-left: var(--indent); + margin-top: calc(var(--baseline)*1); + margin-bottom: calc(var(--baseline)*1); + + p{ + font-style: italic; + em{ + font-style: normal; + } + } + + + u{ + font-variant: small-caps; + text-decoration: none; + } + +} + +blockquote + ol + p{ text-indent: 0px; } + + + +.these{ + &::before{ + content: "---" + } + &::after{ + content: "---"; + } + &::before, &::after{ + display: flex; + // width: 3ch; + justify-content: center; + } + +} \ No newline at end of file diff --git a/css/modules/_titles-counters.scss b/css/modules/_titles-counters.scss new file mode 100644 index 0000000..efd6adc --- /dev/null +++ b/css/modules/_titles-counters.scss @@ -0,0 +1,50 @@ +#section__content{ + + counter-reset: h1; + + h1{ + counter-increment: h1 1; + counter-reset: h2; + } + + h1::before{ + content: counter(h1, upper-alpha); + + } + + h2{ + counter-increment: h2 1; + counter-reset: h3; + } + + h2::before{ + content: counter(h2, upper-roman); + } + + h3{ + counter-increment: h3 1; + counter-reset: h4; + } + + h3::before{ + content: counter(h3); + } + + h4{ + counter-increment: h4 1; + counter-reset: h5; + } + + h4::before{ + content: counter(h4, lower-alpha) ". "; + } + + h5{ + counter-increment: h5 1; + counter-reset: h6; + } + + h5::before{ + content: counter(h5, lower-alpha) counter(h5, lower-alpha) ". "; + } + } \ No newline at end of file diff --git a/css/modules/_titles.scss b/css/modules/_titles.scss new file mode 100644 index 0000000..b26db1e --- /dev/null +++ b/css/modules/_titles.scss @@ -0,0 +1,124 @@ + +#section__content{ + + + h1, h2, h3 { + break-inside: avoid; + break-after: avoid; + + /* hack for avoiding break-after */ + margin-bottom: calc(var(--baseline)*-3); + &::after{ + content: ''; + display: block; + height: calc(var(--baseline)*3); + // background-color: rgba(255, 255, 0, 0.595); + } + } + + + h1 + ol + p, + h2 + ol + p, + h3 + ol + p, + h4 + ol + p, + h5 + ol + p, + h6 + ol + p{ + text-indent: 0; + } + + h1{ + font-family: var(--font-title); + font-weight: normal; + font-size: 1.5rem; + line-height: calc(var(--baseline)*1.4); + text-align: center; + position: relative; + margin-top: calc(var(--baseline)*3 - 3px); + padding-bottom: calc(var(--baseline)*1); + padding-left: 1ch; + padding-right: 1ch; + &::before{ + display: block; + font-size: 1rem; + + } + } + + h1:first-of-type{ + margin-top: 3px!important; + } + + + + + h2{ + font-family: var(--font-title); + font-weight: normal; + font-size: 1.3rem; + line-height: calc(var(--baseline)*1.2); + + text-align: right; + padding-left: 3ch; + position: relative; + margin-top: calc(var(--baseline)*1 + 9px); + padding-bottom: calc(var(--baseline)*1); + &::before{ + position: absolute; + left: 0; + } + } + + h3{ + font-family: var(--font-sans); + font-weight: normal; + font-size: 1rem; + line-height: calc(var(--baseline)*1); + + text-align: right; + padding-left: 3ch; + position: relative; + margin-top: calc(var(--baseline)*1 + 9px); + padding-bottom: calc(var(--baseline)*1); + &::before{ + // font-family: 'Helixotrope 4'; + // font-size: var(--font-size); + // font-weight: bold; + position: absolute; + left: 0; + } + } + + h4{ + font-family: var(--font-sans); + font-weight: normal; + font-size: 0.8rem; + line-height: calc(var(--baseline)*1); + + text-align: right; + padding-left: 3ch; + position: relative; + margin-top: calc(var(--baseline)*0.5); + margin-bottom: calc(var(--baseline)*0.5); + font-weight: 500; + + } + + + h5{ + font-family: var(--font-sans); + font-weight: normal; + font-size: 0.7rem; + line-height: calc(var(--baseline)*1); + position: relative; + margin-top: calc(var(--baseline)*0.75); + margin-bottom: calc(var(--baseline)*0.25); + + } + + + +} + +[data-id="section__content"][data-split-from] > :first-child { + margin-top: 0; +} \ No newline at end of file diff --git a/css/modules/_var.scss b/css/modules/_var.scss new file mode 100644 index 0000000..3b7e71a --- /dev/null +++ b/css/modules/_var.scss @@ -0,0 +1,11 @@ +:root{ + --font: 'Edgar', sans-serif; + --font-title: "Heliotrope 3 Caps", sans-serif; + --font-sans: "Heliotrope 4", sans-serif; + --font-size: 12px; + --baseline: 16px; + + --indent: 26px; +} + + diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..f500709 --- /dev/null +++ b/css/style.css @@ -0,0 +1,427 @@ +@charset "UTF-8"; +:root { + --font: "Edgar", sans-serif; + --font-title: "Heliotrope 3 Caps", sans-serif; + --font-sans: "Heliotrope 4", sans-serif; + --font-size: 12px; + --baseline: 16px; + --indent: 26px; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +a { + color: currentColor; +} + +body { + -webkit-font-smoothing: antialiased; /* Chrome, Safari, iOS */ + -moz-osx-font-smoothing: grayscale; /* Firefox macOS */ + text-rendering: optimizeLegibility; /* meilleure lisibilité, ligatures, kerning */ + font-feature-settings: "liga" 1; /* active les ligatures si la police les supporte */ + font-family: var(--font); + font-size: var(--font-size); + line-height: var(--baseline); +} + +@media print { + @page { + size: 134mm 205mm; + margin-top: 67px; + margin-bottom: 10mm; + margin-left: 10mm; + margin-right: 10mm; + bleed: 6mm; + marks: crop; + } + @page :left { + margin-left: 12mm; + margin-right: 32mm; + @top-left { + content: counter(page); + } + } + @page :right { + margin-left: 32mm; + margin-right: 12mm; + @top-right { + content: counter(page); + } + @top-left { + content: "Höchstpersönlichkeit"; + font-variant-caps: small-caps; + letter-spacing: 0.05em; + } + } + @page :first { + @top-left-corner { + content: none; + } + @top-left { + content: none; + } + @top-center { + content: none; + } + @top-right { + content: none; + } + @top-right-corner { + content: none; + } + @left-top { + content: none; + } + @left-middle { + content: none; + } + @left-bottom { + content: none; + } + @right-top { + content: none; + } + @right-middle { + content: none; + } + @right-bottom { + content: none; + } + @bottom-left-corner { + content: none; + } + @bottom-left { + content: none; + } + @bottom-center { + content: none; + } + @bottom-right { + content: none; + } + @bottom-right-corner { + content: none; + } + } + @page :blank { + @top-left-corner { + content: none; + } + @top-left { + content: none; + } + @top-center { + content: none; + } + @top-right { + content: none; + } + @top-right-corner { + content: none; + } + @left-top { + content: none; + } + @left-middle { + content: none; + } + @left-bottom { + content: none; + } + @right-top { + content: none; + } + @right-middle { + content: none; + } + @right-bottom { + content: none; + } + @bottom-left-corner { + content: none; + } + @bottom-left { + content: none; + } + @bottom-center { + content: none; + } + @bottom-right { + content: none; + } + @bottom-right-corner { + content: none; + } + } +} +#section__content { + -moz-column-break-before: right; + break-before: right; +} + +sup { + line-height: 0; +} + +hr { + border: none; + height: var(--baseline); +} + +a { + color: currentColor; + text-decoration: none; +} + +p { + text-align: justify; + orphans: 2; + widows: 2; +} + +p, li { + -webkit-hyphens: auto; + hyphens: auto; + hyphenate-limit-chars: 7 3 4; + hyphenate-limit-lines: 2; + hyphenate-limit-zone: 8%; + word-spacing: -0.004em; +} + +ol[type="1"] { + list-style-type: none; + position: relative; + -moz-column-break-after: avoid; + break-after: avoid; + position: absolute; + left: calc(var(--indent) * -3); +} +ol[type="1"]::before { + content: attr(start); + font-family: var(--font-sans); + font-size: 0.6rem; + color: #999; + display: block; + padding: 0px 2px; + border: 1px solid #efefef; + min-width: 1.5ch; + display: flex; + justify-content: center; +} + +.pagedjs_left_page ol[type="1"] { + left: inherit; + right: calc(var(--indent) * -3); +} + +p + p, +ol[type="1"] + p { + text-indent: calc(var(--indent) * 0.5); +} + +blockquote { + padding-left: var(--indent); + margin-top: calc(var(--baseline) * 1); + margin-bottom: calc(var(--baseline) * 1); +} +blockquote p { + font-style: italic; +} +blockquote p em { + font-style: normal; +} +blockquote u { + font-variant: small-caps; + text-decoration: none; +} + +blockquote + ol + p { + text-indent: 0px; +} + +.these::before { + content: "---"; +} +.these::after { + content: "---"; +} +.these::before, .these::after { + display: flex; + justify-content: center; +} + +#section__content { + counter-reset: h1; +} +#section__content h1 { + counter-increment: h1 1; + counter-reset: h2; +} +#section__content h1::before { + content: counter(h1, upper-alpha); +} +#section__content h2 { + counter-increment: h2 1; + counter-reset: h3; +} +#section__content h2::before { + content: counter(h2, upper-roman); +} +#section__content h3 { + counter-increment: h3 1; + counter-reset: h4; +} +#section__content h3::before { + content: counter(h3); +} +#section__content h4 { + counter-increment: h4 1; + counter-reset: h5; +} +#section__content h4::before { + content: counter(h4, lower-alpha) ". "; +} +#section__content h5 { + counter-increment: h5 1; + counter-reset: h6; +} +#section__content h5::before { + content: counter(h5, lower-alpha) counter(h5, lower-alpha) ". "; +} + +#section__content h1, #section__content h2, #section__content h3 { + -moz-column-break-inside: avoid; + break-inside: avoid; + -moz-column-break-after: avoid; + break-after: avoid; + /* hack for avoiding break-after */ + margin-bottom: calc(var(--baseline) * -3); +} +#section__content h1::after, #section__content h2::after, #section__content h3::after { + content: ""; + display: block; + height: calc(var(--baseline) * 3); +} +#section__content h1 + ol + p, +#section__content h2 + ol + p, +#section__content h3 + ol + p, +#section__content h4 + ol + p, +#section__content h5 + ol + p, +#section__content h6 + ol + p { + text-indent: 0; +} +#section__content h1 { + font-family: var(--font-title); + font-weight: normal; + font-size: 1.5rem; + line-height: calc(var(--baseline) * 1.4); + text-align: center; + position: relative; + margin-top: calc(var(--baseline) * 3 - 3px); + padding-bottom: calc(var(--baseline) * 1); + padding-left: 1ch; + padding-right: 1ch; +} +#section__content h1::before { + display: block; + font-size: 1rem; +} +#section__content h1:first-of-type { + margin-top: 3px !important; +} +#section__content h2 { + font-family: var(--font-title); + font-weight: normal; + font-size: 1.3rem; + line-height: calc(var(--baseline) * 1.2); + text-align: right; + padding-left: 3ch; + position: relative; + margin-top: calc(var(--baseline) * 1 + 9px); + padding-bottom: calc(var(--baseline) * 1); +} +#section__content h2::before { + position: absolute; + left: 0; +} +#section__content h3 { + font-family: var(--font-sans); + font-weight: normal; + font-size: 1rem; + line-height: calc(var(--baseline) * 1); + text-align: right; + padding-left: 3ch; + position: relative; + margin-top: calc(var(--baseline) * 1 + 9px); + padding-bottom: calc(var(--baseline) * 1); +} +#section__content h3::before { + position: absolute; + left: 0; +} +#section__content h4 { + font-family: var(--font-sans); + font-weight: normal; + font-size: 0.8rem; + line-height: calc(var(--baseline) * 1); + text-align: right; + padding-left: 3ch; + position: relative; + margin-top: calc(var(--baseline) * 0.5); + margin-bottom: calc(var(--baseline) * 0.5); + font-weight: 500; +} +#section__content h5 { + font-family: var(--font-sans); + font-weight: normal; + font-size: 0.7rem; + line-height: calc(var(--baseline) * 1); + position: relative; + margin-top: calc(var(--baseline) * 0.75); + margin-bottom: calc(var(--baseline) * 0.25); +} + +[data-id=section__content][data-split-from] > :first-child { + margin-top: 0; +} + +@page { + @footnote { + float: bottom; + } +} +.pagedjs_footnote_content { + padding-top: calc(var(--baseline) * 1); +} + +.inline-note { + float: footnote; + font-size: 9px; + line-height: calc(var(--baseline) * 0.9); + padding-left: var(--indent); + position: relative; + font-weight: 100; +} +.inline-note::marker { + display: none; + content: ""; +} + +[data-counter-note]::before { + content: attr(data-counter-note) "."; + position: absolute; + left: 0px; +} + +[data-footnote-call] { + font-size: 9px; +} + +#section__list-of-abbr { + display: none; + color: red; +}/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/css/style.css.map b/css/style.css.map new file mode 100644 index 0000000..fc0a9af --- /dev/null +++ b/css/style.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["style.css","modules/_var.scss","modules/_init.scss","modules/_layout.scss","modules/_text.scss","modules/_titles-counters.scss","modules/_titles.scss","modules/_footnotes.scss","modules/_list-of-abbr.scss"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file diff --git a/css/style.scss b/css/style.scss new file mode 100644 index 0000000..d81f558 --- /dev/null +++ b/css/style.scss @@ -0,0 +1,9 @@ +@charset "UTF-8"; +@import 'modules/var'; +@import 'modules/init'; +@import 'modules/layout'; +@import 'modules/text'; +@import 'modules/titles-counters'; +@import 'modules/titles'; +@import 'modules/footnotes'; +@import 'modules/list-of-abbr'; \ No newline at end of file diff --git a/csspageweaver/.gitignore b/csspageweaver/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/csspageweaver/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/csspageweaver/.gitlab-ci.yml b/csspageweaver/.gitlab-ci.yml new file mode 100644 index 0000000..6ba6a80 --- /dev/null +++ b/csspageweaver/.gitlab-ci.yml @@ -0,0 +1,104 @@ +stages: + - prepare + - release + +# This job compile CSS Page Weaver and few plugins +prepare_job: + stage: prepare + image: ubuntu:latest + rules: + - if: $CI_COMMIT_TAG + before_script: + - apt-get update && apt-get install -y git curl jq zip bash + - git config --global user.email "csspageweaver@csspageweaver.org" + - git config --global user.name "Automated Releaser" + script: + + - | + # Store Job ID since next stage (release_job) link to current job artifacts + echo "ARTIFACTS_JOB=$CI_JOB_ID" >> build.env + + - | + # create plugins folder if needed + mkdir -p plugins + + - | + # Set plugins list + REPO_LIST=( + "baseline" + "grid" + "imposition" + "marginBox" + "spread" + "previewPage" + "reloadInPlace" + ) + + - | + # Add listed plugins as git subtree. Need deployment tokens if repos are private + for REPO in "${REPO_LIST[@]}"; do + SUBTREE_URL="https://gitlab.com/csspageweaver/plugins/${REPO}.git" + git subtree add --prefix="plugins/$REPO" "$SUBTREE_URL" main --squash + done + + - | + # Define the pluginsParameters object + PLUGINS_PARAMETERS='{ + "baseline": { + "size": 16, + "position": 0 + }, + "reloadInPlace": { + "blur": false, + "behavior": "instant" + } + }' + + - | + # Add plugin list to manifest + MANIFEST_PATH="manifest.json" + PLUGINS_ENTRY=$(jq --arg repos "${REPO_LIST[*]}" '.plugins = ($repos | split(" "))' "$MANIFEST_PATH") + echo "$PLUGINS_ENTRY" > "$MANIFEST_PATH" + + - | + # Add plugin parameters to manifest + PARAMETERS_PLUGINS_ENTRY=$(jq --argjson pluginsParameters "$PLUGINS_PARAMETERS" '.pluginsParameters = $pluginsParameters' "$MANIFEST_PATH") + echo "$PARAMETERS_PLUGINS_ENTRY" > "$MANIFEST_PATH" + + - | + # create folder + mkdir -p csspageweaver + + # Copy releveant folder and file to a csspageweaver folder + cp -r interface/ lib/ modules/ plugins/ csspageweaver/ + cp main.js manifest.json README.md .gitignore csspageweaver/ + + + artifacts: + name: csspageweaver-core-$CI_COMMIT_TAG + paths: + - csspageweaver/ + reports: + dotenv: build.env + expire_in: never + +# This job create a release based on previous artifact +release_job: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + needs: + - job: prepare_job + artifacts: true + rules: + - if: $CI_COMMIT_TAG + script: + - echo "running release_job for $CI_COMMIT_TAG " + release: + name: 'Release $CI_COMMIT_TAG' + tag_name: '$CI_COMMIT_TAG' + ref: '$CI_COMMIT_SHA' + description: 'Auto release' + assets: + links: + - name: '👉 CSS Page Weaver with plugins embed' + url: 'https://gitlab.com/csspageweaver/csspageweaver/-/jobs/$ARTIFACTS_JOB/artifacts/download' diff --git a/csspageweaver/README.md b/csspageweaver/README.md new file mode 100644 index 0000000..6d48bef --- /dev/null +++ b/csspageweaver/README.md @@ -0,0 +1,177 @@ +# CSS Page Weaver + +![Interface](https://gitlab.com/csspageweaver/csspageweaver/-/wikis/uploads/e724d6782600c30bc1b8d1ad56b24217/_screen_copie.webp) + +CSS Page Weaver is a browser-based publishing tool, made up of [PagedJs](https://pagedjs.org/about/) library and modulars additionals features. While it's design to ease installation for beginners CSS Page Weaver also bring elegant and extendable solution for more advanced users. + +## ✨ Features + +- **Streamlined and Ready-to-Use**: Get started quickly with a standardized way to integrate features. +- **Extensive Plugin Library**: No need to reinvent the wheel with the available plugins. +- **WYSIWYG Editor**: Streamline your design pratice with an extandable interface. +- **Create and Share Plugins**: Develop and share your own plugins easily. + +## ⛵ Getting Started + +### Prerequisites + +- A local web server + +### 🪴 Installation (fastest way) + +If you feel a bit lost with following instruction, you should probably look at the [CSS Page Weaver compiled with a few plugins](https://gitlab.com/csspageweaver/csspageweaver/-/releases) + +Integrate it at the root level of your page and add a link to `csspageweaver` main _module_ into your HTML template + +```html + +``` + +*Do you need to also install PagedJs? Nope! CSS Page Weaver already embed it.* + +### Use + +Run a simple server. That's it! + +### Boilerplate + +Don't have a project to test it? There is [a ready-to-use boilerplate](https://gitlab.com/csspageweaver//boilerplate). Download, unzip & run a server! + + +## 🚀 Going further + +### 🌲 Installation (complete way) + +Released version on CSS Page Weaver is compiled with few plugins. You can install the package yourself for greater control. + +#### Clone CSS Page Weaver repo in your project [option A]. + +```bash +# With HTTPS +git clone https://gitlab.com/csspageweaver/csspageweaver.git + +# With SSH +git clone git@gitlab.com:csspageweaver/csspageweaver.git +``` +#### Clone CSS Page Weaver as a git subtree [option B]. + +Subtree are great to: +- embed CSS Page Weaver repo in another repo +- get updates + +```bash + git subtree add --prefix csspageweaver/ git@gitlab.com:csspageweaver/cssPageWeaver.git --squash +``` + +### 🔌 Dependencies + +CSS Page Weaver is designed to work with plugins. In this complete installation, you need to install plugins by yourself. If you've downloaded [the last release of CSS Page Weaver](https://gitlab.com/csspageweaver/csspageweaver/-/releases), few plugins are already embedded. + +**Here is a [list of all plugins](https://gitlab.com/csspageweaver//plugins) known.** + +**Steps** + +1. Download and place plugin folder in `csspageweaver/plugins` +2. Add plugin to manifest + +#### Installation as subtree + +We prefer to install plugins using Git Subtree because it allows us to easily preserve the filiation link with the plugin directory (and to obtain updates!). + +Bear in mind, if you're not comfortable with command lines, that *step 1* can easily be replaced by a simple *download, drag and drop*. + +Otherwise, here is how it works. + +##### (Step 1) Clone plugin as a subtree + +Install plugin as a submodule of `csspageweaver` + +```bash + git subtree add --prefix="csspageweaver/plugins/{{PLUGIN_FOLDER_NAME}}" git@gitlab.com:csspageweaver/plugins/{{PLUGIN_NAME}}.git --squash +``` + +##### (Step 2) Add plugin to manifest + +Almost done. Add a mention to `csspageweaver/manifest.json` + +```json +{ + "plugins": [ + // existing plugin, + "PLUGIN_FOLDER_NAME" + ], +} +``` + +Look at complete [plugins list](https://gitlab.com/csspageweaver/plugins) and [plugins installation guide](https://gitlab.com/csspageweaver/csspageweaver/-/wikis/design/plugins/install) + +#### Update as subtree + +This is where Git subtrees are wonderful + +```bash +git subtree pull --prefix="csspageweaver/plugins/{{PLUGIN_NAME}}" main --squash +``` + +A bit dazed? Don't worry. Once again, you can update your plugins with your favorite *download, unzip, drag and drop* shady method. + +### 🎁 Package manager + +You already like the principle of subtrees, but you think (rightly) that the multiplication of command lines can be a bit tedious in the long run? Installation and dependencies can me handle with our [Package Manager](https://gitlab.com/csspageweaver/package-manager) + +**Install CSS Page Weaver and plugins with package manager** + +```bash +./weaver_manager.sh --install +``` + +**Get update with package manager** + +```bash +./weaver_manager.sh --pull +``` + +See [Package Manager repository](https://gitlab.com/csspageweaver-toolkit/package_manager) and [further documentation on managing your installation](https://gitlab.com/csspageweaver/csspageweaver/-/wikis/maintain_and_develop/core/5-manage_csspageweaver_integration) + + + +## 🔄 Customization + +### Basic Information + +Edit `csspageweaver/manifest.json` to declare: +- Plugins +- Plugins configuration +- Stylesheets +- Your custom hooks + +### CSS Page Weaver behavior (advanced) + +Edit `csspageweaver/main.js` to: +- disable Common dictionary +- disable Interface +- Choose render method + +## 🎓 Documentation + +A complete [documentation is available](https://gitlab.com/csspageweaver/csspageweaver/-/wikis/home) + +## 📝 License + +This project is licensed under the MIT License + +## 👏 Acknowledgements + +CSS Page Weaver is based on [PagedJs](https://pagedjs.org/about/) by Coko Foundation. + +CSS Page Weaver is an original idea of Julie Blanc ehanced by Benjamin G. +Julien Taquet was a great help in reimagining the rendering module. Finally, Nicolas Taffin and Julien Bidoret helped to oversee this tool. + +All CSS Page Weaver plugins remains linked to their original creators. +Without them, GUI would remain an empty shell. Thanks 🙏 + +## 🙌 Contributing + +Features and documentation requests are welcome! Feel free to check the [issues page](https://gitlab.com/csspageweaver/csspageweaver/-/issues). + +Contributions must follow our [code of conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) \ No newline at end of file diff --git a/csspageweaver/interface/css/grid.css b/csspageweaver/interface/css/grid.css new file mode 100644 index 0000000..561d174 --- /dev/null +++ b/csspageweaver/interface/css/grid.css @@ -0,0 +1,46 @@ +@media print { + + + + /* Size and marin for all pages ------------- */ + @page { + size: 148mm 210mm; + margin-top: 20mm; + margin-bottom: 20mm; + bleed: 6mm; + marks: crop; + @bottom-center{ + content: counter(page); + } + } + + figure, img{ + width: 100%; + } + + +} + + +*{ + margin: 0; + padding: 0; +} + + +#image-full{ + --pagedjs-full-page: spread; + width: 100%; + height: 100%; +} + +#image-full img{ + width: 100%; + height: 100%; + object-fit: cover; +} + + +.pagedjs_note{ + color: red; +} \ No newline at end of file diff --git a/csspageweaver/interface/css/interface.css b/csspageweaver/interface/css/interface.css new file mode 100644 index 0000000..dda88e6 --- /dev/null +++ b/csspageweaver/interface/css/interface.css @@ -0,0 +1,136 @@ +/* CSS for Paged.js interface – v0.2 +Julie Blanc - 2020 +MIT License https://opensource.org/licenses/MIT +A simple stylesheet to see pages on screen (with baseline included) +Adapted for this project */ + + +/* Change the look */ +:root { + --color-background: #efefef; + --color-pageSheet: #cfcfcf; + --color-pageBox: violet; + --color-paper: white; + --pagedjs-crop-color: #000; + --pagedjs-crop-stroke: 1px; + --color-preview: #222; + --pagedjs-margin-interface: 20px; + --pagedjs-header-height: 80px; + + /* --pagedjs-bleed-left-right: 0mm!important; */ +} + +.pagedjs_marks-crop{ + z-index: 999999999999; +} + +/* To define how the book look on the screen: */ +@media screen, pagedjs-ignore { + body { + background-color: var(--color-background); + padding-left: var(--pagedjs-margin-interface); + padding-right: var(--pagedjs-margin-interface); + min-width: calc(var(--pagedjs-width) * 2 + var(--pagedjs-margin-interface)*2); + } + body.no-spread{ + min-width: calc(var(--pagedjs-width) + var(--pagedjs-margin-interface)*2); + + } + + .pagedjs_pages { + display: flex; + width: calc(var(--pagedjs-width) * 2); + flex: 0; + flex-wrap: wrap; + margin: 0 auto; + margin-bottom: var(--pagedjs-header-height); + margin-top: var(--pagedjs-header-height); + + } + + .pagedjs_page { + background-color: var(--color-paper); + box-shadow: 0 0 0 1px var(--color-pageSheet); + margin: 0; + flex-shrink: 0; + flex-grow: 0; + margin-top: 10mm; + } + + .pagedjs_first_page { + margin-left: calc(var(--pagedjs-width) - var(--pagedjs-bleed-left)); + } + + .pagedjs_page:last-of-type { + margin-bottom: 10mm; + } + + .pagedjs_pagebox{ + box-shadow: 0 0 0 1px var(--color-pageBox); + } + + .pagedjs_left_page{ + z-index: 20; + width: calc(var(--pagedjs-bleed-left) + var(--pagedjs-pagebox-width))!important; + } + + /* .pagedjs_left_page .pagedjs_sheet{ + z-index: 20; + width: calc(var(--pagedjs-bleed-left) + var(--pagedjs-pagebox-width) + 1px)!important; + } */ + + .pagedjs_left_page .pagedjs_bleed-right .pagedjs_marks-crop { + border-color: transparent; + } + + + .pagedjs_left_page .pagedjs_bleed-right .pagedjs_marks-middle{ + width: 0; + } + + .pagedjs_right_page{ + z-index: 10; + position: relative; + left: calc(var(--pagedjs-bleed-left)*-1); + } + + /* show the margin-box */ + + .pagedjs_margin-top-left-corner-holder, + .pagedjs_margin-top, + .pagedjs_margin-top-left, + .pagedjs_margin-top-center, + .pagedjs_margin-top-right, + .pagedjs_margin-top-right-corner-holder, + .pagedjs_margin-bottom-left-corner-holder, + .pagedjs_margin-bottom, + .pagedjs_margin-bottom-left, + .pagedjs_margin-bottom-center, + .pagedjs_margin-bottom-right, + .pagedjs_margin-bottom-right-corner-holder, + .pagedjs_margin-right, + .pagedjs_margin-right-top, + .pagedjs_margin-right-middle, + .pagedjs_margin-right-bottom, + .pagedjs_margin-left, + .pagedjs_margin-left-top, + .pagedjs_margin-left-middle, + .pagedjs_margin-left-bottom { + box-shadow: 0 0 0 1px inset var(--color-marginBox); + } + +} + + + +.note { + float: footnote; +} + +/* define the position of the footnote on the page (only bottom is possible for now) */ + +@page { + @footnote { + float: bottom; + } +} \ No newline at end of file diff --git a/csspageweaver/interface/css/panel.css b/csspageweaver/interface/css/panel.css new file mode 100644 index 0000000..f7abe62 --- /dev/null +++ b/csspageweaver/interface/css/panel.css @@ -0,0 +1,532 @@ +@import url("../fonts/IBM_Plex_Mono/stylesheet.css"); + +@media print{ + csspageweaver-gui{ + display: none; + } +} + +@media screen, pagedjs-ignore { + + + /* TOGGLE PANEL ----------------------------------- */ + #cssPageWeaver_toggle-panel ~ #cssPageWeaver_panel{ display: none; } + #cssPageWeaver_toggle-panel + label #panel-open{ display: none; } + + #cssPageWeaver_toggle-panel:checked ~ #cssPageWeaver_panel{ display: block; } + #cssPageWeaver_toggle-panel:checked + label #panel-open{ display: block; } + #cssPageWeaver_toggle-panel:checked + label #panel-closed{ display: none; } + + #cssPageWeaver_toggle-panel{ display: none; } + + + /* STYLE ----------------------------------- */ + :root{ + --cssPageWeaver-font:'IBM Plex Mono'; + --cssPageWeaver-size: 16px; + --cssPageWeaver-fixed: 30px; + + /* --cssPageWeaver-color-border: #8fb6b0; + --cssPageWeaver-color-accent: #EE6C4D; + --cssPageWeaver-color-accent-hover: #852811; + --cssPageWeaver-color-text: #464f4e; + --cssPageWeaver-color-bg: #f8f8f2; */ + + + /* --cssPageWeaver-color-accent: #EE6C4D; + --cssPageWeaver-color-accent-hover: #852811; + --cssPageWeaver-color-border: #86766e; + --cssPageWeaver-color-text: #4f4946; + --cssPageWeaver-color-bg: #efefef; */ + + --cssPageWeaver-color-accent: RebeccaPurple; + --cssPageWeaver-color-accent-hover: BlueViolet; + --cssPageWeaver-color-border: #836e86; + --cssPageWeaver-color-border-light: #999999; + --cssPageWeaver-color-text: #4e464f; + --cssPageWeaver-color-bg: #f1f0f0; + + --cssPageWeaver-radius: 5px; + } + + + /* Toggle button -------------------------------------------- */ + + #cssPageWeaver_toggle-panel + label{ + background-color: var(--cssPageWeaver-color-bg); + border: 2px solid var(--cssPageWeaver-color-border); + border-radius: var(--cssPageWeaver-color-radius); + + --size: 30px; + width: var(--size); + height: var(--size); + + display: flex; + align-items: center; + justify-content: center; + font-size: 1.25em; + + color: var(--cssPageWeaver-color-text); + //border-radius: var(--cssPageWeaver-radius); + + transition: border-radius .25s ease-in-out; + + } + + #cssPageWeaver_toggle-panel:checked + label{ + border-top-left-radius: var(--cssPageWeaver-radius); + } + + + /* CONTAINER -------------------------------------------- */ + + csspageweaver-gui *{ + margin: 0; + padding: 0; + + } + + + csspageweaver-gui{ + font-family: var(--cssPageWeaver-font); + color: var(--cssPageWeaver-color-text); + font-size: var(--cssPageWeaver-size); + } + + csspageweaver-gui label, + csspageweaver-gui button{ + cursor: pointer!important; + } + + #cssPageWeaver_toggle-panel + label{ + position: fixed; + left: var(--cssPageWeaver-fixed); + top: var(--cssPageWeaver-fixed); + width: 30px; + left: 30px; + z-index: 9000; + } + + #cssPageWeaver_panel{ + width: 296px; + background-color: var(--cssPageWeaver-color-bg); + border: 2px solid var(--cssPageWeaver-color-border); + border-radius: var(--cssPageWeaver-radius); + position: fixed; + left: var(--cssPageWeaver-fixed); + top: var(--cssPageWeaver-fixed); + z-index: 8900; + padding: 1em 1em .5em 1em; + + max-height: 80vh; + max-height: calc(100vh - 5rem); + overflow: scroll; + + } + + + /* panel-group ------------------------------------- */ + + + #cssPageWeaver_panel .panel-group{ + margin: 0; + padding-top: 1.25em; + } + #cssPageWeaver_panel .panel-group:not(:last-of-type){ + border-bottom: 1px solid var(--cssPageWeaver-color-border); + padding-bottom: 1.25em; + } + + + + /* panel-group-title ------------------------------------- */ + + #cssPageWeaver_panel h1, + #cssPageWeaver_panel button, + #cssPageWeaver_panel p, + #cssPageWeaver_panel svg, + #cssPageWeaver_panel label{ + all: initial; + all: unset; + } + + + #cssPageWeaver_panel .panel-group-title{ + display: grid; + grid-template-columns: auto 1ch 1fr; + grid-gap: .5ch; + } + + #cssPageWeaver_panel h1 span{ + font-size: 0.75em; + } + + + #cssPageWeaver_panel .panel-group-title:not(:empty) + *{ + margin-top: 1.25em; + } + + #cssPageWeaver_panel .panel-group-title h1{ + font-size: 1em; + font-weight: 600; + margin: 0; + } + + #cssPageWeaver_panel .panel-group-title input{ + display: none; + } + #cssPageWeaver_panel .panel-group-title label{ + grid-column: -1; + } + + #cssPageWeaver_panel .panel-group-title label span{ + /* color: var(--cssPageWeaver-color-accent); */ + font-size: 16px; + border: 1.5px solid var(--cssPageWeaver-color-accent); + padding: 0.25ch 1ch 0.5ch 1ch; + min-width: 4ch; + text-align: center; + + font-size: 0.8em; + font-weight: 500; + border-radius: var(--cssPageWeaver-radius); + + background-color: var(--cssPageWeaver-color-accent); + border-color: var(--cssPageWeaver-color-accent); + color: var(--cssPageWeaver-color-bg); + + font-style: italic; + + } + + #cssPageWeaver_panel .panel-group-title label span:hover{ + background-color: var(--cssPageWeaver-color-accent-hover); + border-color: var(--cssPageWeaver-color-accent-hover); + color: var(--cssPageWeaver-color-bg); + + } + + #cssPageWeaver_panel .panel-group-title input:not(:checked) + label[id*="toggle"] span.button-see{ + background-color: var(--cssPageWeaver-color-bg); + color: var(--cssPageWeaver-color-accent); + } + + #cssPageWeaver_panel .panel-group-title input:checked + label[id*="toggle"] span.button-hide{ + background-color: var(--cssPageWeaver-color-bg); + color: var(--cssPageWeaver-color-accent); + } + + /* INFO BOX ---------------------------------- */ + #cssPageWeaver_panel .panel-group-title details{ + position: relative; + } + #cssPageWeaver_panel .panel-group-title summary{ + color: var(--cssPageWeaver-color-text); + //border: 1px solid black; + //border-radius: 1rem; + width: 1rem; + font-size: .8em; + height: 1rem; + text-align: center; + cursor: pointer; + opacity: .3; + line-height: 160%; + } + + #cssPageWeaver_panel .panel-group-title details summary::marker { + display: none; + content: ""; + border: 1px solid currentColor; + } + +} + +#cssPageWeaver_panel .panel-group-title details p{ + position: absolute; + background: var(--cssPageWeaver-color-bg); + padding: .5ch; + width: max-content; + max-width: 10rem; + font-size: .7rem; + margin-top: .5ch; + border: 1px solid var(--cssPageWeaver-color-accent); + border-radius: .2ch; + top: -50%; + left: 2em; + transform: translateX(0%); +} + + +/* panel-group-values ---------------------------------- */ + +#cssPageWeaver_panel .panel-group-values{ + margin-top: 0.5em; + margin-bottom: 0.5em; + display: flex; + align-items: center; + justify-content: space-between; +} + + +/* INPUT NUMBER ---------------------------------- */ + + +#cssPageWeaver_panel input[type="number"]{ + font-family: var(--cssPageWeaver-font)!important; + color: var(--cssPageWeaver-color-text); + width: 8ch; + background-color: transparent!important; + border: 1px solid var(--cssPageWeaver-color-text); + font-size: calc(var(--cssPageWeaver-size)*0.9); + padding-left: 0.5ch; +} + +#cssPageWeaver_panel input[type="number"]:focus, +#cssPageWeaver_panel input[type="number"]:focus-visible{ + border: 1px solid var(--cssPageWeaver-color-accent)!important; + outline: none; +} + + +/* INPUT CHECKBOX ---------------------------------- */ + +#cssPageWeaver_panel input[type="checkbox"], +#cssPageWeaver_panel input[type="radio"]{ display: none; } + +#cssPageWeaver_panel input + label:not([id*="toggle"])::before{ + content: ""; + --size: 12px; + width: var(--size); + height: var(--size); + display: inline-block; + box-sizing: border-box; + border: 1.5px solid var(--cssPageWeaver-color-text); + margin-right: 1ch; + +} + +#cssPageWeaver_panel input:checked + label{ + color: var(--cssPageWeaver-color-accent); +} + +#cssPageWeaver_panel input:checked + label::before{ + border: 5px solid var(--cssPageWeaver-color-accent); +} + +#cssPageWeaver_panel input + label:hover{ + color: var(--cssPageWeaver-color-accent-hover); +} + +#cssPageWeaver_panel input + label:hover::before{ + border: 1.5px solid var(--cssPageWeaver-color-accent-hover); +} + +#cssPageWeaver_panel input[type="radio"]:checked + label:hover::before{ + border: 5px solid var(--cssPageWeaver-color-accent); +} +#cssPageWeaver_panel input[type="radio"]:checked + label:hover{ + color: var(--cssPageWeaver-color-accent); +} +#cssPageWeaver_panel input[type="checkbox"] + label:hover::before{ + border: 5px solid var(--cssPageWeaver-color-accent-hover); +} + +/* INPUT RADIO ---------------------------------- */ + + #cssPageWeaver_panel input[type="radio"] + label{ + margin-bottom: 0.5em; +} + +/* exception */ +/*#cssPageWeaver_panel #baseline-toggle + label::before{ display: none; } +*/ + +/* BUTTONS-GROUP ------------------------------------------- */ + +#cssPageWeaver_panel .buttons-group button, +#cssPageWeaver_panel .buttons-group .button{ + display: inline-block; + --size: 40px; + background-color: transparent; + border: 1.5px solid var(--cssPageWeaver-color-accent); + border-radius: var(--cssPageWeaver-radius); + box-sizing: border-box; + + color: var(--cssPageWeaver-color-accent); + + width: var(--size); + height: var(--size); + + text-align: center; + vertical-align: middle; + text-decoration: none; +} + +#cssPageWeaver_panel .buttons-group .button:not(:has(*)){ + padding: .5em 0; +} + +#cssPageWeaver_panel .buttons-group input{ + display: none; +} + +#cssPageWeaver_panel .buttons-group button svg, +#cssPageWeaver_panel .buttons-group .button svg{ + fill: var(--cssPageWeaver-color-accent); + padding: 0.25em; +} + +#cssPageWeaver_panel .buttons-group{ + display: flex; + justify-content: flex-start; + align-items: center; + gap: 1ch; +} + +#cssPageWeaver_panel .buttons-group.align-right{ + justify-content: flex-end; +} + +#cssPageWeaver_panel .panel-group-title:not(:empty) + .buttons-group{ + padding-top: 0.25em; + margin-top: .5em; +} + +#cssPageWeaver_panel .buttons-group .force-right{ + text-align: right; + flex-grow: 1; +} + +#panel-buttons .buttons-group{ + padding-top: 1.25em; + display: flex; +} + + +#panel-buttons .buttons-group button, +#panel-buttons .buttons-group .button{ + margin-left: 0.5em; +} + +#cssPageWeaver_panel input + label.label-block{ + display: block; + margin-top: 1rem; +} + +#cssPageWeaver_panel .panel-group-title.button-toggle label::before{ display: none!important; } + +/* CHECKED BUTTONS --------------------------------------- */ + +#cssPageWeaver_panel .buttons-group input:checked + button, +#cssPageWeaver_panel .buttons-group input:checked + .button{ + background-color: var(--cssPageWeaver-color-accent); + border-color: var(--cssPageWeaver-color-accent); + cursor: pointer; +} +#cssPageWeaver_panel .buttons-group input:checked + button svg, +#cssPageWeaver_panel .buttons-group input:checked + .button svg{ + fill: var(--cssPageWeaver-color-bg); +} + +/* TOGGLE LABEL ICONS --------------------------------------- */ + +#cssPageWeaver_panel input[id*="toggle"] + .buttons-group{ + margin-top: 1rem; +} + +#cssPageWeaver_panel input[id*="toggle"]:checked + .buttons-group .button:nth-of-type(1), +#cssPageWeaver_panel input[id*="toggle"]:not(:checked) + .buttons-group .button:nth-of-type(2){ + background-color: var(--cssPageWeaver-color-accent); + border-color: var(--cssPageWeaver-color-accent); +} + +#cssPageWeaver_panel input[id*="toggle"]:checked + .buttons-group .button:nth-of-type(1) svg, +#cssPageWeaver_panel input[id*="toggle"]:not(:checked) + .buttons-group .button:nth-of-type(2) svg{ + fill: var(--cssPageWeaver-color-bg); +} + +/* DETAILS CONTAINER< ------------------- */ + +[data-open-container*="details"] ~ [id*="details"]{ + box-sizing: border-box; + position: relative; + top: 1em; + + max-height: 0px; + overflow: hidden; + transition: max-height 1s; +} + +[data-open-container*="details"]:checked ~ [id*="details"]{ + max-height: 100vh; + margin-bottom: 0.5em; + border-top: .5px solid var(--cssPageWeaver-color-border-light); +} + + +/* HOVER BUTTONS ------------------------------------------------------------ */ + +#cssPageWeaver_panel .buttons-group button:hover, +#cssPageWeaver_panel .buttons-group .button:hover{ + background-color: var(--cssPageWeaver-color-accent-hover)!important; + border-color: var(--cssPageWeaver-color-accent-hover)!important; +} +#cssPageWeaver_panel .buttons-group button:hover svg, +#cssPageWeaver_panel .buttons-group .button:hover svg{ + fill: var(--cssPageWeaver-color-bg)!important; +} + +/* SHORTCUT ------------------------------------------------------------ */ + +#cssPageWeaver_panel .shortcut-list{ + list-style: none; + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: .25em; + margin-top: .5em; +} +#cssPageWeaver_panel .shortcut-list li{ + font-size: .75em; + color: var(--cssPageWeaver-color-text); + border: 1px solid; + border-radius: .25em; + padding: .2em; + cursor: help; + opacity: .5; +} + +/* List hidden hooks ------------------------------------------------------------ */ + +#cssPageWeaver_panel #hidden-features h1 { + font-weight: bold; + margin-bottom: .5em; + +} +#cssPageWeaver_panel #hidden-features summary { + display: flex; + flex-direction: row; + justify-content: space-between; + padding-top: 1em; + font-size: .75rem; + cursor: pointer; +} +#cssPageWeaver_panel #hidden-features ul{ + list-style: none; + font-size: .75rem; + display: flex; + flex-wrap: wrap; + gap: .75em; +} +#cssPageWeaver_panel #hidden-features ul li{ + margin-bottom: .25em; + color: var(--cssPageWeaver-color-bg); + padding: .2em .4em; + border-radius: .2em; + background: var(--cssPageWeaver-color-accent); + font-style: italic; +} + +#cssPageWeaver_panel #hidden-features summary::marker { + display: none; +} \ No newline at end of file diff --git a/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff b/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..4074b4738c88789120a1c77bfbe409a1be8ba20c GIT binary patch literal 56520 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 HdwBm3N6N=_ literal 0 HcmV?d00001 diff --git a/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff2 b/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..88e4e8b69a189f90bb665ea5464ad4b1c09b3692 GIT binary patch literal 39964 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