From d0f2a42cd3b9d743482a1152d336062d034e123c Mon Sep 17 00:00:00 2001 From: Marcell Mars Date: Mon, 18 Apr 2022 15:58:41 +0200 Subject: [PATCH] latest version in _vendor --- .../Drawwell/SandpointsEditPage/package.json | 22 + .../SandpointsEditPage/public/global.css | 260 +++ .../SandpointsEditPage/public/index.html | 16 + .../assets/css/postcss.config.js | 8 +- .../SandpointsTheme/assets/css/site.css | 235 +-- .../SandpointsTheme/assets/js/sandpoints.js | 61 +- .../data/sandpointsnamegraph.json | 56 +- .../_default/_markup/render-heading.html | 2 +- .../_default/_markup/render-image.html | 24 +- .../layouts/_default/baseof.html | 4 +- .../layouts/_default/list.html | 15 +- .../SandpointsTheme/layouts/edit/baseof.html | 14 + .../SandpointsTheme/layouts/edit/list.html | 2 + .../SandpointsTheme/layouts/edit/single.html | 1 + .../layouts/metadata/list.js.js | 21 +- .../layouts/partials/head.html | 19 +- .../layouts/partials/header.html | 10 + .../layouts/partials/pagedjs.html | 3 + .../layouts/partials/printsinglebody.html | 96 + .../layouts/partials/readdir.html | 13 + .../layouts/partials/sandpointjs.html | 2 +- .../layouts/partials/scratch.html | 34 +- .../layouts/partials/singlebody.html | 64 +- .../SandpointsTheme/layouts/print/baseof.html | 4 +- .../SandpointsTheme/layouts/print/single.html | 153 +- .../layouts/taxonomy/baseof.html | 12 + .../layouts/taxonomy/list.html | 23 + .../SandpointsTheme/layouts/urls/list.html | 142 +- .../SandpointsTheme/static/css/print.css | 242 +++ .../SandpointsTheme/static/css/site.min.css | 2 +- .../static/js/paged.polyfill.js | 1654 +++++++++++++---- .../static/js/pagedjsCustomizations.js | 100 + .../SandpointsTheme/static/logo/800x418.png | Bin 0 -> 21285 bytes .../SandpointsTheme/static/logo/800x800.png | Bin 0 -> 38346 bytes .../SandpointsTheme/static/logo/index.html | 145 ++ _vendor/modules.txt | 3 +- config.toml | 108 +- 37 files changed, 2851 insertions(+), 719 deletions(-) create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/package.json create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/global.css create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/index.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/baseof.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/list.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/single.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/printsinglebody.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/readdir.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/baseof.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/list.html create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/print.css create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/pagedjsCustomizations.js create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/800x418.png create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/800x800.png create mode 100644 _vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/index.html diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/package.json b/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/package.json new file mode 100644 index 0000000..48e3d60 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/package.json @@ -0,0 +1,22 @@ +{ + "name": "svelte-app", + "version": "1.0.0", + "scripts": { + "build": "rollup -c", + "dev": "rollup -c -w", + "start": "sirv public" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.0.0", + "rollup": "^2.3.4", + "rollup-plugin-css-only": "^3.1.0", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-svelte": "^7.0.0", + "rollup-plugin-terser": "^7.0.0", + "svelte": "^3.0.0" + }, + "dependencies": { + "sirv-cli": "^1.0.0" + } +} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/global.css b/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/global.css new file mode 100644 index 0000000..52ddc73 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/global.css @@ -0,0 +1,260 @@ +html, body { + position: relative; + width: 100%; + height: 100%; +} + +body { + color: #333; + margin: 0; + padding: 8px; + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +a { + color: rgb(0,100,200); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:visited { + color: rgb(0,80,160); +} + +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + -webkit-padding: 0.4em 0; + padding: 0.4em; + margin: 0 0 0.5em 0; + box-sizing: border-box; + border: 1px solid #ccc; + border-radius: 2px; +} + +input:disabled { + color: #ccc; +} + +button { + color: #333; + background-color: #f4f4f463; + outline: none; + padding: 0.1rem 0.1rem; + margin-left: 0.3rem; +} + +button:disabled { + color: #999; +} + +button:disabled:hover { + cursor: default; +} + +button:not(:disabled):active { + background-color: #ddd; +} + +button:focus { + border-color: #666; +} + +button:hover, .newtierbutton:hover { + cursor: pointer; +} +/* custom part */ + +.newtierbutton { + color: #000; + background-color: #dddddd; + padding: 0.2em 0.4em; + grid-column: 2/3; + margin-right: 0.2rem; +} + + +.formgrid { + display: grid; + grid-template-columns: auto 1fr; + grid-gap: 1rem; + margin-top: 1rem; +} + +#sandpoints { + width: 80%; + margin-left: 1rem; + margin-top: 1rem; +} + +label, .filepath { + grid-column: 1/2; + text-transform: capitalize; + align-self: center +} + +.labelcontent { + align-self: auto; +} + +.labeloffline { + margin-top: -0.4rem; +} + +input[readonly] { + color: #000000b3; + background: #00000012; + border: 0px; +} + +input, button, textarea, .selecttier, .relpath { + grid-column: 2/3; +} + +textarea { + height: 10rem; +} + +.hasinput { + line-height: 0.2rem; + border: 0px; + padding: 0px; + margin: 0px; + font-weight: bold; +} + +.hasinput:focus { + outline: none; +} + +.tierline { + display: flex; + align-items: baseline; +} + +.tiertitle { + font-style: italic; +} + +.buttons { + display: flex; + margin-left: auto; + padding-left: 0.2rem; +} + +select { + align-self: start; + border: 0; + padding: 0.1rem; +} + +.selecttier { + margin-top: 0.5rem; +} + +.buttons button { + border: solid #999 1px; + padding: 0; + padding-left: 0.1rem; + padding-right: 0.1rem; + margin: 1px; +} + +.filepath { + font-size: large; + font-style: italic; + margin-bottom: 1rem; +} + +.relpath { + font-size: large; + font-weight: bold; +} + +.tierbox, #selecthas { + margin-top: 0.5rem; +} + +.fmHidden { + display: none; +} + +.fmShown { + display: block; +} + +.fmMetaTitle { + margin-bottom: 0.3rem; + text-transform: capitalize; + display: block; + text-align: right; + font-size: smaller; + padding-top: 0.2rem; +} + +.fmMeta { + border-bottom: 2px #0000001a solid; + border-right: 1px #0000001a solid; + padding-bottom: 1rem; + margin-bottom: 0.5rem; + background: #ffffff1c; + padding-right: 0.2rem; +} + +.fmItem { + display: grid; + grid-template-columns: auto 1fr; + grid-gap: 1rem; +} + +.fmCollapse, .fmExpand { + padding-top: 0.2rem; + margin-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.fmExpand:hover, .fmCollapse:hover { + cursor: pointer; +} + +.fmCollapse::before { + margin-right: 0.3rem; + content: "⇲"; +} + +.fmExpand::before { + margin-right: 0.3rem; + content: "⇱"; +} + +#fmicon, #frontmatter, input.hasinput { + background-color: #ffccbc; + padding-right: 0.3rem; + padding-left: 0.3rem; + padding-bottom: 0.3rem; +} + +.newtiers { + display: none; +} + +#newtierstitle { + margin-right: 0.4rem; + display: block; +} + +.newtiersbar { + padding-bottom: 0.4rem; + padding-top: 0.4rem; + margin-left: auto; + display: flex; + border-bottom: 2px #0000001a solid; + border-right: 1px #0000001a solid; + justify-content: flex-end; + align-items: center; + background: #00000008; +} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/index.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/index.html new file mode 100644 index 0000000..fead626 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsEditPage/public/index.html @@ -0,0 +1,16 @@ + + + + + + + Sandpoints Edit Page + + + + + + + + + diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/postcss.config.js b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/postcss.config.js index 3a62dc9..5096b80 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/postcss.config.js +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/postcss.config.js @@ -5,9 +5,9 @@ module.exports = { require('postcss-import')({ path: [themeDir] }), - require('autoprefixer')({ - grid: true - }), - require('postcss-reporter'), + /* require('autoprefixer')({ + * grid: true + * }), + * require('postcss-reporter'), */ ] } diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/site.css b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/site.css index cfc4cd0..e2ea2b2 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/site.css +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/css/site.css @@ -90,18 +90,18 @@ th:not([align]) { src: url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff") format("woff"), - /* Modern Browsers */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.svg#VollkornSC") - format("svg"); + url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff") format("woff"), + /* Modern Browsers */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-regular.svg#VollkornSC") + format("svg"); /* Legacy iOS */ } @@ -114,17 +114,17 @@ th:not([align]) { src: url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff") format("woff"), - /* Modern Browsers */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.svg#VollkornSC") - format("svg"); + url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff") format("woff"), + /* Modern Browsers */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-600.svg#VollkornSC") + format("svg"); /* Legacy iOS */ } @@ -137,17 +137,17 @@ th:not([align]) { src: url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff") format("woff"), - /* Modern Browsers */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.svg#VollkornSC") - format("svg"); + url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff") format("woff"), + /* Modern Browsers */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-700.svg#VollkornSC") + format("svg"); /* Legacy iOS */ } @@ -160,17 +160,17 @@ th:not([align]) { src: url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff") format("woff"), - /* Modern Browsers */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.svg#VollkornSC") - format("svg"); + url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff") format("woff"), + /* Modern Browsers */ url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-sc-v4-latin-ext_latin-900.svg#VollkornSC") + format("svg"); /* Legacy iOS */ } @@ -183,18 +183,18 @@ th:not([align]) { src: url("../fonts/vollkorn-v12-latin-ext_latin-500italic.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-v12-latin-ext_latin-500italic.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-500italic.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-v12-latin-ext_latin-500italic.woff") format("woff"), - /* Modern Browsers */ - url("../fonts/vollkorn-v12-latin-ext_latin-500italic.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-v12-latin-ext_latin-500italic.svg#Vollkorn") - format("svg"); + url("../fonts/vollkorn-v12-latin-ext_latin-500italic.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-500italic.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-v12-latin-ext_latin-500italic.woff") format("woff"), + /* Modern Browsers */ + url("../fonts/vollkorn-v12-latin-ext_latin-500italic.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-v12-latin-ext_latin-500italic.svg#Vollkorn") + format("svg"); /* Legacy iOS */ } @@ -207,18 +207,18 @@ th:not([align]) { src: url("../fonts/vollkorn-v12-latin-ext_latin-regular.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-v12-latin-ext_latin-regular.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-regular.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-v12-latin-ext_latin-regular.woff") format("woff"), - /* Modern Browsers */ - url("../fonts/vollkorn-v12-latin-ext_latin-regular.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-v12-latin-ext_latin-regular.svg#Vollkorn") - format("svg"); + url("../fonts/vollkorn-v12-latin-ext_latin-regular.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-regular.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-v12-latin-ext_latin-regular.woff") format("woff"), + /* Modern Browsers */ + url("../fonts/vollkorn-v12-latin-ext_latin-regular.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-v12-latin-ext_latin-regular.svg#Vollkorn") + format("svg"); /* Legacy iOS */ } @@ -231,17 +231,17 @@ th:not([align]) { src: url("../fonts/vollkorn-v12-latin-ext_latin-500.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-v12-latin-ext_latin-500.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-500.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-v12-latin-ext_latin-500.woff") format("woff"), - /* Modern Browsers */ url("../fonts/vollkorn-v12-latin-ext_latin-500.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-v12-latin-ext_latin-500.svg#Vollkorn") - format("svg"); + url("../fonts/vollkorn-v12-latin-ext_latin-500.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-500.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-v12-latin-ext_latin-500.woff") format("woff"), + /* Modern Browsers */ url("../fonts/vollkorn-v12-latin-ext_latin-500.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-v12-latin-ext_latin-500.svg#Vollkorn") + format("svg"); /* Legacy iOS */ } @@ -254,17 +254,17 @@ th:not([align]) { src: url("../fonts/vollkorn-v12-latin-ext_latin-italic.eot"); /* IE9 Compat Modes */ src: local(""), - url("../fonts/vollkorn-v12-latin-ext_latin-italic.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-italic.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/vollkorn-v12-latin-ext_latin-italic.woff") format("woff"), - /* Modern Browsers */ - url("../fonts/vollkorn-v12-latin-ext_latin-italic.ttf") format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/vollkorn-v12-latin-ext_latin-italic.svg#Vollkorn") - format("svg"); + url("../fonts/vollkorn-v12-latin-ext_latin-italic.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/vollkorn-v12-latin-ext_latin-italic.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/vollkorn-v12-latin-ext_latin-italic.woff") format("woff"), + /* Modern Browsers */ + url("../fonts/vollkorn-v12-latin-ext_latin-italic.ttf") format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/vollkorn-v12-latin-ext_latin-italic.svg#Vollkorn") + format("svg"); /* Legacy iOS */ } @@ -277,18 +277,18 @@ th:not([align]) { src: url("../fonts/great-vibes-v7-latin-ext_latin-regular.eot"); /* IE9 Compat Modes */ src: local("Great Vibes"), local("GreatVibes-Regular"), - url("../fonts/great-vibes-v7-latin-ext_latin-regular.eot?#iefix") - format("embedded-opentype"), - /* IE6-IE8 */ url("../fonts/great-vibes-v7-latin-ext_latin-regular.woff2") - format("woff2"), - /* Super Modern Browsers */ - url("../fonts/great-vibes-v7-latin-ext_latin-regular.woff") format("woff"), - /* Modern Browsers */ - url("../fonts/great-vibes-v7-latin-ext_latin-regular.ttf") - format("truetype"), - /* Safari, Android, iOS */ - url("../fonts/great-vibes-v7-latin-ext_latin-regular.svg#GreatVibes") - format("svg"); + url("../fonts/great-vibes-v7-latin-ext_latin-regular.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("../fonts/great-vibes-v7-latin-ext_latin-regular.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("../fonts/great-vibes-v7-latin-ext_latin-regular.woff") format("woff"), + /* Modern Browsers */ + url("../fonts/great-vibes-v7-latin-ext_latin-regular.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("../fonts/great-vibes-v7-latin-ext_latin-regular.svg#GreatVibes") + format("svg"); /* Legacy iOS */ } @@ -477,8 +477,11 @@ ol li { list-style-type: decimal; } -img { - width: 100%; +img, video { + max-width: 100%; + display: block; + margin-left: auto; + margin-right: auto; } .supt { @@ -575,9 +578,9 @@ img { .rightcolumn { /* display: grid; - grid-column: 2; - grid-template-columns: auto 1fr; - grid-auto-rows: max-content; */ + grid-column: 2; + grid-template-columns: auto 1fr; + grid-auto-rows: max-content; */ padding-left: 0.5rem; } @@ -592,6 +595,7 @@ img { .hasauthors { font-size: 1.6rem !important; + display: flex; } .hassup { @@ -669,7 +673,7 @@ h6 { padding-top: 1.2rem; padding-bottom: 1.2rem; background-color: rgba(0, 0, 0, 0.05); - max-width: 70ch; + max-width: 45ch; } .authors { @@ -775,7 +779,7 @@ h6:before { color: rgba(0, 0, 0, 0.4); counter-increment: h6; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." - counter(h6) ". "; + counter(h6) ". "; } h2.nocount:before, @@ -834,9 +838,9 @@ details { } /* .glossline { - border-bottom: lightgray solid 1px; - border-top: lightgray solid 1px; -} */ + border-bottom: lightgray solid 1px; + border-top: lightgray solid 1px; + } */ .glosswords { display: inline-block; @@ -876,6 +880,11 @@ details { background-color: #fff9f9; } +.svedit { + display: none; + margin-left: 0.5rem; +} + @media (max-width: 767px) { html { box-sizing: border-box; diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/js/sandpoints.js b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/js/sandpoints.js index 1ffb04c..4d46e25 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/js/sandpoints.js +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/assets/js/sandpoints.js @@ -54,7 +54,48 @@ window.addEventListener("scroll", function (e) { } }); +function editPage(repoJsId) { + let relPath = "../".repeat(relPathDepth - 1); + var el = document.createElement('script'); + el.onload = ()=> { + console.log("loading...") + console.log(repo) + } + el.src = `${relPath}js/repo/${repoJsId}.js` + document.body.appendChild(el) + document.location.href = `${relPath}edit/index.html?edit=${repoJsId}` +ev} + +window.addEventListener("keyup", (e)=> { + if (e.key == "e" && location.protocol == "file:") { + editPage(sandpointsPageId) + } else if (e.key == "E" && location.protocol == "file:") { + let preview = document.querySelector("#preview"); + if (preview.style.display == "flex") { + preview.style.display = "none"; + } else { + preview.style.display = "flex"; + } + console.log("preview: ", preview); + } +}) + window.addEventListener("DOMContentLoaded", (e) => { + if (location.protocol == "file:") { + document.querySelectorAll(".svedit").forEach((i) => { + i.style.display = "inline"; + }) + } + + document.querySelectorAll('.triadlink').forEach((i) => { + i.addEventListener("click", (ev) => { + if (ev.ctrlKey) { + ev.preventDefault() + editPage(ev.target.getAttribute("repoid")) + } + }) + }) + let preview = document.querySelector("#preview"); if ( location.pathname.split("/").includes("_preview") || @@ -66,15 +107,17 @@ window.addEventListener("DOMContentLoaded", (e) => { let par = document.querySelector( "#TableOfContents > ol:first-child > li:first-child" ); - let s = document.createElement("span"); - s.appendChild(par.cloneNode(true)); - par.remove(); - document - .querySelector("#TableOfContents > ol:first-child") - .insertBefore( - s, - document.querySelector("#TableOfContents > ol:first-child").firstChild - ); + if (par) { + let s = document.createElement("span"); + s.appendChild(par.cloneNode(true)); + par.remove(); + document + .querySelector("#TableOfContents > ol:first-child") + .insertBefore( + s, + document.querySelector("#TableOfContents > ol:first-child").firstChild + ); + } if (document.querySelector(".soundcite")) { let relPath = "../".repeat(relPathDepth - 1); diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/data/sandpointsnamegraph.json b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/data/sandpointsnamegraph.json index a61716f..427cc44 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/data/sandpointsnamegraph.json +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/data/sandpointsnamegraph.json @@ -1,15 +1,45 @@ { - "syllabus": "syllabi", - "curriculum": "curriculums", - "book": "books", - "journal": "journals", - "topic": "topics", - "part": "parts", - "issue": "issues", - "experiment": "experiments", - "session": "sessions", - "chapter": "chapters", - "article": "articles", - "annex": "annexes", - "author": "authors" + "annex": "annexes", + "article": "articles", + "atlas": "atlases", + "author": "authors", + "book": "books", + "cabin": "cabins", + "chapter": "chapters", + "compartment": "compartments", + "contributor": "contributors", + "curriculum": "curriculums", + "deck": "decks", + "document": "documents", + "editor": "editors", + "entry": "entries", + "experiment": "experiments", + "floor": "floors", + "fragment": "fragments", + "glossary": "glossaries", + "highlight": "highlights", + "house": "houses", + "issue": "issues", + "journal": "journals", + "logbook": "logbooks", + "map": "maps", + "note": "notes", + "notebook": "notebooks", + "part": "parts", + "pin": "pins", + "record": "records", + "reflection": "reflections", + "room": "rooms", + "scribe": "scribes", + "section": "sections", + "series": "series", + "session": "sessions", + "ship": "ships", + "spectre": "spectres", + "syllabus": "syllabi", + "tab": "tabs", + "term":"terms", + "topic": "topics", + "toponym": "toponyms", + "voice": "voices" } diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-heading.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-heading.html index 0a810c7..57c5da4 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-heading.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-heading.html @@ -1 +1 @@ -{{ .Text | safeHTML }} +{{ .Text | safeHTML }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-image.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-image.html index 509776f..2955281 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-image.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/_markup/render-image.html @@ -5,7 +5,17 @@ {{ $_.Add "triads" $k }} {{- end -}} -{{- if strings.HasPrefix .Destination "bib:" -}} +{{- if strings.HasPrefix .Destination "img:" -}} + {{- $img_params := (substr .Destination 4) -}} + {{- $img_src := index (split $img_params " ") 0 -}} + {{- $img_attr := index (split $img_params $img_src) 1 -}} + +{{- else if strings.HasPrefix .Destination "vid:" -}} + {{- $vid_params := (substr .Destination 4) -}} + {{- $vid_src := index (split $vid_params " ") 0 -}} + {{- $vid_attr := index (split $vid_params $vid_src) 1 -}} + +{{- else if strings.HasPrefix .Destination "bib:" -}} {{- $destination := (substr .Destination 4) -}} {{- $c_prefix := .Page.Site.Params.sandpointsCatalogPrefix | default "/library/" -}} {{- if index $.Page.Site.Data.books.catalog $destination -}} @@ -17,21 +27,21 @@ {{ end }} {{ .Page.Scratch.Add "bibs" (slice (slice $bibhref $bibtitle)) }} {{- if not $text_link -}} - {{- delimit $b.authors ", " " & " -}}{{- with $b.pubdate -}}, {{- substr . 0 4}}{{- end -}}.bib⁄‘{{- $b.title -}}’. {{- with $b.publisher -}}{{- . -}}.{{- end -}} - {{- else -}} - {{- $text_link -}} + {{- delimit $b.authors ", " " & " -}}{{- with $b.pubdate -}}, {{- substr . 0 4}}{{- end -}}. bib⁄{{- $b.title -}}. {{- with $b.publisher -}}{{- . -}}.{{- end -}} + {{- else -}} + bib⁄{{- $text_link -}} {{- end -}} {{- else -}} - {{- $text_link -}}⦚bib:{{- $destination -}} not found + {{- $text_link -}}⦚bib:{{- $destination -}} not found {{- end -}} {{- else if in ($_.Get "triads") (index (split .Destination ":") 0) -}} {{- if $.Page.Site.GetPage (printf "/%s" (replace .Destination ":" "/")) -}} {{- $session := $.Page.Site.GetPage (printf "/%s" (replace .Destination ":" "/")) -}} {{ .Page.Scratch.Add "links" (slice $session) }} {{- if not $text_link -}} - {{- index (split .Destination ":") 0 -}}⁄{{- $session.Title -}} + {{- index (split .Destination ":") 0 -}}⁄{{- $session.Title -}} {{- else -}} - {{- index (split .Destination ":") 0 -}}⁄{{- $text_link -}} + {{- index (split .Destination ":") 0 -}}⁄{{- $text_link -}} {{- end -}} {{- else -}} {{- $text_link -}}⦚{{- .Destination -}} not found diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/baseof.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/baseof.html index 4c09044..051e285 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/baseof.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/baseof.html @@ -2,12 +2,12 @@ - {{- partialCached "head.html" . -}} + {{- partial "head.html" . -}} {{- .Title }} - {{ .Site.Title -}} {{- partialCached "sandpointjs.html" . .RelPermalink -}} - {{- block "singlebody" . }}{{- end }} + {{- block "singlebody" . }}{{- end -}} {{- partialCached "footer.html" . -}} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/list.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/list.html index b428d29..dc2631f 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/list.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/_default/list.html @@ -6,30 +6,33 @@ {{ $currentDir = .Dir }} {{ end }} {{ $currentFile := (printf "/%s" .File) }} + {{ $editFile := $.Site.GetPage "/edit" }} + {{ $editFilePath := $editFile.RelPermalink }} -
Sitemap⁄{{ substr $.Site.Title 0 1 }}{{ substr $.Site.Title 1 }} ({{ $currentDir }})
+ +
Sitemap⁄{{ substr $.Site.Title 0 1 }}{{ substr $.Site.Title 1 }} {{with $currentDir}}({{ . }}){{ end }}
{{ $s := partialCached "scratch.html" . }} {{ $noTriad := (slice) }} {{ range $p := .Site.RegularPages }} {{ $scratch := $s.Get (printf "/%s" $p.File) }} {{ if eq $scratch.depth "core" }} -
+
{{ range $coreKid := $scratch.has_children }} -
+ {{ end }} {{ else if not (in (slice "core" "mantle" "crust") $scratch.depth)}} - {{ $noTriad = $noTriad | append $p }} + {{ $noTriad = $noTriad | append $p }} {{ else }}
{{ end }} {{ end }} {{ range $noTriad }} - +
{{- substr .File.Dir 0 -1 -}}⁄{{- .Title -}}{{ if not (or (hasPrefix .File.Dir "edit") (hasPrefix .File.Dir "print")) }}[EDIT]{{ end }}
{{ end }} {{ end }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/baseof.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/baseof.html new file mode 100644 index 0000000..c0451ba --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/baseof.html @@ -0,0 +1,14 @@ + + + + + + + + + + + edit⁄{{- .Site.Title -}} + + {{- block "main" . -}}{{- end -}} + diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/list.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/list.html new file mode 100644 index 0000000..e4e4a83 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/list.html @@ -0,0 +1,2 @@ +{{ define "main" }} +{{ end }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/single.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/single.html new file mode 100644 index 0000000..27f8f31 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/edit/single.html @@ -0,0 +1 @@ +{{- define "main" -}}{{- end -}} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/metadata/list.js.js b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/metadata/list.js.js index 2768a68..40d5ba3 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/metadata/list.js.js +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/metadata/list.js.js @@ -1 +1,20 @@ -{{ define "main" }}SECTIONS=[{{ range .Site.Sections }}{"section": "{{ with .File }}{{ trim .Dir "/" }}{{ end }}", "items": [{{ range .Pages }}"{{ .File.BaseFileName }}", {{ end }}]}, {{ end }}];{{ end }} +{{- define "main" -}} + {{ $sections := (slice) }} + {{ $tiers := (slice) }} + {{ range $.Site.Sections }} + {{ with .File }} + {{ $sections = $sections | append (strings.TrimSuffix "/" .Dir) }} + {{ end }} + {{ end }} + {{ $metasp := (dict) }} + {{ range $k, $v := $.Site.Data.sandpointsnamegraph }} + {{ if in $sections $k }} + {{ $tiers = (slice) }} + {{ range where $.Site.RegularPages "Section" $k }} + {{ $tiers = $tiers | append (merge (dict "file" .File.LogicalName) (dict "title" .Title)) }} + {{ end }} + {{ $metasp = merge $metasp (dict $v (merge (dict "singular" $k) (dict "tiers" $tiers))) }} + {{ end }} + {{ end }} +{{ printf "METASP=%s;" (jsonify $metasp) }} +{{ end }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/head.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/head.html index 0169016..482f33d 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/head.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/head.html @@ -11,10 +11,21 @@ {{ end }} -{{ if .Params.Author }} - +{{ if .Params.editors }} + {{ range .Params.editors }} + {{ $e := $.GetPage (printf "editor/%s" .) }} + + {{ end }} {{ end }} +{{ if .Params.authors }} + {{ range .Params.authors }} + {{ $e := $.GetPage (printf "author/%s" .) }} + + {{ end }} +{{ end }} + + {{ template "_internal/opengraph.html" . }} {{ template "_internal/twitter_cards.html" . }} @@ -27,9 +38,9 @@ {{ if eq hugo.Environment "dev" }} - {{ $style := resources.Get "css/site.css" | postCSS (dict "config" "assets/css/postcss.config.js") | minify }} + {{ $style := resources.Get "css/site.css" | resources.PostCSS (dict "config" "assets/css/postcss.config.js") | minify }} - {{ $style := resources.Get "css/player.css" | postCSS (dict "config" "assets/css/postcss.config.js") | minify }} + {{ $style := resources.Get "css/player.css" | resources.PostCSS (dict "config" "assets/css/postcss.config.js") | minify }} {{ else }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/header.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/header.html index fc5880a..ae5a4c9 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/header.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/header.html @@ -36,6 +36,16 @@ PUBLISH ?
+{{ else }} + {{ $editPage := $.Site.GetPage "/edit" }} +
+ EDIT_THIS + {{ with $scratch.core }}ADD_{{ index . 0 | upper }}{{ end }} + {{ with $scratch.mantle }}ADD_{{ index . 0 | upper }}{{ end }} + {{ with $scratch.crust }}ADD_{{ index . 0 | upper }}{{ end }} + {{ if not $scratch.core }}ADD_{{ substr $currentDir 0 -1 | upper }}{{ end }} +
+
{{ end }}
diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/pagedjs.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/pagedjs.html index 2c1f980..cd0e6a3 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/pagedjs.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/pagedjs.html @@ -1,2 +1,5 @@ + + + diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/printsinglebody.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/printsinglebody.html new file mode 100644 index 0000000..676d824 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/printsinglebody.html @@ -0,0 +1,96 @@ +{{ $s := partialCached "scratch.html" . }} + +{{ $currentNode := . }} +{{ $currentDir := "" }} +{{ with .File }} + {{ $currentDir = .Dir }} +{{ end }} +{{ $currentFile := (printf "/%s" .File) }} +{{ $scratch := $s.Get $currentFile }} + +{{ $longestTitle := "" }} + +
{{ substr $currentDir 0 -1 }}⁄{{ .Title }}
+ +
+
+ {{ if ne (trim .Page.TableOfContents "\n") "" }} + {{ .Page.TableOfContents }} + {{ end }} +
+
+ {{ $closeDivs := false }} + {{ $sandnamePlural := (slice) }} + {{ range $k, $v := $.Site.Data.sandpointsnamegraph }} + {{ $sandnamePlural = $sandnamePlural | append $v }} + {{ end }} + {{ $paramsKeys := (slice) }} + {{ range $k, $v := $currentNode.Params }} + {{ $paramsKeys = $paramsKeys | append $k }} + {{ end }} + {{ $mentions := intersect $paramsKeys $sandnamePlural }} + {{ range $mention := $mentions }} + {{ range $k, $m := index $currentNode.Params $mention }} + {{ $mentionLink := printf "/%s/%s" (substr $mention 0 -1) $m }} + {{- with $.GetPage $mentionLink -}} + {{ with not $k }} + {{ $closeDivs = true }} +
+
{{ with (index $currentNode.Params $mention) }}{{ if gt (len (index $currentNode.Params $mention)) 1 }}{{ $mention }}{{ else }}{{ substr $mention 0 -1 }}{{ end }}{{ end }}⁄
+
+ {{ end }} + + {{ end }} + {{ end }} + {{ end }} + {{- with $closeDivs -}}
{{ end }} + + {{ if and (not (eq $scratch.depth "crust")) $scratch.has_children }} +
+ {{ with $scratch.has }} +
has {{ $scratch.has }}⁄
+ {{ end }} +
+ {{ range $scratch.has_children }} + {{ $authors := "" }} + {{ range $k, $authorLink := .Params.authors }} + {{ $authorPage := $.GetPage (printf "/author/%s" $authorLink) }} + {{ $prefix := ", " }} + {{ with not $k }} + {{ $prefix = "" }} + {{ end }} + {{ $authors = printf "%s%s" $prefix $authorPage.Title }} + {{ end }} + + {{ if gt (len .Title) (len $longestTitle) }} + {{ $longestTitle = .Title }} + {{ end }} + {{ end }} + +
+ {{ end }} + + {{ if eq $scratch.depth "crust" }} +
+
in {{ index $scratch.in 1 }}⁄
+
+ {{ range $scratch.is_in }} + + {{ end }} +
+ {{ end }} +
+
+ + +{{ with .Page.Params.abstract }}
abstract⁄{{ . | $.Page.RenderString | htmlUnescape | safeHTML }}
{{ end }} + +{{- $vld := false -}}{{- range $k, $v := .Page.Params.keywords -}}{{- if eq $k 0 -}}{{- $vld = true -}}
keywords⁄{{- $v -}}{{- else -}}, {{- $v -}}{{- end -}}{{- end -}}{{- with $vld -}}
{{- end -}} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/readdir.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/readdir.html new file mode 100644 index 0000000..04ed812 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/readdir.html @@ -0,0 +1,13 @@ +{{ $parentName := . }} +{{ range (readDir .) }} + {{ $currentName := printf "%s/%s" $parentName .Name }} + {{ if .IsDir }} +

_Dir: {{ $currentName }}

+ {{ partial "readdir.html" $currentName }} + {{ else }} + {{ if eq (path.Ext .Name) ".md" }} + {{ $f := readFile $currentName }} + + {{ end }} + {{ end }} +{{ end }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/sandpointjs.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/sandpointjs.html index d023ad6..ef9cf51 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/sandpointjs.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/sandpointjs.html @@ -1,4 +1,4 @@ - + {{ $sjsopts := dict "targetPath" "js/sandpoints.js" "minify" "true"}} {{ $sjs := resources.Get "js/sandpoints.js" | js.Build $sjsopts }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/scratch.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/scratch.html index beb3b0e..c54a821 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/scratch.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/scratch.html @@ -3,6 +3,14 @@ {{ $_ := newScratch }} {{ $debug := (slice) }} +{{ $sandnameSingular := (slice) }} +{{ $sandnamePlural := (slice) }} + +{{ range $k, $v := $.Site.Data.sandpointsnamegraph }} + {{ $sandnameSingular = $sandnameSingular | append $k }} + {{ $sandnamePlural = $sandnamePlural | append $v }} +{{ end }} + {{ $pPath := "" }} {{ range $p := .Site.RegularPages }} {{ $pPath = printf "/%s" $p.File }} @@ -23,16 +31,24 @@ {{ end }} {{ end }} - {{ with $authors := $p.Params.authors }} - {{ range $author := $authors }} - {{ $authorLink := printf "/author/%s" $author }} - {{ with ($_.Get $authorLink) }} - {{ $_.SetInMap $authorLink "backlinks" (uniq ((index ($_.Get $authorLink) "backlinks") | append $p)) }} + {{ $paramsKeys := (slice) }} + {{ range $k, $v := $p.Params }} + {{ $paramsKeys = $paramsKeys | append $k }} + {{ end }} + + {{ $mentions := intersect $paramsKeys $sandnamePlural }} + {{ range $mention := $mentions }} + {{ range $m := index $p.Params $mention }} + {{ $mentionLink := printf "/%s/%s" (substr $mention 0 -1) $m }} + {{ with ($_.Get $mentionLink) }} + {{ $p.Scratch.Add "links" (uniq (($p.Scratch.Get "links")| append ($.GetPage $mentionLink))) }} + {{ $_.SetInMap $mentionLink "backlinks" (uniq ((index ($_.Get $mentionLink) "backlinks") | append $p)) }} {{ else }} - {{ $_.SetInMap $authorLink "backlinks" (slice $p) }} - {{ end }} - {{ end }} - {{ end }} + {{ $p.Scratch.Add "links" (uniq (($p.Scratch.Get "links")| append ($.GetPage $mentionLink))) }} + {{ $_.SetInMap $mentionLink "backlinks" (slice $p) }} + {{ end }} + {{ end }} + {{ end }} {{ $gp := $.GetPage $pPath }} {{ $gpPath := printf "/%s" $gp.File }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/singlebody.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/singlebody.html index 49a5aea..c8d2c86 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/singlebody.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/partials/singlebody.html @@ -8,6 +8,10 @@ {{ $currentFile := (printf "/%s" .File) }} {{ $scratch := $s.Get $currentFile }} +{{ $sandnamePlural := (slice) }} +{{ $sandnameSingular := "" }} +{{ $mentionLink := "" }} +
{{ substr $currentDir 0 -1 }}⁄{{ substr .Title 0 1 }}{{ substr .Title 1 }}
@@ -17,22 +21,41 @@ {{ end }}
- {{- range $k, $v := .Page.Params.authors -}} - {{- with $.GetPage (printf "/author/%s" $v) -}} - {{- with not $k -}} -
-
author{{ with $.Page.Params.authors }}{{ if gt (len .) 1 }}s{{ end }}{{ end }}⁄
-
- {{- end -}} - - {{- end -}} - {{- end -}} - {{- with .Page.Params.authors -}}
{{- end -}} + {{ $closeDivs := false }} + {{ range $k, $v := $.Site.Data.sandpointsnamegraph }} + {{ $sandnamePlural = $sandnamePlural | append $v }} + {{ end }} + {{ $paramsKeys := (slice) }} + {{ range $k, $v := $currentNode.Params }} + {{ $paramsKeys = $paramsKeys | append $k }} + {{ end }} + {{ $mentions := intersect $paramsKeys $sandnamePlural }} + {{ range $mention := $mentions }} + {{ range $k, $m := index $currentNode.Params $mention }} + {{ range $k, $v := $.Site.Data.sandpointsnamegraph }} + {{ if eq $v $mention }} + {{ $mentionLink = printf "/%s/%s" $k $m }} + {{ $sandnameSingular = $k }} + {{ end }} + {{ end }} + {{- with $.GetPage $mentionLink -}} + {{- with not $k -}} + {{ $closeDivs = true }} +
+
{{ with (index $currentNode.Params $mention) }}{{ if gt (len (index $currentNode.Params $mention)) 1 }}{{ $mention }}{{ else }}{{ $sandnameSingular }}{{ end }}{{ end }}⁄
+
+ {{- end -}} + + {{- end -}} + {{ end }} + {{- with $closeDivs -}}
{{ end }} + {{ end }} + {{ if in .Page.Site.Params.sandpointsMentionedIn (substr $currentDir 0 -1) }} -
+
{{ with $scratch.backlinks }}
mentioned in⁄
{{ end }} @@ -46,7 +69,7 @@ {{ end }} {{ if and (not (eq $scratch.depth "crust")) $scratch.has_children }} -
+
{{ with $scratch.has }}
has {{ $scratch.has }}⁄
{{ end }} @@ -60,7 +83,7 @@ {{ end }} {{ if eq $scratch.depth "crust" }} -
+
in {{ index $scratch.in 1 }}⁄
{{ range $scratch.is_in }} @@ -74,8 +97,9 @@
-{{ with .Page.Params.abstract }}
abstract⁄{{ . | markdownify }}
{{ end }} +{{ with .Page.Params.abstract }}
abstract⁄{{ . | $.Page.RenderString | htmlUnescape | safeHTML }}
{{ end }} -{{- $vld := false -}}{{- range $k, $v := .Page.Params.keywords -}}{{- if eq $k 0 -}}{{- $vld = true -}}
keywords⁄{{- $v -}}{{- else -}}, {{- $v -}}{{- end -}}{{- end -}}{{- with $vld -}}
{{- end -}} -{{ with .Page.Params.abstract }}
{{ end }} +{{- $vld := false -}}{{- range $k, $v := .Page.Params.keywords -}}{{- if eq $k 0 -}}{{- $vld = true -}}
keywords⁄{{- $v -}}{{- else -}}, {{- $v -}}{{- end -}}{{- end -}}{{- with $vld -}}
{{- end -}} + +{{ $var := printf "repo={\"frontmatter\": %s, \"content\": %s, \"path\": \"%s\", \"relpermalink\": \"%s\" }" (jsonify .Params) (jsonify .RawContent) .File.Path .RelPermalink | resources.FromString (printf "js/repo/%s.js" .File.UniqueID) }} +{{ $dummy := $var.Permalink }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/baseof.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/baseof.html index f27eaaa..3a88dcf 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/baseof.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/baseof.html @@ -2,12 +2,10 @@ - {{- partialCached "head.html" . -}} + {{- partial "head.html" . -}} {{- partial "pagedjs.html" . -}} -
{{- block "singlebody" . -}}{{- end -}} -
diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/single.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/single.html index 614dad4..eaeac2b 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/single.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/print/single.html @@ -1,4 +1,63 @@ {{- define "singlebody" -}} + {{ $cssTemplate := `.css-_rplc_-h2 { + counter-reset: css-_rplc_-h3; + } + + .css-_rplc_-h3 { + counter-reset: css-_rplc_-h4; + } + + .css-_rplc_-h4 { + counter-reset: css-_rplc_-h5; + } + + .css-_rplc_-h5 { + counter-reset: css-_rplc_-h6; + } + + .css-_rplc_-h2:before { + color: rgba(0, 0, 0, 0.4); + counter-increment: css-_rplc_-h2 1; + content: counter(css-_rplc_-h2) ". "; + } + + .css-_rplc_-h3:before { + color: rgba(0, 0, 0, 0.4); + counter-increment: css-_rplc_-h3 1; + content: counter(css-_rplc_-h2) "." counter(css-_rplc_-h3) ". "; + } + + .css-_rplc_-h4:before { + color: rgba(0, 0, 0, 0.4); + counter-increment: css-_rplc_-h4 1; + content: counter(css-_rplc_-h2) "." counter(css-_rplc_-h3) "." counter(css-_rplc_-h4) ". "; + } + + .css-_rplc_-h5:before { + color: rgba(0, 0, 0, 0.4); + counter-increment: css-_rplc_-h5 1; + content: counter(css-_rplc_-h2) "." counter(css-_rplc_-h3) "." counter(css-_rplc_-h4) "." counter(css-_rplc_-h5) ". "; + } + + .css-_rplc_-h6:before { + color: rgba(0, 0, 0, 0.4); + counter-increment: css-_rplc_-h6 1; + content: counter(css-_rplc_-h2) "." counter(css-_rplc_-h3) "." counter(css-_rplc_-h4) "." counter(css-_rplc_-h5) "." + counter(css-_rplc_-h6) ". "; + } + + .css-_rplc_-h2.nocount:before, + .css-_rplc_-h3.nocount:before, + .css-_rplc_-h4.nocount:before, + .css-_rplc_-h5.nocount:before, + .css-_rplc_-h6.nocount:before { + content: ""; + counter-increment: none; + }` }} + + {{ $cssOutput := "" }} + {{ $cssHashes := "" }} + {{ $s := partialCached "scratch.html" . }} {{ $p := $.GetPage .Params.print }} {{ $scratch := $s.Get (printf "/%s" $p.File) }} @@ -8,17 +67,87 @@ {{ $currentDir = .Dir }} {{ end }} -
{{ partial "singlebody.html" $p }}
-
{{ $p.Content }} - {{ range $printPage := $scratch.has_cildren }} -
{{ partial "singlebody.html" $printPage }}
-
{{ $printPage.Content }} - {{ $printPageScratch := $s.Get (printf "/%s" $printPage.File) }} - {{ range $printPageKid := $printPageScratch.has_children }} -
{{ partial "singlebody.html" $printPageKid }}
-
{{ $printPageKid.Content }} - {{ . }} +
{{ partial "printsinglebody.html" $p }}
+
{{ $p.Content }}
+ {{ $cssOutput = printf "%s\n%s" $cssOutput (replace $cssTemplate "_rplc_" $p.File.UniqueID) }} + {{ $cssHashes = printf "%s css-%s-h2" $cssHashes $p.File.UniqueID }} + + {{ range $scratch.has_children }} +
+ {{ $addS := 0 }} + {{ with .Params.authors }} + {{ $addS = len . }} + {{ end }} + {{ range $n, $authorFile := .Params.authors }} + {{ $author := $.GetPage (printf "/author/%s" $authorFile) }} + {{ if eq $n 0 }} +
author{{ with (gt $addS 1) }}s{{ end }}⁄{{ $author.Title }} + {{ else }} + , {{ $author.Title }} {{ end }} -
- {{ end }} + {{ end }} + {{ with .Params.authors }}
{{ end }} + + {{ $tit := .Title }} + {{ if gt (len .Title) 54 }} + {{ $tit = printf "%s…" (substr .Title 0 50) }} + {{ end }} +
{{ index $scratch.crust 0 }}⁄{{ $tit }}
+ {{ partial "printsinglebody.html" . }} + {{ .Content }} + {{ $cssOutput = printf "%s\n%s" $cssOutput (replace $cssTemplate "_rplc_" .File.UniqueID) }} + {{ $cssHashes = printf "%s css-%s-h2" $cssHashes .File.UniqueID }} + {{ $kid := $s.Get (printf "/%s" .File) }} + {{ range $kid.has_children }} +
+ {{ $addS := 0 }} + {{ with .Params.authors }} + {{ $addS = len . }} + {{ end }} + {{ range $n, $authorFile := .Params.authors }} + {{ $author := $.GetPage (printf "/author/%s" $authorFile) }} + {{ if eq $n 0 }} +
author{{ with (gt $addS 1) }}s{{ end }}⁄{{ $author.Title }} + {{ else }} + , {{ $author.Title }} + {{ end }} + {{ end }} + {{ with .Params.authors }}
{{ end }} + + {{ $tit := .Title }} + {{ if gt (len .Title) 54 }} + {{ $tit = printf "%s…" (substr .Title 0 50) }} + {{ end }} +
{{ index $scratch.crust 0 }}⁄{{ $tit }}
+ {{ partial "printsinglebody.html" . }} + {{ .Content }} + {{ $cssOutput = printf "%s\n%s" $cssOutput (replace $cssTemplate "_rplc_" .File.UniqueID) }} + {{ $cssHashes = printf "%s css-%s-h2" $cssHashes .File.UniqueID }} + {{ end }} + {{ end }} + + {{ range where $.Site.RegularPages "Section" "in" (slice "author" "editor") }} +
+
{{ index $scratch.mantle 0 }}⁄{{ $p.Title }}
+
{{ substr .File.Dir 0 -1 }}⁄{{ .Title }}
+ {{ .Content }} + + {{ if in .Page.Site.Params.sandpointsMentionedIn (substr .File.Dir 0 -1) }} + {{ $ss := $s.Get (printf "/%s" .File) }} +
+ {{ with $ss }} +
mentioned in⁄
+ {{ end }} +
+ {{ range $ss.backlinks }} + + {{ end }} +
+ {{ end }} + {{ end }} + {{ $cssOutput = printf "body {counter-reset: %s;}\n%s" $cssHashes $cssOutput }} + {{ $var := $cssOutput | resources.FromString "css/dyn.css" }} + {{ $dummy := $var.Permalink }} {{- end -}} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/baseof.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/baseof.html new file mode 100644 index 0000000..ff6a2c7 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/baseof.html @@ -0,0 +1,12 @@ + + + + {{- partialCached "head.html" . -}} + {{- .Title }} - {{ .Site.Title -}} + {{- partialCached "sandpointjs.html" . .RelPermalink -}} + + + {{- block "keywords" . -}}{{- end -}} + {{- partialCached "footer.html" . -}} + + diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/list.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/list.html new file mode 100644 index 0000000..e70e8e3 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/taxonomy/list.html @@ -0,0 +1,23 @@ +{{ define "keywords" }} + {{ $p := split (trim .RelPermalink "/") "/" }} + {{ if eq (len $p) 1 }} +
{{ index $p 0 }}⁄All
+ {{ range $taxonomyname, $taxonomy := .Site.Taxonomies }} + {{ if eq (index $p 0) $taxonomyname }} + {{ range $key, $value := $taxonomy }} + {{ $key }}({{ len (index (index $.Site.Taxonomies $taxonomyname) $key) }}) + {{ end }} + {{ end }} + {{ end }} + {{ else }} +
{{ index $p 0 }}⁄{{ index $p 1 }}
+ {{ range .Pages.ByDate.Reverse }} +
{{ .Date.Format "Jan 2, 2006" }}
+ + {{ range $n, $authorFile := .Params.authors }} + {{ $author := $.GetPage (printf "/author/%s" $authorFile) }} + {{ $author.Title }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/urls/list.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/urls/list.html index 2e1eb98..2764d59 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/urls/list.html +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/layouts/urls/list.html @@ -5,102 +5,100 @@

{{ range $p := .Site.RegularPages }} - {{ with or ($p.Scratch.Get "urls") ($p.Scratch.Get "bibs") ($p.Scratch.Get "links") ($p.Scratch.Get "backlinks" )}} -
{{ with $p.File }}{{- substr .Dir 0 -1 -}}⁄{{ end }}{{ $p.Title }} +
{{ with $p.File }}{{- substr .Dir 0 -1 -}}⁄{{ end }}{{ $p.Title }} - {{ $pPath := printf "/%s" $p.File }} - {{ with $ss := $s.Get $pPath }} - {{ with $ss.backlinks }} - {{ range $i, $_ := $ss.backlinks }} - {{ if eq $i 0 }} -
Mentioned in other Sandpoints pages ({{ len $ss.backlinks }}):
    - {{ end }} -
  • {{ with $_.File }}{{ substr .Dir 0 -1 }}⁄{{ end }}{{ $_.Title }}
  • - {{ end }} -
- {{ end }} - {{ end }} - - {{ with ($p.Scratch.Get "links") }} - {{ range $i, $_ := ($p.Scratch.Get "links") }} + {{ $pPath := printf "/%s" $p.File }} + {{ with $ss := $s.Get $pPath }} + {{ with $ss.backlinks }} + {{ range $i, $_ := $ss.backlinks }} {{ if eq $i 0 }} -
Internal links to other Sandpoint pages ({{ len ($p.Scratch.Get "links") }}):
    +
    Mentioned in other Sandpoints pages ({{ len $ss.backlinks }}):
      {{ end }}
    • {{ with $_.File }}{{ substr .Dir 0 -1 }}⁄{{ end }}{{ $_.Title }}
    • {{ end }}
    {{ end }} + {{ end }} - {{ $http_links := (slice) }} - {{ $library_links := (slice) }} - {{ $anchor_links := (slice) }} - {{ $other_links := (slice) }} + {{ with ($p.Scratch.Get "links") }} + {{ range $i, $_ := uniq ($p.Scratch.Get "links") }} + {{ if eq $i 0 }} +
    Internal links to other Sandpoint pages ({{ len (uniq ($p.Scratch.Get "links")) }}):
      + {{ end }} +
    • {{ with $_.File }}{{ substr .Dir 0 -1 }}⁄{{ end }}{{ $_.Title }}
    • + {{ end }} +
    + {{ end }} - {{ with ($p.Scratch.Get "urls") }} - {{- $c_prefix := $p.Site.Params.sandpointsCatalogPrefix | default "/library/" -}} - {{ range $i, $_ := ($p.Scratch.Get "urls") }} - {{ if strings.HasPrefix $_ "http" }} - {{ $http_links = $http_links | append $_ }} - {{ else if strings.HasPrefix $_ $c_prefix }} - {{ $library_links = $library_links | append $_ }} - {{ else}} - {{ $other_links = $other_links | append $_ }} - {{ end }} + {{ $http_links := (slice) }} + {{ $library_links := (slice) }} + {{ $anchor_links := (slice) }} + {{ $other_links := (slice) }} + + {{ with ($p.Scratch.Get "urls") }} + {{- $c_prefix := $p.Site.Params.sandpointsCatalogPrefix | default "/library/" -}} + {{ range $i, $_ := ($p.Scratch.Get "urls") }} + {{ if strings.HasPrefix $_ "http" }} + {{ $http_links = $http_links | append $_ }} + {{ else if strings.HasPrefix $_ $c_prefix }} + {{ $library_links = $library_links | append $_ }} + {{ else}} + {{ $other_links = $other_links | append $_ }} {{ end }} {{ end }} + {{ end }} - {{ with $http_links }} - {{ range $i, $_ := $http_links }} - {{ if eq $i 0 }} -
    Outgoing links to other pages on Internet ({{ len $http_links }}):
      - {{ end }} -
    • www⁄{{ $_ }}
    • + {{ with $http_links }} + {{ range $i, $_ := $http_links }} + {{ if eq $i 0 }} +
      Outgoing links to other pages on Internet ({{ len $http_links }}):
        {{ end }} -
      +
    • www⁄{{ $_ }}
    • {{ end }} +
    + {{ end }} - {{ with $library_links }} - {{ range $i, $_ := $library_links }} - {{ if eq $i 0 }} -
    Links to Sandpoint's library ({{ len $library_links }}):
      - {{ end }} -
    • lib⁄{{ $_ }}
    • + {{ with $library_links }} + {{ range $i, $_ := $library_links }} + {{ if eq $i 0 }} +
      Links to Sandpoint's library ({{ len $library_links }}):
        {{ end }} -
      +
    • lib⁄{{ $_ }}
    • {{ end }} +
    + {{ end }} - {{ with ($p.Scratch.Get "bibs") }} - {{ range $i, $_ := ($p.Scratch.Get "bibs") }} - {{ if eq $i 0 }} -
    Bibliographic references ({{ len ($p.Scratch.Get "bibs") }}):
      - {{ end }} -
    • bib⁄{{ index $_ 1 }}
    • + {{ with ($p.Scratch.Get "bibs") }} + {{ range $i, $_ := ($p.Scratch.Get "bibs") }} + {{ if eq $i 0 }} +
      Bibliographic references ({{ len ($p.Scratch.Get "bibs") }}):
        {{ end }} -
      +
    • bib⁄{{ index $_ 1 }}
    • {{ end }} +
    + {{ end }} - {{ with $other_links }} - {{ $formattingN := 0 }} - {{ $anchorN := 0 }} - {{ range $i, $_ := $other_links }} - {{ if eq $i 0 }} -
    Anchor, formatting and other links ({{ len $other_links }}):
      - {{ end }} - {{ if strings.HasPrefix $_ "#" }} - {{ $anchorN = add $anchorN 1 }} - {{ else if strings.HasPrefix $_ "{"}} - {{ $formattingN = add $formattingN 1 }} - {{ else }} -
    • other⁄{{ $_ }}
    • - {{ end }} + {{ with $other_links }} + {{ $formattingN := 0 }} + {{ $anchorN := 0 }} + {{ range $i, $_ := $other_links }} + {{ if eq $i 0 }} +
      Anchor, formatting and other links ({{ len $other_links }}):
        + {{ end }} + {{ if strings.HasPrefix $_ "#" }} + {{ $anchorN = add $anchorN 1 }} + {{ else if strings.HasPrefix $_ "{"}} + {{ $formattingN = add $formattingN 1 }} + {{ else }} +
      • other⁄{{ $_ }}
      • {{ end }} - {{ with $formattingN }}
      • {{ $formattingN }} formatting links.
      • {{ end }} - {{ with $anchorN }}
      • {{ $anchorN }} anchor links.
      • {{ end }} -
      {{ end }} + {{ with $formattingN }}
    • {{ $formattingN }} formatting links.
    • {{ end }} + {{ with $anchorN }}
    • {{ $anchorN }} anchor links.
    • {{ end }} +
    + {{ end }} -
+
- {{ end }} {{ end }} {{ end }} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/print.css b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/print.css new file mode 100644 index 0000000..4682b5e --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/print.css @@ -0,0 +1,242 @@ +@page { + size: 6.14in 9.21in; + margin-bottom: 0.8in; + padding-bottom: 0.2in; + margin-top: 0.7in; +} + +@page:left { + margin-right: 0.8in; + margin-left: 0.9in; + @bottom-left-corner { + content: counter(page); + font-size: 1rem; + vertical-align: text-top; + } + + @bottom { + content: element(runningTitle); + position: relative; + } +} + +@page:right { + margin-left: 0.8in; + margin-right: 0.9in; + @bottom-right-corner { + content: counter(page); + font-size: 1rem; + vertical-align: text-top; + } + + @bottom { + content: element(runningAuthors); + position: relative; + } +} + +@page crustpage :first { + @bottom-right-corner { + content: none; + } + @bottom { + content: none; + } +} + +@media print { + html { + font-size: 0.8em; + box-sizing: border-box; + margin: 0; + padding: 0; + } + body { + font-size: 1rem; + padding: 0; + margin: 0; + } + + .sup, + .hassup { + color: black; + } + .grid { + display: inline; + } + + .coretitle { + margin-top: 3rem; + margin-bottom: 2rem; + font-size: 2.2rem; + } + + .leftcolumn { + display: none; + } + + .has, + .afterhas { + font-size: 1.1rem; + } + + .mantle, + .crust { + margin-bottom: 0.2em; + } + + .content { + padding: 0px; + margin: 0 auto; + margin-top: 4rem; + } + + .hpar { + display: none; + } + + .mantletitle { + font-size: 1.7rem; + } + + .sessiongrid { + display: none; + } + + #bibliography { + break-before: page; + } + + .footnotes ol { + margin-top: 3rem; + padding-left: 0.9rem; + } + + .footnotes hr { + border: none; + border-top: 0px; + text-align: left; + margin-top: 2rem; + margin-bottom: -2rem; + } + + .footnotes hr::after { + content: "Endnotes"; + font-size: 1.2rem; + font-weight: bold; + } + + .runningTitle { + position: running(runningTitle); + } + + .runningAuthors { + position: running(runningAuthors); + } + + .hasauthors .afterhas { + font-size: 1.5rem; + } + + .crustpage { + break-before: page; + page: crustpage; + } + + .hasin { + display: none; + } + + .abstract { + margin-left: 0; + margin-right: 0; + max-width: inherit; + } + + .keywords { + margin-left: 0; + margin-right: 0; + max-width: inherit; + padding-left: 0; + padding-right: 0; + font-size: 0.9rem; + } + /* + h2:before, + h3:before, + h4:before, + h5:before { + content: none; + } + */ + h2, h3, h4, h5, hr { + break-after: avoid; + } + + .glosscontainer, + table, + table + p, + tr, + blockquote, + li { + break-inside: avoid; + } + + .authorpage { + break-before: page; + } + + img { + display: block; + max-height: 150mm; + width: auto; + break-after: avoid; + margin-bottom: 0.5rem; + margin-left: 1rem; + } + + .crustoc { + position: relative; + bottom: 0 + } + + a.toc::before { + direction: rtl; + content: " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "; + line-height: 0; + height: 1px; + position: absolute; + bottom: 10px; + z-index: -1; + } + + a.toc { + display: grid; + grid-template-columns: 1fr auto; + align-items: flex-end; + } + + a.toc span { + } + + a.toc .back { + background: white; + } + + a.toc::after { + text-align: right; + float: right; + content: target-counter(attr(href url), page, decimal-leading-zero); + background: white; + padding-left: 0.1rem; + } + + ol[data-split-from] { + padding-left: 0.5rem; + } + + .longesttitle { + visibility: hidden; + cursor: default; + } +} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/site.min.css b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/site.min.css index 11a51fc..35c040a 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/site.min.css +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/css/site.min.css @@ -1 +1 @@ -stdin 587:3 ⚠ grid-auto-rows is not supported by ie [autoprefixer] html,body,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}img,video{height:auto;max-width:100%}iframe{border:0}strong del{display:inline;text-decoration:none;margin-left:1rem;box-decoration-break:clone;-webkit-box-decoration-break:clone}table{border-collapse:collapse;border-spacing:0;background-color:#fff9f9;border-left:1px red solid;margin-left:1rem}td,th{padding:0;vertical-align:top;padding-right:1rem;padding-left:1rem;padding-bottom:.5rem}td:not([align]),th:not([align]){text-align:left}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:400;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:600;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:700;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:900;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn;font-style:italic;font-weight:500;src:url(../fonts/vollkorn-v12-latin-ext_latin-500italic.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.svg#Vollkorn)format("svg")}@font-face{font-family:vollkorn;font-style:normal;font-weight:400;src:url(../fonts/vollkorn-v12-latin-ext_latin-regular.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-regular.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.svg#Vollkorn)format("svg")}@font-face{font-family:vollkorn;font-style:normal;font-weight:500;src:url(../fonts/vollkorn-v12-latin-ext_latin-500.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-500.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-500.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-500.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-500.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-500.svg#Vollkorn)format("svg")}@font-face{font-family:vollkorn;font-style:italic;font-weight:400;src:url(../fonts/vollkorn-v12-latin-ext_latin-italic.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-italic.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.svg#Vollkorn)format("svg")}@font-face{font-family:great vibes;font-style:normal;font-weight:400;src:url(../fonts/great-vibes-v7-latin-ext_latin-regular.eot);src:local("Great Vibes"),local("GreatVibes-Regular"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.eot?#iefix)format("embedded-opentype"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.woff2)format("woff2"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.woff)format("woff"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.ttf)format("truetype"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.svg#GreatVibes)format("svg")}html{line-height:1.5}body{font-family:vollkorn,serif;font-weight:400;max-width:1024px;font-size:1.4rem;padding-left:3rem;padding-top:.5rem;padding-right:2rem;color:#000}#preview{display:none}sup,sub{vertical-align:baseline;position:relative;top:-.4em}sub{top:.4em}.headiter{display:flex;justify-content:space-between;border-bottom:.3rem solid red;border-top:.1rem solid red;padding-top:1rem;padding-bottom:.5rem;padding-left:1rem;padding-right:1rem;margin-bottom:1rem}a.edit-button{color:#000;text-decoration:none}a.edit-button:hover{text-decoration:underline;-webkit-text-decoration-color:red;text-decoration-color:red;font-weight:500;font-size:.97em;cursor:pointer}.header{display:-ms-grid;display:grid;-ms-grid-columns:auto;grid-template-columns:auto;grid-auto-flow:column;position:-webkit-sticky;position:sticky;top:0;padding-top:.5rem;font-size:1.1rem;background-color:#fff;z-index:10}.mantlebar{display:none}.breadcrumbs{-ms-grid-column:1;grid-column:1}.bibliotheke{width:2.4rem;-ms-grid-column:2;grid-column:2;margin-left:auto}.bibliotheke:hover{text-decoration:none;font-size:1rem}.alsoin{font-weight:700;display:inline-flex;padding-left:.2rem;padding-right:.3rem}.ddmenu{cursor:pointer;display:-ms-inline-grid;display:inline-grid}.ddmenu input{display:none}.ddmenu li{list-style-type:none}.ddmenu .hiddendiv{display:none;margin-top:-.9rem}input:focus,select:focus,textarea:focus,label:focus,button:focus{outline:none}.ddmenu input:checked~.hiddendiv{display:block}.logolink{width:2.4rem;margin-left:auto}.sandpointlogo{border-radius:50%;border:.3em solid red;display:inline-flex;font-family:great vibes,cursive;font-size:1.2rem;font-weight:700;color:#fff;background-color:red;position:relative;padding-left:1em;padding-right:.3em;padding-bottom:1.2em;max-width:0;max-height:0}.sandpointF{position:absolute;font-size:1.2em;margin-top:-.2em;margin-left:-.4em}.sandpointN{position:absolute;font-size:.7em;margin-top:.4em;color:red;margin-left:-.5em}.sandpointC{position:absolute;font-size:1em;margin-left:-.37em}footer{display:flex;margin-bottom:1rem;margin-top:4rem}li{list-style-type:"› "}li[role=doc-endnote]{list-style-type:decimal}ol li{list-style-type:decimal}img{width:100%}.supt{display:inline-flex;flex-wrap:nowrap;font-family:great vibes,cursive;font-size:.9em;font-style:normal;color:rgba(0,0,0,.8);vertical-align:baseline;position:relative;top:-.3em}.sup{display:inline-flex;flex-wrap:nowrap;font-family:great vibes,cursive;font-size:.9em;font-style:normal;color:red;vertical-align:baseline;position:relative;top:-.3em}.sup:hover{font-weight:400!important}.nosup a{color:red}.nosup a span.sup{display:none}.syllabustitle,.coretitle{margin-top:4rem;font-style:italic;font-size:4rem;margin-bottom:4rem}.mantletitle,.crusttitle{margin-top:4rem;font-style:italic;font-size:2rem;margin-bottom:4rem}.grid{padding-left:3rem;margin-bottom:2rem;display:-ms-grid;display:grid;-ms-grid-columns:1fr 1fr;grid-template-columns:1fr 1fr}.leftcolumn{-ms-grid-column:1;grid-column:1;padding-right:1.2rem;position:relative}#TableOfContents{margin-left:-2rem;margin-top:-1.5rem}#TableOfContents li{list-style:decimal inside;padding-left:.5rem;color:rgba(0,0,0,.4);margin:0;padding:0}#TableOfContents li a{font-family:vollkorn;font-size:1.4rem;font-weight:500;font-style:normal}#TableOfContents>ol:first-child>span>li>a::after{content:"¶";color:rgba(0,0,0,.2);font-size:1.3em;padding-left:.1em}.rightcolumn{padding-left:.5rem}.has{display:-ms-inline-grid;display:inline-grid;-ms-grid-column:2;grid-column:2;grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content;font-size:1.4rem;font-style:italic;margin-bottom:.8rem}.hasauthors{font-size:1.6rem!important}.hassup{-ms-grid-column:1;grid-column:1;font-family:great vibes,cursive;font-size:.9em;font-style:normal;color:red;vertical-align:baseline;position:relative}.afterhas{-ms-grid-column:2;grid-column:2}.content{margin-top:4rem;padding-left:3rem;padding-right:10rem;max-width:720px}a{color:#000;text-decoration:none}a:hover{text-decoration:underline;-webkit-text-decoration-color:red;text-decoration-color:red;font-weight:500;font-size:.97em;cursor:pointer}h1{display:none}h2{font-weight:500;font-size:1.6rem}h3{font-weight:500;font-size:1.4rem}h4{font-weight:500;font-size:1.2rem}h5{font-weight:500;font-size:1.1rem}h6{font-weight:500;font-size:1rem}.abstract{font-style:italic;border-left:1px solid #000;margin-left:5rem;margin-right:2rem;margin-bottom:1.2rem;padding-left:1rem;padding-right:2rem;padding-top:1.2rem;padding-bottom:1.2rem;background-color:rgba(0,0,0,.05);max-width:70ch}.authors{display:inline-block;font-size:1.8rem;margin-left:5rem;margin-right:2rem;padding-left:1rem}.keywords{display:inline-block;font-size:1.2rem;margin-left:5rem;margin-right:2rem;padding-left:1rem;padding-right:2rem;margin-bottom:2.2rem;max-width:72ch}blockquote{border-left:1px red solid;margin-left:1rem;margin-right:2rem;padding-left:1rem;padding-right:2rem;padding-top:.1rem;padding-bottom:.1rem;background-color:#fff9f9}h2+p:first-letter{font-family:great vibes,cursive;color:rgba(0,0,0,.8);font-size:1.5em;line-height:0}.hx{position:relative}.hpar{position:absolute;font-size:1.7em;font-style:normal;color:rgba(0,0,0,.1);top:0;margin-top:-.4em}.smallcaps{font-family:vollkorn sc,serif;font-weight:400}body{counter-reset:h2 glossN}h2{counter-reset:h3}h3{counter-reset:h4}h4{counter-reset:h5}h5{counter-reset:h6}h2:before{color:rgba(0,0,0,.4);counter-increment:h2;content:counter(h2)". "}h3:before{color:rgba(0,0,0,.4);counter-increment:h3;content:counter(h2)"." counter(h3)". "}h4:before{color:rgba(0,0,0,.4);counter-increment:h4;content:counter(h2)"." counter(h3)"." counter(h4)". "}h5:before{color:rgba(0,0,0,.4);counter-increment:h5;content:counter(h2)"." counter(h3)"." counter(h4)"." counter(h5)". "}h6:before{color:rgba(0,0,0,.4);counter-increment:h6;content:counter(h2)"." counter(h3)"." counter(h4)"." counter(h5)"." counter(h6)". "}h2.nocount:before,h3.nocount:before,h4.nocount:before,h5.nocount:before,h6.nocount:before{content:"";counter-increment:none}details{padding-left:1rem}#toggleAllLinks{font-size:.8rem}#toggleAllLinks:hover{cursor:pointer;text-decoration:underline;-webkit-text-decoration-color:red;text-decoration-color:red}.glosscontainer{display:-ms-grid;display:grid;-ms-grid-columns:auto 0 1fr;grid-template-columns:auto 1fr;-ms-grid-rows:1fr;grid-template-rows:1fr;gap:0 0;grid-template-areas:"glossnumber gloss";border-left:1px red solid;background-color:#fff9f9;padding-top:.4em;margin-top:1rem;margin-bottom:1rem;margin-left:1rem;margin-right:2rem;padding-bottom:.4em;padding-left:1rem;padding-right:2rem}.gloss{-ms-grid-row:1;-ms-grid-column:3;grid-area:gloss}.glossnumber{-ms-grid-row:1;-ms-grid-column:1;grid-area:glossnumber;padding-right:.6rem}.glossnumberAuto::before{counter-increment:glossN;content:"(" counter(glossN)")"}.glosswords{display:inline-block;padding-left:-.3rem;padding-right:1rem}.sitemap{padding-left:3rem;font-size:1.2rem}.sitemap a{color:rgba(0,0,0,.4)}.sitemap .sup{color:rgba(255,0,0,.7)}.highline a,.sitemap a:hover{color:#000}.highline .sup,.sitemap .sup:hover{color:red}.highline{font-size:1.6rem;color:#000;border-left:1px red solid;padding-left:1rem;padding-top:.1rem;padding-bottom:.1rem;background-color:#fff9f9}@media(max-width:767px){html{box-sizing:border-box;max-width:767px;margin:0 auto;padding:0}body{font-size:1rem;padding-left:10px;padding-right:10px}.grid{display:inline}.coretitle{margin-top:3rem;margin-bottom:2rem;font-size:2.2rem}.leftcolumn{display:none}.has,.afterhas{font-size:1.1rem}.mantle,.crust{margin-bottom:.2em}.content{padding:0;margin:0 auto;margin-top:4rem}.hpar{display:none}.mantletitle{font-size:1.7rem}.sessiongrid{display:none}} \ No newline at end of file +qhtml,body,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}img,video{height:auto;max-width:100%}iframe{border:0}strong del{display:inline;text-decoration:none;margin-left:1rem;box-decoration-break:clone;-webkit-box-decoration-break:clone}table{border-collapse:collapse;border-spacing:0;background-color:#fff9f9;border-left:1px red solid;margin-left:1rem}td,th{padding:0;vertical-align:top;padding-right:1rem;padding-left:1rem;padding-bottom:.5rem}td:not([align]),th:not([align]){text-align:left}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:400;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-regular.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:600;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-600.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:700;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-700.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn sc;font-style:normal;font-weight:900;src:url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.eot);src:local(""),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff2)format("woff2"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.woff)format("woff"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.ttf)format("truetype"),url(../fonts/vollkorn-sc-v4-latin-ext_latin-900.svg#VollkornSC)format("svg")}@font-face{font-family:vollkorn;font-style:italic;font-weight:500;src:url(../fonts/vollkorn-v12-latin-ext_latin-500italic.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-500italic.svg#Vollkorn)format("svg")}@font-face{font-family:vollkorn;font-style:normal;font-weight:400;src:url(../fonts/vollkorn-v12-latin-ext_latin-regular.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-regular.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-regular.svg#Vollkorn)format("svg")}@font-face{font-family:vollkorn;font-style:normal;font-weight:500;src:url(../fonts/vollkorn-v12-latin-ext_latin-500.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-500.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-500.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-500.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-500.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-500.svg#Vollkorn)format("svg")}@font-face{font-family:vollkorn;font-style:italic;font-weight:400;src:url(../fonts/vollkorn-v12-latin-ext_latin-italic.eot);src:local(""),url(../fonts/vollkorn-v12-latin-ext_latin-italic.eot?#iefix)format("embedded-opentype"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.woff2)format("woff2"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.woff)format("woff"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.ttf)format("truetype"),url(../fonts/vollkorn-v12-latin-ext_latin-italic.svg#Vollkorn)format("svg")}@font-face{font-family:great vibes;font-style:normal;font-weight:400;src:url(../fonts/great-vibes-v7-latin-ext_latin-regular.eot);src:local("Great Vibes"),local("GreatVibes-Regular"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.eot?#iefix)format("embedded-opentype"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.woff2)format("woff2"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.woff)format("woff"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.ttf)format("truetype"),url(../fonts/great-vibes-v7-latin-ext_latin-regular.svg#GreatVibes)format("svg")}html{line-height:1.5}body{font-family:vollkorn,serif;font-weight:400;max-width:1024px;font-size:1.4rem;padding-left:3rem;padding-top:.5rem;padding-right:2rem;color:#000}#preview{display:none}sup,sub{vertical-align:baseline;position:relative;top:-.4em}sub{top:.4em}.headiter{display:flex;justify-content:space-between;border-bottom:.3rem solid red;border-top:.1rem solid red;padding-top:1rem;padding-bottom:.5rem;padding-left:1rem;padding-right:1rem;margin-bottom:1rem}a.edit-button{color:#000;text-decoration:none}a.edit-button:hover{text-decoration:underline;-webkit-text-decoration-color:red;text-decoration-color:red;font-weight:500;font-size:.97em;cursor:pointer}.header{display:grid;grid-template-columns:auto;grid-auto-flow:column;position:sticky;top:0;padding-top:.5rem;font-size:1.1rem;background-color:#fff;z-index:10}.mantlebar{display:none}.breadcrumbs{grid-column:1}.bibliotheke{width:2.4rem;grid-column:2;margin-left:auto}.bibliotheke:hover{text-decoration:none;font-size:1rem}.alsoin{font-weight:700;display:inline-flex;padding-left:.2rem;padding-right:.3rem}.ddmenu{cursor:pointer;display:inline-grid}.ddmenu input{display:none}.ddmenu li{list-style-type:none}.ddmenu .hiddendiv{display:none;margin-top:-.9rem}input:focus,select:focus,textarea:focus,label:focus,button:focus{outline:none}.ddmenu input:checked~.hiddendiv{display:block}.logolink{width:2.4rem;margin-left:auto}.sandpointlogo{border-radius:50%;border:.3em solid red;display:inline-flex;font-family:great vibes,cursive;font-size:1.2rem;font-weight:700;color:#fff;background-color:red;position:relative;padding-left:1em;padding-right:.3em;padding-bottom:1.2em;max-width:0;max-height:0}.sandpointF{position:absolute;font-size:1.2em;margin-top:-.2em;margin-left:-.4em}.sandpointN{position:absolute;font-size:.7em;margin-top:.4em;color:red;margin-left:-.5em}.sandpointC{position:absolute;font-size:1em;margin-left:-.37em}footer{display:flex;margin-bottom:1rem;margin-top:4rem}li{list-style-type:"› "}li[role=doc-endnote]{list-style-type:decimal}ol li{list-style-type:decimal}img{width:100%}.supt{display:inline-flex;flex-wrap:nowrap;font-family:great vibes,cursive;font-size:.9em;font-style:normal;color:rgba(0,0,0,.8);vertical-align:baseline;position:relative;top:-.3em}.sup{display:inline-flex;flex-wrap:nowrap;font-family:great vibes,cursive;font-size:.9em;font-style:normal;color:red;vertical-align:baseline;position:relative;top:-.3em}.sup:hover{font-weight:400!important}.nosup a{color:red}.nosup a span.sup{display:none}.syllabustitle,.coretitle{margin-top:4rem;font-style:italic;font-size:4rem;margin-bottom:4rem}.mantletitle,.crusttitle{margin-top:4rem;font-style:italic;font-size:2rem;margin-bottom:4rem}.grid{padding-left:3rem;margin-bottom:2rem;display:grid;grid-template-columns:1fr 1fr}.leftcolumn{grid-column:1;padding-right:1.2rem;position:relative}#TableOfContents{margin-left:-2rem;margin-top:-1.5rem}#TableOfContents li{list-style:decimal inside;padding-left:.5rem;color:rgba(0,0,0,.4);margin:0;padding:0}#TableOfContents li a{font-family:vollkorn;font-size:1.4rem;font-weight:500;font-style:normal}#TableOfContents>ol:first-child>span>li>a::after{content:"¶";color:rgba(0,0,0,.2);font-size:1.3em;padding-left:.1em}.rightcolumn{padding-left:.5rem}.has{display:inline-grid;grid-column:2;grid-auto-rows:max-content;font-size:1.4rem;font-style:italic;margin-bottom:.8rem}.hasauthors{font-size:1.6rem!important;display:flex}.hassup{grid-column:1;font-family:great vibes,cursive;font-size:.9em;font-style:normal;color:red;vertical-align:baseline;position:relative}.afterhas{grid-column:2}.content{margin-top:4rem;padding-left:3rem;padding-right:10rem;max-width:720px}a{color:#000;text-decoration:none}a:hover{text-decoration:underline;text-decoration-color:red;font-weight:500;font-size:.97em;cursor:pointer}h1{display:none}h2{font-weight:500;font-size:1.6rem}h3{font-weight:500;font-size:1.4rem}h4{font-weight:500;font-size:1.2rem}h5{font-weight:500;font-size:1.1rem}h6{font-weight:500;font-size:1rem}.abstract{font-style:italic;border-left:1px solid #000;margin-left:5rem;margin-right:2rem;margin-bottom:1.2rem;padding-left:1rem;padding-right:2rem;padding-top:1.2rem;padding-bottom:1.2rem;background-color:rgba(0,0,0,5%);max-width:45ch}.authors{display:inline-block;font-size:1.8rem;margin-left:5rem;margin-right:2rem;padding-left:1rem}.keywords{display:inline-block;font-size:1.2rem;margin-left:5rem;margin-right:2rem;padding-left:1rem;padding-right:2rem;margin-bottom:2.2rem;max-width:72ch}blockquote{border-left:1px red solid;margin-left:1rem;margin-right:2rem;padding-left:1rem;padding-right:2rem;padding-top:.1rem;padding-bottom:.1rem;background-color:#fff9f9}h2+p:first-letter{font-family:great vibes,cursive;color:rgba(0,0,0,.8);font-size:1.5em;line-height:0}.hx{position:relative}.hpar{position:absolute;font-size:1.7em;font-style:normal;color:rgba(0,0,0,.1);top:0;margin-top:-.4em}.smallcaps{font-family:vollkorn sc,serif;font-weight:400}body{counter-reset:h2 glossN}h2{counter-reset:h3}h3{counter-reset:h4}h4{counter-reset:h5}h5{counter-reset:h6}h2:before{color:rgba(0,0,0,.4);counter-increment:h2;content:counter(h2)". "}h3:before{color:rgba(0,0,0,.4);counter-increment:h3;content:counter(h2)"." counter(h3)". "}h4:before{color:rgba(0,0,0,.4);counter-increment:h4;content:counter(h2)"." counter(h3)"." counter(h4)". "}h5:before{color:rgba(0,0,0,.4);counter-increment:h5;content:counter(h2)"." counter(h3)"." counter(h4)"." counter(h5)". "}h6:before{color:rgba(0,0,0,.4);counter-increment:h6;content:counter(h2)"." counter(h3)"." counter(h4)"." counter(h5)"." counter(h6)". "}h2.nocount:before,h3.nocount:before,h4.nocount:before,h5.nocount:before,h6.nocount:before{content:"";counter-increment:none}details{padding-left:1rem}#toggleAllLinks{font-size:.8rem}#toggleAllLinks:hover{cursor:pointer;text-decoration:underline;text-decoration-color:red}.glosscontainer{display:grid;grid-template-columns:auto 1fr;grid-template-rows:1fr;gap:0 0;grid-template-areas:"glossnumber gloss";border-left:1px red solid;background-color:#fff9f9;padding-top:.4em;margin-top:1rem;margin-bottom:1rem;margin-left:1rem;margin-right:2rem;padding-bottom:.4em;padding-left:1rem;padding-right:2rem}.gloss{grid-area:gloss}.glossnumber{grid-area:glossnumber;padding-right:.6rem}.glossnumberAuto::before{counter-increment:glossN;content:"(" counter(glossN)")"}.glosswords{display:inline-block;padding-left:-.3rem;padding-right:1rem}.sitemap{padding-left:3rem;font-size:1.2rem}.sitemap a{color:rgba(0,0,0,.4)}.sitemap .sup{color:rgba(255,0,0,.7)}.highline a,.sitemap a:hover{color:#000}.highline .sup,.sitemap .sup:hover{color:red}.highline{font-size:1.6rem;color:#000;border-left:1px red solid;padding-left:1rem;padding-top:.1rem;padding-bottom:.1rem;background-color:#fff9f9}.svedit{display:none;margin-left:.5rem}@media(max-width:767px){html{box-sizing:border-box;max-width:767px;margin:0 auto;padding:0}body{font-size:1rem;padding-left:10px;padding-right:10px}.grid{display:inline}.coretitle{margin-top:3rem;margin-bottom:2rem;font-size:2.2rem}.leftcolumn{display:none}.has,.afterhas{font-size:1.1rem}.mantle,.crust{margin-bottom:.2em}.content{padding:0;margin:0 auto;margin-top:4rem}.hpar{display:none}.mantletitle{font-size:1.7rem}.sessiongrid{display:none}} diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/paged.polyfill.js b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/paged.polyfill.js index 1b7048a..c984974 100644 --- a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/paged.polyfill.js +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/paged.polyfill.js @@ -1,3 +1,7 @@ +/** + * @license Paged.js v0.1.43 | MIT | https://gitlab.pagedmedia.org/tools/pagedjs + */ + (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -620,64 +624,87 @@ } function nodeAfter(node, limiter) { - let after = node; + if (limiter && node === limiter) { + return; + } + let significantNode = nextSignificantNode(node); + if (significantNode) { + return significantNode; + } + if (node.parentNode) { + while ((node = node.parentNode)) { + if (limiter && node === limiter) { + return; + } + significantNode = nextSignificantNode(node); + if (significantNode) { + return significantNode; + } + } + } + } - if (after.nextSibling) { - if (limiter && node === limiter) { - return; - } - after = after.nextSibling; - } else { - while (after) { - after = after.parentNode; - if (limiter && after === limiter) { - after = undefined; - break; + function nodeBefore(node, limiter) { + if (limiter && node === limiter) { + return; + } + let significantNode = previousSignificantNode(node); + if (significantNode) { + return significantNode; + } + if (node.parentNode) { + while ((node = node.parentNode)) { + if (limiter && node === limiter) { + return; } - if (after && after.nextSibling) { - after = after.nextSibling; - break; + significantNode = previousSignificantNode(node); + if (significantNode) { + return significantNode; } } } + } + + function elementAfter(node, limiter) { + let after = nodeAfter(node, limiter); + + while (after && after.nodeType !== 1) { + after = nodeAfter(after, limiter); + } return after; } - function nodeBefore(node, limiter) { - let before = node; - if (before.previousSibling) { - if (limiter && node === limiter) { - return; - } - before = before.previousSibling; - } else { - while (before) { - before = before.parentNode; - if (limiter && before === limiter) { - before = undefined; - break; - } - if (before && before.previousSibling) { - before = before.previousSibling; - break; - } - } + function elementBefore(node, limiter) { + let before = nodeBefore(node, limiter); + + while (before && before.nodeType !== 1) { + before = nodeBefore(before, limiter); } return before; } - function elementAfter(node, limiter) { - let after = nodeAfter(node); + function displayedElementAfter(node, limiter) { + let after = elementAfter(node, limiter); - while (after && after.nodeType !== 1) { - after = nodeAfter(after); + while (after && after.dataset.undisplayed) { + after = elementAfter(after); } return after; } + function displayedElementBefore(node, limiter) { + let before = elementBefore(node, limiter); + + while (before && before.dataset.undisplayed) { + before = elementBefore(before); + } + + return before; + } + function rebuildAncestors(node) { let parent, ancestor; let ancestors = []; @@ -810,15 +837,16 @@ return false; } - function needsPageBreak(node) { - if( typeof node !== "undefined" && - typeof node.dataset !== "undefined" && - (node.dataset.page || node.dataset.afterPage) - ) { - return true; + function needsPageBreak(node, previousSignificantNode) { + if (typeof node === "undefined" || !previousSignificantNode || isIgnorable(node)) { + return false; } - - return false; + if (node.dataset && node.dataset.undisplayed) { + return false; + } + const previousSignificantNodePage = previousSignificantNode.dataset ? previousSignificantNode.dataset.page : undefined; + const currentNodePage = node.dataset ? node.dataset.page : undefined; + return currentNodePage !== previousSignificantNodePage; } function *words(node) { @@ -881,7 +909,7 @@ return true; } - if (node.style.display === "none") { + if (node.style && node.style.display === "none") { return false; } @@ -1029,6 +1057,158 @@ return index; } + + /** + * Throughout, whitespace is defined as one of the characters + * "\t" TAB \u0009 + * "\n" LF \u000A + * "\r" CR \u000D + * " " SPC \u0020 + * + * This does not use Javascript's "\s" because that includes non-breaking + * spaces (and also some other characters). + */ + + /** + * Determine if a node should be ignored by the iterator functions. + * taken from https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace#Whitespace_helper_functions + * + * @param {Node} node An object implementing the DOM1 |Node| interface. + * @return {boolean} true if the node is: + * 1) A |Text| node that is all whitespace + * 2) A |Comment| node + * and otherwise false. + */ + function isIgnorable(node) { + return (node.nodeType === 8) || // A comment node + ((node.nodeType === 3) && isAllWhitespace(node)); // a text node, all whitespace + } + + /** + * Determine whether a node's text content is entirely whitespace. + * + * @param {Node} node A node implementing the |CharacterData| interface (i.e., a |Text|, |Comment|, or |CDATASection| node + * @return {boolean} true if all of the text content of |nod| is whitespace, otherwise false. + */ + function isAllWhitespace(node) { + return !(/[^\t\n\r ]/.test(node.textContent)); + } + + /** + * Version of |previousSibling| that skips nodes that are entirely + * whitespace or comments. (Normally |previousSibling| is a property + * of all DOM nodes that gives the sibling node, the node that is + * a child of the same parent, that occurs immediately before the + * reference node.) + * + * @param {ChildNode} sib The reference node. + * @return {Node|null} Either: + * 1) The closest previous sibling to |sib| that is not ignorable according to |is_ignorable|, or + * 2) null if no such node exists. + */ + function previousSignificantNode(sib) { + while ((sib = sib.previousSibling)) { + if (!isIgnorable(sib)) return sib; + } + return null; + } + + function breakInsideAvoidParentNode(node) { + while ((node = node.parentNode)) { + if (node && node.dataset && node.dataset.breakInside === "avoid") { + return node; + } + } + return null; + } + + /** + * Find a parent with a given node name. + * @param {Node} node - initial Node + * @param {string} nodeName - node name (eg. "TD", "TABLE", "STRONG"...) + * @param {Node} limiter - go up to the parent until there's no more parent or the current node is equals to the limiter + * @returns {Node|undefined} - Either: + * 1) The closest parent for a the given node name, or + * 2) undefined if no such node exists. + */ + function parentOf(node, nodeName, limiter) { + if (limiter && node === limiter) { + return; + } + if (node.parentNode) { + while ((node = node.parentNode)) { + if (limiter && node === limiter) { + return; + } + if (node.nodeName === nodeName) { + return node; + } + } + } + } + + /** + * Version of |nextSibling| that skips nodes that are entirely + * whitespace or comments. + * + * @param {ChildNode} sib The reference node. + * @return {Node|null} Either: + * 1) The closest next sibling to |sib| that is not ignorable according to |is_ignorable|, or + * 2) null if no such node exists. + */ + function nextSignificantNode(sib) { + while ((sib = sib.nextSibling)) { + if (!isIgnorable(sib)) return sib; + } + return null; + } + + function filterTree(content, func, what) { + const treeWalker = document.createTreeWalker( + content || this.dom, + what || NodeFilter.SHOW_ALL, + func ? { acceptNode: func } : null, + false + ); + + let node; + let current; + node = treeWalker.nextNode(); + while(node) { + current = node; + node = treeWalker.nextNode(); + current.parentNode.removeChild(current); + } + } + + /** + * Layout + * @class + */ + class BreakToken { + + constructor(node, offset) { + this.node = node; + this.offset = offset; + } + + equals(otherBreakToken) { + if (!otherBreakToken) { + return false; + } + if (this["node"] && otherBreakToken["node"] && + this["node"] !== otherBreakToken["node"]) { + return false; + } + if (this["offset"] && otherBreakToken["offset"] && + this["offset"] !== otherBreakToken["offset"]) { + return false; + } + return true; + } + + } + const MAX_CHARS_PER_BREAK = 1500; /** @@ -1057,13 +1237,15 @@ this.settings = options || {}; this.maxChars = this.settings.maxChars || MAX_CHARS_PER_BREAK; + this.forceRenderBreak = false; } - async renderTo(wrapper, source, breakToken, bounds=this.bounds) { + async renderTo(wrapper, source, breakToken, bounds = this.bounds) { let start = this.getStart(source, breakToken); let walker = walk(start, source); let node; + let prevNode; let done; let next; @@ -1072,8 +1254,11 @@ let length = 0; + let prevBreakToken = breakToken || new BreakToken(start); + while (!done && !newBreakToken) { next = walker.next(); + prevNode = node; node = next.value; done = next.done; @@ -1085,7 +1270,12 @@ await this.waitForImages(imgs); } - newBreakToken = this.findBreakToken(wrapper, source, bounds); + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); + + if (newBreakToken && newBreakToken.equals(prevBreakToken)) { + console.warn("Unable to layout item: ", prevNode); + return undefined; + } return newBreakToken; } @@ -1093,7 +1283,6 @@ // Check if the rendered element has a break set if (hasRenderedContent && this.shouldBreak(node)) { - this.hooks && this.hooks.layout.trigger(wrapper, this); let imgs = wrapper.querySelectorAll("img"); @@ -1101,12 +1290,17 @@ await this.waitForImages(imgs); } - newBreakToken = this.findBreakToken(wrapper, source, bounds); + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); if (!newBreakToken) { newBreakToken = this.breakAt(node); } + if (newBreakToken && newBreakToken.equals(prevBreakToken)) { + console.warn("Unable to layout item: ", node); + return undefined; + } + length = 0; break; @@ -1129,6 +1323,21 @@ walker = walk(nodeAfter(node, source), source); } + if (this.forceRenderBreak) { + this.hooks && this.hooks.layout.trigger(wrapper, this); + + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); + + if (!newBreakToken) { + newBreakToken = this.breakAt(node); + } + + length = 0; + this.forceRenderBreak = false; + + break; + } + // Only check x characters if (length >= this.maxChars) { @@ -1139,7 +1348,12 @@ await this.waitForImages(imgs); } - newBreakToken = this.findBreakToken(wrapper, source, bounds); + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); + + if (newBreakToken && newBreakToken.equals(prevBreakToken)) { + console.warn("Unable to layout item: ", node); + return undefined; + } if (newBreakToken) { length = 0; @@ -1151,15 +1365,23 @@ return newBreakToken; } - breakAt(node, offset=0) { - return { + breakAt(node, offset = 0) { + let newBreakToken = new BreakToken( node, offset - }; + ); + let breakHooks = this.hooks.onBreakToken.triggerSync(newBreakToken, undefined, node, this); + breakHooks.forEach((newToken) => { + if (typeof newToken != "undefined") { + newBreakToken = newToken; + } + }); + + return newBreakToken; } shouldBreak(node) { - let previousSibling = node.previousSibling; + let previousSibling = previousSignificantNode(node); let parentNode = node.parentNode; let parentBreakBefore = needsBreakBefore(node) && parentNode && !previousSibling && needsBreakBefore(parentNode); let doubleBreakBefore; @@ -1168,7 +1390,11 @@ doubleBreakBefore = node.dataset.breakBefore === parentNode.dataset.breakBefore; } - return !doubleBreakBefore && needsBreakBefore(node) || needsPreviousBreakAfter(node) || needsPageBreak(node); + return !doubleBreakBefore && needsBreakBefore(node) || needsPreviousBreakAfter(node) || needsPageBreak(node, previousSibling); + } + + forceBreak() { + this.forceRenderBreak = true; } getStart(source, breakToken) { @@ -1184,7 +1410,7 @@ return start; } - append(node, dest, breakToken, shallow=true, rebuild=true) { + append(node, dest, breakToken, shallow = true, rebuild = true) { let clone = cloneNode(node, !shallow); @@ -1215,7 +1441,7 @@ dest.appendChild(clone); } - let nodeHooks = this.hooks.renderNode.triggerSync(clone, node); + let nodeHooks = this.hooks.renderNode.triggerSync(clone, node, this); nodeHooks.forEach((newNode) => { if (typeof newNode != "undefined") { clone = newNode; @@ -1235,16 +1461,16 @@ async awaitImageLoaded(image) { return new Promise(resolve => { if (image.complete !== true) { - image.onload = function() { - let { width, height } = window.getComputedStyle(image); + image.onload = function () { + let {width, height} = window.getComputedStyle(image); resolve(width, height); }; - image.onerror = function(e) { - let { width, height } = window.getComputedStyle(image); + image.onerror = function (e) { + let {width, height} = window.getComputedStyle(image); resolve(width, height, e); }; } else { - let { width, height } = window.getComputedStyle(image); + let {width, height} = window.getComputedStyle(image); resolve(width, height); } }); @@ -1264,7 +1490,7 @@ break; } - if(window.getComputedStyle(node)["break-inside"] === "avoid") { + if (window.getComputedStyle(node)["break-inside"] === "avoid") { breakNode = node; break; } @@ -1286,7 +1512,11 @@ if (!renderedNode) { // Find closest element with data-ref - renderedNode = findElement(prevValidNode(temp), rendered); + let prevNode = prevValidNode(temp); + if (!isElement(prevNode)) { + prevNode = prevNode.parentElement; + } + renderedNode = findElement(prevNode, rendered); // Check if temp is the last rendered node at its level. if (!temp.nextSibling) { // We need to ensure that the previous sibling of temp is fully rendered. @@ -1294,7 +1524,7 @@ const walker = document.createTreeWalker(renderedNodeFromSource, NodeFilter.SHOW_ELEMENT); const lastChildOfRenderedNodeFromSource = walker.lastChild(); const lastChildOfRenderedNodeMatchingFromRendered = findElement(lastChildOfRenderedNodeFromSource, rendered); - // Check if we found that the last child in source + // Check if we found that the last child in source if (!lastChildOfRenderedNodeMatchingFromRendered) { // Pending content to be rendered before virtual break token return; @@ -1318,8 +1548,14 @@ parent = findElement(renderedNode, source); index = indexOfTextNode(temp, parent); - node = child(parent, index); - offset = 0; + // No seperatation for the first textNode of an element + if(index === 0) { + node = parent; + offset = 0; + } else { + node = child(parent, index); + offset = 0; + } } } else { renderedNode = findElement(container.parentNode, rendered); @@ -1344,14 +1580,14 @@ return; } - return { + return new BreakToken( node, offset - }; + ); } - findBreakToken(rendered, source, bounds=this.bounds, extract=true) { + findBreakToken(rendered, source, bounds = this.bounds, prevBreakToken, extract = true) { let overflow = this.findOverflow(rendered, bounds); let breakToken, breakLetter; @@ -1365,12 +1601,6 @@ if (overflow) { breakToken = this.createBreakToken(overflow, rendered, source); // breakToken is nullable - if (breakToken && breakToken["node"] && breakToken["offset"] && breakToken["node"].textContent) { - breakLetter = breakToken["node"].textContent.charAt(breakToken["offset"]); - } else { - breakLetter = undefined; - } - let breakHooks = this.hooks.onBreakToken.triggerSync(breakToken, overflow, rendered, this); breakHooks.forEach((newToken) => { if (typeof newToken != "undefined") { @@ -1378,6 +1608,16 @@ } }); + // Stop removal if we are in a loop + if (breakToken && breakToken.equals(prevBreakToken)) { + return breakToken; + } + + if (breakToken && breakToken["node"] && breakToken["offset"] && breakToken["node"].textContent) { + breakLetter = breakToken["node"].textContent.charAt(breakToken["offset"]); + } else { + breakLetter = undefined; + } if (breakToken && breakToken.node && extract) { this.removeOverflow(overflow, breakLetter); @@ -1387,18 +1627,18 @@ return breakToken; } - hasOverflow(element, bounds=this.bounds) { + hasOverflow(element, bounds = this.bounds) { let constrainingElement = element && element.parentNode; // this gets the element, instead of the wrapper for the width workaround - let { width } = element.getBoundingClientRect(); + let {width} = element.getBoundingClientRect(); let scrollWidth = constrainingElement ? constrainingElement.scrollWidth : 0; return Math.max(Math.floor(width), scrollWidth) > Math.round(bounds.width); } - findOverflow(rendered, bounds=this.bounds) { + findOverflow(rendered, bounds = this.bounds) { if (!this.hasOverflow(rendered, bounds)) return; let start = Math.round(bounds.left); - let end = Math.round(bounds.right); + let end = Math.round(bounds.right); let range; let walker = walk(rendered.firstChild, rendered); @@ -1423,7 +1663,12 @@ // Check if it is a float let isFloat = false; - if (isElement(node) ) { + // Check if the node is inside a break-inside: avoid table cell + const insideTableCell = parentOf(node, "TD", rendered); + if (insideTableCell && window.getComputedStyle(insideTableCell)["break-inside"] === "avoid") { + // breaking inside a table cell produces unexpected result, as a workaround, we forcibly avoid break inside in a cell. + prev = insideTableCell; + } else if (isElement(node)) { let styles = window.getComputedStyle(node); isFloat = styles.getPropertyValue("float") !== "none"; skip = styles.getPropertyValue("break-inside") === "avoid"; @@ -1434,27 +1679,27 @@ if (prev) { range = document.createRange(); - range.setStartBefore(prev); + range.selectNode(prev); break; } if (!br && !isFloat && isElement(node)) { range = document.createRange(); - range.setStartBefore(node); + range.selectNode(node); break; } if (isText(node) && node.textContent.trim().length) { range = document.createRange(); - range.setStartBefore(node); + range.selectNode(node); break; } } if (!range && isText(node) && - node.textContent.trim().length && - window.getComputedStyle(node.parentNode)["break-inside"] !== "avoid") { + node.textContent.trim().length && + !breakInsideAvoidParentNode(node.parentNode)) { let rects = getClientRects(node); let rect; @@ -1466,7 +1711,7 @@ } } - if(left >= end) { + if (left >= end) { range = document.createRange(); offset = this.textBreak(node, start, end); if (!offset) { @@ -1498,7 +1743,7 @@ } - findEndToken(rendered, source, bounds=this.bounds) { + findEndToken(rendered, source, bounds = this.bounds) { if (rendered.childNodes.length === 0) { return; } @@ -1510,7 +1755,7 @@ if (!validNode(lastChild)) { // Only get elements with refs lastChild = lastChild.previousSibling; - } else if(!validNode(lastChild.lastChild)) { + } else if (!validNode(lastChild.lastChild)) { // Deal with invalid dom items lastChild = prevValidNode(lastChild.lastChild); break; @@ -1607,18 +1852,31 @@ hyphenateAtBreak(startContainer, breakLetter) { if (isText(startContainer)) { let startText = startContainer.textContent; - let prevLetter = startText[startText.length-1]; + let prevLetter = startText[startText.length - 1]; // Add a hyphen if previous character is a letter or soft hyphen if ( - (breakLetter && /^\w|\u00AD$/.test(prevLetter) && /^\w|\u00AD$/.test(breakLetter)) || - (!breakLetter && /^\w|\u00AD$/.test(prevLetter)) + (breakLetter && /^\w|\u00AD$/.test(prevLetter) && /^\w|\u00AD$/.test(breakLetter)) || + (!breakLetter && /^\w|\u00AD$/.test(prevLetter)) ) { startContainer.parentNode.classList.add("pagedjs_hyphen"); startContainer.textContent += this.settings.hyphenGlyph || "\u2011"; } } } + + equalTokens(a, b) { + if (!a || !b) { + return false; + } + if (a["node"] && b["node"] && a["node"] !== b["node"]) { + return false; + } + if (a["offset"] && b["offset"] && a["offset"] !== b["offset"]) { + return false; + } + return true; + } } eventEmitter(Layout.prototype); @@ -1693,7 +1951,7 @@ let page = this.element; // let pagebox = this.pagebox; - let index = pgnum+1; + let index = pgnum + 1; let id = `page-${index}`; @@ -1748,7 +2006,7 @@ this.layoutMethod = new Layout(this.area, this.hooks, maxChars); let newBreakToken = await this.layoutMethod.renderTo(this.wrapper, contents, breakToken); - + this.addListeners(contents); this.endToken = newBreakToken; @@ -1773,7 +2031,7 @@ let e; for (var i = 0; i < entries.length; i++) { e = entries[i]; - if(e.dataset.ref === ref) { + if (e.dataset.ref === ref) { return e; } } @@ -1803,8 +2061,8 @@ } // TODO: fall back to mutation observer? - this._onScroll = function() { - if(this.listening) { + this._onScroll = function () { + if (this.listening) { this.element.scrollLeft = 0; } }.bind(this); @@ -1827,30 +2085,31 @@ this.element.removeEventListener("underflow", this._checkOverflowAfterResize, false); } - this.element &&this.element.removeEventListener("scroll", this._onScroll); + this.element && this.element.removeEventListener("scroll", this._onScroll); } addResizeObserver(contents) { let wrapper = this.wrapper; let prevHeight = wrapper.getBoundingClientRect().height; - this.ro = new ResizeObserver( entries => { + this.ro = new ResizeObserver(entries => { if (!this.listening) { return; } + requestAnimationFrame(() => { + for (let entry of entries) { + const cr = entry.contentRect; - for (let entry of entries) { - const cr = entry.contentRect; - - if (cr.height > prevHeight) { - this.checkOverflowAfterResize(contents); - prevHeight = wrapper.getBoundingClientRect().height; - } else if (cr.height < prevHeight ) { // TODO: calc line height && (prevHeight - cr.height) >= 22 - this.checkUnderflowAfterResize(contents); - prevHeight = cr.height; + if (cr.height > prevHeight) { + this.checkOverflowAfterResize(contents); + prevHeight = wrapper.getBoundingClientRect().height; + } else if (cr.height < prevHeight) { // TODO: calc line height && (prevHeight - cr.height) >= 22 + this.checkUnderflowAfterResize(contents); + prevHeight = cr.height; + } } - } + }); }); this.ro.observe(wrapper); @@ -1861,7 +2120,7 @@ return; } - let newBreakToken = this.layoutMethod.findBreakToken(this.wrapper, contents); + let newBreakToken = this.layoutMethod.findBreakToken(this.wrapper, contents, this.startToken); if (newBreakToken) { this.endToken = newBreakToken; @@ -1876,8 +2135,6 @@ let endToken = this.layoutMethod.findEndToken(this.wrapper, contents); - // let newBreakToken = this.layoutMethod.findBreakToken(this.wrapper, contents); - if (endToken) { this._onUnderflow && this._onUnderflow(endToken); } @@ -1918,7 +2175,6 @@ let fragment = range.createContextualFragment(markup); this.addRefs(fragment); - this.removeEmpty(fragment); return fragment; } @@ -1933,7 +2189,6 @@ // } this.addRefs(contents); - this.removeEmpty(contents); return contents; } @@ -1942,7 +2197,7 @@ var treeWalker = document.createTreeWalker( content, NodeFilter.SHOW_ELEMENT, - { acceptNode: function(node) { return NodeFilter.FILTER_ACCEPT; } }, + null, false ); @@ -1965,62 +2220,10 @@ } } - removeEmpty(content) { - var treeWalker = document.createTreeWalker( - content, - NodeFilter.SHOW_TEXT, - { acceptNode: function(node) { - // Only remove more than a single space - if (node.textContent.length > 1 && !node.textContent.trim()) { - - // Don't touch whitespace if text is preformated - let parent = node.parentNode; - let pre = isElement(parent) && parent.closest("pre"); - if (pre) { - return NodeFilter.FILTER_REJECT; - } - - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } }, - false - ); - - let node; - let current; - node = treeWalker.nextNode(); - while(node) { - current = node; - node = treeWalker.nextNode(); - // if (!current.nextSibling || (current.nextSibling && current.nextSibling.nodeType === 1)) { - current.parentNode.removeChild(current); - // } - } - } - find(ref) { return this.refs[ref]; } - // isWrapper(element) { - // return wrappersRegex.test(element.nodeName); - // } - - isText(node) { - return node.tagName === "TAG"; - } - - isElement(node) { - return node.nodeType === 1; - } - - hasChildren(node) { - return node.childNodes && node.childNodes.length; - } - - destroy() { this.refs = undefined; this.dom = undefined; @@ -2313,6 +2516,7 @@ this.hooks = {}; this.hooks.beforeParsed = new Hook(this); + this.hooks.filter = new Hook(this); this.hooks.afterParsed = new Hook(this); this.hooks.beforePageLayout = new Hook(this); this.hooks.layout = new Hook(this); @@ -2362,6 +2566,8 @@ parsed = new ContentParser(content); + this.hooks.filter.triggerSync(parsed); + this.source = parsed; this.breakToken = undefined; @@ -2372,7 +2578,7 @@ this.setup(renderTo); } - this.emit("rendering", content); + this.emit("rendering", parsed); await this.hooks.afterParsed.trigger(parsed, this); @@ -2385,7 +2591,7 @@ } this.rendered = true; - this.pagesArea.style.setProperty("--pagedjs-page-count", this.total); + this.pagesArea.style.setProperty("--pagedjs-page-count", this.total); await this.hooks.afterRendered.trigger(this.pages, this); @@ -2429,7 +2635,6 @@ let done = false; let result; - while (!done) { result = await this.q.enqueue(() => { return this.renderAsync(renderer); }); done = result.done; @@ -25494,6 +25699,10 @@ --pagedjs-padding-right: 0mm; --pagedjs-padding-bottom: 0mm; --pagedjs-padding-left: 0mm; + --pagedjs-border-top: 0mm; + --pagedjs-border-right: 0mm; + --pagedjs-border-bottom: 0mm; + --pagedjs-border-left: 0mm; --pagedjs-bleed-top: 0mm; --pagedjs-bleed-right: 0mm; --pagedjs-bleed-bottom: 0mm; @@ -25513,6 +25722,7 @@ --pagedjs-mark-cross-display: none; --pagedjs-mark-crop-display: none; --pagedjs-page-count: 0; + --pagedjs-page-counter-increment: 1; } @page { @@ -25581,6 +25791,7 @@ display: var(--pagedjs-mark-crop-display); flex-grow: 0; flex-shrink: 0; + z-index: 9999999999; } .pagedjs_bleed-top .pagedjs_marks-crop:nth-child(1), @@ -25836,8 +26047,11 @@ grid-row: page; width: 100%; height: 100%; - padding: var(--pagedjs-padding-top) var(--pagedjs-padding-right) var(--pagedjs-padding-bottom) var(--pagedjs-padding-left) - + padding: var(--pagedjs-padding-top) var(--pagedjs-padding-right) var(--pagedjs-padding-bottom) var(--pagedjs-padding-left); + border-top: var(--pagedjs-border-top); + border-right: var(--pagedjs-border-right); + border-bottom: var(--pagedjs-border-bottom); + border-left: var(--pagedjs-border-left); } .pagedjs_pagebox > .pagedjs_area > .pagedjs_page_content { @@ -25848,19 +26062,17 @@ } .pagedjs_page { - counter-increment: page; + counter-increment: page var(--pagedjs-page-counter-increment); width: var(--pagedjs-width); height: var(--pagedjs-height); } .pagedjs_page.pagedjs_right_page { - counter-increment: page; width: var(--pagedjs-width-right); height: var(--pagedjs-height-right); } .pagedjs_page.pagedjs_left_page { - counter-increment: page; width: var(--pagedjs-width-left); height: var(--pagedjs-height-left); } @@ -25869,7 +26081,6 @@ counter-reset: pages var(--pagedjs-page-count); } - .pagedjs_pagebox .pagedjs_margin-top-left-corner, .pagedjs_pagebox .pagedjs_margin-top-right-corner, .pagedjs_pagebox .pagedjs_margin-bottom-left-corner, @@ -26037,10 +26248,6 @@ content: none !important; } -img { - height: auto; -} - [data-align-last-split-element='justify'] { text-align-last: justify; } @@ -26426,7 +26633,6 @@ img { this.width = undefined; this.height = undefined; this.orientation = undefined; - this.marginalia = {}; } @@ -26440,18 +26646,25 @@ img { width: undefined, height: undefined, orientation: undefined, - margin : { + margin: { top: {}, right: {}, left: {}, bottom: {} }, - padding : { + padding: { top: {}, right: {}, left: {}, bottom: {} }, + border: { + top: {}, + right: {}, + left: {}, + bottom: {} + }, + backgroundOrigin: undefined, block: {}, marks: undefined }; @@ -26497,7 +26710,7 @@ img { page.marginalia = marginalia; } - let declarations = this.replaceDeclartations(node); + let declarations = this.replaceDeclarations(node); if (declarations.size) { page.size = declarations.size; @@ -26564,6 +26777,10 @@ img { page.padding = declarations.padding; } + if (declarations.border) { + page.border = declarations.border; + } + if (declarations.marks) { page.marks = declarations.marks; } @@ -26606,15 +26823,15 @@ img { let bleedrecto = undefined; if (":left" in this.pages) { - bleedverso = this.pages[":left"].bleed; - } + bleedverso = this.pages[":left"].bleed; + } - if (":right" in this.pages) { - bleedrecto = this.pages[":right"].bleed; - } + if (":right" in this.pages) { + bleedrecto = this.pages[":right"].bleed; + } if ((width && height) && - (this.width !== width || this.height !== height)) { + (this.width !== width || this.height !== height)) { this.width = width; this.height = height; this.format = format; @@ -26702,7 +26919,7 @@ img { return parsed; } - replaceDeclartations(ast) { + replaceDeclarations(ast) { let parsed = {}; lib.walk(ast.block, { @@ -26737,7 +26954,7 @@ img { parsed.margin[m] = declaration.value.children.first(); dList.remove(dItem); - } else if (prop === "padding"){ + } else if (prop === "padding") { parsed.padding = this.getPaddings(declaration.value); dList.remove(dItem); @@ -26753,8 +26970,43 @@ img { } parsed.padding[p] = declaration.value.children.first(); dList.remove(dItem); + } - } else if (prop === "size") { + else if (prop === "border") { + if (!parsed.border) { + parsed.border = { + top: {}, + right: {}, + left: {}, + bottom: {} + }; + } + parsed.border.top = lib.generate(declaration.value); + parsed.border.right = lib.generate(declaration.value); + parsed.border.left = lib.generate(declaration.value); + parsed.border.bottom = lib.generate(declaration.value); + + dList.remove(dItem); + + } + + else if (prop.indexOf("border-") === 0) { + if (!parsed.border) { + parsed.border = { + top: {}, + right: {}, + left: {}, + bottom: {} + }; + } + let p = prop.substring("border-".length); + + parsed.border[p] = lib.generate(declaration.value); + dList.remove(dItem); + + } + + else if (prop === "size") { parsed.size = this.getSize(declaration); dList.remove(dItem); } else if (prop === "bleed") { @@ -26780,7 +27032,7 @@ img { unit: "px" }); break; - // ignore + // ignore } } @@ -26793,8 +27045,8 @@ img { }); return parsed; - } + } getSize(declaration) { let width, height, orientation, format; @@ -26802,7 +27054,7 @@ img { lib.walk(declaration, { visit: "Dimension", enter: (node, item, list) => { - let {value, unit} = node; + let { value, unit } = node; if (typeof width === "undefined") { width = { value, unit }; } else if (typeof height === "undefined") { @@ -26860,9 +27112,16 @@ img { }; lib.walk(declaration, { - visit: "Dimension", - enter: (node, item, list) => { - margins.push(node); + enter: (node) => { + switch (node.type) { + case "Dimension": // margin: 1in 2in, margin: 20px, etc... + margins.push(node); + break; + case "Number": // margin: 0 + margins.push({value: node.value, unit: "px"}); + break; + // ignore + } } }); @@ -26900,9 +27159,16 @@ img { }; lib.walk(declaration, { - visit: "Dimension", - enter: (node, item, list) => { - paddings.push(node); + enter: (node) => { + switch (node.type) { + case "Dimension": // padding: 1in 2in, padding: 20px, etc... + paddings.push(node); + break; + case "Number": // padding: 0 + paddings.push({value: node.value, unit: "px"}); + break; + // ignore + } } }); if (paddings.length === 1) { @@ -26930,50 +27196,79 @@ img { } return padding; } + + // get values for the border on the @page to pass them to the element with the .pagedjs_area class + getBorders(declaration) { + let border = { + top: {}, + right: {}, + left: {}, + bottom: {} + }; + + if (declaration.prop == "border") { + border.top = lib.generate(declaration.value); + border.right = lib.generate(declaration.value); + border.bottom = lib.generate(declaration.value); + border.left = lib.generate(declaration.value); + + } + else if (declaration.prop == "border-top") { + border.top = lib.generate(declaration.value); + } + else if (declaration.prop == "border-right") { + border.right = lib.generate(declaration.value); + + } + else if (declaration.prop == "border-bottom") { + border.bottom = lib.generate(declaration.value); + + } + else if (declaration.prop == "border-left") { + border.left = lib.generate(declaration.value); + } + + return border; + } + + addPageClasses(pages, ast, sheet) { // First add * page - if ("*" in pages && !pages["*"].added) { + if ("*" in pages) { let p = this.createPage(pages["*"], ast.children, sheet); sheet.insertRule(p); - pages["*"].added = true; } // Add :left & :right - if (":left" in pages && !pages[":left"].added) { + if (":left" in pages) { let left = this.createPage(pages[":left"], ast.children, sheet); sheet.insertRule(left); - pages[":left"].added = true; } - if (":right" in pages && !pages[":right"].added) { + if (":right" in pages) { let right = this.createPage(pages[":right"], ast.children, sheet); sheet.insertRule(right); - pages[":right"].added = true; } // Add :first & :blank - if (":first" in pages && !pages[":first"].first) { + if (":first" in pages) { let first = this.createPage(pages[":first"], ast.children, sheet); sheet.insertRule(first); - pages[":first"].added = true; } - if (":blank" in pages && !pages[":blank"].added) { + if (":blank" in pages) { let blank = this.createPage(pages[":blank"], ast.children, sheet); sheet.insertRule(blank); - pages[":blank"].added = true; } // Add nth pages for (let pg in pages) { - if (pages[pg].nth && !pages[pg].added) { + if (pages[pg].nth) { let nth = this.createPage(pages[pg], ast.children, sheet); sheet.insertRule(nth); - pages[pg].added = true; } } // Add named pages for (let pg in pages) { - if (pages[pg].name && !pages[pg].added) { + if (pages[pg].name) { let named = this.createPage(pages[pg], ast.children, sheet); sheet.insertRule(named); - pages[pg].added = true; } } @@ -26988,11 +27283,14 @@ img { loc: 0, children: children }; + + let rule = this.createRule(selectors, block); this.addMarginVars(page.margin, children, children.first()); - this.addPaddingVars(page.padding, children, children.first()); + this.addBorderVars(page.border, children, children.first()); + if (page.width) { this.addDimensions(page.width, page.height, page.orientation, children, children.first()); @@ -27002,7 +27300,6 @@ img { this.addMarginaliaStyles(page, ruleList, rule, sheet); this.addMarginaliaContent(page, ruleList, rule, sheet); } - return rule; } @@ -27020,6 +27317,7 @@ img { } }); list.append(mVar, item); + } } } @@ -27027,6 +27325,7 @@ img { addPaddingVars(padding, list, item) { // variables for padding for (let p in padding) { + if (typeof padding[p].value !== "undefined") { let value = padding[p].value + (padding[p].unit || ""); let pVar = list.createItem({ @@ -27044,6 +27343,25 @@ img { } } + addBorderVars(border, list, item) { + // variables for borders + for (let b in border) { + if (typeof border[b] !== "undefined") { + let value = border[b]; + let bVar = list.createItem({ + type: "Declaration", + property: "--pagedjs-border-" + b, + value: { + type: "Raw", + value: value + } + }); + list.append(bVar, item); + } + + } + } + addDimensions(width, height, orientation, list, item) { let widthString, heightString; @@ -27074,7 +27392,7 @@ img { let block = lib.clone(page.marginalia[loc]); let hasContent = false; - if(block.children.isEmpty()) { + if (block.children.isEmpty()) { continue; } @@ -27108,11 +27426,11 @@ img { if (node.property === "width" && (loc === "top-left" || - loc === "top-center" || - loc === "top-right" || - loc === "bottom-left" || - loc === "bottom-center" || - loc === "bottom-right")) { + loc === "top-center" || + loc === "top-right" || + loc === "bottom-left" || + loc === "bottom-center" || + loc === "bottom-right")) { let c = lib.clone(node); c.property = "max-width"; list.appendData(c); @@ -27120,11 +27438,11 @@ img { if (node.property === "height" && (loc === "left-top" || - loc === "left-middle" || - loc === "left-bottom" || - loc === "right-top" || - loc === "right-middle" || - loc === "right-bottom")) { + loc === "left-middle" || + loc === "left-bottom" || + loc === "right-top" || + loc === "right-middle" || + loc === "right-bottom")) { let c = lib.clone(node); c.property = "max-height"; list.appendData(c); @@ -27170,7 +27488,7 @@ img { } }); - if(content.children.isEmpty()) { + if (content.children.isEmpty()) { continue; } @@ -27282,7 +27600,7 @@ img { bleedLeftRecto = this.createVariable("--pagedjs-bleed-right-left", CSSValueToString(bleedrecto.left)); widthStringRight = `calc( ${CSSValueToString(width)} + ${CSSValueToString(bleedrecto.left)} + ${CSSValueToString(bleedrecto.right)} )`; - heightStringRight = `calc( ${CSSValueToString(height)} + ${CSSValueToString(bleedrecto.top)} + ${CSSValueToString(bleedrecto.bottom)} )`; + heightStringRight = `calc( ${CSSValueToString(height)} + ${CSSValueToString(bleedrecto.top)} + ${CSSValueToString(bleedrecto.bottom)} )`; } if (bleedverso) { bleedTopVerso = this.createVariable("--pagedjs-bleed-left-top", CSSValueToString(bleedverso.top)); @@ -27291,18 +27609,18 @@ img { bleedLeftVerso = this.createVariable("--pagedjs-bleed-left-left", CSSValueToString(bleedverso.left)); widthStringLeft = `calc( ${CSSValueToString(width)} + ${CSSValueToString(bleedverso.left)} + ${CSSValueToString(bleedverso.right)} )`; - heightStringLeft = `calc( ${CSSValueToString(height)} + ${CSSValueToString(bleedverso.top)} + ${CSSValueToString(bleedverso.bottom)} )`; + heightStringLeft = `calc( ${CSSValueToString(height)} + ${CSSValueToString(bleedverso.top)} + ${CSSValueToString(bleedverso.bottom)} )`; } let pageWidthVar = this.createVariable("--pagedjs-width", CSSValueToString(width)); let pageHeightVar = this.createVariable("--pagedjs-height", CSSValueToString(height)); rules.push( - bleedTop, - bleedRight, - bleedBottom, - bleedLeft, - bleedTopRecto, + bleedTop, + bleedRight, + bleedBottom, + bleedLeft, + bleedTopRecto, bleedRightRecto, bleedBottomRecto, bleedLeftRecto, @@ -27310,7 +27628,7 @@ img { bleedRightVerso, bleedBottomVerso, bleedLeftVerso, - pageWidthVar, + pageWidthVar, pageHeightVar ); } @@ -27957,6 +28275,7 @@ img { if (start) { this.addPageAttributes(page, start, chunker.pages); } + // page.element.querySelector('.paged_area').style.color = red; } afterPageLayout(fragment, page, breakToken, chunker) { @@ -27995,14 +28314,14 @@ img { if (centerContent) { centerWidth = window.getComputedStyle(center)["max-width"]; - if(centerWidth === "none" || centerWidth === "auto") { - if(!leftContent && !rightContent){ + if (centerWidth === "none" || centerWidth === "auto") { + if (!leftContent && !rightContent) { marginGroup.style["grid-template-columns"] = "0 1fr 0"; - }else if(leftContent){ - if(!rightContent){ - if(leftWidth !== "none" && leftWidth !== "auto"){ + } else if (leftContent) { + if (!rightContent) { + if (leftWidth !== "none" && leftWidth !== "auto") { marginGroup.style["grid-template-columns"] = leftWidth + " 1fr " + leftWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = "auto auto 1fr"; left.style["white-space"] = "nowrap"; center.style["white-space"] = "nowrap"; @@ -28014,17 +28333,17 @@ img { left.style["white-space"] = "normal"; center.style["white-space"] = "normal"; } - }else { - if(leftWidth !== "none" && leftWidth !== "auto"){ - if(rightWidth !== "none" && rightWidth !== "auto"){ + } else { + if (leftWidth !== "none" && leftWidth !== "auto") { + if (rightWidth !== "none" && rightWidth !== "auto") { marginGroup.style["grid-template-columns"] = leftWidth + " 1fr " + rightWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = leftWidth + " 1fr " + leftWidth; } - }else { - if(rightWidth !== "none" && rightWidth !== "auto"){ + } else { + if (rightWidth !== "none" && rightWidth !== "auto") { marginGroup.style["grid-template-columns"] = rightWidth + " 1fr " + rightWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = "auto auto 1fr"; left.style["white-space"] = "nowrap"; center.style["white-space"] = "nowrap"; @@ -28034,9 +28353,9 @@ img { let rightOuterWidth = right.offsetWidth; let outerwidths = leftOuterWidth + centerOuterWidth + rightOuterWidth; let newcenterWidth = centerOuterWidth * 100 / outerwidths; - if(newcenterWidth > 40){ + if (newcenterWidth > 40) { marginGroup.style["grid-template-columns"] = "minmax(16.66%, 1fr) minmax(33%, " + newcenterWidth + "%) minmax(16.66%, 1fr)"; - }else { + } else { marginGroup.style["grid-template-columns"] = "repeat(3, 1fr)"; } left.style["white-space"] = "normal"; @@ -28045,10 +28364,10 @@ img { } } } - }else { - if(rightWidth !== "none" && rightWidth !== "auto"){ + } else { + if (rightWidth !== "none" && rightWidth !== "auto") { marginGroup.style["grid-template-columns"] = rightWidth + " 1fr " + rightWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = "auto auto 1fr"; right.style["white-space"] = "nowrap"; center.style["white-space"] = "nowrap"; @@ -28061,32 +28380,32 @@ img { center.style["white-space"] = "normal"; } } - }else if(centerWidth !== "none" && centerWidth !== "auto"){ - if(leftContent && leftWidth !== "none" && leftWidth !== "auto"){ + } else if (centerWidth !== "none" && centerWidth !== "auto") { + if (leftContent && leftWidth !== "none" && leftWidth !== "auto") { marginGroup.style["grid-template-columns"] = leftWidth + " " + centerWidth + " 1fr"; - }else if(rightContent && rightWidth !== "none" && rightWidth !== "auto"){ + } else if (rightContent && rightWidth !== "none" && rightWidth !== "auto") { marginGroup.style["grid-template-columns"] = "1fr " + centerWidth + " " + rightWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = "1fr " + centerWidth + " 1fr"; } } - }else { - if(leftContent){ - if(!rightContent){ + } else { + if (leftContent) { + if (!rightContent) { marginGroup.style["grid-template-columns"] = "1fr 0 0"; - }else { - if(leftWidth !== "none" && leftWidth !== "auto"){ - if(rightWidth !== "none" && rightWidth !== "auto"){ + } else { + if (leftWidth !== "none" && leftWidth !== "auto") { + if (rightWidth !== "none" && rightWidth !== "auto") { marginGroup.style["grid-template-columns"] = leftWidth + " 1fr " + rightWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = leftWidth + " 0 1fr"; } - }else { - if(rightWidth !== "none" && rightWidth !== "auto"){ + } else { + if (rightWidth !== "none" && rightWidth !== "auto") { marginGroup.style["grid-template-columns"] = "1fr 0 " + rightWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = "auto 1fr auto"; left.style["white-space"] = "nowrap"; right.style["white-space"] = "nowrap"; @@ -28094,16 +28413,16 @@ img { let rightOuterWidth = right.offsetWidth; let outerwidths = leftOuterWidth + rightOuterWidth; let newLeftWidth = leftOuterWidth * 100 / outerwidths; - marginGroup.style["grid-template-columns"] = "minmax(16.66%, " + newLeftWidth + "%) 0 1fr"; + marginGroup.style["grid-template-columns"] = "minmax(16.66%, " + newLeftWidth + "%) 0 1fr"; left.style["white-space"] = "normal"; right.style["white-space"] = "normal"; } } } - }else { - if(rightWidth !== "none" && rightWidth !== "auto"){ + } else { + if (rightWidth !== "none" && rightWidth !== "auto") { marginGroup.style["grid-template-columns"] = "1fr 0 " + rightWidth; - }else { + } else { marginGroup.style["grid-template-columns"] = "0 0 1fr"; } } @@ -28131,66 +28450,66 @@ img { if (middle) { middleHeight = window.getComputedStyle(middle)["max-height"]; - if(middleHeight === "none" || middleHeight === "auto") { - if(!topContent && !bottomContent){ + if (middleHeight === "none" || middleHeight === "auto") { + if (!topContent && !bottomContent) { marginGroup.style["grid-template-rows"] = "0 1fr 0"; - }else if(topContent){ - if(!bottomContent){ - if(topHeight !== "none" && topHeight !== "auto"){ + } else if (topContent) { + if (!bottomContent) { + if (topHeight !== "none" && topHeight !== "auto") { marginGroup.style["grid-template-rows"] = topHeight + " calc(100% - " + topHeight + "*2) " + topHeight; } - }else { - if(topHeight !== "none" && topHeight !== "auto"){ - if(bottomHeight !== "none" && bottomHeight !== "auto"){ + } else { + if (topHeight !== "none" && topHeight !== "auto") { + if (bottomHeight !== "none" && bottomHeight !== "auto") { marginGroup.style["grid-template-rows"] = topHeight + " calc(100% - " + topHeight + " - " + bottomHeight + ") " + bottomHeight; - }else { + } else { marginGroup.style["grid-template-rows"] = topHeight + " calc(100% - " + topHeight + "*2) " + topHeight; } - }else { - if(bottomHeight !== "none" && bottomHeight !== "auto"){ + } else { + if (bottomHeight !== "none" && bottomHeight !== "auto") { marginGroup.style["grid-template-rows"] = bottomHeight + " calc(100% - " + bottomHeight + "*2) " + bottomHeight; } } } - }else { - if(bottomHeight !== "none" && bottomHeight !== "auto"){ + } else { + if (bottomHeight !== "none" && bottomHeight !== "auto") { marginGroup.style["grid-template-rows"] = bottomHeight + " calc(100% - " + bottomHeight + "*2) " + bottomHeight; } } - }else { - if(topContent && topHeight !== "none" && topHeight !== "auto"){ - marginGroup.style["grid-template-rows"] = topHeight +" " + middleHeight + " calc(100% - (" + topHeight + " + " + middleHeight + "))"; - }else if(bottomContent && bottomHeight !== "none" && bottomHeight !== "auto"){ + } else { + if (topContent && topHeight !== "none" && topHeight !== "auto") { + marginGroup.style["grid-template-rows"] = topHeight + " " + middleHeight + " calc(100% - (" + topHeight + " + " + middleHeight + "))"; + } else if (bottomContent && bottomHeight !== "none" && bottomHeight !== "auto") { marginGroup.style["grid-template-rows"] = "1fr " + middleHeight + " " + bottomHeight; - }else { + } else { marginGroup.style["grid-template-rows"] = "calc((100% - " + middleHeight + ")/2) " + middleHeight + " calc((100% - " + middleHeight + ")/2)"; } } - }else { - if(topContent){ - if(!bottomContent){ + } else { + if (topContent) { + if (!bottomContent) { marginGroup.style["grid-template-rows"] = "1fr 0 0"; - }else { - if(topHeight !== "none" && topHeight !== "auto"){ - if(bottomHeight !== "none" && bottomHeight !== "auto"){ + } else { + if (topHeight !== "none" && topHeight !== "auto") { + if (bottomHeight !== "none" && bottomHeight !== "auto") { marginGroup.style["grid-template-rows"] = topHeight + " 1fr " + bottomHeight; - }else { + } else { marginGroup.style["grid-template-rows"] = topHeight + " 0 1fr"; } - }else { - if(bottomHeight !== "none" && bottomHeight !== "auto"){ + } else { + if (bottomHeight !== "none" && bottomHeight !== "auto") { marginGroup.style["grid-template-rows"] = "1fr 0 " + bottomHeight; - }else { + } else { marginGroup.style["grid-template-rows"] = "1fr 0 1fr"; } } } - }else { - if(bottomHeight !== "none" && bottomHeight !== "auto"){ + } else { + if (bottomHeight !== "none" && bottomHeight !== "auto") { marginGroup.style["grid-template-rows"] = "1fr 0 " + bottomHeight; - }else { + } else { marginGroup.style["grid-template-rows"] = "0 0 1fr"; } } @@ -28310,7 +28629,7 @@ img { }; } - createCalculatedDimension(property, items, important, operator="+") { + createCalculatedDimension(property, items, important, operator = "+") { let children = new lib.List(); let calculations = new lib.List(); @@ -28500,17 +28819,31 @@ img { for (let prop of breaks[b]) { if (prop.property === "break-after") { - let nodeAfter = elementAfter(elements[i]); + let nodeAfter = displayedElementAfter(elements[i], parsed); elements[i].setAttribute("data-break-after", prop.value); if (nodeAfter) { nodeAfter.setAttribute("data-previous-break-after", prop.value); } + } else if (prop.property === "break-before") { + let nodeBefore = displayedElementBefore(elements[i], parsed); + + // Breaks are only allowed between siblings, not between a box and its container. + // If we cannot find a node before we should not break! + // https://drafts.csswg.org/css-break-3/#break-propagation + if (nodeBefore) { + if (prop.value === "page" && needsPageBreak(elements[i], nodeBefore)) { + // we ignore this explicit page break because an implicit page break is already needed + continue; + } + elements[i].setAttribute("data-break-before", prop.value); + nodeBefore.setAttribute("data-next-break-before", prop.value); + } } else if (prop.property === "page") { elements[i].setAttribute("data-page", prop.value); - let nodeAfter = elementAfter(elements[i]); + let nodeAfter = displayedElementAfter(elements[i], parsed); if (nodeAfter) { nodeAfter.setAttribute("data-after-page", prop.value); @@ -28669,6 +29002,7 @@ img { this.styleSheet = polisher.styleSheet; this.counters = {}; + this.resetCountersMap = new Map(); } onDeclaration(declaration, dItem, dList, rule) { @@ -28711,10 +29045,9 @@ img { } handleIncrement(declaration, rule) { - let identifier = declaration.value.children.first(); - let number = declaration.value.children.getSize() > 1 - && declaration.value.children.last().value; - let name = identifier && identifier.name; + const identifier = declaration.value.children.first(); + const number = declaration.value.children.getSize() > 1 ? declaration.value.children.last().value : 1; + const name = identifier && identifier.name; if (name === "page" || name.indexOf("target-counter-") === 0) { return; @@ -28731,7 +29064,7 @@ img { return counter.increments[selector] = { selector: selector, - number: number || 1 + number }; } @@ -28761,17 +29094,21 @@ img { counter = this.counters[c]; this.processCounterIncrements(parsed, counter); this.processCounterResets(parsed, counter); - this.addCounterValues(parsed, counter); + if (c !== "page") { + this.addCounterValues(parsed, counter); + } } } scopeCounters(counters) { let countersArray = []; for (let c in counters) { - countersArray.push(`${counters[c].name} 0`); + if(c !== "page") { + countersArray.push(`${counters[c].name} 0`); + } } // Add to pages to allow cross page scope - this.insertRule(`.pagedjs_pages { counter-reset: ${countersArray.join(" ")}}`); + this.insertRule(`.pagedjs_pages { counter-reset: ${countersArray.join(" ")} page 0 pages var(--pagedjs-page-count)}`); } insertRule(rule) { @@ -28785,7 +29122,7 @@ img { // Find elements for increments let incrementElements = parsed.querySelectorAll(increment.selector); // Add counter data - for (var i = 0; i < incrementElements.length; i++) { + for (let i = 0; i < incrementElements.length; i++) { incrementElements[i].setAttribute("data-counter-"+ counter.name +"-increment", increment.number); incrementElements[i].setAttribute("data-counter-increment", counter.name); } @@ -28807,8 +29144,8 @@ img { } addCounterValues(parsed, counter) { - let counterName = counter.name; - let elements = parsed.querySelectorAll("[data-counter-"+ counterName +"-reset], [data-counter-"+ counterName +"-increment]"); + const counterName = counter.name; + const elements = parsed.querySelectorAll("[data-counter-"+ counterName +"-reset], [data-counter-"+ counterName +"-increment]"); let count = 0; let element; @@ -28816,7 +29153,7 @@ img { let resetValue, incrementValue, resetDelta; let incrementArray; - for (var i = 0; i < elements.length; i++) { + for (let i = 0; i < elements.length; i++) { element = elements[i]; resetDelta = 0; incrementArray = []; @@ -28854,16 +29191,16 @@ img { incrementCounterForElement(element, incrementArray) { if (!element || !incrementArray || incrementArray.length === 0) return; - let ref = element.dataset.ref; - let prevIncrements = Array.from(this.styleSheet.cssRules).filter((rule) => { + const ref = element.dataset.ref; + const prevIncrements = Array.from(this.styleSheet.cssRules).filter((rule) => { return rule.selectorText === `[data-ref="${element.dataset.ref}"]:not([data-split-from])` && rule.style[0] === "counter-increment"; }); - let increments = []; + const increments = []; for (let styleRule of prevIncrements) { let values = styleRule.style.counterIncrement.split(" "); - for (var i = 0; i < values.length; i+=2) { + for (let i = 0; i < values.length; i+=2) { increments.push(values[i] + " " + values[i+1]); } } @@ -28876,8 +29213,14 @@ img { afterPageLayout(pageElement, page) { let pgreset = pageElement.querySelectorAll("[data-counter-page-reset]"); pgreset.forEach((reset) => { - let value = reset.datasetCounterPageReset; - this.styleSheet.insertRule(`[data-page-number="${pageElement.dataset.pageNumber}"] { counter-reset: page ${value} }`, this.styleSheet.cssRules.length); + const ref = reset.dataset && reset.dataset.ref; + if (ref && this.resetCountersMap.has(ref)) ; else { + if (ref) { + this.resetCountersMap.set(ref, ""); + } + let value = reset.dataset.counterPageReset; + this.styleSheet.insertRule(`[data-page-number="${pageElement.dataset.pageNumber}"] { counter-increment: none; counter-reset: page ${value}; }`, this.styleSheet.cssRules.length); + } }); } @@ -28908,9 +29251,16 @@ img { } addDataNumbers(list) { + let start = 1; + if (list.hasAttribute("start")) { + start = parseInt(list.getAttribute("start"), 10); + if (isNaN(start)) { + start = 1; + } + } let items = list.children; for (var i = 0; i < items.length; i++) { - items[i].setAttribute("data-item-num", i + 1); + items[i].setAttribute("data-item-num", i + start); } } @@ -28950,6 +29300,176 @@ img { } } + class PageCounterIncrement extends Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + + this.styleSheet = polisher.styleSheet; + this.pageCounter = { + name: "page", + increments: {}, + resets: {} + }; + } + + onDeclaration(declaration, dItem, dList, rule) { + const property = declaration.property; + + if (property === "counter-increment") { + let inc = this.handleIncrement(declaration, rule); + if (inc) { + dList.remove(dItem); + } + } + } + + afterParsed(_) { + for (const inc in this.pageCounter.increments) { + const increment = this.pageCounter.increments[inc]; + this.insertRule(`${increment.selector} { --pagedjs-page-counter-increment: ${increment.number} }`); + } + } + + handleIncrement(declaration, rule) { + const identifier = declaration.value.children.first(); + const number = declaration.value.children.getSize() > 1 ? declaration.value.children.last().value : 1; + const name = identifier && identifier.name; + + if (name.indexOf("target-counter-") === 0) { + return; + } + // A counter named page is automatically created and incremented by 1 on every page of the document, + // unless the counter-increment property in the page context explicitly specifies a different increment for the page counter. + // https://www.w3.org/TR/css-page-3/#page-based-counters + if (name !== "page") { + return; + } + // the counter-increment property is not defined on the page context (i.e. @page rule), ignoring... + if (rule.ruleNode.name === "page" && rule.ruleNode.type === "Atrule") { + return; + } + const selector = lib.generate(rule.ruleNode.prelude); + return this.pageCounter.increments[selector] = { + selector: selector, + number + }; + } + + insertRule(rule) { + this.styleSheet.insertRule(rule, this.styleSheet.cssRules.length); + } + } + + class NthOfType extends Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + + this.styleSheet = polisher.styleSheet; + this.selectors = {}; + } + + onRule(ruleNode, ruleItem, rulelist) { + let selector = lib.generate(ruleNode.prelude); + if (selector.match(/:(first|last|nth)-of-type/)) { + + let declarations = lib.generate(ruleNode.block); + declarations = declarations.replace(/[{}]/g,""); + + let uuid = "nth-of-type-" + UUID(); + + selector.split(",").forEach((s) => { + if (!this.selectors[s]) { + this.selectors[s] = [uuid, declarations]; + } else { + this.selectors[s][1] = `${this.selectors[s][1]};${declarations}` ; + } + }); + + rulelist.remove(ruleItem); + } + } + + afterParsed(parsed) { + this.processSelectors(parsed, this.selectors); + } + + processSelectors(parsed, selectors) { + // add the new attributes to matching elements + for (let s in selectors) { + let elements = parsed.querySelectorAll(s); + + for (var i = 0; i < elements.length; i++) { + let dataNthOfType = elements[i].getAttribute("data-nth-of-type"); + + if (dataNthOfType && dataNthOfType != "") { + dataNthOfType = `${dataNthOfType},${selectors[s][0]}`; + elements[i].setAttribute("data-nth-of-type", dataNthOfType); + } else { + elements[i].setAttribute("data-nth-of-type", selectors[s][0]); + } + } + + let rule = `*[data-nth-of-type*='${selectors[s][0]}'] { ${selectors[s][1]}; }`; + this.styleSheet.insertRule(rule, this.styleSheet.cssRules.length); + } + } + } + + class Following extends Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + + this.styleSheet = polisher.styleSheet; + this.selectors = {}; + } + + onRule(ruleNode, ruleItem, rulelist) { + let selector = lib.generate(ruleNode.prelude); + if (selector.match(/\+/)) { + + let declarations = lib.generate(ruleNode.block); + declarations = declarations.replace(/[{}]/g,""); + + let uuid = "following-" + UUID(); + + selector.split(",").forEach((s) => { + if (!this.selectors[s]) { + this.selectors[s] = [uuid, declarations]; + } else { + this.selectors[s][1] = `${this.selectors[s][1]};${declarations}` ; + } + }); + + rulelist.remove(ruleItem); + } + } + + afterParsed(parsed) { + this.processSelectors(parsed, this.selectors); + } + + processSelectors(parsed, selectors) { + // add the new attributes to matching elements + for (let s in selectors) { + let elements = parsed.querySelectorAll(s); + + for (var i = 0; i < elements.length; i++) { + let dataFollowing = elements[i].getAttribute("data-following"); + + if (dataFollowing && dataFollowing != "") { + dataFollowing = `${dataFollowing},${selectors[s][0]}`; + elements[i].setAttribute("data-following", dataFollowing); + } else { + elements[i].setAttribute("data-following", selectors[s][0]); + } + } + + let rule = `*[data-following*='${selectors[s][0]}'] { ${selectors[s][1]}; }`; + this.styleSheet.insertRule(rule, this.styleSheet.cssRules.length); + } + } + } + var pagedMediaHandlers = [ AtPage, Breaks, @@ -28957,7 +29477,10 @@ img { Splits, Counters, Lists, - PositionFixed + PositionFixed, + PageCounterIncrement, + NthOfType, + Following ]; class RunningHeaders extends Handler { @@ -29193,6 +29716,13 @@ img { }); } + function cleanSelector(el) { + if(el == null) return; + return el + .replace(new RegExp("::footnote-call", "g"), "") + .replace(new RegExp("::footnote-marker", "g"), ""); + } + class StringSets extends Handler { constructor(chunker, polisher, caller) { super(chunker, polisher, caller); @@ -29234,13 +29764,24 @@ img { funcNode.name = "var"; funcNode.children = new lib.List(); - funcNode.children.append( - funcNode.children.createItem({ - type: "Identifier", - loc: null, - name: "--pagedjs-string-" + identifier - }) - ); + + if(this.type === "first" || this.type === "last" || this.type === "start" || this.type === "first-except"){ + funcNode.children.append( + funcNode.children.createItem({ + type: "Identifier", + loc: null, + name: "--pagedjs-string-" + this.type + "-" + identifier + }) + ); + }else { + funcNode.children.append( + funcNode.children.createItem({ + type: "Identifier", + loc: null, + name: "--pagedjs-string-first-" + identifier + }) + ); + } } } @@ -29252,59 +29793,65 @@ img { this.pageLastString = {}; } - // get the value of the previous last string + for (let name of Object.keys(this.stringSetSelectors)) { let set = this.stringSetSelectors[name]; let selected = fragment.querySelectorAll(set.selector); - - // let cssVar = previousPageLastString; + // Get the last found string for the current identifier - let cssVar = ( name in this.pageLastString ) ? this.pageLastString[name] : ""; - - selected.forEach((sel) => { - // push each content into the array to define in the variable the first and the last element of the page. - - - //this.pageLastString = selected[selected.length - 1].textContent; - // Index by identifier - this.pageLastString[name] = selected[selected.length - 1].textContent; - + let stringPrevPage = ( name in this.pageLastString ) ? this.pageLastString[name] : ""; + + let varFirst, varLast, varStart, varFirstExcept; + + if(selected.length == 0){ + // if there is no sel. on the page + varFirst = stringPrevPage; + varLast = stringPrevPage; + varStart = stringPrevPage; + varFirstExcept = stringPrevPage; + }else { + + selected.forEach((sel) => { + // push each content into the array to define in the variable the first and the last element of the page. + this.pageLastString[name] = selected[selected.length - 1].textContent; - if (this.type === "first") { - cssVar = selected[0].textContent; - } - - else if (this.type === "last") { - cssVar = selected[selected.length - 1].textContent; - } - - else if (this.type === "start") { - - if (sel.parentElement.firstChild === sel) { - cssVar = sel.textContent; - } + }); + + /* FIRST */ + + varFirst = selected[0].textContent; + + + /* LAST */ + + varLast = selected[selected.length - 1].textContent; + + + /* START */ + + // Hack to find if the sel. is the first elem of the page / find a better way + let selTop = selected[0].getBoundingClientRect().top; + let pageContent = selected[0].closest(".pagedjs_page_content"); + let pageContentTop = pageContent.getBoundingClientRect().top; + + if(selTop == pageContentTop){ + varStart = varFirst; + }else { + varStart = stringPrevPage; } - - else if (this.type === "first-except") { - cssVar = ""; - } - - else { - cssVar = selected[0].textContent; - } - }); - - fragment.setAttribute("data-string", `string-type-${this.type}-${name}`); - - - // fragment.style.setProperty(`--pagedjs-string-${name}`, `"${cssVar.replace(/\\([\s\S])|(["|'])/g, "\\$1$2")}"`); - fragment.style.setProperty(`--pagedjs-string-${name}`, `"${cleanPseudoContent(cssVar)}`); - - // if there is no new string on the page - if (!fragment.hasAttribute("data-string")) { - fragment.style.setProperty(`--pagedjs-string-${name}`, `"${this.pageLastString}"`); - } + + /* FIRST EXCEPT */ + + varFirstExcept = ""; + + } + + fragment.style.setProperty(`--pagedjs-string-first-${name}`, `"${cleanPseudoContent(varFirst)}`); + fragment.style.setProperty(`--pagedjs-string-last-${name}`, `"${cleanPseudoContent(varLast)}`); + fragment.style.setProperty(`--pagedjs-string-start-${name}`, `"${cleanPseudoContent(varStart)}`); + fragment.style.setProperty(`--pagedjs-string-first-except-${name}`, `"${cleanPseudoContent(varFirstExcept)}`); + } } @@ -29368,7 +29915,7 @@ img { variable: variable }; }); - + // Replace with counter funcNode.name = "counter"; funcNode.children = new lib.List(); @@ -29390,7 +29937,7 @@ img { let target = this.counterTargets[name]; let split = target.selector.split("::"); let query = split[0]; - + let queried = chunker.pagesArea.querySelectorAll(query + ":not([data-" + target.variable + "])"); queried.forEach((selected, index) => { @@ -29412,16 +29959,19 @@ img { if (target.counter === "page") { let pages = chunker.pagesArea.querySelectorAll(".pagedjs_page"); let pg = 0; - for (var i = 0; i < pages.length; i++) { + for (let i = 0; i < pages.length; i++) { let styles = window.getComputedStyle(pages[i]); let reset = styles["counter-reset"].replace("page", "").trim(); + let increment = styles["counter-increment"].replace("page", "").trim(); if (reset !== "none") { pg = parseInt(reset); } - pg += 1; + if (increment !== "none") { + pg += parseInt(increment); + } - if (pages[i].contains( element )){ + if (pages[i].contains(element)) { break; } } @@ -29569,6 +30119,332 @@ img { TargetText ]; + class WhiteSpaceFilter extends Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + } + + filter(content) { + + filterTree(content, (node) => { + return this.filterEmpty(node); + }, NodeFilter.SHOW_TEXT); + + } + + filterEmpty(node) { + if (node.textContent.length > 1 && isIgnorable(node)) { + + // Do not touch the content if text is pre-formatted + let parent = node.parentNode; + let pre = isElement(parent) && parent.closest("pre"); + if (pre) { + return NodeFilter.FILTER_REJECT; + } + + const previousSibling = previousSignificantNode(node); + const nextSibling = nextSignificantNode(node); + + if (nextSibling === null && previousSibling === null) { + // we should not remove a Node that does not have any siblings. + node.textContent = " "; + return NodeFilter.FILTER_REJECT; + } + if (nextSibling === null) { + // we can safely remove this node + return NodeFilter.FILTER_ACCEPT; + } + if (previousSibling === null) { + // we can safely remove this node + return NodeFilter.FILTER_ACCEPT; + } + + // replace the content with a single space + node.textContent = " "; + + // TODO: we also need to preserve sequences of white spaces when the parent has "white-space" rule: + // pre + // Sequences of white space are preserved. Lines are only broken at newline characters in the source and at
elements. + // + // pre-wrap + // Sequences of white space are preserved. Lines are broken at newline characters, at
, and as necessary to fill line boxes. + // + // pre-line + // Sequences of white space are collapsed. Lines are broken at newline characters, at
, and as necessary to fill line boxes. + // + // break-spaces + // The behavior is identical to that of pre-wrap, except that: + // - Any sequence of preserved white space always takes up space, including at the end of the line. + // - A line breaking opportunity exists after every preserved white space character, including between white space characters. + // - Such preserved spaces take up space and do not hang, and thus affect the box’s intrinsic sizes (min-content size and max-content size). + // + // See: https://developer.mozilla.org/en-US/docs/Web/CSS/white-space#Values + + return NodeFilter.FILTER_REJECT; + } else { + return NodeFilter.FILTER_REJECT; + } + } + + } + + class CommentsFilter extends Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + } + + filter(content) { + filterTree(content, null, NodeFilter.SHOW_COMMENT); + } + + } + + class ScriptsFilter extends Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + } + + filter(content) { + content.querySelectorAll("script").forEach( script => { script.remove(); }); + } + + } + + var clearCut = createCommonjsModule(function (module, exports) { + /** + * Originally ported from https://github.com/keeganstreet/specificity/blob/866bf7ab4e7f62a7179c15b13a95af4e1c7b1afa/specificity.js + * + * Calculates the specificity of CSS selectors + * http://www.w3.org/TR/css3-selectors/#specificity + * + * Returns a selector integer value + */ + + // The following regular expressions assume that selectors matching the preceding regular expressions have been removed + var attributeRegex = /(\[[^\]]+\])/g; + var idRegex = /(#[^\s\+>~\.\[:]+)/g; + var classRegex = /(\.[^\s\+>~\.\[:]+)/g; + var pseudoElementRegex = /(::[^\s\+>~\.\[:]+|:first-line|:first-letter|:before|:after)/g; + var pseudoClassRegex = /(:[^\s\+>~\.\[:]+)/g; + var elementRegex = /([^\s\+>~\.\[:]+)/g; + var notRegex = /:not\(([^\)]*)\)/g; + var ruleRegex = /\{[^]*/gm; + var separatorRegex = /[\*\s\+>~]/g; + var straysRegex = /[#\.]/g; + + // Find matches for a regular expression in a string and push their details to parts + // Type is "a" for IDs, "b" for classes, attributes and pseudo-classes and "c" for elements and pseudo-elements + var findMatch = function(regex, type, types, selector) { + var matches = selector.match(regex); + if (matches) { + for (var i = 0; i < matches.length; i++) { + types[type]++; + // Replace this simple selector with whitespace so it won't be counted in further simple selectors + selector = selector.replace(matches[i], ' '); + } + } + + return selector; + }; + + // Calculate the specificity for a selector by dividing it into simple selectors and counting them + var calculate = function(selector) { + var commaIndex = selector.indexOf(','); + if (commaIndex !== -1) { + selector = selector.substring(0, commaIndex); + } + + var types = { + a: 0, + b: 0, + c: 0 + }; + + // Remove the negation psuedo-class (:not) but leave its argument because specificity is calculated on its argument + selector = selector.replace(notRegex, ' $1 '); + + // Remove anything after a left brace in case a user has pasted in a rule, not just a selector + selector = selector.replace(ruleRegex, ' '); + + // Add attribute selectors to parts collection (type b) + selector = findMatch(attributeRegex, 'b', types, selector); + + // Add ID selectors to parts collection (type a) + selector = findMatch(idRegex, 'a', types, selector); + + // Add class selectors to parts collection (type b) + selector = findMatch(classRegex, 'b', types, selector); + + // Add pseudo-element selectors to parts collection (type c) + selector = findMatch(pseudoElementRegex, 'c', types, selector); + + // Add pseudo-class selectors to parts collection (type b) + selector = findMatch(pseudoClassRegex, 'b', types, selector); + + // Remove universal selector and separator characters + selector = selector.replace(separatorRegex, ' '); + + // Remove any stray dots or hashes which aren't attached to words + // These may be present if the user is live-editing this selector + selector = selector.replace(straysRegex, ' '); + + // The only things left should be element selectors (type c) + findMatch(elementRegex, 'c', types, selector); + + return (types.a * 100) + (types.b * 10) + (types.c * 1); + }; + + var specificityCache = {}; + + exports.calculateSpecificity = function(selector) { + var specificity = specificityCache[selector]; + if (specificity === undefined) { + specificity = calculate(selector); + specificityCache[selector] = specificity; + } + return specificity; + }; + + var validSelectorCache = {}; + var testSelectorElement = null; + + exports.isSelectorValid = function(selector) { + var valid = validSelectorCache[selector]; + if (valid === undefined) { + if (testSelectorElement == null) { + testSelectorElement = document.createElement('div'); + } + + try { + testSelectorElement.querySelector(selector); + valid = true; + } catch (error) { + valid = false; + } + validSelectorCache[selector] = valid; + } + return valid; + }; + + exports.validateSelector = function(selector) { + if (!exports.isSelectorValid(selector)) { + var error = new SyntaxError(selector + ' is not a valid selector'); + error.code = 'EBADSELECTOR'; + throw error; + } + }; + }); + var clearCut_1 = clearCut.calculateSpecificity; + var clearCut_2 = clearCut.isSelectorValid; + var clearCut_3 = clearCut.validateSelector; + + class UndisplayedFilter extends Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + this.displayRules = {}; + } + + onDeclaration(declaration, dItem, dList, rule) { + if (declaration.property === "display") { + let selector = lib.generate(rule.ruleNode.prelude); + let value = declaration.value.children.first().name; + + selector.split(",").forEach((s) => { + this.displayRules[s] = { + value: value, + selector: s, + specificity: clearCut_1(s), + important: declaration.important + }; + }); + } + } + + filter(content) { + let { matches, selectors } = this.sortDisplayedSelectors(content, this.displayRules); + + // Find matching elements that have display styles + for (let i = 0; i < matches.length; i++) { + let element = matches[i]; + let selector = selectors[i]; + let displayValue = selector[selector.length-1].value; + if(this.removable(element) && displayValue === "none") { + element.dataset.undisplayed = "undisplayed"; + } + } + + // Find elements that have inline styles + let styledElements = content.querySelectorAll("[style]"); + for (let i = 0; i < styledElements.length; i++) { + let element = styledElements[i]; + if (this.removable(element)) { + element.dataset.undisplayed = "undisplayed"; + } + } + } + + sorter(a, b) { + if (a.important && !b.important) { + return 1; + } + + if (b.important && !a.important) { + return -1; + } + + return a.specificity - b.specificity; + } + + sortDisplayedSelectors(content, displayRules=[]) { + let matches = []; + let selectors = []; + for (let d in displayRules) { + let displayItem = displayRules[d]; + let selector = displayItem.selector; + let query = []; + try { + try { + query = content.querySelectorAll(selector); + } catch (e) { + query = content.querySelectorAll(cleanSelector(selector)); + } + } catch (e) { + query = []; + } + let elements = Array.from(query); + for (let e of elements) { + if (matches.includes(e)) { + let index = matches.indexOf(e); + selectors[index].push(displayItem); + selectors[index] = selectors[index].sort(this.sorter); + } else { + matches.push(e); + selectors.push([displayItem]); + } + } + } + + return { matches, selectors }; + } + + removable(element) { + if (element.style && + element.style.display !== "" && + element.style.display !== "none") { + return false; + } + + return true; + } + } + + var filters = [ + WhiteSpaceFilter, + CommentsFilter, + ScriptsFilter, + UndisplayedFilter + ]; + var isImplemented$3 = function () { var from = Array.from, arr, result; if (typeof from !== "function") return false; @@ -29997,7 +30873,7 @@ img { return pipe; }; - let registeredHandlers = [...pagedMediaHandlers, ...generatedContentHandlers]; + let registeredHandlers = [...pagedMediaHandlers, ...generatedContentHandlers, ...filters]; class Handlers { constructor(chunker, polisher, caller) { diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/pagedjsCustomizations.js b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/pagedjsCustomizations.js new file mode 100644 index 0000000..e494029 --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/js/pagedjsCustomizations.js @@ -0,0 +1,100 @@ +var UID = { + _current: 0, + getNew: function(){ + this._current++; + return this._current; + } +}; + +HTMLElement.prototype.pseudoStyle = function(element,prop,value){ + var _this = this; + var _sheetId = "pseudoStyles"; + var _head = document.head || document.getElementsByTagName('head')[0]; + var _sheet = document.getElementById(_sheetId) || document.createElement('style'); + _sheet.id = _sheetId; + var className = "pseudoStyle" + UID.getNew(); + + _this.className += " "+className; + + _sheet.innerHTML += " ."+className+":"+element+"{"+prop+":"+value+"}"; + _head.appendChild(_sheet); + return this; +}; + +class Sandpoints extends Paged.Handler { + constructor(chunker, polisher, caller) { + super(chunker, polisher, caller); + } + + beforeParsed(content) { + var d = {}; + content.querySelectorAll('*').forEach((n, i)=> { + if (n.hasAttribute("printhref")) { + n.setAttribute("href", n.getAttribute("printhref")) + } + + if (n.classList.length > 0 ) { + n.classList.forEach((c, i)=>{ + if (c.startsWith("css-")) { + (c in d) ? d[c]++ : d[c] = 1 + let s = "" + Object.keys(d).filter(ks => ks.startsWith(c.slice(0, -1))).forEach((t, i)=> {if (c >= t) {s += `${d[t]}.`}}) + n.pseudoStyle('before','content', `"${s} "`) + } + }) + } + }) + } + + afterPageLayout(pageElement, page, breakToken, chunker) { + // Find all split table elements + let tables = pageElement.querySelectorAll("table[data-split-from]"); + + tables.forEach((table) => { + // There is an edge case where the previous page table + // has zero height (isn't visible). + // To avoid double header we will only add header if there is none. + let tableHeader = table.querySelector("thead"); + if (tableHeader) { + return; + } + + // Get the reference UUID of the node + let ref = table.dataset.ref; + // Find the node in the original source + let sourceTable = chunker.source.querySelector("[data-ref='" + ref + "']"); + + // Find if there is a header + let sourceHeader = sourceTable.querySelector("thead"); + if (sourceHeader) { + // Clone the header element + let clonedHeader = sourceHeader.cloneNode(true); + // Insert the header at the start of the split table + table.insertBefore(clonedHeader, table.firstChild); + } + }); + + // Find all tables + tables = pageElement.querySelectorAll("table"); + + // special case which might not fit for everyone + tables.forEach((table) => { + // if the table has no rows in body, hide it. + // This happens because my render engine creates empty tables. + let sourceBody = table.querySelector("tbody > tr"); + if (!sourceBody) { + console.log("Table was hidden, because it has no rows in tbody."); + table.style.visibility = "hidden"; + table.style.position = "absolute"; + + var lineSpacer = table.nextSibling; + if (lineSpacer) { + lineSpacer.style.visibility = "hidden"; + lineSpacer.style.position = "absolute"; + } + } + }); + } +} + +Paged.registerHandlers(Sandpoints); diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/800x418.png b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/800x418.png new file mode 100644 index 0000000000000000000000000000000000000000..4595f4c16f02f72c6cd1781f7bca0e9548b0866a GIT binary patch literal 21285 zcmXt9b5vkow64j<^`3v+?b3 z@4{rIMG#L{=0LTGDmV{B$= zMCj;dYeZ<|YGw=q;<{RyYGF^zSrzngNOgfK>OZxQOoGhFowC1$M44P(RGhEFsN8Be z78eJOI2qu6w)Js+`0-d~Rao4__;T{&pOT7}(M_KuU-#MR`;Dsf-P^~I%KI}PU-!FS zQ#BtZKFY=Z&1s2F^w`oa-)4!=){SuYO~|_U&6lSx@29&z20l71uS4N&`x)MEX?)!q zmyXR-7tZGixjt-nt^GHhe-YRx$o=)n5*DoUxvT7ic(;3bclS1{ znC`t#a;xjjyuHC#y_T^Yfdkobi+n-qx^9_iyv{4IKOfYuoA#ftZ&-K0DU8S{PY?@W zqo$YtJ?pow-bz!a7%Oc<#_@Nx!+7tZwJ>pNHv;y}Y}RNxoiyEeVYO$fwSWnNxD}Q=V6*hB58!7hF2u(lDdb(gjV(j zTlFT7fekH{dZXD=u0rw!n5XoQ^IPUgp3^gps&)6ZbC-3urHv#6iXY0AYR!6cNmfu6 zblRP64?AYij=)%fc$&%_M9C=VTDC6ArG_-#)bu6%!%$LHa~R;NjcFIO&R zV#k>3J%TJQ_KMG(hSa6%>LHVoOAkF^k-4UAa2A{%6dQe`OO*6IaAxR_`>^DC>HGpb>K| zfvLWkxR{IFN=X~=ZvJ6#;C8$&EYx~=ZmH60B`eSd(%+&cAS-9MGL-tK41~1VzNM|$ zD=#OSl`)HefwRvjJzaYxA3d-@jgxoDEU8Jo4s#+4-S$!H65c8Zy2ayBS_kPZ;HA-w z4jI`irEQf7KUZJPKJwob{4TVKtohlhn(ox%JuD$Z$`$D^C{rY)6z&WsO6N7tMnh!W zw;$-Zij z6Twj&+xMd?$%Z5Bpu$AETC@5m5 zU4He7Q?$-)%zs+p3V~iG&R_*YDZ<^(*&e~UoUlWJ^~p_vWsj!R6@EFE-y~M-syu$X znA4A|yWH-k{46KCHJf=?2+vc5x<>w)FReDdm8MOCFp8Ra?J%tn=8t8KxvAPJQ|3{^ zmY}+wFBbvwWzJ$6ewJ;&&d<420%A{{>sz$GO}F-09mYIJ7QyiD7fuRx$Cqh~TL(hi zIuwX_0R+9iMFcBL*q{b(n!qrhX(Wm)gdbE4KJ2T}M}#L+F}GAA@c3X(axzMSjxp;S zgTa!`OIZ03cJq2Ao!RSDTW36=X)$I0BBBe-6W!h^Vem>$QhN&^Z;B+2d4iKwbLu14 z5XrV}e~wKQ61)z;KYh7z1mj75Tjc#Jr79W-#dsh3}9OHNe<=&agg7F zHgxm)I_NlHPIESD)WV}3()X6(WvTB{zD^F9Xu^{W%0m20dFZv#v#XVs5Y#ym-6q@H z$!SW_>fokEQm6TL$cGzcY7i-4CoTB6JZt(s5AS5v$20B>UevEE@G^A7F!>c^Vg}t$ zzI-3giAW3&1B@C84|0m1@QycgYq}wPjv<{%>mC=nUGWij@RS_Cw(%saT0eqZNvCqSMU-y4+F=nJb+uFuJJSZiWKYvVg0i6T4~E$jP+Snh~ISB;BAR~Cp6QdJC-$ZR{>=Hw0Z;d=hM z*LI8v=e7v`nyNLP<&N9}#};Rup>2~4<*Oo_##r&{_bUX`WW>(b&o}xiC>WUmfjFiQ zBu|Pz(sWSYnSzO#`vwg2xA`CGQsfiSI%EXq-*yE@;1lL&*!Hwxjs@X70-jt9m#Wfl zw$KP}qBW!7zBE;kbpMp^W^bU|c64xqBheYLt_bYll77Cjym~i)f(Il>aD5Na-`4|~ z&UO>&au`h_b{a*|E9?4{4s;rb$?ml{S=(c*cyO~K^)MDC7)hs@579PxX? z%%cTgs%fIi_sy7qV|9P~61f$XvJ#=$Kn!od$lVT=0xlYil2n~lK*b%>ThbrE2c^>t z*3A%`tEgLP*-tsiGU8j?;_5JNRAM}zh8@g|_SFiW=AQ08Y~oty{4c z5_Yg*WTlid%taL1Sq( z?|-g5_jZV6EAK~_y9^BogQ|%0AIAfxIpW_8EBZA3L;Zimm#E`=F()%LR#V`r_ z8sxs5;Y^ca%wN=`zW8xc8(17DRx}-$Ucy?;o0z&cQ%h z!*>M|o1!?vEE?h3icXeNsU4aSx&(UCA6;RpLNm&+6ML1&kQpc&nv3%*G~CD^=k>?^ z0ax?gHcjyEEpjeL3k1s}O&0iyPX#F+r`mj;A@D6$OMW=FrEPq zobGoa{wfVQ(E?^^TnsZyc@`qAhV8}Le=!U^KUOkT-v(9kwF2n^@hybjk5b0}WZdGm zgido1CA1R<&BdaHgf|fw>iVhBVb4&+k$;~?+WWPd$Fqs5r=HRdHje}u6XBm|oQLIp zA3B5AVrv{}hM?u=t-Hn%_cOAG+!pZ&H6e6h+L=0b^70&%ZBg$jM{MUnHvwuVV zk}A%T+m7S7!u&{0QS3n-n0dJCzgfXe?4FZAX`~UMyvXMmO!!p06Gh`tI2po!K}XK{ zM?jF2Z8Gf&!fT2~DztO{EXt{@Nj_ah#yOIWpb>k=23_r&H39G8FkUChWl4A%L-s6f3B z8ebpx0BsHPy8kuT!j`#LSwb?V$C?3rF~Iw0MJRpvv?)-QFcVOn{kUVaf^)ywG&yD>4XFx;Y|ls82wIGzyZ0nQl8frH2|CFTR@G)%|lnd)Z$UBKVa;DX`J5n*;;D%Vhw7zU}& zmc5h;Ye8%x>2FZg12u+1Z4&THJ$!v1IgC=8- z2LDd~i|s)wqz54uY+D5d~u82%8a zuVc%hCFzRrOL`JV34U}n@`2(D%0AB>l(?Bn2aQ1=7f1y8@udavs&E@PATe#|6K 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�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 O6k5mRB0LJvcW2 literal 0 HcmV?d00001 diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/800x800.png b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/800x800.png new file mode 100644 index 0000000000000000000000000000000000000000..84656c838bfdf9f825c18fe82fb3a8651aa8a8b2 GIT binary patch literal 38346 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

w98GRhrd!NM(W) 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 N!p73^K%qIE`42qO4>SM( literal 0 HcmV?d00001 diff --git a/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/index.html b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/index.html new file mode 100644 index 0000000..e4ed5bf --- /dev/null +++ b/_vendor/git.sandpoints.org/Drawwell/SandpointsTheme/static/logo/index.html @@ -0,0 +1,145 @@ + + + + + + + + + + +

+
+ +
+
+ + diff --git a/_vendor/modules.txt b/_vendor/modules.txt index a4a89cf..eaa2d9a 100644 --- a/_vendor/modules.txt +++ b/_vendor/modules.txt @@ -1 +1,2 @@ -# git.sandpoints.org/Drawwell/SandpointsTheme v0.0.0-20201218222521-33a423ebe113 +# git.sandpoints.org/Drawwell/SandpointsTheme v0.0.0-20220418135300-b3e229aeea27 +# git.sandpoints.org/Drawwell/SandpointsEditPage v0.0.0-20210825011616-e019d8a4d186 diff --git a/config.toml b/config.toml index 448addc..0808096 100644 --- a/config.toml +++ b/config.toml @@ -4,70 +4,76 @@ title = "Simple Sandpoints" relativeurls = true disableKinds = ["RSS", "sitemap"] -[params] - description = "Simple Sandpoints project to test and develop...." - # sandpointsGiteaUrl = "https://git.sandpoints.org/Drawwell/SimpleSandpoints" - sandpointsGiteaUrl = "http://localhost:3333/Sandpoints/SimpleSandpoints" - sandpointsCatalogPrefix = "/library/" +[taxonomies] +keyword = "keywords" +tag = "tags" - sandpointsMentionedIn = ["annex"] + +[params] +description = "Simple Sandpoints project to test and develop...." +# sandpointsGiteaUrl = "https://git.sandpoints.org/Drawwell/SimpleSandpoints" +sandpointsGiteaUrl = "http://localhost:3333/Sandpoints/SimpleSandpoints" +sandpointsCatalogPrefix = "/library/" + +sandpointsMentionedIn = ["annex"] [outputFormats] - [outputFormats.js] - isPlainText = true - mediaType = "application/javascript" +[outputFormats.js] +isPlainText = true +mediaType = "application/javascript" [outputs] - list = ["html", "js"] +list = ["html", "js"] [markup.tableOfContents] - endLevel=4 - ordered = true - startLevel = 1 +endLevel=4 +ordered = true +startLevel = 1 [markup.goldmark.renderer] - unsafe = true +unsafe = true # [markup.goldmark.parser.attribute] # block = true [module] - # replacement allow for easier local development - replacements = ["git.sandpoints.org/Drawwell/SandpointsTheme -> /home/m/devel/SandpointsTheme", "git.sandpoints.org/Drawwell/SandpointsEditPage -> /home/m/devel/SandpointsEditPage"] - [[module.imports]] - path = "git.sandpoints.org/Drawwell/SandpointsTheme" +# replacement allow for easier local development +# replacements = ["git.sandpoints.org/Drawwell/SandpointsTheme -> /home/m/devel/SandpointsTheme", "git.sandpoints.org/Drawwell/SandpointsEditPage -> /home/m/devel/SandpointsEditPage"] - [[module.imports]] - path = "git.sandpoints.org/Drawwell/SandpointsEditPage" +[[module.imports]] +path = "git.sandpoints.org/Drawwell/SandpointsTheme" - [[module.imports.mounts]] - source = "public/index.html" - target = "static/svedit/index.html" - [[module.imports.mounts]] - source = "public/global.css" - target = "static/svedit/global.css" - [[module.imports.mounts]] - source = "public/build" - target = "static/svedit/build" - - [[module.imports.mounts]] - source = "archetypes" - target = "archetypes" - [[module.imports.mounts]] - source = "assets" - target = "assets" - [[module.imports.mounts]] - source = "layouts" - target = "layouts" - [[module.imports.mounts]] - source = "static" - target = "static" - [[module.imports.mounts]] - source = "data" - target = "data" - # [[module.imports.mounts]] - # source = "customizations/Dotawo/assets/css/site.css" - # target = "assets/css/site.css" - # [[module.imports.mounts]] - # source = "customizations/Dotawo/static/css/site.min.css" - # target = "static/css/site.min.css" +[[module.imports]] +path = "git.sandpoints.org/Drawwell/SandpointsEditPage" + +[[module.imports.mounts]] +source = "public/index.html" +target = "static/svedit/index.html" +[[module.imports.mounts]] +source = "public/global.css" +target = "static/svedit/global.css" +[[module.imports.mounts]] +source = "public/build" +target = "static/svedit/build" + +[[module.imports.mounts]] +source = "archetypes" +target = "archetypes" +[[module.imports.mounts]] +source = "assets" +target = "assets" +[[module.imports.mounts]] +source = "layouts" +target = "layouts" +[[module.imports.mounts]] +source = "static" +target = "static" +[[module.imports.mounts]] +source = "data" +target = "data" +# [[module.imports.mounts]] +# source = "customizations/Dotawo/assets/css/site.css" +# target = "assets/css/site.css" +# [[module.imports.mounts]] +# source = "customizations/Dotawo/static/css/site.min.css" +# target = "static/css/site.min.css"