Merge branch 'main' into private_http_clone_merged_main

This commit is contained in:
Robert Wolff 2026-07-17 12:48:50 +02:00
commit 16d8522d56
No known key found for this signature in database
GPG key ID: 1614C70AD69A61A1
263 changed files with 5705 additions and 3655 deletions

View file

@ -7,10 +7,13 @@
// code // code
"go", "go",
"node", "node",
"shell",
// package names // package names
"npm" "npm"
], ],
"words": [ "words": [
"woodpeckerci",
"riscv",
"codeberg", "codeberg",
"editview", "editview",
"forgejo", "forgejo",
@ -109,7 +112,20 @@
"mstruebing", "mstruebing",
"davidanson", "davidanson",
"pipelinecomponents", "pipelinecomponents",
"corepack" "passwordless",
"corepack",
"letsencrypt.org",
"accounturi",
"Ente",
"getent",
"sealioning",
"DNSSEC",
"Arminiusstraße",
"HELLOTUX",
"Merch",
"merch",
"freewear",
"gedankenstuecke"
], ],
"ignorePaths": [ "ignorePaths": [
"**/node_modules/**/*", "**/node_modules/**/*",

View file

@ -1,85 +0,0 @@
const navigationPlugin = require('@11ty/eleventy-navigation');
const syntaxHighlightingPlugin = require('@11ty/eleventy-plugin-syntaxhighlight');
const markdownIt = require('markdown-it');
const tableOfContentsPlugin = require('@uncenter/eleventy-plugin-toc');
const markdownItClass = require('@toycode/markdown-it-class');
const markdownItAnchor = require('markdown-it-anchor');
const library = require('@fortawesome/fontawesome-svg-core').library;
const icon = require('@fortawesome/fontawesome-svg-core').icon;
const fas = require('@fortawesome/free-solid-svg-icons').fas;
const { execSync } = require('child_process');
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(navigationPlugin);
eleventyConfig.addPlugin(syntaxHighlightingPlugin);
eleventyConfig.addPassthroughCopy('assets');
eleventyConfig.addPassthroughCopy('fonts');
// Font Awesome Icons
library.add(fas);
eleventyConfig.addShortcode('fas_icon', function (args) {
var fas_svg = icon({ prefix: 'fas', iconName: args });
return `${fas_svg.html}`;
});
const mapping = {
h2: 'content-title',
h3: 'content-title',
h4: 'content-title',
h5: 'content-title',
h6: 'content-title',
table: 'table',
blockquote: 'alert',
};
const mdOptions = { linkify: false, html: true };
const mdAnchorOpts = {
permalink: markdownItAnchor.permalink.headerLink(),
permalinkClass: 'ml-5',
permalinkSymbol: '#',
level: [1, 2, 3, 4],
};
eleventyConfig.setLibrary(
'md',
markdownIt(mdOptions).use(markdownItClass, mapping).use(markdownItAnchor, mdAnchorOpts),
);
eleventyConfig.addPairedShortcode('admonition', function (content, type, title) {
let titleStr = '';
if (title) {
titleStr = title;
} else if (type) {
titleStr = type.substring(0, 1).toUpperCase() + type.substring(1).toLowerCase();
} else {
titleStr = 'Info';
}
return `<div class="admonition${type ? ` ${type.toLowerCase()}` : ''}">
<div class="admonition-title">
<span class="admonition-icon${type ? ` ${type.toLowerCase()}` : ''}"></span>
${titleStr}
</div>
<div class="admonition-content">${content}</div>
</div>`;
});
eleventyConfig.addPlugin(tableOfContentsPlugin, {
tags: ['h2', 'h3'],
wrapper: function (toc) {
toc = toc.replaceAll('<a', "<a class='sidebar-link'");
return `${toc}`;
},
});
eleventyConfig.on('eleventy.after', () => {
execSync(`npx pagefind`, { encoding: 'utf-8' });
});
return {
dir: {
input: 'content',
},
};
};

View file

@ -0,0 +1,17 @@
blank_issues_enabled: true
contact_links:
- name: Ask for help in the Community issue tracker
url: https://codeberg.org/Codeberg/Community/issues/
about: Get help with using Codeberg from the community and tell us what you think.
- name: Ask for help in a chatroom
url: https://docs.codeberg.org/contact
about: If you need real-time support from the community, join our Matrix or IRC rooms.
- name: Woodpecker CI Examples
url: https://codeberg.org/Codeberg-CI/examples/
about: If you need examples for using Codeberg's Woodpecker CI, click here.
- name: Forgejo Documentation
url: https://forgejo.org/docs
about: Forgejo, which powers codeberg.org, offers its own distinct documentation. Issues discussing subjects that Codeberg's Documentation does not are, of course, still welcome, but this might help.
- name: Woodpecker CI Documentation
url: https://woodpecker-ci.org/docs/intro
about: Similarly, Woodpecker, which powers ci.codeberg.org, also offers its own distinct documentation.

25
.gitignore vendored
View file

@ -1,4 +1,25 @@
node_modules/ # Project-specific
## Output of Eleventy site builder
_site/ _site/
pages.git/ .cache/
# Integrated development environments (IDEs) and text editors
## JetBrains
.idea/ .idea/
## Visual Studio Code
.vscode/
# Package managers
## npm - Node.js
node_modules/
## pnpm - Node.js
.pnpm-store/
# Web servers
## Codeberg Pages
pages.git/

View file

@ -1,8 +1,12 @@
http://127.0.0.1:** .*%7B%7B%20child.url%20%7D%7D
http://127.0.0.1:.*
https://pages.codeberg.org/user.name/ https://pages.codeberg.org/user.name/
https://user.name.codeberg.page/ https://user.name.codeberg.page/
https://repo.sitory.username.codeberg.page/ https://repo.sitory.username.codeberg.page/
file://** */
https://codeberg.org/username/repo.git https://codeberg.org/username/repo.git
https://username.codeberg.page/** https://username.codeberg.page/.*
https://openclipart.org/** https://openclipart.org/.*
https://www.gnu.org/.*
https://translate.codeberg.org
https://stackoverflow.com/.*
https://medium.com/technical-writing-is-easy/screenshots-in-documentation-27b45342aad8

View file

@ -45,7 +45,7 @@ MD012:
# MD013/line-length - Line length # MD013/line-length - Line length
MD013: MD013:
# Number of characters # Number of characters
line_length: 500 line_length: 120
# Number of characters for headings # Number of characters for headings
heading_line_length: 100 heading_line_length: 100
# Number of characters for code blocks # Number of characters for code blocks
@ -56,8 +56,6 @@ MD013:
tables: false tables: false
# Include headings # Include headings
headings: true headings: true
# Include headings
headers: true
# Strict length checking # Strict length checking
strict: false strict: false
# Stern length checking # Stern length checking
@ -71,9 +69,7 @@ MD022:
lines_below: 1 lines_below: 1
# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content # MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
MD024: MD024: false
# Only check sibling headings
allow_different_nesting: true
# MD025/single-title/single-h1 - Multiple top-level headings in the same document # MD025/single-title/single-h1 - Multiple top-level headings in the same document
MD025: MD025:
@ -139,3 +135,9 @@ MD046:
MD048: MD048:
# Code fence style # Code fence style
style: 'backtick' style: 'backtick'
# MD051/link-fragments - Link fragments should be valid
MD051:
# Ignore link fragments ending with simple URL percent-encoding.
# For example, to allow targeting headings ending with a question mark ('?').
ignored_pattern: "%\\w{2}$"

11
.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1,11 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
// List of extensions which should be recommended for users of this workspace.
"recommendations": [
"DavidAnson.vscode-markdownlint",
"EditorConfig.EditorConfig",
"ginfuru.better-nunjucks",
"streetsidesoftware.code-spell-checker"
]
}

View file

@ -1,12 +1,11 @@
when: when:
- event: [pull_request]
- event: push - event: push
branch: branch:
- ${CI_REPO_DEFAULT_BRANCH} - ${CI_REPO_DEFAULT_BRANCH}
steps: steps:
build: build:
image: codeberg.org/woodpecker-plugins/node-pm:1.3.0 image: codeberg.org/woodpecker-plugins/node-pm:1.3.6
settings: settings:
run: build run: build
with: pnpm with: pnpm

View file

@ -0,0 +1,27 @@
when:
- event: pull_request_closed
steps:
create-empty-dir:
image: alpine
commands:
- mkdir _empty
delete-preview:
image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:5257561a95054104f7499838817f3b447049a1edc14e87b99156b1302e0bce36
settings:
SITE_URL: https://codeberg.codeberg.page/documentation
PATH: pull_${CI_COMMIT_PULL_REQUEST}
TOKEN:
from_secret: surge_forge_token
UPLOAD_DIR: _empty
depends_on: create-empty-dir
comment:
image: mcs94/gitea-comment@sha256:f1a06366bfa34ff7594f369ebf81cbadd2d4410b7d51c9aa59c0c0264aa5fbd9
settings:
gitea_address: https://codeberg.org
gitea_token:
from_secret: surge_forge_token
comment: 'Preview deleted.'
depends_on: delete-preview

View file

@ -1,29 +1,37 @@
when: when:
- event: [pull_request, pull_request_closed] - event: pull_request
steps: steps:
change-path:
image: alpine
commands:
- |
sed -i.orig -e "s~pathPrefix: '/'~pathPrefix: '/documentation/pull_${CI_COMMIT_PULL_REQUEST}/'~" eleventy.config.mjs
build: build:
image: codeberg.org/woodpecker-plugins/node-pm image: codeberg.org/woodpecker-plugins/node-pm@sha256:bff3ee2d7492e89a0dfbe6ee4c7d5ce636108cd973c0c355269f681e8dd8a196
settings: settings:
run: build run: build
with: pnpm with: pnpm
frozen_lockfile: true frozen_lockfile: true
ignore_node_modules: true ignore_node_modules: true
depends_on: change-path
deploy-preview: deploy-preview:
image: docker.io/woodpeckerci/plugin-surge-preview:1.3.1 image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:5257561a95054104f7499838817f3b447049a1edc14e87b99156b1302e0bce36
settings: settings:
path: '_site/' SITE_URL: https://codeberg.codeberg.page/documentation
forge_type: gitea PATH: pull_${CI_COMMIT_PULL_REQUEST}
forge_url: https://codeberg.org TOKEN:
surge_token:
from_secret: surge_token
forge_repo_token:
from_secret: surge_forge_token from_secret: surge_forge_token
failure: ignore UPLOAD_DIR: _site
when: depends_on: build
event: [pull_request, pull_request_closed]
path: comment:
- content/** image: mcs94/gitea-comment@sha256:f1a06366bfa34ff7594f369ebf81cbadd2d4410b7d51c9aa59c0c0264aa5fbd9
- assets/** settings:
- .eleventy.js gitea_address: https://codeberg.org
gitea_token:
from_secret: surge_forge_token
comment: 'Preview ready: https://codeberg.codeberg.page/documentation/pull_${CI_COMMIT_PULL_REQUEST}'
depends_on: deploy-preview

View file

@ -6,30 +6,32 @@ when:
steps: steps:
lint-markdown: lint-markdown:
image: davidanson/markdownlint-cli2:v0.13.0 image: davidanson/markdownlint-cli2:v0.20.0
commands: commands:
- 'markdownlint-cli2 *.{md,markdown}' - 'markdownlint-cli2 **/*.md'
when: when:
path: '*.{md,markdown}' path:
include: ['.woodpecker/*.yaml', '*.{md,markdown}']
editor-config: editor-config:
image: mstruebing/editorconfig-checker:v3.0.3 image: mstruebing/editorconfig-checker:v3.6.1
depends_on: [] depends_on: []
prettier: prettier:
image: docker.io/woodpeckerci/plugin-prettier:0.1.0 image: docker.io/woodpeckerci/plugin-prettier:1.4.1
depends_on: [] depends_on: []
settings: settings:
version: 3.2.5 # renovate: datasource=npm depName=prettier
version: 3.9.4
links: links:
image: lycheeverse/lychee:0.15.1 image: lycheeverse/lychee:0.22.0
depends_on: [] depends_on: []
commands: commands:
- lychee -v -t 40 . - lychee -v -t 40 --root-dir $(pwd)/content --fallback-extensions md .
lint-yaml: lint-yaml:
image: pipelinecomponents/yamllint:0.31.3 image: pipelinecomponents/yamllint:0.35.13
depends_on: [] depends_on: []
commands: commands:
- yamllint --strict . - yamllint --strict .
@ -37,8 +39,9 @@ steps:
path: '*.{yml,yaml}' path: '*.{yml,yaml}'
spellcheck: spellcheck:
image: docker.io/node:22-alpine image: docker.io/node:24-alpine
depends_on: [] depends_on: []
commands: commands:
- npm install -g corepack@latest
- corepack enable - corepack enable
- pnpx cspell lint --no-progress --gitignore '{**,.*}/{*,.*}' - pnpx cspell lint --no-progress --gitignore '{**,.*}/{*,.*}'

View file

@ -1,16 +1,21 @@
FROM node:16.15.1-stretch-slim # The main purpose of this Dockerfile is to install the `pnpm` package manager in the official Node.js image
# and use an init script as the entrypoint of a custom image to build and run the documentation site.
FROM node:lts-slim@sha256:e8e2e91b1378f83c5b2dd15f0247f34110e2fe895f6ca7719dbb780f929368eb
RUN apt-get update && apt-get -y upgrade EXPOSE 8080/tcp
SHELL [ "bash", "-c" ]
ENTRYPOINT [ "./container-init.sh" ]
RUN apt-get install -y git curl ENV CI="true"
RUN curl -fsSL https://get.pnpm.io/install.sh | sh -
RUN mkdir /opt/documentation && chown node: /opt/documentation # renovate: datasource=npm depName=pnpm
ENV PNPM_VERSION="11.5.3"
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get --assume-yes upgrade \
&& rm --recursive --force /var/lib/apt/lists/*
RUN npm install --global pnpm@${PNPM_VERSION}
USER node USER node
WORKDIR /docs
WORKDIR /opt/documentation
RUN pnpm install
CMD [ "pnpm", "run", "serve"]

View file

@ -16,4 +16,5 @@ licensed under [multiple licenses](https://fontawesome.com/license/free).
Codeberg and the Codeberg Logo are trademarks of Codeberg e.V. Codeberg and the Codeberg Logo are trademarks of Codeberg e.V.
"Knut the Polar Bear" has been derived from [https://openclipart.org/detail/193243/polar-bear-remix](https://openclipart.org/detail/193243/polar-bear-remix), under CC0 1.0 "Knut the Polar Bear" has been derived from [https://openclipart.org/detail/193243/polar-bear-remix](https://openclipart.org/detail/193243/polar-bear-remix),
under CC0 1.0

View file

@ -3,18 +3,22 @@
This repository contains the [documentation for Codeberg](https://docs.codeberg.org/), with some code to build it into This repository contains the [documentation for Codeberg](https://docs.codeberg.org/), with some code to build it into
a static website. a static website.
Please have a look into it and consider to help writing the Documentation. This is still very much work-in-progress, the more useful material we collect, the better we can later present it! All contributions are very welcome! Please have a look into it and consider to help writing the Documentation.
This is still very much work-in-progress, the more useful material we collect, the better we can later present it!
All contributions are very welcome!
For an introduction on contributing to Codeberg Documentation, please have a look For an introduction on contributing to Codeberg Documentation, please have a look
at [the section on improving the documentation](https://docs.codeberg.org/improving-documentation/). at [the section on improving the documentation](https://docs.codeberg.org/improving-documentation/).
## Usage ## Usage
### Local Development ### Local Development using nodejs
If you want to work on the documentation, for example by writing your own articles, If you want to work on the documentation, for example by writing your own articles,
the easiest way to do so is to fork the documentation repository and develop locally. the easiest way to do so is to fork the documentation repository and develop locally.
To learn how to get `pnpm` see the [PNpm website](https://pnpm.io).
First, run First, run
`pnpm install` `pnpm install`
@ -24,7 +28,7 @@ You only have to do this once.
Then run Then run
`pnpm run serve` `pnpm run dev`
to start a development web server that by default is listening at `http://localhost:8080`. to start a development web server that by default is listening at `http://localhost:8080`.
@ -44,14 +48,14 @@ You must have a container-engine installed (docker, podman, etc.)
First build the container image: First build the container image:
```shell ```shell
docker build -t Codeberg/Documentation-server . docker build --tag codeberg-docs:dev .
``` ```
You do not have to rebuild the image every time. Once you build the image you can always start the development You do not have to rebuild the image every time. Once you build the image you can always start the development
webserver using the container engine: webserver using the container engine:
```shell ```shell
docker run --rm -v $PWD:/opt/documentation Codeberg/Documentation-server:latest docker run --name "codeberg-docs" --rm --tty --interactive --volume "${PWD}:/docs" --publish "127.0.0.1:8080:8080/tcp" codeberg-docs:dev
``` ```
Use the "External" URL the container outputs on startup to access your documentation. Use the "External" URL the container outputs on startup to access your documentation.
@ -63,9 +67,9 @@ Use `Ctrl-C` to exit / end the container.
The parameters are: The parameters are:
`--rm` removes the container after it's use `--rm` removes the container after it's use
`-v` mounts the current (documentation repository root) folder to `/opt/documentation` in the container. `--volume` mounts the current (documentation repository root) folder to `/docs` in the container.
`Codeberg/Documentation-server:latest` refers to the container image built in the first step (using `docker build`). `codeberg-docs:dev` refers to the container image built in the first step (using `docker build`).
### Build & Deployment ### Build & Deployment
@ -84,6 +88,23 @@ Instead, to directly publish the page to Codeberg pages, you can also run
which includes a call to `pnpm run build`. which includes a call to `pnpm run build`.
### Check and fix formatting errors
Before you create a pull request with your changes, you should check and fix formatting errors.
Use the following command to fix formatting errors automatically:
`pnpx prettier . -w`
With the following command you can check if there are any formatting errors remaining:
`pnpx prettier . -c`
In addition you should also run the linter which is also used when checking pull requests:
`pnpx cspell lint --no-progress --gitignore '{**,.*}/{*,.*}'`
If this shows any errors, please fix them before committing your changes and creating a pull request.
### Technical Information ### Technical Information
This website uses [Eleventy](https://www.11ty.dev/), a static site generator. This website uses [Eleventy](https://www.11ty.dev/), a static site generator.
@ -93,13 +114,18 @@ with `package-lock.json` to try to ensure reproducible builds.
It also uses [PageFind](https://pagefind.app/), a static search library. It also uses [PageFind](https://pagefind.app/), a static search library.
Deployment previews are generated for every PR using [Surge.sh](https://surge.sh/) through the corresponding [Woodpecker plugin](https://woodpecker-ci.org/plugins/Surge%20preview%20plugin). Deployment previews are generated for every PR using [Surge.sh](https://surge.sh/)
through the corresponding [Woodpecker plugin](https://woodpecker-ci.org/plugins/surge-preview).
A spellchecker is used to check for spelling errors in the documentation. A spellchecker is used to check for spelling errors in the documentation.
To add exceptions to the spellchecker, add them to the `.cspell.json` file. To add exceptions to the spellchecker, add them to the `.cspell.json` file.
This project is deployed to Codeberg via [a cron job](https://codeberg.org/Codeberg-Infrastructure/scripted-configuration/src/branch/main/hosts/static/home/build/build_docs.sh)
executed on the Codeberg infrastructure.
## License and Contributors ## License and Contributors
This website (excluding bundled fonts) is licensed under CC BY-SA 4.0. See the [LICENSE](LICENSE.md) file for details. This website (excluding bundled fonts) is licensed under CC BY-SA 4.0. See the [LICENSE](LICENSE.md) file for details.
Please refer to the [commit log](https://codeberg.org/Codeberg/Documentation/commits/branch/main) for an exhaustive list of contributors to Codeberg Documentation. Please refer to the [commit log](https://codeberg.org/Codeberg/Documentation/commits/branch/main)
for an exhaustive list of contributors to Codeberg Documentation.

View file

@ -18,6 +18,21 @@
--admonition-icon--question: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M10.97 8.265a1.45 1.45 0 0 0-.487.57.75.75 0 0 1-1.341-.67c.2-.402.513-.826.997-1.148C10.627 6.69 11.244 6.5 12 6.5c.658 0 1.369.195 1.934.619a2.45 2.45 0 0 1 1.004 2.006c0 1.033-.513 1.72-1.027 2.215-.19.183-.399.358-.579.508l-.147.123a4.329 4.329 0 0 0-.435.409v1.37a.75.75 0 1 1-1.5 0v-1.473c0-.237.067-.504.247-.736.22-.28.486-.517.718-.714l.183-.153.001-.001c.172-.143.324-.27.47-.412.368-.355.569-.676.569-1.136a.953.953 0 0 0-.404-.806C12.766 8.118 12.384 8 12 8c-.494 0-.814.121-1.03.265ZM13 17a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path><path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Z"></path></svg>'); --admonition-icon--question: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M10.97 8.265a1.45 1.45 0 0 0-.487.57.75.75 0 0 1-1.341-.67c.2-.402.513-.826.997-1.148C10.627 6.69 11.244 6.5 12 6.5c.658 0 1.369.195 1.934.619a2.45 2.45 0 0 1 1.004 2.006c0 1.033-.513 1.72-1.027 2.215-.19.183-.399.358-.579.508l-.147.123a4.329 4.329 0 0 0-.435.409v1.37a.75.75 0 1 1-1.5 0v-1.473c0-.237.067-.504.247-.736.22-.28.486-.517.718-.714l.183-.153.001-.001c.172-.143.324-.27.47-.412.368-.355.569-.676.569-1.136a.953.953 0 0 0-.404-.806C12.766 8.118 12.384 8 12 8c-.494 0-.814.121-1.03.265ZM13 17a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path><path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Z"></path></svg>');
--admonition-icon-dimension: 20px; --admonition-icon-dimension: 20px;
--pagefind-ui-text: var(--bs-link-color) !important;
--color-nav-bg: #2185d0;
}
.sidebar,
.navbar-brand {
--bs-sidebar-brand-color: var(--bs-white);
--bs-navbar-brand-color: var(--bs-white);
}
.btn-close {
filter: var(--bs-btn-close-white-filter);
--bs-btn-close-opacity: 1;
} }
.content :not(img, pre) { .content :not(img, pre) {
@ -26,12 +41,16 @@
.content img { .content img {
border: 5px solid rgba(0, 0, 0, 0.2); border: 5px solid rgba(0, 0, 0, 0.2);
max-width: 100%; max-width: 100%;
height: auto;
} }
.content blockquote { .content blockquote {
margin: 0; margin: 0;
} }
.content-title { .content-title {
margin-top: 20px !important; margin-top: 20px;
margin-bottom: 20px;
scroll-margin-block-start: 65px;
} }
.content pre { .content pre {
@ -53,11 +72,6 @@
padding-left: 2em; padding-left: 2em;
} }
.codeberg-design .card,
.codeberg-design hr {
margin-left: 0;
}
a.header-anchor, a.header-anchor,
a.header-anchor:visited { a.header-anchor:visited {
color: var(--lm-base-text-color) !important; color: var(--lm-base-text-color) !important;
@ -86,14 +100,6 @@ pre:not([class*='language-']) {
border-radius: 0.3em; border-radius: 0.3em;
} }
/* Override sidebar link style */
.codeberg-design .sidebar-title a {
color: var(--sidebar-title-text-color);
}
.codeberg-design .sidebar-title .dark-mode a {
color: var(--dm-sidebar-title-text-color);
}
/* Apply halfmoon style to inline code */ /* Apply halfmoon style to inline code */
code:not(pre > code) { code:not(pre > code) {
font-size: var(--code-font-size); font-size: var(--code-font-size);
@ -113,21 +119,6 @@ code:not(pre > code) {
/* Custom Admonition boxes */ /* Custom Admonition boxes */
.admonition {
background-color: var(--admonition-background-color--info);
border: 0.2rem solid var(--admonition-border-color--info);
border-radius: 0.3rem;
border-left-width: 0.5rem;
padding: 1em 1.5em;
}
.admonition-title {
font-weight: bold;
font-size: 1.2em;
}
.admonition-icon::before { .admonition-icon::before {
content: ''; content: '';
background-color: var(--admonition-border-color--info); background-color: var(--admonition-border-color--info);
@ -150,23 +141,12 @@ code:not(pre > code) {
width: 1.5em; width: 1.5em;
} }
.admonition.note {
background-color: var(--admonition-background-color--note);
border-color: var(--admonition-border-color--note);
}
.admonition-icon.note::before { .admonition-icon.note::before {
background-color: var(--admonition-border-color--note); background-color: var(--admonition-border-color--note);
mask-image: var(--admonition-icon--note); mask-image: var(--admonition-icon--note);
-webkit-mask-image: var(--admonition-icon--note); -webkit-mask-image: var(--admonition-icon--note);
} }
.admonition.warning {
background-color: var(--admonition-background-color--warning);
border-color: var(--admonition-border-color--warning);
}
.admonition-icon.warning::before { .admonition-icon.warning::before {
background-color: var(--admonition-border-color--warning); background-color: var(--admonition-border-color--warning);
@ -174,11 +154,6 @@ code:not(pre > code) {
-webkit-mask-image: var(--admonition-icon--warning); -webkit-mask-image: var(--admonition-icon--warning);
} }
.admonition.tip {
background-color: var(--admonition-background-color--tip);
border-color: var(--admonition-border-color--tip);
}
.admonition-icon.tip::before { .admonition-icon.tip::before {
background-color: var(--admonition-border-color--tip); background-color: var(--admonition-border-color--tip);
@ -186,11 +161,6 @@ code:not(pre > code) {
-webkit-mask-image: var(--admonition-icon--tip); -webkit-mask-image: var(--admonition-icon--tip);
} }
.admonition.question {
background-color: var(--admonition-background-color--question);
border-color: var(--admonition-border-color--question);
}
.admonition-icon.question::before { .admonition-icon.question::before {
background-color: var(--admonition-border-color--question); background-color: var(--admonition-border-color--question);
@ -198,10 +168,6 @@ code:not(pre > code) {
-webkit-mask-image: var(--admonition-icon--question); -webkit-mask-image: var(--admonition-icon--question);
} }
.admonition-content > *:last-child {
margin-bottom: 0;
}
#search-results { #search-results {
overflow: hidden; overflow: hidden;
word-wrap: anywhere; word-wrap: anywhere;
@ -231,40 +197,11 @@ code:not(pre > code) {
} }
#toc ol { #toc ol {
padding: 5px; padding-left: 1em;
margin: 0;
} }
#toc li { #toc li {
list-style-type: none; list-style-type: none;
margin-bottom: 0;
}
#toc a {
display: block;
height: auto;
}
#toc-side {
margin-top: 50px;
}
#toc-side span {
font-weight: 500;
font-size: 1.5rem;
margin-bottom: 1rem;
}
#toc-side ol:first-child {
border-left: 1px solid rgba(0, 0, 0, 0.15);
}
.dark-mode #toc-side ol:first-child {
border-left: 1px solid rgba(255, 255, 255, 0.15);
}
#toc-side a {
padding-left: 10px;
} }
a.show-on-focus { a.show-on-focus {
@ -284,3 +221,47 @@ a.show-on-focus:focus {
left: 0; left: 0;
top: 0; top: 0;
} }
.docs-navbar {
background-color: hsla(var(--bs-body-bg-hsl), 0.75);
backdrop-filter: blur(8px);
}
.sidebar .offcanvas-header,
.docs-navbar {
min-height: 55px;
border-bottom: var(--bs-border-width) solid var(--bs-content-border-color);
background-color: var(--color-nav-bg);
}
.filter-docs {
background-color: var(--bs-sidebar-bg);
}
.docs-footer {
background-color: var(--bs-secondary-bg);
border-top: var(--bs-border-width) solid var(--bs-content-border-color);
}
.simple-link {
color: hsla(var(--bs-emphasis-color-hsl), 0.75);
text-decoration: none;
}
.simple-link:hover {
color: hsla(var(--bs-emphasis-color-hsl), 0.9);
}
.alert-heading {
margin-bottom: 0.5rem;
}
/* fix bottom margin in admonitions and cards */
.alert p:not(ul p):nth-last-child(2),
.alert p:not(ul p):last-child,
.alert li:last-child p,
.alert ul:last-child,
.card-text p:last-child {
margin-bottom: 0;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,020 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 893 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

25
assets/js/index.js Normal file
View file

@ -0,0 +1,25 @@
if (localStorage.getItem('theme') === 'light') {
document.documentElement.setAttribute('data-bs-theme', 'light');
}
function toggleDarkMode() {
const rootPreference = document.documentElement.getAttribute('data-bs-theme');
if (rootPreference === 'light') {
document.documentElement.setAttribute('data-bs-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
function toggleSidebar() {
const sidebarEl = document.querySelector('.sidebar');
if (sidebarEl.classList.contains('show')) {
sidebarEl.classList.remove('show');
sidebarEl.classList.add('hiding');
} else {
sidebarEl.classList.remove('hiding');
sidebarEl.classList.add('show');
}
}

6
container-init.sh Executable file
View file

@ -0,0 +1,6 @@
#!/usr/bin/env bash
# This script allows developers to easily build and preview the
# Codeberg documentation locally when using containers.
pnpm install
pnpm run dev

View file

@ -1,16 +1,21 @@
<div class="card" data-pagefind-ignore="all"> <div class="card" data-pagefind-ignore="all">
<p>Hey there! 👋 Thank you for reading this article!</p> <div class="card-body">
<p> <h5 class="card-title">Contributing</h5>
Is there something missing, or do you have an idea on how to improve the documentation? <div class="card-text">
Do you want to write your own article? <p>Hey there! 👋 Thank you for reading this article!</p>
</p> <p>
<p> Is there something missing, or do you have an idea on how to improve the documentation?
You're invited to contribute to the Codeberg Documentation at <a href="https://codeberg.org/Codeberg/Documentation">its source code repository</a>, Do you want to write your own article?
for example, by <a href="/collaborating/pull-requests-and-git-flow">adding a pull request</a> </p>
or joining in on the discussion in <a href="https://codeberg.org/Codeberg/Documentation/issues">the issue tracker</a>. <p>
</p> You're invited to contribute to the Codeberg Documentation at <a href="https://codeberg.org/Codeberg/Documentation">its source code repository</a>
<p> for example, by <a href="/collaborating/pull-requests-and-git-flow">adding a pull request</a>
For an introduction on contributing to Codeberg Documentation, please have a look or joining in on the discussion in <a href="https://codeberg.org/Codeberg/Documentation/issues">the issue tracker</a>.
at <a href="https://docs.codeberg.org/improving-codeberg/docs-contributor-faq">the Contributor FAQ</a>. </p>
</p> <p>
For an introduction on contributing to Codeberg Documentation, please have a look
at <a href="https://docs.codeberg.org/improving-codeberg/docs-contributor-faq">the Contributor FAQ</a>.
</p>
</div>
</div>
</div> </div>

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" class="codeberg-design"> <html lang="en" data-bs-theme="dark" data-bs-core="modern">
<head> <head>
<title>{% if eleventyNavigation.title %}{{ eleventyNavigation.title }} | {% endif %}Codeberg Documentation</title> <title>{% if eleventyNavigation.title %}{{ eleventyNavigation.title }} | {% endif %}Codeberg Documentation</title>
@ -17,14 +17,11 @@
<link rel="icon" href="https://design.codeberg.org/logo-kit/favicon.svg" type="image/svg+xml" /> <link rel="icon" href="https://design.codeberg.org/logo-kit/favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="https://design.codeberg.org/logo-kit/apple-touch-icon.png" /> <link rel="apple-touch-icon" href="https://design.codeberg.org/logo-kit/apple-touch-icon.png" />
<link rel="preload" type="text/css" href="/assets/css/codeberg-docs.css" as="style" />
<link rel="preload" type="text/css" href="https://design.codeberg.org/design-kit/codeberg.css" as="style" />
<link rel="preload" href="https://fonts.codeberg.org/dist/inter/Inter%20Web/inter.css" as="style" /> <link rel="preload" href="https://fonts.codeberg.org/dist/inter/Inter%20Web/inter.css" as="style" />
<link rel="preload" href="https://fonts.codeberg.org/dist/fontawesome6/css/svg-with-js.css" as="style" /> <link rel="preload" href="https://fonts.codeberg.org/dist/fontawesome6/css/svg-with-js.css" as="style" />
<!-- Details and License: https://codeberg.org/Codeberg/Design/src/design-kit --> <link rel="stylesheet" type="text/css" href="/assets/css/halfmoon/halfmoon.min.css">
<link rel="stylesheet" href="https://design.codeberg.org/design-kit/codeberg.css" /> <link rel="stylesheet" type="text/css" href="/assets/css/halfmoon/cores/halfmoon.modern.css">
<script defer src="https://design.codeberg.org/design-kit/codeberg.js"></script>
<link rel="stylesheet" type="text/css" href="/assets/css/codeberg-docs.css" /> <link rel="stylesheet" type="text/css" href="/assets/css/codeberg-docs.css" />
<!-- Syntax highlighting --> <!-- Syntax highlighting -->
@ -73,138 +70,160 @@
// @license-end // @license-end
</script> </script>
{% endif %} {% endif %}
<script src="/assets/js/index.js"></script>
</head> </head>
<body data-set-preferred-mode-onload="true"> <body class="position-relative ps-lg-sbwidth">
{% include 'license.njk' %} <nav class="sidebar offcanvas-start offcanvas-lg">
<div class="with-navbar with-sidebar with-transitions page-wrapper" data-sidebar-type="overlayed-sm-and-down"> <div class="offcanvas-header position-relative justify-content-start flex-shrink-0 py-0">
<div class="sidebar-overlay" onclick="halfmoon.toggleSidebar()"></div> <a class="sidebar-brand d-flex align-items-center me-auto" href="/">
<nav class="navbar"> <img
<div class="navbar-content"> src="https://design.codeberg.org/logo-kit/icon_inverted.svg"
<button class="btn btn-primary" type="button" onclick="halfmoon.toggleSidebar()"> eleventy:ignore=""
{% fas_icon "bars" %} class="d-block flex-shrink-0 me-1"
<span class="sr-only">Toggle sidebar</span> height="24"
</button> width="24"
</div> alt="Codeberg"
<!-- Navbar brand --> />
<a href="/" class="navbar-brand" title="Codeberg Docs">
<img src="https://design.codeberg.org/logo-kit/icon_inverted.svg" height="22" width="22" alt="Codeberg" />
Docs Docs
</a> </a>
<!-- Navbar nav --> <button
<ul class="d-md-flex ml-auto d-none navbar-nav"> type="button"
class="btn btn-secondary btn-square d-none d-lg-inline-block"
aria-label="Toggle dark mode"
onclick="toggleDarkMode()"
>
{% fas_icon "moon" %}
</button>
<button type="button" class="btn-close d-lg-none ms-1" aria-label="Close" onclick="toggleSidebar()"></button>
</div>
<div class="offcanvas-body position-relative p-0">
<div class="filter-docs sticky-top p-3">
<input
id="search-input"
type="text"
class="form-control search"
placeholder="Filter docs"
aria-label="Filter docs"
/>
<div class="mt-1">
<small
>Press
<kbd class="text-body" style="font-size: 10px; background-color: hsla(var(--bs-emphasis-color-hsl), 0.1)"
>/</kbd
>
to focus</small
>
</div>
</div>
<div class="p-3 pt-0">
<div id="search-results"></div>
<ul class="sidebar-nav list">
{% for entry in collections.all | eleventyNavigation %} {% set active = entry.url == page.url or entry.key ==
eleventyNavigation.parent %} {% if (not entry.draft) or active %}
<li class="position-relative mt-4 mb-1">
<h5 class="sidebar-header {% if active %} active{% endif %}">
<a class="text-decoration-none link-white" href="{{ entry.url }}" id="{{ entry.key }}"
>{% fas_icon entry.icon | default("caret-right") %} {{ entry.title }}</a
>
</h5>
</li>
{% if entry.children.length > 0 %} {% for child in entry.children %} {% set child_active = child.url ==
page.url %} {% if child_active or not child.draft %}
<li class="nav-item"> <li class="nav-item">
<a
href="{{ child.url }}"
class="nav-link {% if child_active %} active{% endif %}"
id="sidebar-{{ child.key }}"
>
<span class="name">{{ child.title }}</span>
</a>
</li>
{% endif %} {% endfor %} {% endif %} {% endif %} {%- endfor %}
</ul>
</div>
</nav>
<nav class="navbar navbar-expand-md docs-navbar sticky-top">
<div class="container-md px-3 px-sm-4 px-xl-5 py-1 justify-content-start">
<div class="btn-group me-3 d-lg-none">
<button type="button" class="btn btn-secondary btn-square" aria-label="Toggle sidebar" onclick="toggleSidebar()">
{% fas_icon "bars" %}
</button>
<button type="button" class="btn btn-secondary btn-square" aria-label="Toggle dark mode" onclick="toggleDarkMode()">
{% fas_icon "moon" %}
</button>
</div>
<a class="navbar-brand d-flex align-items-center d-lg-none ms-auto ms-md-0" href="/">
<img
src="https://design.codeberg.org/logo-kit/icon_inverted.svg"
class="d-block flex-shrink-0 me-1"
eleventy:ignore=""
height="24"
width="24"
alt="Codeberg"
/>
Docs
</a>
<div class="btn-group ms-auto d-md-none">
<a href="{{ urls.commitHistoryMaster }}/{{ page.inputPath }}" class="btn btn-secondary btn-square" target="_blank" rel="noreferrer">
{% fas_icon "history" %}
</a>
<a href="{{ urls.docsSourcesMaster }}/{{ page.inputPath }}" class="btn btn-secondary btn-square" target="_blank" rel="noreferrer">
{% fas_icon "code" %}
</a>
</div>
<div class="collapse navbar-collapse" id="docs-navbar-collapse">
<div class="d-flex align-items-center justify-content-center ms-auto gap-2">
<a <a
href="{{ urls.commitHistoryMaster }}/{{ page.inputPath }}" href="{{ urls.commitHistoryMaster }}/{{ page.inputPath }}"
class="nav-link" class="btn btn-secondary flex-grow-1 d-flex align-items-center flex-nowrap text-start position-relative"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
{% fas_icon "history" %} &nbsp; View History {% fas_icon "history" %} &nbsp; View History
</a> </a>
</li>
<li class="nav-item">
<a <a
href="{{ urls.docsSourcesMaster }}/{{ page.inputPath }}" href="{{ urls.docsSourcesMaster }}/{{ page.inputPath }}"
class="nav-link" class="btn btn-secondary flex-grow-1 d-flex align-items-center flex-nowrap text-start position-relative"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
{% fas_icon "code" %} &nbsp; View Source {% fas_icon "code" %} &nbsp; View Source
</a> </a>
</li>
{#
<li class="nav-item">
<a href="javascript:;" onclick="document.body.classList.toggle('dark-mode')" class="nav-link">
{% fas_icon "moon" %} &nbsp; Toggle Dark Mode
</a>
</li>
#}
</ul>
<!-- Navbar content (dropdown menu) -->
<div class="ml-auto d-md-none navbar-content">
<div class="with-arrow dropdown">
<button class="btn" data-toggle="dropdown" type="button" id="navbar-dropdown-toggle-btn-1">
Menu {% fas_icon "angle-down" %}
</button>
<div class="dropdown-menu-right w-200 dropdown-menu" aria-labelledby="navbar-dropdown-toggle-btn-1">
<a
href="{{ urls.commitHistoryMaster }}/{{ page.inputPath }}"
class="dropdown-item"
target="_blank"
rel="noreferrer"
>
{% fas_icon "history" %} &nbsp; View History
</a>
<a
href="{{ urls.docsSourcesMaster }}/{{ page.inputPath }}"
class="dropdown-item"
target="_blank"
rel="noreferrer"
>
{% fas_icon "code" %} &nbsp; View Source
</a>
{#
<a href="javascript:;" onclick="document.body.classList.toggle('dark-mode')" class="dropdown-item">
{% fas_icon "moon" %} &nbsp; Toggle Dark Mode
</a>
#}
<div class="mt-5 dropdown-divider"></div>
</div>
</div> </div>
</div> </div>
</nav>
<div class="sidebar">
<div class="sidebar-menu">
<!-- Sidebar content with the search box -->
<div class="sidebar-content">
<input type="text" class="form-control" placeholder="Filter Docs" id="search-input" />
<div class="mt-10 font-size-12">Press <kbd>/</kbd> to focus</div>
<div id="search-results"></div>
</div>
{% for entry in collections.all | eleventyNavigation %} {% set active = entry.url == page.url or entry.key ==
eleventyNavigation.parent %} {% if (not entry.draft) or active %}
<h5 class="sidebar-title {% if active %} active{% endif %}">
<a href="{{ entry.url }}" id="{{ entry.key }}"
>{% fas_icon entry.icon | default("caret-right") %} {{ entry.title }}</a
>
</h5>
<div class="sidebar-divider"></div>
{% if entry.children.length > 0 %} {% for child in entry.children %} {% set child_active = child.url ==
page.url %} {% if child_active or not child.draft %}
<a href="{{ child.url }}" class="sidebar-link{% if child_active %} active{% endif %}" id="{{ child.key }}">
<span class="name">{{ child.title }}</span>
</a>
{% endif %} {% endfor %} {% endif %} {% endif %}
<br />
{%- endfor %}
</div>
</div> </div>
</nav>
<div class="content-wrapper"> <div class="container-md px-3 px-sm-4 px-xl-5">
<div class="container-fluid"> <div class="row">
<div class="row"> <main class="col-xl-9 py-3 py-sm-4" data-pagefind-body>
<div class="col-xl-8 content" data-pagefind-body> {% if eleventyNavigation.title %}
{% if eleventyNavigation.title %} <h1 id="top" class="lh-base mb-1 content-title font-size-24">{{ eleventyNavigation.title }}</h1>
<h1 class="content-title font-size-24">{{ eleventyNavigation.title }}</h1> {% endif %} {% if eleventyNavigation.draft %}
{% endif %} {% if eleventyNavigation.draft %} <strong data-pagefind-ignore="all"
<strong data-pagefind-ignore="all" >Please note that this article is still a draft and might not have any contents yet.</strong
>Please note that this article is still a draft and might not have any contents yet.</strong >
> {% endif %}
{% endif %} {% include 'toc-collapse.njk' %}
{{ content | safe }} <div class="content">
<hr class="mb-20" /> {% include 'toc-collapse.njk' %}
{% if page.url != '/' %} {% include 'contribution_invitation.njk' %} {% endif %} {{ content | safe }}
<div class="text-right font-size-16" data-pagefind-ignore="all">
<p>&copy; Codeberg Docs Contributors. See <a href="#modal-1" role="button">LICENSE</a></p>
</div>
</div>
{% include 'toc-side.njk' %}
</div> </div>
</div> {% include 'contribution_invitation.njk' %}
</main>
{% include 'toc-side.njk' %}
</div> </div>
</div> </div>
<footer class="docs-footer" data-pagefind-ignore="all">
<div class="container-md px-3 px-sm-4 px-xl-5 py-3">
<p>
&copy; Codeberg Docs Contributors. See
<a href="https://codeberg.org/Codeberg/Documentation/src/branch/main/LICENSE.md">LICENSE</a>
</p>
</div>
</footer>
</body> </body>
</html> </html>

View file

@ -1,36 +0,0 @@
<div class="modal" id="modal-1" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<h5 class="modal-title">LICENSE</h5>
<p>
The
<span
xmlns:dct="http://purl.org/dc/terms/"
href="http://purl.org/dc/dcmitype/Text"
property="dct:title"
rel="dct:type"
>
Codeberg Documentation website</span
>
is licensed under a
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"
>Creative Commons Attribution-ShareAlike 4.0 International License</a
>.
</p>
<p>
It bundles third-party font software licensed under a different license. Please look at
<a href="{{ urls.docsSourcesMaster }}/LICENSE.md">the LICENSE file</a> for details.
</p>
<p>
Changes to the original versions of the article as well as its individual authors can be looked up in
<a href="{{ urls.commitHistoryMaster }}/{{ page.inputPath }}" target="_blank" rel="noreferrer"
>this article's commit history</a
>
</p>
<p>Codeberg and the Codeberg Logo are trademarks of Codeberg e.V.</p>
<div class="text-right mt-20">
<a href="#" class="mr-5 btn" role="button">Close</a>
</div>
</div>
</div>
</div>

View file

@ -1,10 +1,11 @@
{% if content | toc %} {% if content | toc %}
<nav class="mb-3 d-xl-none" data-pagefind-ignore="all"> <nav class="mb-3 d-xl-none" data-pagefind-ignore="all">
<details class="collapse-panel"> <details class="collapse-panel">
<summary class="d-block d-flex justify-content-between align-items-center py-2 w-full collapse-header"> <summary class="btn btn-secondary d-block w-100 py-2 d-flex align-items-center justify-content-between">
<span class="antialiased">On this page</span> <span class="antialiased">On this page</span>
{% fas_icon "angle-down" %}
</summary> </summary>
<div id="toc" class="collapse-content"> <div id="toc" class="border rounded mt-2">
{{ content | toc | safe }} {{ content | toc | safe }}
</div> </div>
</details> </details>

View file

@ -1,8 +1,8 @@
{% if content | toc %} {% if content | toc %}
<nav class="col-xl-3 position-relative d-none d-xl-block" id="toc-side" data-pagefind-ignore="all"> <nav class="col-xl-3 position-relative d-none d-xl-block" id="toc-side" data-pagefind-ignore="all">
<div class="position-fixed mr-20"> <div class="position-sticky start-0 py-3 py-sm-4 ps-4" style="top: 63px;">
<span>On this page</span> <span class="h4 lh-base">On this page</span>
<div id="toc" class="overflow-y-auto" style="max-height: 43.75rem;"> <div id="toc" class="overflow-y-auto pe-2" style="max-height: 43.75rem;">
{{ content | toc | safe }} {{ content | toc | safe }}
</div> </div>
</div> </div>

Some files were not shown because too many files have changed in this diff Show more