Checkpoint the party/runtime stack before share-program and malicious-mode work.
Ship the TLS mesh, composer, Beaver/Yao/leaf MPC, prep/online paths, apps, and docs so the tree is pushable before elevating share_expr, security_mode, and prep resume. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
695f8e84f7
commit
0d22946a0e
1835 changed files with 170291 additions and 2849 deletions
|
|
@ -4,7 +4,7 @@ on:
|
|||
types: [published]
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
|
|
|||
6
thirdparty/doxygen-awesome-css/.gitignore
vendored
6
thirdparty/doxygen-awesome-css/.gitignore
vendored
|
|
@ -1,3 +1,7 @@
|
|||
docs/html
|
||||
_readthedocs
|
||||
.DS_Store
|
||||
.idea
|
||||
.idea
|
||||
|
||||
node_modules
|
||||
*.tgz
|
||||
|
|
|
|||
3
thirdparty/doxygen-awesome-css/.npmignore
vendored
Normal file
3
thirdparty/doxygen-awesome-css/.npmignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
*
|
||||
!doxygen-awesome*
|
||||
|
||||
14
thirdparty/doxygen-awesome-css/.readthedocs.yaml
vendored
Normal file
14
thirdparty/doxygen-awesome-css/.readthedocs.yaml
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
version: 2
|
||||
|
||||
build:
|
||||
os: ubuntu-24.04
|
||||
tools:
|
||||
python: "miniconda-latest"
|
||||
commands:
|
||||
- chmod +x readthedocs_build.sh
|
||||
- ./readthedocs_build.sh
|
||||
975
thirdparty/doxygen-awesome-css/Doxyfile
vendored
975
thirdparty/doxygen-awesome-css/Doxyfile
vendored
File diff suppressed because it is too large
Load diff
1
thirdparty/doxygen-awesome-css/Makefile
vendored
1
thirdparty/doxygen-awesome-css/Makefile
vendored
|
|
@ -22,6 +22,7 @@ FILES = doxygen-awesome-darkmode-toggle.js \
|
|||
doxygen-awesome-paragraph-link.js \
|
||||
doxygen-awesome-sidebar-only-darkmode-toggle.css \
|
||||
doxygen-awesome-sidebar-only.css \
|
||||
doxygen-awesome-tabs.js \
|
||||
doxygen-awesome.css
|
||||
|
||||
# Empty targets so that `make` and `make clean` do not cause errors
|
||||
|
|
|
|||
140
thirdparty/doxygen-awesome-css/README.md
vendored
140
thirdparty/doxygen-awesome-css/README.md
vendored
|
|
@ -1,4 +1,4 @@
|
|||
# Doxygen Awesome
|
||||
# Doxygen Awesome
|
||||
|
||||
[](https://github.com/jothepro/doxygen-awesome-css/releases/latest)
|
||||
[](https://github.com/jothepro/doxygen-awesome-css/blob/main/LICENSE)
|
||||
|
|
@ -10,22 +10,22 @@
|
|||
|
||||
</div>
|
||||
|
||||
**Doxygen Awesome** is a custom **CSS theme for Doxygen HTML-documentation** with lots of customization parameters.
|
||||
**Doxygen Awesome** is a custom CSS theme for [Doxygen](https://github.com/doxygen/doxygen) HTML documentation with many customization options.
|
||||
|
||||
## Motivation
|
||||
|
||||
I really like how the Doxygen HTML-documentation is structured! But IMHO it looks a bit outdated.
|
||||
I really like how the Doxygen HTML documentation is structured, but IMHO it looks a bit outdated.
|
||||
|
||||
This theme is an attempt to update the visuals of Doxygen without changing its overall layout too much.
|
||||
This theme is an attempt to modernize the visuals of Doxygen without changing its overall layout too much.
|
||||
|
||||
## Features
|
||||
|
||||
- 🌈 Clean, modern design
|
||||
- 🚀 Heavily customizable by adjusting CSS-variables
|
||||
- 🧩 No changes to the HTML structure of Doxygen required
|
||||
- 🚀 Highly customizable by adjusting CSS variables
|
||||
- 🧩 No changes to the HTML structure of Doxygen are required
|
||||
- 📱 Improved mobile usability
|
||||
- 🌘 Dark mode support!
|
||||
- 🥇 Works best with **doxygen 1.9.1** - **1.9.4** and **1.9.6**
|
||||
- 🥇 Works best with **Doxygen 1.9.1** - **1.9.4** and **1.9.6** - **1.18.0**
|
||||
|
||||
## Examples
|
||||
|
||||
|
|
@ -35,39 +35,100 @@ Some websites using this theme:
|
|||
- [wxWidgets](https://docs.wxwidgets.org/3.2/)
|
||||
- [OpenCV 5.x](https://docs.opencv.org/5.x/)
|
||||
- [Zephyr](https://docs.zephyrproject.org/latest/doxygen/html/index.html)
|
||||
- [FELTOR](https://mwiesenberger.github.io/feltor/dg/html/modules.html)
|
||||
- [Spatial Audio Framework (SAF)](https://leomccormack.github.io/Spatial_Audio_Framework/index.html)
|
||||
- [libCloudSync](https://jothepro.github.io/libCloudSync/)
|
||||
- [Randolf Richardson's C++ classes](https://www.randolf.ca/c++/docs/)
|
||||
- [libsl3](https://a4z.github.io/libsl3/)
|
||||
- [DuMu<sup>x</sup>](https://dumux.org/docs/doxygen/master/)
|
||||
- [OpenRemise](https://openremise.at/)
|
||||
|
||||
## Installation
|
||||
|
||||
To use the theme in your documentation, copy the required CSS and JS files from this repository into your project or add the repository as submodule and check out the latest release:
|
||||
To use the theme when generating your documentation, bring the required CSS and JS files from this repository into your project.
|
||||
|
||||
```bash
|
||||
This can be done in several ways:
|
||||
|
||||
- manually copying the files
|
||||
- adding the project as a Git submodule
|
||||
- downloading the project with CMake FetchContent
|
||||
- adding the project as an npm/xpm dependency
|
||||
- installing the theme system-wide
|
||||
|
||||
All theme files are located in the root of this repository and start with the prefix `doxygen-awesome-`. You may not need all of them. Follow the installation instructions to determine which files are required for your setup.
|
||||
|
||||
### Git submodule
|
||||
|
||||
For projects that use Git, add the repository as a submodule and check out the desired release:
|
||||
|
||||
```sh
|
||||
git submodule add https://github.com/jothepro/doxygen-awesome-css.git
|
||||
cd doxygen-awesome-css
|
||||
git checkout v2.2.0
|
||||
git checkout v2.5.0
|
||||
```
|
||||
|
||||
You can even install the theme system-wide by running `make install`. The files will be installed to `/usr/local/share/` by default, but you can customize the install location with `make PREFIX=/my/custom/path install`.
|
||||
### CMake with FetchContent
|
||||
|
||||
All theme files are located in the root of this repository and start with the prefix `doxygen-awesome-`. You may not need all of them. Follow the install instructions to figure out what files are required for your setup.
|
||||
For projects that build with CMake, the `FetchContent` module can be used to download the repository at configuration time.
|
||||
|
||||
Add the following snippet to your `CMakeLists.txt`:
|
||||
|
||||
```cmake
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
doxygen-awesome-css
|
||||
URL https://github.com/jothepro/doxygen-awesome-css/archive/refs/heads/main.zip
|
||||
)
|
||||
FetchContent_MakeAvailable(doxygen-awesome-css)
|
||||
|
||||
# Save the location the files were cloned into
|
||||
# This allows us to get the path to doxygen-awesome.css
|
||||
FetchContent_GetProperties(doxygen-awesome-css SOURCE_DIR AWESOME_CSS_DIR)
|
||||
|
||||
# Generate the Doxyfile
|
||||
set(DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in)
|
||||
set(DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
|
||||
configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
|
||||
```
|
||||
|
||||
This downloads the latest main (but any other revision could be used) and unpacks in the build folder. The `Doxyfile.in` can reference this location in the `HTML_EXTRA_STYLESHEET` field
|
||||
|
||||
```text
|
||||
HTML_EXTRA_STYLESHEET = @AWESOME_CSS_DIR@/doxygen-awesome.css
|
||||
```
|
||||
|
||||
When the configure stage of CMake is run, the `Doxyfile.in` is rendered to Doxyfile and Doxygen can be run as usual.
|
||||
|
||||
### npm/xpm dependency
|
||||
|
||||
In the npm ecosystem, this project can be added as a development dependency
|
||||
to your project:
|
||||
|
||||
```sh
|
||||
cd your-project
|
||||
npm install https://github.com/jothepro/doxygen-awesome-css#v2.5.0 --save-dev
|
||||
|
||||
ls -l node_modules/@jothepro/doxygen-awesome-css
|
||||
```
|
||||
|
||||
Similarly, in the [xPack](https://xpack.github.io) ecosystem, this project can be added
|
||||
as a development dependency to an [`xpm`](https://xpack.github.io/xpm/)
|
||||
managed project.
|
||||
|
||||
### System-wide
|
||||
|
||||
You can even install the theme system-wide by running `make install`.
|
||||
The files will be installed to `/usr/local/share/` by default,
|
||||
but you can customize the install location with `make PREFIX=/my/custom/path install`.
|
||||
|
||||
### Choosing a layout
|
||||
|
||||
There is two layout options. Choose one of them and configure Doxygen accordingly:
|
||||
|
||||
<div class="darkmode_inverted_image">
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
There are two layout options. Choose one of them and configure Doxygen accordingly:
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
- <b class="tab-title">1️⃣ Base Theme </b>
|
||||
Comes with the typical Doxygen titlebar. Optionally the treeview in the sidebar can be enabled.
|
||||
- <b class="tab-title">Base Theme</b><div class="darkmode_inverted_image">
|
||||

|
||||
</div>
|
||||
Comes with the typical Doxygen titlebar. Optionally the treeview in the sidebar can be enabled.
|
||||
|
||||
Required files: `doxygen-awesome.css`
|
||||
|
||||
|
|
@ -80,7 +141,9 @@ There is two layout options. Choose one of them and configure Doxygen accordingl
|
|||
HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5
|
||||
```
|
||||
|
||||
- <b class="tab-title">2️⃣ Sidebar-Only Theme </b>
|
||||
- <b class="tab-title">Sidebar-Only Theme</b><div class="darkmode_inverted_image">
|
||||

|
||||
</div>
|
||||
Hides the top titlebar to give more space to the content. The treeview must be enabled in order for this theme to work.
|
||||
|
||||
Required files: `doxygen-awesome.css`, `doxygen-awesome-sidebar-only.css`
|
||||
|
|
@ -98,11 +161,13 @@ There is two layout options. Choose one of them and configure Doxygen accordingl
|
|||
|
||||
</div>
|
||||
|
||||
**Caution**:
|
||||
<br>
|
||||
|
||||
@warning
|
||||
- This theme is not compatible with the `FULL_SIDEBAR = YES` option provided by Doxygen!
|
||||
- `HTML_COLORSTYLE` must be set to `LIGHT` since Doxygen 1.9.5!
|
||||
|
||||
### Further installation instructions:
|
||||
### Further installation instructions
|
||||
|
||||
- [Installing extensions](docs/extensions.md)
|
||||
- [Customizing the theme (colors, spacing, border-radius, ...)](docs/customization.md)
|
||||
|
|
@ -112,18 +177,19 @@ There is two layout options. Choose one of them and configure Doxygen accordingl
|
|||
|
||||
Tested with
|
||||
|
||||
- Chrome 110, Chrome 109 for Android, Chrome 110 for iOS
|
||||
- Safari 16, Safari for iOS 16
|
||||
- Firefox 110, Firefox 110 for Android, Firefox 109 for iOS
|
||||
- Edge 110
|
||||
- Chrome 153, Chrome 152 for Android, Chrome 141 for iOS
|
||||
- Safari 26, Safari for iOS 26
|
||||
- Firefox 155, Firefox 142 for Android, Firefox 148 for iOS
|
||||
- Edge 152
|
||||
- Opera One 135
|
||||
|
||||
|
||||
The theme does not strive to be backwards compatible to (significantly) older browser versions.
|
||||
The theme does not strive to be backward compatible with (significantly) older browser versions.
|
||||
|
||||
|
||||
## Credits
|
||||
|
||||
Thanks for all the bug reports and inspiring feedback on github!
|
||||
Thanks for all the bug reports and inspiring feedback on GitHub!
|
||||
|
||||
Special thanks to all the contributors:
|
||||
<br><br>
|
||||
|
|
@ -131,7 +197,11 @@ Special thanks to all the contributors:
|
|||
<img src="https://contrib.rocks/image?repo=jothepro/doxygen-awesome-css" />
|
||||
</a>
|
||||
|
||||
<span class="next_section_button">
|
||||
|
||||
Read Next: [Extensions](docs/extensions.md)
|
||||
</span>
|
||||
<div class="section_buttons">
|
||||
|
||||
| Read Next |
|
||||
|---------------------------------:|
|
||||
| [Extensions](docs/extensions.md) |
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -5,20 +5,22 @@
|
|||
|
||||
## CSS-Variables
|
||||
|
||||
This theme is highly customizable because a lot of things are parameterized with CSS variables.
|
||||
This theme is highly customizable because many aspects are parameterized with CSS variables.
|
||||
|
||||
Just to give you an idea on how flexible the styling is, click this button:
|
||||
To give you an idea of how flexible the styling is, click this button:
|
||||
|
||||
<div class="alter-theme-button" onclick="toggle_alternative_theme()" onkeypress="if (event.keyCode == 13) toggle_alternative_theme()" tabindex=0>Alter theme</div>
|
||||
<div class="primary-button" onclick="toggleThemeVariant()" onkeypress="if (event.keyCode == 13) toggleThemeVariant()" tabindex=0>Alter theme</div>
|
||||
|
||||
<br><hr>
|
||||
|
||||
### Setup
|
||||
|
||||
It is recommended to add your own `custom.css` and overwrite the variables there:
|
||||
It is recommended to add your own `custom.css` and override the variables there:
|
||||
```
|
||||
HTML_EXTRA_STYLESHEET = doxygen-awesome.css custom.css
|
||||
```
|
||||
|
||||
Make sure to override the variables in the correct spot. All variables should be customized where they have been defined, in the `html` tag selector:
|
||||
Make sure to override the variables in the correct place. All variables should be customized where they have been defined, in the `html` tag selector:
|
||||
|
||||
```css
|
||||
html {
|
||||
|
|
@ -26,7 +28,7 @@ html {
|
|||
}
|
||||
```
|
||||
|
||||
For dark-mode overrides you have to choose where to put them, depending on whether the dark-mode toggle extension is installed or not:
|
||||
For dark-mode overrides, you have to choose where to put them, depending on whether the dark-mode toggle extension is installed or not:
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
|
|
@ -50,7 +52,7 @@ For dark-mode overrides you have to choose where to put them, depending on wheth
|
|||
|
||||
### Available variables
|
||||
|
||||
The following list gives an overview of the variables defined in [`doxygen-awesome.css`](https://github.com/jothepro/doxygen-awesome-css/blob/main/doxygen-awesome.css).
|
||||
The following list provides an overview of the variables defined in [`doxygen-awesome.css`](https://github.com/jothepro/doxygen-awesome-css/blob/main/doxygen-awesome.css).
|
||||
|
||||
The list is not complete. To explore all available variables, have a look at the CSS starting from [here](https://github.com/jothepro/doxygen-awesome-css/blob/main/doxygen-awesome.css#L30).
|
||||
All variables are defined at the beginning of the stylesheet.
|
||||
|
|
@ -69,10 +71,11 @@ All variables are defined at the beginning of the stylesheet.
|
|||
| `--spacing-small` | `5px` | |
|
||||
| `--spacing-medium` | `10px` | |
|
||||
| `--spacing-large` | `16px` | |
|
||||
| `--spacing-xlarge` | `20px` | |
|
||||
| **Border Radius**:<br>border radius for all rounded ui components. Will affect many components, like dropdowns, memitems, codeblocks, ... |||
|
||||
| `--border-radius-small` | `4px` | |
|
||||
| `--border-radius-medium` | `6px` | |
|
||||
| `--border-radius-large` | `8px` | |
|
||||
| `--border-radius-small` | `5px` | |
|
||||
| `--border-radius-medium` | `8px` | |
|
||||
| `--border-radius-large` | `10px` | |
|
||||
| **Content Width**:<br>The content is centered and constrained in its width. To make the content fill the whole page, set the following variable to `auto`. |||
|
||||
| `--content-maxwidth` | `1000px` | |
|
||||
| **Code Fragment Colors**:<br>Color-Scheme of multiline codeblocks |||
|
||||
|
|
@ -90,11 +93,11 @@ If you miss a configuration option or find a bug, please consider [opening an is
|
|||
|
||||
The theme overrides most colors with the `--primary-color-*` variables.
|
||||
|
||||
But there is a few small images and graphics that the theme cannot adjust or replace. To make these blend in better with
|
||||
But there are a few small images and graphics that the theme cannot adjust or replace. To make these blend in better with
|
||||
the rest, it is recommended to adjust the [doxygen color settings](https://www.doxygen.nl/manual/customize.html#minor_tweaks_colors)
|
||||
to something that matches the chosen color-scheme.
|
||||
to something that matches the chosen color scheme.
|
||||
|
||||
For the default color-scheme, these values work out quite well:
|
||||
For the default color scheme, these values work out quite well:
|
||||
|
||||
```
|
||||
# Doxyfile
|
||||
|
|
@ -105,11 +108,15 @@ HTML_COLORSTYLE_GAMMA = 113
|
|||
|
||||
## Share your customizations
|
||||
|
||||
If you customized the theme with custom colors, spacings, font-sizes, etc. and you want to share your creation with others, you can to this [here](https://github.com/jothepro/doxygen-awesome-css/discussions/13).
|
||||
If you have customized the theme with custom colors, spacings, font-sizes, etc. and you want to share your creation with others, you can do this [here](https://github.com/jothepro/doxygen-awesome-css/discussions/13).
|
||||
|
||||
I am always curious to learn about how you made the theme look even better!
|
||||
|
||||
<span class="next_section_button">
|
||||
|
||||
Read Next: [Tips & Tricks](tricks.md)
|
||||
</span>
|
||||
<div class="section_buttons">
|
||||
|
||||
| Previous | Next |
|
||||
|:----------------------------|---------------------------:|
|
||||
| [Extensions](extensions.md) | [Tips & Tricks](tricks.md) |
|
||||
|
||||
</div>
|
||||
154
thirdparty/doxygen-awesome-css/docs/extensions.md
vendored
154
thirdparty/doxygen-awesome-css/docs/extensions.md
vendored
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
[TOC]
|
||||
|
||||
On top of the base theme provided by `doxygen-awesome.css`, this repository comes with Javascript extensions that require additional setup steps to get them running.
|
||||
In addition to the base theme provided by `doxygen-awesome.css`, this repository comes with JavaScript extensions that require additional setup steps to get them running.
|
||||
|
||||
The extensions require customizations in the header HTML-template.
|
||||
This is how you can create the default template with Doxygen:
|
||||
The extensions require customizations in the header HTML template.
|
||||
Here is how you can create the default template with Doxygen:
|
||||
|
||||
1. Create default header template:
|
||||
```sh
|
||||
|
|
@ -21,10 +21,12 @@ This is how you can create the default template with Doxygen:
|
|||
|
||||
## Dark Mode Toggle {#extension-dark-mode-toggle}
|
||||
|
||||
Adds a button next to the search bar to enable and disable the dark theme variant manually:
|
||||
Adds a button next to the search bar to manually enable and disable the dark theme variant:
|
||||
|
||||
<div class="darkmode_inverted_image bordered_image">
|
||||
<img width=250 src="darkmode_toggle.png" />
|
||||
|
||||
{width=250px}
|
||||
|
||||
</div>
|
||||
|
||||
### Installation
|
||||
|
|
@ -53,7 +55,7 @@ Changing the tooltip of the button:
|
|||
DoxygenAwesomeDarkModeToggle.title = "Zwischen hellem/dunklem Modus wechseln"
|
||||
```
|
||||
|
||||
Changing Icons. Both Emoji or SVG icons are supported:
|
||||
Changing icons: Both Emoji and SVG icons are supported:
|
||||
```js
|
||||
DoxygenAwesomeDarkModeToggle.lightModeIcon = '🌞'
|
||||
// icon from https://fonts.google.com/icons
|
||||
|
|
@ -62,19 +64,21 @@ DoxygenAwesomeDarkModeToggle.darkModeIcon = `<svg xmlns="http://www.w3.org/2000/
|
|||
|
||||
All customizations must be applied before calling `DoxygenAwesomeDarkModeToggle.init()`!
|
||||
|
||||
|
||||
## Fragment Copy Button {#extension-copy-button}
|
||||
|
||||
Shows a copy button when the user hovers over a code fragment:
|
||||
|
||||
<div class="darkmode_inverted_image bordered_image">
|
||||
<img width=490 src="fragment_copy_button.png"/>
|
||||
|
||||
{width=490}
|
||||
|
||||
</div>
|
||||
|
||||
### Installation
|
||||
|
||||
1. Add the required resources in your `Doxyfile`:
|
||||
- **HTML_EXTRA_FILES:** `doxygen-awesome-fragment-copy-button.js`
|
||||
- **HTML_COPY_CLIPBOARD:** `NO` required with Doxygen >= 1.10.0
|
||||
2. In the `header.html` template, include `doxygen-awesome-fragment-copy-button.js` at the end of the `<head>` and then initialize it:
|
||||
```html
|
||||
<html>
|
||||
|
|
@ -105,10 +109,12 @@ All customizations must be applied before calling `DoxygenAwesomeDarkModeToggle.
|
|||
|
||||
## Paragraph Linking {#extension-para}
|
||||
|
||||
Provides a button on hover behind every headline to allow easy creation of a permanent link to the headline:
|
||||
Provides a button that appears on hover behind every headline, allowing easy creation of a permanent link to the headline:
|
||||
|
||||
<div class="darkmode_inverted_image bordered_image">
|
||||
<img width=220 src="paragraph_link.png"/>
|
||||
|
||||
{width=220}
|
||||
|
||||
</div>
|
||||
|
||||
Works for all headlines and for many documentation section titles.
|
||||
|
|
@ -133,11 +139,13 @@ Works for all headlines and for many documentation section titles.
|
|||
### Customizing
|
||||
|
||||
The button tooltip can be changed:
|
||||
|
||||
```js
|
||||
DoxygenAwesomeParagraphLink.title = "Abschnitt verknüpfen"
|
||||
```
|
||||
|
||||
The icon of the button can be changed. Both plain characters or SVG icons are supported:
|
||||
The icon of the button can be changed. Both plain characters and SVG icons are supported:
|
||||
|
||||
```js
|
||||
DoxygenAwesomeParagraphLink.icon = "¶"
|
||||
```
|
||||
|
|
@ -146,17 +154,18 @@ All customizations must be applied before calling `DoxygenAwesomeParagraphLink.i
|
|||
|
||||
## Interactive TOC {#extension-toc}
|
||||
|
||||
On large screens the Table of Contents (TOC) is anchored on the top right of the page. This extension visualizes the reading progress by dynamically highlighting the currently active section.
|
||||
|
||||
On small screens the extension hides the TOC by default. The user can open it manually when needed:
|
||||
On large screens, the Table of Contents (TOC) is anchored at the top right of the page. This extension visualizes the reading progress by dynamically highlighting the currently active section.
|
||||
|
||||
On small screens, the extension hides the TOC by default. The user can open it manually when needed:
|
||||
|
||||
<div class="darkmode_inverted_image bordered_image">
|
||||
<img width=380 src="interactive_toc_mobile.png" />
|
||||
{width=380}
|
||||
</div>
|
||||
|
||||
### Installation
|
||||
|
||||
@note Starting from Doxygen Version 1.14.0, you have to specify `PAGE_OUTLINE_PANEL=NO` in your Doxyfile to use this extension.
|
||||
|
||||
1. Add the required resources in your `Doxyfile`:
|
||||
- **HTML_EXTRA_FILES:** `doxygen-awesome-interactive-toc.js`
|
||||
2. In the `header.html` template, include `doxygen-awesome-interactive-toc.js` at the end of the `<head>` and then initialize it:
|
||||
|
|
@ -175,30 +184,32 @@ On small screens the extension hides the TOC by default. The user can open it ma
|
|||
### Customizing
|
||||
|
||||
The offset for when a headline is considered active can be changed. A smaller value means that the headline of the section must be closer to the top of the viewport before it is highlighted in the TOC:
|
||||
|
||||
```js
|
||||
DoxygenAwesomeInteractiveToc.topOffset = 45
|
||||
```
|
||||
|
||||
Hiding the TOC on small screens can be disabled. It is still interactive and can be hidden by the user but will now be open by default:
|
||||
|
||||
```js
|
||||
DoxygenAwesomeInteractiveToc.hideMobileMenu = false
|
||||
```
|
||||
|
||||
## Tabs {#extension-tabs}
|
||||
|
||||
@note Experimental feature! Please report bugs [here](https://github.com/jothepro/doxygen-awesome-css/issues).
|
||||
|
||||
|
||||
This extension allows to arrange list content in tabs:
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
- <b class="tab-title">Tab 1</b> This is the content of tab 1
|
||||
- <b class="tab-title">Tab 2</b> This is the content of tab 2
|
||||
- <b class="tab-title">Tab 1</b>
|
||||
This is the content of tab 1
|
||||
- <b class="tab-title">Tab 2</b>
|
||||
This is the content of tab 2
|
||||
1. it has a list
|
||||
2. with multiple items
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
1. Add the required resources in your `Doxyfile`:
|
||||
|
|
@ -218,8 +229,8 @@ This extension allows to arrange list content in tabs:
|
|||
|
||||
### Usage
|
||||
|
||||
Each list that is supposed to be displayed as tabs has to be wrapped with the `tabbed` CSS class.
|
||||
Each item in the list must start with an element that has the class `tab-title`. It will then be used as tab title.
|
||||
Each list that is supposed to be displayed as tabs must be wrapped with the `tabbed` CSS class.
|
||||
Each item in the list must start with an element that has the class `tab-title`. It will then be used as the tab title.
|
||||
|
||||
```md
|
||||
<div class="tabbed">
|
||||
|
|
@ -230,7 +241,98 @@ Each item in the list must start with an element that has the class `tab-title`.
|
|||
</div>
|
||||
```
|
||||
|
||||
<span class="next_section_button">
|
||||
## Read the Docs search {#readthedocs-search}
|
||||
|
||||
Read Next: [Customization](customization.md)
|
||||
</span>
|
||||
Use search index from Read the Docs instead of the built-in doxygen search. This allows using search metrics from
|
||||
Read the Docs and in general gives a better search experience.
|
||||
|
||||
A live example is available at [doxygen-awesome-css.readthedocs.io](https://doxygen-awesome-css.readthedocs.io/).
|
||||
|
||||
### Installation
|
||||
|
||||
1. Add the required resources in your `Doxyfile`:
|
||||
- **HTML_EXTRA_FILES:** `doxygen-awesome-readthedocs-search.js`
|
||||
- **HTML_EXTRA_STYLESHEET:** `doxygen-awesome-readthedocs-search.css`
|
||||
- **SEARCHENGINE:** `YES`
|
||||
- **SERVER_BASED_SEARCH:** `YES`
|
||||
- **EXTERNAL_SEARCH:** `YES`
|
||||
- **SEARCHENGINE_URL:** `https://<your-project>.readthedocs.io/` OR
|
||||
- **SEARCHENGINE_URL:** `https://<your-custom-readthedocs-domain>/`
|
||||
|
||||
`SEARCHENGINE_URL` is only used when testing locally, otherwise the domain name is detected automatically.
|
||||
When testing locally, search may not work without disabling CORS. This can be a security risk, so it is advised to
|
||||
only test inside of Read the Docs.
|
||||
|
||||
2. In the `header.html` template, include `doxygen-awesome-readthedocs-search.js` at the end of the `<head>` and then initialize it:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
<!-- ... other metadata & script includes ... -->
|
||||
<script type="text/javascript" src="$relpath^doxygen-awesome-readthedocs-search.js"></script>
|
||||
<script type="text/javascript">
|
||||
DoxygenAwesomeReadtheDocsSearch.init()
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
```
|
||||
For the sidebar-only theme variant, initialize with left-aligned live results:
|
||||
```html
|
||||
<script type="text/javascript">
|
||||
DoxygenAwesomeReadtheDocsSearch.init('leftAlign')
|
||||
</script>
|
||||
```
|
||||
|
||||
Read the Docs provides the project and version slugs automatically. To select the Read the Docs index used when
|
||||
testing locally, provide fallback values during initialization:
|
||||
```html
|
||||
<script type="text/javascript">
|
||||
DoxygenAwesomeReadtheDocsSearch.init('leftAlign', {
|
||||
projectSlug: 'your-readthedocs-project',
|
||||
versionSlug: 'latest'
|
||||
})
|
||||
</script>
|
||||
```
|
||||
|
||||
## Page Navigation {#extension-page-navigation}
|
||||
|
||||
To allow users to easily navigate from one document to another, "Next" and "Previous" buttons can be added at the end of a Markdown document.
|
||||
|
||||
### Installation
|
||||
|
||||
The feature is included in the default `doxygen-awesome.css`. No additional stylesheets or scripts need to be added.
|
||||
|
||||
### Usage
|
||||
|
||||
The following conditions must be met for the feature to work properly:
|
||||
|
||||
- The navigation must be inside a Markdown table with 1-2 columns.
|
||||
- The alignment of the column defines the alignment of the arrow on the navigation button.
|
||||
- The table must be wrapped inside a `<div>` with the class `section_buttons`.
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
- <span class="tab-title">Code</span>
|
||||
```md
|
||||
<div class="section_buttons">
|
||||
|
||||
| Previous | Next |
|
||||
|:------------------|----------------------------------:|
|
||||
| [Home](README.md) | [Customization](customization.md) |
|
||||
|
||||
</div>
|
||||
```
|
||||
- <span class="tab-title">Result</span>
|
||||
<div class="section_buttons">
|
||||
| Previous | Next |
|
||||
|:------------------|----------------------------------:|
|
||||
| [Home](README.md) | [Customization](customization.md) |
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="section_buttons">
|
||||
|
||||
| Previous | Next |
|
||||
|:------------------|----------------------------------:|
|
||||
| [Home](README.md) | [Customization](customization.md) |
|
||||
</div>
|
||||
|
|
|
|||
BIN
thirdparty/doxygen-awesome-css/docs/img/testimage.png
vendored
Normal file
BIN
thirdparty/doxygen-awesome-css/docs/img/testimage.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
70
thirdparty/doxygen-awesome-css/docs/tricks.md
vendored
70
thirdparty/doxygen-awesome-css/docs/tricks.md
vendored
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
## Diagrams with Graphviz {#tricks-graphviz}
|
||||
|
||||
To get the best looking class diagrams for your documentation, generate them with Graphviz as vector graphics with transparent background:
|
||||
To get the best-looking class diagrams for your documentation, generate them with Graphviz as vector graphics and a transparent background:
|
||||
|
||||
```
|
||||
# Doxyfile
|
||||
|
|
@ -13,7 +13,7 @@ DOT_IMAGE_FORMAT = svg
|
|||
DOT_TRANSPARENT = YES
|
||||
```
|
||||
|
||||
In case `INTERACTIVE_SVG = YES` is set in the Doxyfile, all user-defined dotgraphs must be wrapped with the `interactive_dotgraph` CSS class in order for them to be rendered correctly:
|
||||
If `INTERACTIVE_SVG = YES` is set in the Doxyfile, all user-defined dotgraphs must be wrapped with the `interactive_dotgraph` CSS class for them to be rendered correctly:
|
||||
|
||||
```md
|
||||
<div class="interactive_dotgraph">
|
||||
|
|
@ -23,30 +23,30 @@ In case `INTERACTIVE_SVG = YES` is set in the Doxyfile, all user-defined dotgrap
|
|||
</div>
|
||||
```
|
||||
|
||||
@note Both the default overflow scrolling behavior in this theme and the interactive editor enabled by `INTERACTIVE_SVG` are unsatisfying workarounds IMHO. Consider designing your graphs to be narrow enough to fit the page to avoid scrolling.
|
||||
@note Both the default overflow scrolling behavior in this theme and the interactive editor enabled by `INTERACTIVE_SVG` are, in my opinion, unsatisfying workarounds. Consider designing your graphs to be narrow enough to fit the page to avoid scrolling.
|
||||
|
||||
## Disable Dark Mode {#tricks-darkmode}
|
||||
|
||||
If you don't want the theme to automatically switch to dark mode depending on the browser preference,
|
||||
you can disable dark mode by adding the `light-mode` class to the html-tag in the header template:
|
||||
you can disable dark mode by adding the `light-mode` class to the HTML tag in the header template:
|
||||
|
||||
```html
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" class="light-mode">
|
||||
```
|
||||
|
||||
The same can be done to always enable dark-mode:
|
||||
The same can be done to always enable dark mode:
|
||||
|
||||
```html
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" class="dark-mode">
|
||||
```
|
||||
|
||||
|
||||
@warning This only works if you don't use the dark-mode toggle extension.
|
||||
@warning This only works if you do not use the dark-mode toggle extension.
|
||||
|
||||
## Choosing Sidebar Width {#tricks-sidebar}
|
||||
|
||||
If you have enabled the sidebar-only theme variant, make sure to carefully choose a proper width for your sidebar.
|
||||
It should be wide enough to hold the icon, project title and version number. If the content is too wide, it will be
|
||||
If you have enabled the sidebar-only theme variant, make sure to carefully choose an appropriate width for your sidebar.
|
||||
It should be wide enough to hold the icon, project title, and version number. If the content is too wide, it will be
|
||||
cut off.
|
||||
|
||||
```css
|
||||
|
|
@ -65,12 +65,12 @@ TREEVIEW_WIDTH = 335
|
|||
|
||||
## Formatting Tables {#tricks-tables}
|
||||
|
||||
By default tables in this theme are left-aligned and as wide as required to fit their content.
|
||||
Those properties can be changed for individual tables.
|
||||
By default, tables in this theme are left-aligned and as wide as required to fit their content.
|
||||
These properties can be changed for individual tables.
|
||||
|
||||
### Centering
|
||||
|
||||
Tables can be centered by wrapping them in the `<center>` HTML-tag.
|
||||
Tables can be centered by wrapping them in the `<center>` HTML tag.
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ Tables can be centered by wrapping them in the `<center>` HTML-tag.
|
|||
|
||||
To make tables span the full width of the page, no matter how wide the content is, wrap the table in the `full_width_table` CSS class.
|
||||
|
||||
@warning Apply with caution! This breaks the overflow scrolling of the table. Content might be cut of on small screens!
|
||||
@warning Apply with caution! This breaks the overflow scrolling of the table. Content might be cut off on small screens!
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
|
|
@ -118,7 +118,47 @@ To make tables span the full width of the page, no matter how wide the content i
|
|||
|
||||
</div>
|
||||
|
||||
<span class="next_section_button">
|
||||
### Buttons
|
||||
|
||||
Read Next: [Example](https://jothepro.github.io/doxygen-awesome-css/class_my_library_1_1_example.html)
|
||||
</span>
|
||||
The theme comes with a custom class to add simple buttons:
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
- <span class="tab-title">Code</span>
|
||||
```md
|
||||
<div class="primary-button">Click me!</div>
|
||||
```
|
||||
- <span class="tab-title">Result</span>
|
||||
<div class="primary-button">Click me!</div>
|
||||
|
||||
</div>
|
||||
|
||||
### Bordered Images
|
||||
|
||||
The `bordered_image` class can be used to add a neat rounded border around images in the documentation. With `darkmode_inverted_image` the image is filtered to adapt to darkmode:
|
||||
|
||||
<div class="tabbed">
|
||||
|
||||
- <span class="tab-title">Code</span>
|
||||
```md
|
||||
<div class="darkmode_inverted_image bordered_image">
|
||||
|
||||
{width=250px}
|
||||
|
||||
</div>
|
||||
```
|
||||
- <span class="tab-title">Result</span>
|
||||
<div class="darkmode_inverted_image bordered_image">
|
||||
{width=250px}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="section_buttons">
|
||||
|
||||
| Previous | Next |
|
||||
|:----------------------------------|---------------------------------------:|
|
||||
| [Customization](customization.md) | [Example](https://jothepro.github.io/doxygen-awesome-css/class_my_library_1_1_example.html) |
|
||||
|
||||
</div>
|
||||
|
|
@ -1,29 +1,10 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 - 2023 jothepro
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Copyright (c) 2021 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -56,31 +37,48 @@ class DoxygenAwesomeDarkModeToggle extends HTMLElement {
|
|||
}()
|
||||
|
||||
static init() {
|
||||
$(function() {
|
||||
$(document).ready(function() {
|
||||
const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle')
|
||||
toggleButton.title = DoxygenAwesomeDarkModeToggle.title
|
||||
const toggleSelector = 'doxygen-awesome-dark-mode-toggle'
|
||||
const existingToggle = document.querySelector(toggleSelector)
|
||||
const toggleButton = existingToggle || document.createElement(toggleSelector)
|
||||
if (!existingToggle) {
|
||||
toggleButton.title = DoxygenAwesomeDarkModeToggle.title
|
||||
toggleButton.updateIcon()
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
toggleButton.updateIcon()
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
|
||||
toggleButton.updateIcon()
|
||||
})
|
||||
document.addEventListener("visibilitychange", visibilityState => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
toggleButton.updateIcon()
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
var td = document.getElementById("MSearchBox").parentNode.parentNode.insertCell();
|
||||
td.appendChild(toggleButton)
|
||||
//<!-- document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) //-->
|
||||
})
|
||||
$(window).resize(function(){
|
||||
document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
|
||||
})
|
||||
})
|
||||
document.addEventListener("visibilitychange", () => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
toggleButton.updateIcon()
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const moveToggle = () => {
|
||||
const searchBox = document.getElementById("MSearchBox")
|
||||
const toggle = document.querySelector(toggleSelector) || toggleButton
|
||||
if (searchBox && searchBox.parentNode !== toggle.parentNode) {
|
||||
searchBox.parentNode.appendChild(toggle)
|
||||
}
|
||||
}
|
||||
|
||||
const containsSearchBox = node => {
|
||||
return node.nodeType === Node.ELEMENT_NODE &&
|
||||
(node.id === "MSearchBox" || node.querySelector("#MSearchBox") !== null)
|
||||
}
|
||||
|
||||
const observer = new MutationObserver(mutations => {
|
||||
const searchBoxChanged = mutations.some(mutation =>
|
||||
[...mutation.addedNodes, ...mutation.removedNodes]
|
||||
.some(containsSearchBox)
|
||||
)
|
||||
|
||||
if (searchBoxChanged) {
|
||||
moveToggle()
|
||||
}
|
||||
})
|
||||
observer.observe(document.documentElement, { childList: true, subtree: true })
|
||||
moveToggle()
|
||||
}
|
||||
|
||||
constructor() {
|
||||
|
|
|
|||
|
|
@ -1,29 +1,10 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 - 2023 jothepro
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Copyright (c) 2022 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -33,29 +14,32 @@ class DoxygenAwesomeFragmentCopyButton extends HTMLElement {
|
|||
this.onclick=this.copyContent
|
||||
}
|
||||
static title = "Copy to clipboard"
|
||||
static copyIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>`
|
||||
static successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`
|
||||
static copyIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M23.04,10.322c0,-2.582 -2.096,-4.678 -4.678,-4.678l-6.918,-0c-2.582,-0 -4.678,2.096 -4.678,4.678c0,-0 0,8.04 0,8.04c0,2.582 2.096,4.678 4.678,4.678c0,-0 6.918,-0 6.918,-0c2.582,-0 4.678,-2.096 4.678,-4.678c0,-0 0,-8.04 0,-8.04Zm-2.438,-0l-0,8.04c-0,1.236 -1.004,2.24 -2.24,2.24l-6.918,-0c-1.236,-0 -2.239,-1.004 -2.239,-2.24l-0,-8.04c-0,-1.236 1.003,-2.24 2.239,-2.24c0,0 6.918,0 6.918,0c1.236,0 2.24,1.004 2.24,2.24Z"/><path d="M5.327,16.748c-0,0.358 -0.291,0.648 -0.649,0.648c0,0 0,0 0,0c-2.582,0 -4.678,-2.096 -4.678,-4.678c0,0 0,-8.04 0,-8.04c0,-2.582 2.096,-4.678 4.678,-4.678l6.918,0c2.168,0 3.994,1.478 4.523,3.481c0.038,0.149 0.005,0.306 -0.09,0.428c-0.094,0.121 -0.239,0.191 -0.392,0.191c-0.451,0.005 -1.057,0.005 -1.457,0.005c-0.238,0 -0.455,-0.14 -0.553,-0.357c-0.348,-0.773 -1.128,-1.31 -2.031,-1.31c-0,0 -6.918,0 -6.918,0c-1.236,0 -2.24,1.004 -2.24,2.24l0,8.04c0,1.236 1.004,2.24 2.24,2.24l0,-0c0.358,-0 0.649,0.29 0.649,0.648c-0,0.353 -0,0.789 -0,1.142Z" style="fill-opacity:0.6;"/></svg>`
|
||||
static successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M8.084,16.111c-0.09,0.09 -0.212,0.141 -0.34,0.141c-0.127,-0 -0.249,-0.051 -0.339,-0.141c-0.746,-0.746 -2.538,-2.538 -3.525,-3.525c-0.375,-0.375 -0.983,-0.375 -1.357,0c-0.178,0.178 -0.369,0.369 -0.547,0.547c-0.375,0.375 -0.375,0.982 -0,1.357c1.135,1.135 3.422,3.422 4.75,4.751c0.27,0.27 0.637,0.421 1.018,0.421c0.382,0 0.749,-0.151 1.019,-0.421c2.731,-2.732 10.166,-10.167 12.454,-12.455c0.375,-0.375 0.375,-0.982 -0,-1.357c-0.178,-0.178 -0.369,-0.369 -0.547,-0.547c-0.375,-0.375 -0.982,-0.375 -1.357,0c-2.273,2.273 -9.567,9.567 -11.229,11.229Z"/></svg>`
|
||||
static successDuration = 980
|
||||
static init() {
|
||||
$(function() {
|
||||
$(document).ready(function() {
|
||||
if(navigator.clipboard) {
|
||||
const fragments = document.getElementsByClassName("fragment")
|
||||
for(const fragment of fragments) {
|
||||
const fragmentWrapper = document.createElement("div")
|
||||
fragmentWrapper.className = "doxygen-awesome-fragment-wrapper"
|
||||
const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button")
|
||||
fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon
|
||||
fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title
|
||||
|
||||
fragment.parentNode.replaceChild(fragmentWrapper, fragment)
|
||||
fragmentWrapper.appendChild(fragment)
|
||||
fragmentWrapper.appendChild(fragmentCopyButton)
|
||||
|
||||
}
|
||||
const initCopyButtons = () => {
|
||||
if(navigator.clipboard) {
|
||||
const fragments = document.getElementsByClassName("fragment")
|
||||
for(const fragment of fragments) {
|
||||
const fragmentWrapper = document.createElement("div")
|
||||
fragmentWrapper.className = "doxygen-awesome-fragment-wrapper"
|
||||
const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button")
|
||||
fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon
|
||||
fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title
|
||||
|
||||
fragment.parentNode.replaceChild(fragmentWrapper, fragment)
|
||||
fragmentWrapper.appendChild(fragment)
|
||||
fragmentWrapper.appendChild(fragmentCopyButton)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", initCopyButtons)
|
||||
} else {
|
||||
initCopyButtons()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +1,10 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 - 2023 jothepro
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Copyright (c) 2022 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -55,9 +36,7 @@ class DoxygenAwesomeInteractiveToc {
|
|||
headerNode: document.getElementById(id)
|
||||
})
|
||||
|
||||
document.getElementById("doc-content")?.addEventListener("scroll", () => {
|
||||
DoxygenAwesomeInteractiveToc.update()
|
||||
})
|
||||
document.getElementById("doc-content")?.addEventListener("scroll",this.throttle(DoxygenAwesomeInteractiveToc.update, 100))
|
||||
})
|
||||
DoxygenAwesomeInteractiveToc.update()
|
||||
}
|
||||
|
|
@ -78,4 +57,16 @@ class DoxygenAwesomeInteractiveToc {
|
|||
active?.classList.add("active")
|
||||
active?.classList.remove("aboveActive")
|
||||
}
|
||||
}
|
||||
|
||||
static throttle(func, delay) {
|
||||
let lastCall = 0;
|
||||
return function (...args) {
|
||||
const now = new Date().getTime();
|
||||
if (now - lastCall < delay) {
|
||||
return;
|
||||
}
|
||||
lastCall = now;
|
||||
return setTimeout(() => {func(...args)}, delay);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,10 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 - 2023 jothepro
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Copyright (c) 2022 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -34,18 +15,22 @@ class DoxygenAwesomeParagraphLink {
|
|||
static icon = `<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M17 7h-4v2h4c1.65 0 3 1.35 3 3s-1.35 3-3 3h-4v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-6 8H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-2zm-3-4h8v2H8z"/></svg>`
|
||||
static title = "Permanent Link"
|
||||
static init() {
|
||||
$(function() {
|
||||
$(document).ready(function() {
|
||||
document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => {
|
||||
let anchorlink = document.createElement("a")
|
||||
anchorlink.setAttribute("href", `#${node.getAttribute("id")}`)
|
||||
anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title)
|
||||
anchorlink.classList.add("anchorlink")
|
||||
node.classList.add("anchor")
|
||||
anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon
|
||||
node.parentElement.appendChild(anchorlink)
|
||||
})
|
||||
const initParagraphLinks = () => {
|
||||
document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => {
|
||||
let anchorlink = document.createElement("a")
|
||||
anchorlink.setAttribute("href", `#${node.getAttribute("id")}`)
|
||||
anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title)
|
||||
anchorlink.classList.add("anchorlink")
|
||||
node.classList.add("anchor")
|
||||
anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon
|
||||
node.parentElement.appendChild(anchorlink)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", initParagraphLinks)
|
||||
} else {
|
||||
initParagraphLinks()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
103
thirdparty/doxygen-awesome-css/doxygen-awesome-readthedocs-search.css
vendored
Normal file
103
thirdparty/doxygen-awesome-css/doxygen-awesome-readthedocs-search.css
vendored
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/* Highlight text in search results */
|
||||
span.highlighted {
|
||||
background-color:var(--warning-color);
|
||||
color: var(--page-foreground-color);
|
||||
padding: 2px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* Remove list bullets for search results */
|
||||
ul.search {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Add horizontal divider for search results */
|
||||
ul.search li.search-result {
|
||||
border-bottom: 1px solid var(--separator-color);
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* Live search dropdown */
|
||||
#RTDLiveResults {
|
||||
margin-top: var(--spacing-small);
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 10000;
|
||||
left: unset;
|
||||
background: var(--page-background-color);
|
||||
border: 1px solid var(--separator-color);
|
||||
border-radius: var(--border-radius-large);
|
||||
box-shadow: var(--box-shadow);
|
||||
max-height: 420px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767px) {
|
||||
#RTDLiveResults {
|
||||
left: var(--spacing-medium);
|
||||
right: var(--spacing-medium);
|
||||
}
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-list li {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-item {
|
||||
display: block;
|
||||
padding: var(--spacing-small) var(--spacing-medium);
|
||||
margin: var(--spacing-small);
|
||||
border-radius: var(--border-radius-small);
|
||||
color: var(--page-foreground-color);
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-item:hover,
|
||||
#RTDLiveResults .rtd-live-item:focus {
|
||||
background: var(--menu-focus-background);
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-title {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
font-size: var(--navigation-font-size);
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-snippet {
|
||||
display: block;
|
||||
font-size: calc(var(--navigation-font-size) * 0.9);
|
||||
color: var(--page-secondary-foreground-color);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-item:hover .rtd-live-title,
|
||||
#RTDLiveResults .rtd-live-item:hover .rtd-live-snippet,
|
||||
#RTDLiveResults .rtd-live-item:focus .rtd-live-title,
|
||||
#RTDLiveResults .rtd-live-item:focus .rtd-live-snippet {
|
||||
color: var(--menu-focus-foreground);
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-snippet mark {
|
||||
background-color: var(--warning-color);
|
||||
color: var(--page-foreground-color);
|
||||
padding: 0 2px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
#RTDLiveResults .rtd-live-empty {
|
||||
padding: var(--spacing-medium);
|
||||
color: var(--page-secondary-foreground-color);
|
||||
font-size: var(--navigation-font-size);
|
||||
}
|
||||
454
thirdparty/doxygen-awesome-css/doxygen-awesome-readthedocs-search.js
vendored
Normal file
454
thirdparty/doxygen-awesome-css/doxygen-awesome-readthedocs-search.js
vendored
Normal file
|
|
@ -0,0 +1,454 @@
|
|||
class DoxygenAwesomeReadtheDocsSearch {
|
||||
static searchResultsText=[
|
||||
"Sorry, no pages matching your query.",
|
||||
"Search finished, found <b>1</b> page matching the search query.",
|
||||
"Search finished, found <b>$num</b> pages matching the search query.",
|
||||
];
|
||||
static _liveResultsAlignment = 'right';
|
||||
static _liveResultsPositionFrame = null;
|
||||
static _liveSearchAttached = false;
|
||||
static _projectSlug = 'doxygen-awesome-css';
|
||||
static _versionSlug = 'latest';
|
||||
|
||||
static get serverUrl() {
|
||||
const serverUrlSuffix = '_/api/v3/';
|
||||
const domainName = globalThis.location.hostname;
|
||||
console.log(`Domain name: ${domainName}`);
|
||||
|
||||
if (domainName === 'localhost') {
|
||||
let tmpServerUrl = serverUrl;
|
||||
while (tmpServerUrl.endsWith('/')) {
|
||||
tmpServerUrl = tmpServerUrl.slice(0, -1);
|
||||
}
|
||||
console.warn('Localhost detected, you probably need to bypass CORS');
|
||||
return `${tmpServerUrl}/${serverUrlSuffix}`;
|
||||
}
|
||||
return `https://${domainName}/${serverUrlSuffix}`;
|
||||
}
|
||||
|
||||
static init(alignment = 'rightAlign', { projectSlug = 'doxygen-awesome-css', versionSlug = 'latest' } = {}) {
|
||||
DoxygenAwesomeReadtheDocsSearch._liveResultsAlignment = alignment === 'leftAlign' ? 'left' : 'right';
|
||||
DoxygenAwesomeReadtheDocsSearch._projectSlug = projectSlug;
|
||||
DoxygenAwesomeReadtheDocsSearch._versionSlug = versionSlug;
|
||||
|
||||
const realSearchBox = globalThis.SearchBox;
|
||||
globalThis.SearchBox = function(name, resultsPath, extension) {
|
||||
if (realSearchBox) {
|
||||
realSearchBox.call(this, name, resultsPath, extension);
|
||||
}
|
||||
|
||||
this.OnSearchFieldFocus = function() {};
|
||||
|
||||
const originalClose = this.CloseResultsWindow;
|
||||
this.CloseResultsWindow = function() {
|
||||
if (originalClose) {
|
||||
originalClose.call(this);
|
||||
}
|
||||
const field = this.DOMSearchField ? this.DOMSearchField() : null;
|
||||
if (field?.id === document.activeElement?.id) {
|
||||
return;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Re-focus the search input if it is replaced in the DOM while focused.
|
||||
// On mobile, viewport resize (triggered by the OSK opening) can cause
|
||||
// menu.js resetState() to recreate the input element, losing focus.
|
||||
const observer = new MutationObserver(function() {
|
||||
const field = document.getElementById('MSearchField');
|
||||
if (field && DoxygenAwesomeReadtheDocsSearch._searchFieldHadFocus) {
|
||||
field.focus();
|
||||
}
|
||||
});
|
||||
|
||||
if (document.body) {
|
||||
observer.observe(document.body, { childList: true, subtree: true });
|
||||
DoxygenAwesomeReadtheDocsSearch._attachLiveSearch();
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
observer.observe(document.body, { childList: true, subtree: true });
|
||||
DoxygenAwesomeReadtheDocsSearch._attachLiveSearch();
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener('focusin', function(e) {
|
||||
if (e.target?.id === 'MSearchField') {
|
||||
DoxygenAwesomeReadtheDocsSearch._searchFieldHadFocus = true;
|
||||
}
|
||||
});
|
||||
document.addEventListener('focusout', function(e) {
|
||||
if (e.target?.id === 'MSearchField') {
|
||||
setTimeout(function() {
|
||||
DoxygenAwesomeReadtheDocsSearch._searchFieldHadFocus = false;
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
const dropdown = document.getElementById('RTDLiveResults');
|
||||
const field = document.getElementById('MSearchField');
|
||||
if (dropdown && !dropdown.contains(e.target) && e.target !== field) {
|
||||
DoxygenAwesomeReadtheDocsSearch._hideLiveResults();
|
||||
}
|
||||
});
|
||||
|
||||
globalThis.searchFor = function(query, page, count) {
|
||||
const results = document.getElementById('searchresults');
|
||||
|
||||
// Get the title
|
||||
const pageTitle = document.querySelector('div.title');
|
||||
const originalTitle = pageTitle ? pageTitle.textContent : '';
|
||||
let pageTitleStates = ["Searching", "Searching .", "Searching ..", "Searching ..."];
|
||||
let pageTitleIndex = 0;
|
||||
|
||||
// Function to update the page title
|
||||
function updatePageTitle() {
|
||||
if (pageTitle) pageTitle.textContent = pageTitleStates[pageTitleIndex];
|
||||
pageTitleIndex = (pageTitleIndex + 1) % pageTitleStates.length;
|
||||
}
|
||||
|
||||
// Start the interval to update the page title
|
||||
let titleInterval = setInterval(updatePageTitle, 500);
|
||||
|
||||
// The summary will be displayed at the top of the search results
|
||||
let resultSummary = document.createElement('p');
|
||||
resultSummary.className = 'search-summary';
|
||||
results.appendChild(resultSummary);
|
||||
|
||||
// Put all results into an unordered list
|
||||
let resultList = document.createElement('ul');
|
||||
resultList.className = 'search';
|
||||
results.appendChild(resultList);
|
||||
|
||||
// readthedocs metadata
|
||||
const projectSlug = DoxygenAwesomeReadtheDocsSearch.projectSlug;
|
||||
const projectVersion = DoxygenAwesomeReadtheDocsSearch.versionSlug;
|
||||
|
||||
const ctx = {
|
||||
query, resultSummary, resultList, titleInterval, pageTitle, originalTitle, firstUrl: true
|
||||
};
|
||||
|
||||
// pull requests are not indexed, so use the default version
|
||||
const versionReady = /^\d+$/.test(projectVersion)
|
||||
? DoxygenAwesomeReadtheDocsSearch.getReadTheDocsDefaultVersion(projectSlug)
|
||||
: Promise.resolve(projectVersion);
|
||||
|
||||
versionReady.then(function(resolvedVersion) {
|
||||
const url = `${DoxygenAwesomeReadtheDocsSearch.serverUrl}search/?q=project:${projectSlug}/${resolvedVersion}+${query}&page=${page + 1}&page_size=${count}`;
|
||||
console.log(url);
|
||||
DoxygenAwesomeReadtheDocsSearch.fetchResults(url, ctx);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static _attachLiveSearch() {
|
||||
if (DoxygenAwesomeReadtheDocsSearch._liveSearchAttached) return;
|
||||
DoxygenAwesomeReadtheDocsSearch._liveSearchAttached = true;
|
||||
|
||||
let debounceTimer = null;
|
||||
|
||||
function onInput() {
|
||||
clearTimeout(debounceTimer);
|
||||
const field = document.getElementById('MSearchField');
|
||||
if (!field) return;
|
||||
const query = field.value.trim();
|
||||
if (!query) {
|
||||
DoxygenAwesomeReadtheDocsSearch._hideLiveResults();
|
||||
return;
|
||||
}
|
||||
debounceTimer = setTimeout(function() {
|
||||
DoxygenAwesomeReadtheDocsSearch._runLiveSearch(query);
|
||||
}, 300);
|
||||
}
|
||||
|
||||
function attachToField() {
|
||||
const field = document.getElementById('MSearchField');
|
||||
if (!field || field._rtdLiveSearchAttached) return;
|
||||
field._rtdLiveSearchAttached = true;
|
||||
field.setAttribute('autocomplete', 'off');
|
||||
field.addEventListener('input', onInput);
|
||||
field.addEventListener('keydown', DoxygenAwesomeReadtheDocsSearch._handleLiveSearchKeydown);
|
||||
DoxygenAwesomeReadtheDocsSearch._scheduleLiveResultsPositionUpdate();
|
||||
}
|
||||
|
||||
attachToField();
|
||||
|
||||
// Re-attach when the DOM changes (e.g. menu.js recreates the field on mobile)
|
||||
const fieldObserver = new MutationObserver(attachToField);
|
||||
fieldObserver.observe(document.body, { childList: true, subtree: true });
|
||||
|
||||
window.addEventListener('resize', DoxygenAwesomeReadtheDocsSearch._scheduleLiveResultsPositionUpdate);
|
||||
}
|
||||
|
||||
static _runLiveSearch(query) {
|
||||
const projectSlug = DoxygenAwesomeReadtheDocsSearch.projectSlug;
|
||||
const projectVersion = DoxygenAwesomeReadtheDocsSearch.versionSlug;
|
||||
|
||||
const versionReady = /^\d+$/.test(projectVersion)
|
||||
? DoxygenAwesomeReadtheDocsSearch.getReadTheDocsDefaultVersion(projectSlug)
|
||||
: Promise.resolve(projectVersion);
|
||||
|
||||
versionReady.then(function(resolvedVersion) {
|
||||
const url = `${DoxygenAwesomeReadtheDocsSearch.serverUrl}search/?q=project:${projectSlug}/${resolvedVersion}+${query}&page=1&page_size=5`;
|
||||
fetch(url)
|
||||
.then(function(response) {
|
||||
if (!response.ok) throw new Error(response.statusText);
|
||||
return response.json();
|
||||
})
|
||||
.then(function(data) {
|
||||
DoxygenAwesomeReadtheDocsSearch._showLiveResults(query, data.results || []);
|
||||
})
|
||||
.catch(function() {
|
||||
DoxygenAwesomeReadtheDocsSearch._hideLiveResults();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static _showLiveResults(query, results) {
|
||||
let dropdown = document.getElementById('RTDLiveResults');
|
||||
if (!dropdown) {
|
||||
dropdown = document.createElement('div');
|
||||
dropdown.id = 'RTDLiveResults';
|
||||
dropdown.addEventListener('keydown', DoxygenAwesomeReadtheDocsSearch._handleLiveSearchKeydown);
|
||||
document.body.appendChild(dropdown);
|
||||
}
|
||||
|
||||
dropdown.innerHTML = '';
|
||||
|
||||
if (results.length === 0) {
|
||||
const empty = document.createElement('div');
|
||||
empty.className = 'rtd-live-empty';
|
||||
empty.textContent = 'No results found.';
|
||||
dropdown.appendChild(empty);
|
||||
} else {
|
||||
const list = document.createElement('ul');
|
||||
list.className = 'rtd-live-list';
|
||||
for (const item of results) {
|
||||
const li = document.createElement('li');
|
||||
const a = document.createElement('a');
|
||||
a.className = 'rtd-live-item';
|
||||
a.href = `${item.domain}${item.path}`;
|
||||
a.tabIndex = 0;
|
||||
|
||||
const title = document.createElement('span');
|
||||
title.className = 'rtd-live-title';
|
||||
title.textContent = item.title;
|
||||
a.appendChild(title);
|
||||
|
||||
if (item.blocks && item.blocks.length > 0) {
|
||||
const snippet = document.createElement('span');
|
||||
snippet.className = 'rtd-live-snippet';
|
||||
let snipHtml = item.blocks[0].highlights.content.join(' … ');
|
||||
snipHtml = snipHtml.replaceAll(/<span>(.*?)<\/span>/g, '<mark>$1</mark>');
|
||||
snippet.innerHTML = snipHtml;
|
||||
a.appendChild(snippet);
|
||||
}
|
||||
|
||||
li.appendChild(a);
|
||||
list.appendChild(li);
|
||||
}
|
||||
dropdown.appendChild(list);
|
||||
}
|
||||
|
||||
DoxygenAwesomeReadtheDocsSearch._positionLiveResults(dropdown);
|
||||
dropdown.style.display = 'block';
|
||||
}
|
||||
|
||||
static _positionLiveResults(dropdown) {
|
||||
const field = document.getElementById('MSearchField');
|
||||
const box = document.getElementById('MSearchBox');
|
||||
const anchor = box || field;
|
||||
if (!anchor) return;
|
||||
const rect = anchor.getBoundingClientRect();
|
||||
const scrollX = window.scrollX;
|
||||
const scrollY = window.scrollY;
|
||||
const viewportWidth = document.documentElement.clientWidth;
|
||||
dropdown.style.top = `${rect.bottom + scrollY}px`;
|
||||
|
||||
if (window.matchMedia('(max-width: 767px)').matches) {
|
||||
dropdown.style.left = '';
|
||||
dropdown.style.right = '';
|
||||
dropdown.style.minWidth = '';
|
||||
return;
|
||||
}
|
||||
|
||||
dropdown.style.minWidth = `${Math.max(rect.width, 260)}px`;
|
||||
if (DoxygenAwesomeReadtheDocsSearch._liveResultsAlignment === 'left') {
|
||||
dropdown.style.left = `${rect.left + scrollX}px`;
|
||||
dropdown.style.right = '';
|
||||
} else {
|
||||
dropdown.style.left = '';
|
||||
dropdown.style.right = `${viewportWidth - rect.right}px`;
|
||||
}
|
||||
}
|
||||
|
||||
static _hideLiveResults(restoreFocus = false) {
|
||||
const dropdown = document.getElementById('RTDLiveResults');
|
||||
if (dropdown) {
|
||||
dropdown.style.display = 'none';
|
||||
}
|
||||
if (restoreFocus) {
|
||||
const field = document.getElementById('MSearchField');
|
||||
if (field) field.focus();
|
||||
}
|
||||
}
|
||||
|
||||
static _scheduleLiveResultsPositionUpdate() {
|
||||
if (DoxygenAwesomeReadtheDocsSearch._liveResultsPositionFrame) return;
|
||||
DoxygenAwesomeReadtheDocsSearch._liveResultsPositionFrame = window.requestAnimationFrame(function() {
|
||||
DoxygenAwesomeReadtheDocsSearch._liveResultsPositionFrame = null;
|
||||
DoxygenAwesomeReadtheDocsSearch._updateLiveResultsPosition();
|
||||
});
|
||||
}
|
||||
|
||||
static _updateLiveResultsPosition() {
|
||||
const dropdown = document.getElementById('RTDLiveResults');
|
||||
if (!dropdown || dropdown.style.display === 'none') return;
|
||||
DoxygenAwesomeReadtheDocsSearch._positionLiveResults(dropdown);
|
||||
}
|
||||
|
||||
static _handleLiveSearchKeydown(e) {
|
||||
if (e.key === 'Escape') {
|
||||
DoxygenAwesomeReadtheDocsSearch._hideLiveResults(true);
|
||||
} else if (e.key === 'ArrowDown') {
|
||||
e.preventDefault();
|
||||
DoxygenAwesomeReadtheDocsSearch._moveLiveResultFocus(1);
|
||||
} else if (e.key === 'ArrowUp') {
|
||||
e.preventDefault();
|
||||
DoxygenAwesomeReadtheDocsSearch._moveLiveResultFocus(-1);
|
||||
} else if (e.key === 'Enter') {
|
||||
const focused = document.querySelector('#RTDLiveResults .rtd-live-item:focus');
|
||||
if (focused) {
|
||||
e.preventDefault();
|
||||
focused.click();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static _moveLiveResultFocus(direction) {
|
||||
const dropdown = document.getElementById('RTDLiveResults');
|
||||
if (!dropdown || dropdown.style.display === 'none') return;
|
||||
const items = Array.from(dropdown.querySelectorAll('.rtd-live-item'));
|
||||
if (items.length === 0) return;
|
||||
const current = document.activeElement;
|
||||
const idx = items.indexOf(current);
|
||||
let next;
|
||||
if (idx === -1) {
|
||||
next = direction > 0 ? items[0] : items.at(-1);
|
||||
} else {
|
||||
next = items[idx + direction];
|
||||
}
|
||||
if (next) next.focus();
|
||||
}
|
||||
|
||||
static fetchResults(url, ctx) {
|
||||
fetch(url)
|
||||
.then(function(response) {
|
||||
if (!response.ok) throw new Error(response.statusText);
|
||||
return response.json();
|
||||
})
|
||||
.then(function(data) {
|
||||
// Add the query to the search field
|
||||
// This seems only be working if applied in the fetch success handler...
|
||||
// maybe the field is not available before this point
|
||||
const searchField = document.getElementById('MSearchField');
|
||||
if (searchField) searchField.value = ctx.query;
|
||||
|
||||
if (ctx.firstUrl) {
|
||||
if (data.count === 1) {
|
||||
ctx.resultSummary.innerHTML = DoxygenAwesomeReadtheDocsSearch.searchResultsText[1];
|
||||
} else if (data.count > 1) {
|
||||
ctx.resultSummary.innerHTML = DoxygenAwesomeReadtheDocsSearch.searchResultsText[2].replace(/\$num/, data.count);
|
||||
} else {
|
||||
ctx.resultSummary.innerHTML = DoxygenAwesomeReadtheDocsSearch.searchResultsText[0];
|
||||
}
|
||||
ctx.firstUrl = false;
|
||||
}
|
||||
|
||||
data.results.forEach(function(item) {
|
||||
DoxygenAwesomeReadtheDocsSearch.appendResultItem(ctx.resultList, item);
|
||||
});
|
||||
|
||||
if (data.next) {
|
||||
DoxygenAwesomeReadtheDocsSearch.fetchResults(data.next, ctx);
|
||||
} else {
|
||||
// Clear the interval when the search is complete
|
||||
clearInterval(ctx.titleInterval);
|
||||
if (ctx.pageTitle) ctx.pageTitle.textContent = ctx.originalTitle;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static appendResultItem(resultList, item) {
|
||||
const resultItem = document.createElement('li');
|
||||
resultItem.className = 'search-result';
|
||||
const resultItemUrl = `${item.domain}${item.path}`;
|
||||
const resultItemTitleLink = document.createElement('a');
|
||||
const resultItemTitleHeading = document.createElement('h3');
|
||||
resultItemTitleHeading.appendChild(resultItemTitleLink);
|
||||
resultItemTitleLink.href = resultItemUrl;
|
||||
resultItemTitleLink.textContent = item.title;
|
||||
resultItem.append(resultItemTitleHeading);
|
||||
resultList.append(resultItem);
|
||||
|
||||
const resultItemParagraph = document.createElement('p');
|
||||
resultItemParagraph.className = 'context';
|
||||
for (const block of item.blocks) {
|
||||
let blockContent = block.highlights.content.join(', ');
|
||||
blockContent = blockContent.replaceAll(/<span>(.*?)<\/span>/g, '<span class="highlighted">$1</span>');
|
||||
resultItemParagraph.innerHTML += blockContent;
|
||||
|
||||
const blockName = `#${block.title.toLowerCase().replaceAll(' ', '-')}`;
|
||||
const blockUrl = resultItemUrl + blockName;
|
||||
const blockLink = document.createElement('a');
|
||||
blockLink.href = blockUrl;
|
||||
blockLink.textContent = "More...";
|
||||
resultItemParagraph.append(document.createTextNode(' '));
|
||||
resultItemParagraph.append(blockLink);
|
||||
resultItemParagraph.append(document.createElement('br'));
|
||||
}
|
||||
resultItem.append(resultItemParagraph);
|
||||
}
|
||||
|
||||
// Function to extract the value of a specified Read the Docs meta property
|
||||
static getMetaValue(propertyName) {
|
||||
const metaTags = document.getElementsByTagName('meta');
|
||||
|
||||
for (let meta of metaTags) {
|
||||
if (meta.name === propertyName) {
|
||||
return meta.content;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
static get projectSlug() {
|
||||
return DoxygenAwesomeReadtheDocsSearch.getMetaValue("readthedocs-project-slug") ||
|
||||
DoxygenAwesomeReadtheDocsSearch._projectSlug;
|
||||
}
|
||||
|
||||
static get versionSlug() {
|
||||
return DoxygenAwesomeReadtheDocsSearch.getMetaValue("readthedocs-version-slug") ||
|
||||
DoxygenAwesomeReadtheDocsSearch._versionSlug;
|
||||
}
|
||||
|
||||
static getReadTheDocsDefaultVersion(project) {
|
||||
console.log('Pull request detected, getting default version from ReadTheDocs API');
|
||||
const url = `${DoxygenAwesomeReadtheDocsSearch.serverUrl}projects/${project}/`;
|
||||
return fetch(url)
|
||||
.then(function(response) {
|
||||
if (!response.ok) throw new Error(response.statusText);
|
||||
return response.json();
|
||||
})
|
||||
.then(function(data) {
|
||||
console.log(data);
|
||||
return data.default_version || 'latest';
|
||||
})
|
||||
.catch(function(err) {
|
||||
console.error('Error:', err);
|
||||
console.log(`Cannot determine default version for ${project}, assuming "latest"`);
|
||||
return 'latest';
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,40 +1,20 @@
|
|||
|
||||
/* SPDX-License-Identifier: MIT */
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 - 2023 jothepro
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Copyright (c) 2021 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
|
||||
#MSearchBox {
|
||||
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 20px);
|
||||
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px);
|
||||
}
|
||||
|
||||
#MSearchField {
|
||||
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 76px - var(--searchbar-height));
|
||||
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,43 +1,23 @@
|
|||
/* SPDX-License-Identifier: MIT */
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 - 2023 jothepro
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Copyright (c) 2021 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
html {
|
||||
html {
|
||||
/* side nav width. MUST be = `TREEVIEW_WIDTH`.
|
||||
* Make sure it is wide enough to contain the page title (logo + title + version)
|
||||
*/
|
||||
--side-nav-fixed-width: 350px;
|
||||
--side-nav-fixed-width: 335px;
|
||||
--menu-display: none;
|
||||
|
||||
--top-height: 0px;
|
||||
--toc-sticky-top: -90px;
|
||||
--top-height: 120px;
|
||||
--toc-sticky-top: -25px;
|
||||
--toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#projectname {
|
||||
|
|
@ -61,8 +41,15 @@ SOFTWARE.
|
|||
height: calc(100vh - var(--top-height)) !important;
|
||||
}
|
||||
|
||||
#nav-tree {
|
||||
padding: 0;
|
||||
#top {
|
||||
display: block;
|
||||
border-bottom: none;
|
||||
height: var(--top-height);
|
||||
margin-bottom: calc(0px - var(--top-height));
|
||||
max-width: var(--side-nav-fixed-width);
|
||||
overflow: hidden;
|
||||
background: var(--side-nav-background);
|
||||
border-right: 1px solid var(--separator-color);
|
||||
}
|
||||
|
||||
#main-nav {
|
||||
|
|
@ -71,15 +58,17 @@ SOFTWARE.
|
|||
}
|
||||
|
||||
.ui-resizable-handle {
|
||||
cursor: default;
|
||||
width: 1px !important;
|
||||
box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color);
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui-resizable-e {
|
||||
width: 0;
|
||||
}
|
||||
|
||||
#nav-path {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
left: var(--side-nav-fixed-width);
|
||||
left: calc(var(--side-nav-fixed-width) + 1px);
|
||||
bottom: 0;
|
||||
width: auto;
|
||||
}
|
||||
|
|
@ -104,4 +93,14 @@ SOFTWARE.
|
|||
left: var(--spacing-medium) !important;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
#nav-sync {
|
||||
bottom: 4px;
|
||||
right: auto;
|
||||
left: 300px;
|
||||
width: 35px;
|
||||
top: auto !important;
|
||||
user-select: none;
|
||||
position: fixed
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,10 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 jothepro
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Copyright (c) 2023 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
|
|
@ -32,15 +13,16 @@ class DoxygenAwesomeTabs {
|
|||
static init() {
|
||||
window.addEventListener("load", () => {
|
||||
document.querySelectorAll(".tabbed:not(:empty)").forEach((tabbed, tabbedIndex) => {
|
||||
let tabLinkList = []
|
||||
tabbed.querySelectorAll("li").forEach((tab, tabIndex) => {
|
||||
let tabLinkList = []
|
||||
tabbed.querySelectorAll(":scope > ul > li").forEach((tab, tabIndex) => {
|
||||
tab.id = "tab_" + tabbedIndex + "_" + tabIndex
|
||||
let header = tab.querySelector(".tab-title")
|
||||
let tabLink = document.createElement("button")
|
||||
tabLink.classList.add("tab-button")
|
||||
tabLink.appendChild(header)
|
||||
header.title = header.textContent
|
||||
tabLink.addEventListener("click", () => {
|
||||
tabbed.querySelectorAll("li").forEach((tab) => {
|
||||
tabbed.querySelectorAll(":scope > ul > li").forEach((tab) => {
|
||||
tab.classList.remove("selected")
|
||||
})
|
||||
tabLinkList.forEach((tabLink) => {
|
||||
|
|
@ -64,7 +46,26 @@ class DoxygenAwesomeTabs {
|
|||
})
|
||||
tabsOverviewContainer.appendChild(tabsOverview)
|
||||
tabbed.before(tabsOverviewContainer)
|
||||
|
||||
function resize() {
|
||||
let maxTabHeight = 0
|
||||
tabbed.querySelectorAll(":scope > ul > li").forEach((tab, tabIndex) => {
|
||||
let visibility = tab.style.display
|
||||
tab.style.display = "block"
|
||||
maxTabHeight = Math.max(tab.offsetHeight, maxTabHeight)
|
||||
tab.style.display = visibility
|
||||
})
|
||||
tabbed.style.height = `${maxTabHeight + 10}px`
|
||||
}
|
||||
|
||||
resize()
|
||||
new ResizeObserver(resize).observe(tabbed)
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
static resize(tabbed) {
|
||||
|
||||
}
|
||||
}
|
||||
827
thirdparty/doxygen-awesome-css/doxygen-awesome.css
vendored
827
thirdparty/doxygen-awesome-css/doxygen-awesome.css
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -15,81 +15,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.alter-theme-button {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
background: var(--primary-color);
|
||||
color: var(--page-background-color) !important;
|
||||
border-radius: var(--border-radius-medium);
|
||||
padding: var(--spacing-small) var(--spacing-medium);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.next_section_button {
|
||||
display: block;
|
||||
padding: var(--spacing-large) 0 var(--spacing-small) 0;
|
||||
color: var(--page-background-color);
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.next_section_button::after {
|
||||
/* clearfix */
|
||||
content: "";
|
||||
clear: both;
|
||||
display: table;
|
||||
}
|
||||
|
||||
.next_section_button a {
|
||||
overflow: hidden;
|
||||
float: right;
|
||||
border: 1px solid var(--separator-color);
|
||||
padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large);
|
||||
border-radius: var(--border-radius-medium);
|
||||
color: var(--page-secondary-foreground-color) !important;
|
||||
text-decoration: none;
|
||||
background-color: var(--page-background-color);
|
||||
transition: color .08s ease-in-out, background-color .1s ease-in-out;
|
||||
}
|
||||
|
||||
.next_section_button a:hover {
|
||||
color: var(--page-foreground-color) !important;
|
||||
background-color: var(--odd-color);
|
||||
}
|
||||
|
||||
.next_section_button a::after {
|
||||
content: '〉';
|
||||
color: var(--page-secondary-foreground-color) !important;
|
||||
padding-left: var(--spacing-large);
|
||||
display: inline-block;
|
||||
transition: color .08s ease-in-out, transform .09s ease-in-out;
|
||||
}
|
||||
|
||||
.next_section_button a:hover::after {
|
||||
color: var(--page-foreground-color) !important;
|
||||
transform: translateX(3px);
|
||||
}
|
||||
|
||||
.alter-theme-button:hover {
|
||||
background: var(--primary-dark-color);
|
||||
}
|
||||
|
||||
html.dark-mode .darkmode_inverted_image img, /* < doxygen 1.9.3 */
|
||||
html.dark-mode .darkmode_inverted_image object[type="image/svg+xml"] /* doxygen 1.9.3 */ {
|
||||
filter: brightness(89%) hue-rotate(180deg) invert();
|
||||
}
|
||||
|
||||
.bordered_image {
|
||||
border-radius: var(--border-radius-small);
|
||||
border: 1px solid var(--separator-color);
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
html.dark-mode .bordered_image img, /* < doxygen 1.9.3 */
|
||||
html.dark-mode .bordered_image object[type="image/svg+xml"] /* doxygen 1.9.3 */ {
|
||||
border-radius: var(--border-radius-small);
|
||||
}
|
||||
|
||||
.title_screenshot {
|
||||
filter: drop-shadow(0px 3px 10px rgba(0,0,0,0.22));
|
||||
max-width: 500px;
|
||||
|
|
@ -99,3 +24,106 @@ html.dark-mode .bordered_image object[type="image/svg+xml"] /* doxygen 1.9.3 */
|
|||
.title_screenshot .caption {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#theme-selection {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background: var(--side-nav-background);
|
||||
padding: 5px 2px 5px 8px;
|
||||
box-shadow: 0 -4px 4px -2px var(--side-nav-background);
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#theme-selection label {
|
||||
border: 1px solid var(--separator-color);
|
||||
border-right: 0;
|
||||
color: var(--page-foreground-color);
|
||||
font-size: var(--toc-font-size);
|
||||
padding: 0 8px;
|
||||
display: inline-block;
|
||||
height: 22px;
|
||||
box-sizing: border-box;
|
||||
border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium);
|
||||
line-height: 20px;
|
||||
background: var(--page-background-color);
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html:not(.light-mode) #theme-select {
|
||||
background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='%23aaaaaa'><polygon points='0,0 100,0 50,50'/></svg>") no-repeat;
|
||||
background-size: 8px;
|
||||
background-position: calc(100% - 6px) 65%;
|
||||
background-color: var(--page-background-color);
|
||||
}
|
||||
}
|
||||
|
||||
html.dark-mode #theme-select {
|
||||
background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='%23aaaaaa'><polygon points='0,0 100,0 50,50'/></svg>") no-repeat;
|
||||
background-size: 8px;
|
||||
background-position: calc(100% - 6px) 65%;
|
||||
background-color: var(--page-background-color);
|
||||
}
|
||||
|
||||
#theme-select {
|
||||
border: 1px solid var(--separator-color);
|
||||
border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0;
|
||||
padding: 0;
|
||||
height: 22px;
|
||||
font-size: var(--toc-font-size);
|
||||
font-family: var(--font-family);
|
||||
width: 215px;
|
||||
color: var(--primary-color);
|
||||
border-left: 0;
|
||||
display: inline-block;
|
||||
opacity: 0.7;
|
||||
outline: none;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='%23888888'><polygon points='0,0 100,0 50,50'/></svg>") no-repeat;
|
||||
background-size: 8px;
|
||||
background-position: calc(100% - 6px) 65%;
|
||||
background-repeat: no-repeat;
|
||||
background-color: var(--page-background-color);
|
||||
}
|
||||
|
||||
#theme-selection:hover #theme-select, #theme-selection:hover label {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#nav-tree-contents {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767px) {
|
||||
#theme-selection {
|
||||
box-shadow: none;
|
||||
background: none;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
#theme-select {
|
||||
width: 80px;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#theme-selection label {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#nav-path ul li.navelem:first-child {
|
||||
margin-left: 160px;
|
||||
}
|
||||
|
||||
ul li.footer:not(:first-child) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#nav-path {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
background: var(--page-background-color);
|
||||
}
|
||||
}
|
||||
|
|
@ -23,8 +23,12 @@
|
|||
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
|
||||
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<link rel="icon" type="image/svg+xml" href="logo.drawio.svg"/>
|
||||
<script type="text/javascript" src="$relpath^jquery.js"></script>
|
||||
<!--BEGIN HTML_DYNAMIC_SECTIONS-->
|
||||
<script type="text/javascript" src="$relpath^dynsections.js"></script>
|
||||
<!--END HTML_DYNAMIC_SECTIONS-->
|
||||
<!--BEGIN HTML_CODE_FOLDING-->
|
||||
<script type="text/javascript" src="$relpath^codefolding.js"></script>
|
||||
<!--END HTML_CODE_FOLDING-->
|
||||
<script type="text/javascript" src="$relpath^doxygen-awesome-darkmode-toggle.js"></script>
|
||||
<script type="text/javascript" src="$relpath^doxygen-awesome-fragment-copy-button.js"></script>
|
||||
<script type="text/javascript" src="$relpath^doxygen-awesome-paragraph-link.js"></script>
|
||||
|
|
@ -47,7 +51,7 @@ $extrastylesheet
|
|||
<body>
|
||||
|
||||
<!-- https://tholman.com/github-corners/ -->
|
||||
<a href="https://github.com/jothepro/doxygen-awesome-css" class="github-corner" title="View source on GitHub" target="_blank">
|
||||
<a href="https://github.com/jothepro/doxygen-awesome-css" class="github-corner" title="View source on GitHub" target="_blank" rel="noopener noreferrer">
|
||||
<svg viewBox="0 0 250 250" width="40" height="40" style="position: absolute; top: 0; border: 0; right: 0; z-index: 99;" aria-hidden="true">
|
||||
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
|
||||
|
||||
|
|
@ -85,6 +89,14 @@ $extrastylesheet
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="theme-selection">
|
||||
<label for="theme-select">Theme:</label>
|
||||
<select id="theme-select">
|
||||
<option value="theme-default">Default</option>
|
||||
<option value="theme-round">Round</option>
|
||||
<option value="theme-robot">Robot</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<!--END TITLEAREA-->
|
||||
<!-- end header part -->
|
||||
|
|
|
|||
62
thirdparty/doxygen-awesome-css/doxygen-custom/theme-robot.css
vendored
Normal file
62
thirdparty/doxygen-awesome-css/doxygen-custom/theme-robot.css
vendored
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
html.theme-robot {
|
||||
/* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */
|
||||
--primary-color: #1c89a4;
|
||||
--primary-dark-color: #1a6f84;
|
||||
--primary-light-color: #5abcd4;
|
||||
--primary-lighter-color: #cae1f1;
|
||||
--primary-lightest-color: #e9f1f8;
|
||||
|
||||
--fragment-background: #ececec;
|
||||
--code-background: #ececec;
|
||||
|
||||
/* page base colors */
|
||||
--page-background-color: white;
|
||||
--page-foreground-color: #2c3e50;
|
||||
--page-secondary-foreground-color: #67727e;
|
||||
|
||||
|
||||
--border-radius-large: 0px;
|
||||
--border-radius-small: 0px;
|
||||
--border-radius-medium: 0px;
|
||||
|
||||
--spacing-small: 3px;
|
||||
--spacing-medium: 6px;
|
||||
--spacing-large: 12px;
|
||||
|
||||
--top-height: 125px;
|
||||
|
||||
--side-nav-background: var(--page-background-color);
|
||||
--side-nav-foreground: var(--page-foreground-color);
|
||||
--header-foreground: var(--side-nav-foreground);
|
||||
--searchbar-border-radius: var(--border-radius-medium);
|
||||
--header-background: var(--side-nav-background);
|
||||
--header-foreground: var(--side-nav-foreground);
|
||||
|
||||
--toc-background: rgb(243, 240, 252);
|
||||
--toc-foreground: var(--page-foreground-color);
|
||||
|
||||
--font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
|
||||
--page-font-size: 14px;
|
||||
--box-shadow: none;
|
||||
--separator-color: #cdcdcd;
|
||||
}
|
||||
|
||||
html.theme-robot.dark-mode {
|
||||
color-scheme: dark;
|
||||
|
||||
--primary-color: #49cad3;
|
||||
--primary-dark-color: #8ed2d7;
|
||||
--primary-light-color: #377479;
|
||||
--primary-lighter-color: #191e21;
|
||||
--primary-lightest-color: #191a1c;
|
||||
|
||||
--fragment-background: #000000;
|
||||
--code-background: #000000;
|
||||
|
||||
--page-background-color: #161616;
|
||||
--page-foreground-color: #d2dbde;
|
||||
--page-secondary-foreground-color: #555555;
|
||||
--separator-color: #545454;
|
||||
--toc-background: #20142C;
|
||||
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
html.alternative {
|
||||
html.theme-round {
|
||||
/* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */
|
||||
--primary-color: #AF7FE4;
|
||||
--primary-dark-color: #9270E4;
|
||||
--primary-light-color: #7aabd6;
|
||||
--primary-light-color: #d2b7ef;
|
||||
--primary-lighter-color: #cae1f1;
|
||||
--primary-lightest-color: #e9f1f8;
|
||||
|
||||
|
|
@ -18,6 +18,7 @@ html.alternative {
|
|||
--spacing-small: 8px;
|
||||
--spacing-medium: 14px;
|
||||
--spacing-large: 19px;
|
||||
--spacing-xlarge: 21px;
|
||||
|
||||
--top-height: 125px;
|
||||
|
||||
|
|
@ -33,12 +34,12 @@ html.alternative {
|
|||
--toc-foreground: var(--page-foreground-color);
|
||||
}
|
||||
|
||||
html.alternative.dark-mode {
|
||||
html.theme-round.dark-mode {
|
||||
color-scheme: dark;
|
||||
|
||||
--primary-color: #AF7FE4;
|
||||
--primary-dark-color: #9270E4;
|
||||
--primary-light-color: #4779ac;
|
||||
--primary-dark-color: #715292;
|
||||
--primary-light-color: #ae97c7;
|
||||
--primary-lighter-color: #191e21;
|
||||
--primary-lightest-color: #191a1c;
|
||||
|
||||
|
|
@ -1,12 +1,52 @@
|
|||
// Toggle zwischen drei Theme-Zuständen und speichere im localStorage
|
||||
const THEME_CLASSES = ['theme-default', 'theme-round', 'theme-robot'];
|
||||
// Ermögliche das Umschalten per Button/Funktion (z.B. für onclick im HTML)
|
||||
function toggleThemeVariant() {
|
||||
let idx = getCurrentThemeIndex();
|
||||
idx = (idx + 1) % THEME_CLASSES.length;
|
||||
applyThemeClass(idx);
|
||||
}
|
||||
|
||||
let original_theme_active = true;
|
||||
// Funktion global verfügbar machen
|
||||
window.toggleThemeVariant = toggleThemeVariant;
|
||||
|
||||
function toggle_alternative_theme() {
|
||||
if(original_theme_active) {
|
||||
document.documentElement.classList.add("alternative")
|
||||
original_theme_active = false;
|
||||
} else {
|
||||
document.documentElement.classList.remove("alternative")
|
||||
original_theme_active = true;
|
||||
}
|
||||
}
|
||||
function getCurrentThemeIndex() {
|
||||
const stored = localStorage.getItem('theme-variant');
|
||||
if (stored === null) return 0;
|
||||
const idx = THEME_CLASSES.indexOf(stored);
|
||||
return idx === -1 ? 0 : idx;
|
||||
}
|
||||
|
||||
function applyThemeClass(idx) {
|
||||
document.documentElement.classList.remove(...THEME_CLASSES);
|
||||
if (THEME_CLASSES[idx] && THEME_CLASSES[idx] !== 'theme-default') {
|
||||
document.documentElement.classList.add(THEME_CLASSES[idx]);
|
||||
}
|
||||
localStorage.setItem('theme-variant', THEME_CLASSES[idx] || 'theme-default');
|
||||
// Select synchronisieren, falls vorhanden
|
||||
const select = document.getElementById('theme-select');
|
||||
if (select) select.value = THEME_CLASSES[idx];
|
||||
}
|
||||
|
||||
function setThemeByName(themeName) {
|
||||
const idx = THEME_CLASSES.indexOf(themeName);
|
||||
applyThemeClass(idx === -1 ? 0 : idx);
|
||||
}
|
||||
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const select = document.getElementById('theme-select');
|
||||
if (select) {
|
||||
// Initialisiere Auswahl aus localStorage
|
||||
const idx = getCurrentThemeIndex();
|
||||
select.value = THEME_CLASSES[idx];
|
||||
applyThemeClass(idx);
|
||||
// Theme bei Auswahl ändern
|
||||
select.addEventListener('change', e => {
|
||||
setThemeByName(e.target.value);
|
||||
});
|
||||
} else {
|
||||
// Fallback: Theme trotzdem setzen
|
||||
applyThemeClass(getCurrentThemeIndex());
|
||||
}
|
||||
});
|
||||
|
|
|
|||
7
thirdparty/doxygen-awesome-css/environment.yml
vendored
Normal file
7
thirdparty/doxygen-awesome-css/environment.yml
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
name: RTD
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- doxygen=1.18.0
|
||||
- graphviz=14.1.2
|
||||
BIN
thirdparty/doxygen-awesome-css/img/testimage.png
vendored
BIN
thirdparty/doxygen-awesome-css/img/testimage.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 4.7 KiB |
117
thirdparty/doxygen-awesome-css/img/theme-variants-base.drawio.svg
vendored
Normal file
117
thirdparty/doxygen-awesome-css/img/theme-variants-base.drawio.svg
vendored
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="491px" height="261px" viewBox="-0.5 -0.5 491 261" content="<mxfile><diagram id="6E4AiNPWWr3a8GvC3Ypl" name="Page-1">xZfLrpswEIafBqndIIzBwLK5tZt2k0pd+wQHrBqcOs6tT98xmABxmrYiUUEK+Pd1vhkPjofn1fmjorvys8yZ8MIgP3t44YVhihL4NcKlFZIkbYVC8byVUC+s+U9mxcCqB56z/aihllJovhuLG1nXbKNHGlVKnsbNtlKMZ93RgjnCekOFq37juS6tWXHQ658YL8puZhTYmop2ja2wL2kuTwMJLz08V1Lq9q06z5kw7Doubb/Vb2qvC1Os1n/ToVvHkYqDNc4uTF86awslDzsPz+BR58x0DKBE1cY6JoWSO69dypEpzc73vELfugl6wyFgmKyYVhdod+rRRpldZznAGhIrUuvO4tq3txherNH3AZA/2z+2+1RyzdY7ujG1Jwhv0EpdwfgLBK97reR3NpdCqqY3JktzQ00h6H5vBwEEmvKaKVt28V0dc8vvP3GKHE5zsMEs97m4ls09FUlXm6V+jNteNtVEkZ/a7DPgBi19Qlx0KI19hKfTCx16X7kW7I0qUN99oUdeUM1l7RkbwfRgzWB/le+nwd1yIQZoF8vlYrV6GKMvjcMGPUqyqPudzhU7XNfwZXCwPpfjKjH36zg+jFQUEj/Br4vU2CG6go8Ra4DOFKP5Rh2q3X4i0deSg4wHu3lwZQ7GuwGKsY9HF5nOM3EjtNnaD/ihKfy2kJUHekjM/aR0ihPkJ2GEcJJhFOAoHmVWdLu9Qzd4A+R3naM0TOLsTiDf+I6k052Q3vnIE6EtruZI0hEjPw7m7DXr2Q0kUphnk7q7AWDqdoy2znEroNWPfFfLmt2kGCtRwYsaioJtzQjGTRyOoB+sXPE8N5PcDZXxZjQLtGe1cPJp43x1U5qROEZdQIT/Ggyw24ahkJL4JcEAxf443dQN/pPg5S8=</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="0" y="0" width="490" height="260" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<rect x="198.53" y="44.87" width="219.66" height="185.13" fill="rgb(255, 255, 255)" stroke="#e3e3e3" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 137px; margin-left: 200px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Content
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="308" y="141" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Content
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="0" width="490" height="44.87" fill="#deedff" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 488px; height: 1px; padding-top: 22px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Titlebar (Navigation + Search)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="245" y="26" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Titlebar (Navigation + Search)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="44.87" width="126.73" height="185.13" fill="#f7f7f7" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 125px; height: 1px; padding-top: 137px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Sidebar (Navigation)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="63" y="141" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Sidebar (Navigation)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="226.67" width="490" height="33.33" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 488px; height: 1px; padding-top: 243px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Footer (Breadcrumbs)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="245" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Footer (Breadcrumbs)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="371.72" y="14.87" width="101.38" height="16.67" rx="2.5" ry="2.5" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 99px; height: 1px; padding-top: 23px; margin-left: 373px;">
|
||||
<div data-drawio-colors="color: #262626; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(38, 38, 38); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Search
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="422" y="27" fill="#262626" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Search
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 32px; height: 1px; padding-top: 23px; margin-left: 19px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
<font color="#262626">
|
||||
Title
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="19" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="20px">
|
||||
Tit...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
102
thirdparty/doxygen-awesome-css/img/theme-variants-sidebar-only.drawio.svg
vendored
Normal file
102
thirdparty/doxygen-awesome-css/img/theme-variants-sidebar-only.drawio.svg
vendored
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="491px" height="261px" viewBox="-0.5 -0.5 491 261" content="<mxfile><diagram id="6E4AiNPWWr3a8GvC3Ypl" name="Page-1">xZZNj5swEIZ/DdL2gjAGA8cmm7SX9pJKPTvBAasGU8f56q/vOJjFLOxqpbC7WIrMO/5gnhlP7OFldfmmaFP+kDkTXhjkFw8/emGYogR+jXBthSRJW6FQPG8l1Asb/o9ZMbDqkefsMBiopRSaN0NxJ+ua7fRAo0rJ83DYXorhrg0t2EjY7KgYq795rkvrVhz0+nfGi7LbGQXWUtFusBUOJc3l2ZHwysNLJaVue9VlyYRh13Fp561fsD59mGK1ftOErJ1xouJonbMfpq+dt4WSx2a8sN3rxJRmlynsdNut0HsGGcFkxbS6wrhzzy7KLJDS4RYSK1Ibr+Jpbu8SdKxX0x6+wUHwr86ZGR94eHEuuWabhu6M9Qz5C1qpK1j/EUH3oJX8w5ZSSHWbjcnKNLBMIMpeYPRJLLrz48BYylqb752XyerW7mXSWbPUj8Osf2z1sMUDEZ9YxYEIs3xCJjhi7GM8A0o0QrmBorSlyjPpTgTst9jCCylM7+EX14DWmIBJ8JOeeEE1l/WX+8jvuRAO93Vi2odkKQqJn4TvlajhiO4aaiIzcB8WitF8p45Vc7iT3jtRuriEIoSTDKMARzEe5C2Qggx1n1ESY4L9MIlTEgYkzUgcj3Hf0tl9yAz08Ti3GVW78hXa6B7aeyhCjh4S02aLApQHJwrpsHpEaBiEcSVBAfK7yVEK4cjGUUDPQ5nOEIVo4p+rrSuG1+1/tkNG/h7NjWHRw3OktgLZAtQuAHu3a7S2UVyBrX4teLWs2bPqYyUqeFHDq2B7s4KJE4eL01crVzzPzSaTuTI8u+YD7dUvDD4mGRCaDqN7JLHv5kJKJs7kDNkAr/0l8GZzbtJ49R8=</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="0" y="0" width="490" height="260" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<rect x="198.53" y="16.67" width="219.66" height="233.33" fill="rgb(255, 255, 255)" stroke="#e3e3e3" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 133px; margin-left: 200px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Content
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="308" y="137" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Content
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="0" width="126.72" height="260" fill="#f7f7f7" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 125px; height: 1px; padding-top: 130px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Sidebar
|
||||
<br/>
|
||||
(Title + Navigation)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="63" y="134" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Sidebar...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="126.72" y="226.67" width="363.28" height="33.33" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 361px; height: 1px; padding-top: 243px; margin-left: 128px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Footer (Breadcrumbs)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="308" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Footer (Breadcrumbs)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="12.67" y="41.67" width="101.38" height="16.67" rx="2.5" ry="2.5" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 99px; height: 1px; padding-top: 50px; margin-left: 14px;">
|
||||
<div data-drawio-colors="color: #262626; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(38, 38, 38); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Search
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="63" y="54" fill="#262626" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Search
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 32px; height: 1px; padding-top: 20px; margin-left: 15px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
<font color="#262626">
|
||||
Title
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="15" y="26" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="20px">
|
||||
Tit...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
|
|
@ -1,250 +0,0 @@
|
|||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1001px" height="301px" viewBox="-0.5 -0.5 1001 301" content="<mxfile><diagram id="6E4AiNPWWr3a8GvC3Ypl" name="Page-1">7VlNc5s6FP01zLiLMEgyApbxV98m7SKdeWsZFMwUkJ/AsdNf/yQhMFiQ2jF2syjM2HDF1ce5514dbAvNs8NXTrabJxbR1IJOdLDQwoLQw774lIa3yhBAbYh5ElUmcDQ8J7+oNjrauksiWnQeLBlLy2TbNYYsz2lYdmyEc7bvPvbC0u6oWxJTw/AcktS0/ptE5aay+q5ztP9Dk3hTjwwc3ZKR+mFtKDYkYvuWCS0tNOeMldVVdpjTVGJX41L5rQZam4lxmpdnObiVxytJd3pxFsSp8J0VW5LLGZZvetn4v52c1mxNwp8xZ7s8eghZyriFHsVzPF5PoCu6m4ub9sUX4aJAzsuHF5Il6Vvl8ETzlFVPPbGchPpajEOyrfDRo83ZjieUi5ZvdH/aWLlkLGditiFtjbTX+MuRcsYzkqpG3DjiWH+rxUqf3sWqzgrFQNkVwNtDb0fAWq6smW/5K2sJLR9Zj6juW6Bfdd8dUpgriBtztbR8XcivGSmoGPDHhmZUc6WZHCzpQfpsykwsawHEJUmTOBfXoQi8QAvNXikvE0HZR92QJVEk3Wf7TVLS5wquxV7kp7CpaNJI9yVnq5NO8EPf68FVe5Km8yryYjJo9ShP/VzL7qhDLe2UlJqnco700DJpkn6lLKMlfxOP1K2eThhdMaCv7/fH/ANIk3nTyr060YhO+bjp+pgV4kInxkCS+H+TZJQkgWMnybPYB9aEP3zP07cLkqUoOftJa6rmLKf3zqCBTBnKrBEyCLu+7bm/TyLPs2+VRkFPGp3ESqbM9vzVNls8Wdc9OO+i4AJzydPA6VkwHmHFZyz4yBtngFmDvBUEwUt59hMkGMDMxOYuWNTAt8CYiyyQ8x0Xk6U6r8Wkbg1824XB8fA6GQSwjT2DUMLLxrgHR4RshEaAEhhQ6kJYbQ2qcq55XTQnP5IypapJVv5v5DWJSZmw/Mt1yJ8WK0+ed2EpgNj24K2ICg10V0KPq911MuOURCHfZdviSvRuhNKhjdAUIC9AwEFTF3Urv2jGncMgMcLIhp7rY+hgP8Buz6ag6Nw+8AjoI5PblPBw8w7a4Bq0T7ZiiOU5WhREeWhFwe9WjynoBsGsJMABdu089UU4AjMK4DSU/ghRmPbsXB0RGDaQHUVeDZ6h+3QBGlB6H5Nr7epzouBS+lJ+XL85Xf0GB95gxiYDAP1hbKcksttc8HFPTt6CDdDcuo2oVcLtFEeRuBpG9yIVe76uu4t2wb9f/0i1P05JUehOBAQlSXL5LrLoJ2ETmE+i8cyqcXeJdwEkbYnX3R6nU9s/X9YB37XBCLLO1B2qblaybnKUbY2SqzbGcVXcYrlcrFYX6pMReaigB14wrT+vx7VHUTRqefKp1PAFOL7LVKX+0O2Yav5o/KcV8uXIGRI4MGDsJegtRK9nMvSTaN7LyynyQPfNo6tyTtMbmuT9Q5p3+Efev5L3o1srttWrI6gJAS8lw50kr7g9/uem2lp/XKLl/w==</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="170" y="280" width="135" height="20" rx="3" ry="3" fill="#fafafa" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 133px; height: 1px; padding-top: 290px; margin-left: 171px;">
|
||||
<div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 15px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">
|
||||
<span style="background-color: rgb(255, 255, 255); font-family: Menlo, Monaco, "Courier New", monospace; font-weight: normal;">
|
||||
<font style="font-size: 16px;">
|
||||
1️⃣
|
||||
</font>
|
||||
</span>
|
||||
Base Theme
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="238" y="295" fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle" font-weight="bold">
|
||||
1️⃣ Base Theme
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="658.75" y="280" width="177.5" height="20" rx="3" ry="3" fill="#fafafa" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 176px; height: 1px; padding-top: 290px; margin-left: 660px;">
|
||||
<div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 15px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">
|
||||
<span style="background-color: rgb(255, 255, 255); font-family: Menlo, Monaco, "Courier New", monospace; font-weight: normal;">
|
||||
<font style="font-size: 16px;">
|
||||
2️⃣
|
||||
</font>
|
||||
</span>
|
||||
Sidebar-Only Theme
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="748" y="295" fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle" font-weight="bold">
|
||||
2️⃣ Sidebar-Only Theme
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="510" y="0" width="490" height="260" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<rect x="708.53" y="16.67" width="219.66" height="233.33" fill="rgb(255, 255, 255)" stroke="#e3e3e3" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 133px; margin-left: 710px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Content
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="818" y="137" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Content
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="510" y="0" width="126.72" height="260" fill="#f7f7f7" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 125px; height: 1px; padding-top: 130px; margin-left: 511px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Sidebar
|
||||
<br/>
|
||||
(Title + Navigation)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="573" y="134" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Sidebar...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="636.72" y="226.67" width="363.28" height="33.33" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 361px; height: 1px; padding-top: 243px; margin-left: 638px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Footer (Breadcrumps)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="818" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Footer (Breadcrumps)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="522.67" y="41.67" width="101.38" height="16.67" rx="2.5" ry="2.5" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 99px; height: 1px; padding-top: 50px; margin-left: 524px;">
|
||||
<div data-drawio-colors="color: #262626; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(38, 38, 38); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Search
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="573" y="54" fill="#262626" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Search
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 32px; height: 1px; padding-top: 20px; margin-left: 525px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
<font color="#262626">
|
||||
Title
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="525" y="26" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="20px">
|
||||
Tit...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="0" width="490" height="260" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<rect x="198.53" y="44.87" width="219.66" height="185.13" fill="rgb(255, 255, 255)" stroke="#e3e3e3" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 137px; margin-left: 200px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Content
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="308" y="141" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Content
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="0" width="490" height="44.87" fill="#deedff" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 488px; height: 1px; padding-top: 22px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Titlebar (Navigation + Search)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="245" y="26" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Titlebar (Navigation + Search)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="44.87" width="126.73" height="185.13" fill="#f7f7f7" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 125px; height: 1px; padding-top: 137px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Sidebar (Navigation)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="63" y="141" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Sidebar (Navigation)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="226.67" width="490" height="33.33" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 488px; height: 1px; padding-top: 243px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Footer (Breadcrumps)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="245" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Footer (Breadcrumps)
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="371.72" y="14.87" width="101.38" height="16.67" rx="2.5" ry="2.5" fill="rgb(255, 255, 255)" stroke="#6e6e6e" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 99px; height: 1px; padding-top: 23px; margin-left: 373px;">
|
||||
<div data-drawio-colors="color: #262626; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(38, 38, 38); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
Search
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="422" y="27" fill="#262626" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Search
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 32px; height: 1px; padding-top: 23px; margin-left: 19px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
<font color="#262626">
|
||||
Title
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="19" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="20px">
|
||||
Tit...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
namespace MyLibrary {
|
||||
|
||||
enum Color { red, green, blue };
|
||||
enum Color { red = 1, green = 2, blue = 3 };
|
||||
|
||||
/**
|
||||
* @brief Example class to demonstrate the features of the custom CSS.
|
||||
|
|
@ -26,50 +26,59 @@ public:
|
|||
*
|
||||
* ## Tables
|
||||
*
|
||||
* The table content is scrollable if the table gets too wide.
|
||||
*
|
||||
* | first_column | second_column | third_column | fourth_column | fifth_column | sixth_column | seventh_column | eighth_column | ninth_column |
|
||||
* |--------------|---------------|--------------|---------------|--------------|--------------|----------------|---------------|--------------|
|
||||
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
||||
* <div class="tabbed">
|
||||
*
|
||||
* A table can contain images:
|
||||
*
|
||||
* | Column 1 | Column 2 |
|
||||
* |---------------------------|-------------------------------------------------|
|
||||
* |  | ← the image should not be inverted in dark-mode |
|
||||
*
|
||||
* Complex [Doxygen tables](https://www.doxygen.nl/manual/tables.html) are also supported as seen in @ref multi_row "this example":
|
||||
*
|
||||
* <table>
|
||||
* <caption id="multi_row">Complex table</caption>
|
||||
* <tr><th>Column 1 <th>Column 2 <th>Column 3
|
||||
* <tr><td rowspan="2">cell row=1+2,col=1<td>cell row=1,col=2<td>cell row=1,col=3
|
||||
* <tr><td rowspan="2">cell row=2+3,col=2 <td>cell row=2,col=3
|
||||
* <tr><td>cell row=3,col=1 <td rowspan="2">cell row=3+4,col=3
|
||||
* <tr><td colspan="2">cell row=4,col=1+2
|
||||
* <tr><td>cell row=5,col=1 <td colspan="2">cell row=5,col=2+3
|
||||
* <tr><td colspan="2" rowspan="2">cell row=6+7,col=1+2 <td>cell row=6,col=3
|
||||
* <tr> <td>cell row=7,col=3
|
||||
* <tr><td>cell row=8,col=1 <td>cell row=8,col=2\n
|
||||
* - <b class="tab-title">Basic</b>
|
||||
* This theme supports normal markdown tables:<br>
|
||||
* | Item | Title | Description | More |
|
||||
* |-----:|-------|-----------------------|--------------------------------------------|
|
||||
* | 1 | Foo | A placeholder | Some lorem ipsum to make this table wider. |
|
||||
* | 2 | Bar | Also a placeholder | More lorem ipsum. |
|
||||
* | 3 | Baz | The third placeholder | More lorem ipsum. |
|
||||
* - <b class="tab-title">Centered</b>
|
||||
* <center>
|
||||
* A table can be centered with the `<center>` html tag:<br>
|
||||
* | Item | Title | Description | More |
|
||||
* |-----:|-------|-----------------------|--------------------------------------------|
|
||||
* | 1 | Foo | A placeholder | Some lorem ipsum to make this table wider. |
|
||||
* | 2 | Bar | Also a placeholder | More lorem ipsum. |
|
||||
* | 3 | Baz | The third placeholder | More lorem ipsum. |
|
||||
* </center>
|
||||
* - <b class="tab-title">Stretched</b>
|
||||
* A table wrapped in `<div class="full_width_table">` fills the full page width.
|
||||
* <div class="full_width_table">
|
||||
* | Item | Title | Description | More |
|
||||
* |-----:|-------|-----------------------|--------------------------------------------|
|
||||
* | 1 | Foo | A placeholder | Some lorem ipsum to make this table wider. |
|
||||
* | 2 | Bar | Also a placeholder | More lorem ipsum. |
|
||||
* | 3 | Baz | The third placeholder | More lorem ipsum. |
|
||||
* </div>
|
||||
* **Caution**: This will break the overflow scrolling support!
|
||||
* - <b class="tab-title">Complex</b>
|
||||
* Complex [Doxygen tables](https://www.doxygen.nl/manual/tables.html) are also supported as seen in @ref multi_row "this example":<br>
|
||||
* <table>
|
||||
* <tr><td>Inner cell row=1,col=1<td>Inner cell row=1,col=2
|
||||
* <tr><td>Inner cell row=2,col=1<td>Inner cell row=2,col=2
|
||||
* <caption id="multi_row">Complex table</caption>
|
||||
* <tr><th>Column 1 <th>Column 2 <th>Column 3
|
||||
* <tr><td rowspan="2">cell row=1+2,col=1<td>cell row=1,col=2<td>cell row=1,col=3
|
||||
* <tr><td rowspan="2">cell row=2+3,col=2 <td>cell row=2,col=3
|
||||
* <tr><td>cell row=3,col=1 <td>cell row=3,col=3
|
||||
* </table>
|
||||
* <td>cell row=8,col=3
|
||||
* <ul>
|
||||
* <li>Item 1
|
||||
* <li>Item 2
|
||||
* </ul>
|
||||
* </table>
|
||||
* - <b class="tab-title">Overflow Scrolling</b> The table content is scrollable if the table gets too wide.<br>
|
||||
* | first_column | second_column | third_column | fourth_column | fifth_column | sixth_column | seventh_column | eighth_column | ninth_column |
|
||||
* |--------------|---------------|--------------|---------------|--------------|--------------|----------------|---------------|--------------|
|
||||
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
||||
* - <b class="tab-title">Images</b>A table can contain images:<br>
|
||||
* | Column 1 | Column 2 |
|
||||
* |---------------------------|-------------------------------------------------|
|
||||
* | {width=250px} | ← the image should not be inverted in dark-mode |
|
||||
*
|
||||
* A table can be centered with the `<center>` html tag:
|
||||
* <center>
|
||||
* | Foo | Bar | Baz | FooBar |
|
||||
* |-------------|----------------|---------------------------|-------------|
|
||||
* | Lorem imsum | dolor sit amet | cenectetur adipisici elit | At vero eos |
|
||||
* </center>
|
||||
*
|
||||
* Embedded Graphviz graphs support dark mode and can be scrolled once they get too wide:
|
||||
* </div>
|
||||
*
|
||||
* ## Diagrams
|
||||
*
|
||||
* Graphviz diagrams support dark mode and can be scrolled once they get too wide:
|
||||
*
|
||||
* \dot Graphviz with a caption
|
||||
* digraph example {
|
||||
* node [fontsize="12"];
|
||||
|
|
@ -101,7 +110,7 @@ public:
|
|||
* ## Code block
|
||||
*
|
||||
* ```cpp
|
||||
* auto x = "code within md fences (```)";
|
||||
* auto x = "code within md fences";
|
||||
* ```
|
||||
*
|
||||
* @code{.cpp}
|
||||
|
|
@ -110,7 +119,6 @@ public:
|
|||
* auto example = std::make_shared<Example>(5);
|
||||
* example->test("test");
|
||||
* }
|
||||
*
|
||||
* @endcode
|
||||
*
|
||||
* // code within indented code block
|
||||
|
|
@ -153,5 +161,9 @@ public:
|
|||
|
||||
};
|
||||
|
||||
class SecondExample {
|
||||
std::string foo();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
34
thirdparty/doxygen-awesome-css/package.json
vendored
Normal file
34
thirdparty/doxygen-awesome-css/package.json
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"name": "@jothepro/doxygen-awesome-css",
|
||||
"version": "2.5.0",
|
||||
"description": "Custom CSS theme for doxygen html-documentation with lots of customization parameters.",
|
||||
"main": "",
|
||||
"scripts": {
|
||||
"npm-pack": "npm pack",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jothepro/doxygen-awesome-css.git"
|
||||
},
|
||||
"homepage": "https://jothepro.github.io/doxygen-awesome-css/",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jothepro/doxygen-awesome-css/issues"
|
||||
},
|
||||
"keywords": [
|
||||
"doxygen",
|
||||
"css",
|
||||
"theme",
|
||||
"awesome"
|
||||
],
|
||||
"author": {
|
||||
"name": "jothepro",
|
||||
"url": "https://github.com/jothepro",
|
||||
"git": "https://github.com/jothepro/doxygen-awesome-css"
|
||||
},
|
||||
"license": "MIT",
|
||||
"config": {},
|
||||
"dependencies": {},
|
||||
"devDependencies": {},
|
||||
"xpack": {}
|
||||
}
|
||||
56
thirdparty/doxygen-awesome-css/readthedocs_build.sh
vendored
Normal file
56
thirdparty/doxygen-awesome-css/readthedocs_build.sh
vendored
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
conda_env_name="doxygen-awesome-css-docs"
|
||||
environment_file="environment.yml"
|
||||
output_dir="${READTHEDOCS_OUTPUT:-_readthedocs}"
|
||||
output_dir="${output_dir%/}"
|
||||
version="${READTHEDOCS_VERSION:-local}"
|
||||
canonical_url="${READTHEDOCS_CANONICAL_URL:-https://doxygen-awesome-css.readthedocs.io/}"
|
||||
rtd_doxyfile="${output_dir}/Doxyfile.readthedocs"
|
||||
rtd_header="${output_dir}/header.readthedocs.html"
|
||||
|
||||
function setup_conda_env {
|
||||
echo "Creating conda environment '${conda_env_name}' from ${environment_file}"
|
||||
conda env create --quiet --name "${conda_env_name}" --file "${environment_file}"
|
||||
|
||||
# activate the env in this shell so doxygen/dot below resolve to the conda versions
|
||||
# shellcheck disable=SC1091
|
||||
source "$(conda info --base)/etc/profile.d/conda.sh"
|
||||
conda activate "${conda_env_name}"
|
||||
}
|
||||
|
||||
mkdir -p "${output_dir}"
|
||||
|
||||
setup_conda_env
|
||||
doxygen --version
|
||||
dot -V
|
||||
|
||||
awk '
|
||||
/^\$search$/ {
|
||||
print
|
||||
print "<script type=\"text/javascript\" src=\"$relpath^doxygen-awesome-readthedocs-search.js\"></script>"
|
||||
print "<script type=\"text/javascript\">"
|
||||
print " // The RTD build uses the sidebar-only theme, so align live search results to the sidebar."
|
||||
print " DoxygenAwesomeReadtheDocsSearch.init('\''leftAlign'\'')"
|
||||
print "</script>"
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
' doxygen-custom/header.html > "${rtd_header}"
|
||||
|
||||
cp Doxyfile "${rtd_doxyfile}"
|
||||
cat >> "${rtd_doxyfile}" <<EOF
|
||||
|
||||
# Read the Docs build overrides
|
||||
PROJECT_NUMBER = ${version}
|
||||
OUTPUT_DIRECTORY = ${output_dir}
|
||||
HTML_HEADER = ${rtd_header}
|
||||
HTML_EXTRA_FILES += doxygen-awesome-readthedocs-search.js
|
||||
HTML_EXTRA_STYLESHEET += doxygen-awesome-readthedocs-search.css
|
||||
SERVER_BASED_SEARCH = YES
|
||||
EXTERNAL_SEARCH = YES
|
||||
SEARCHENGINE_URL = ${canonical_url}
|
||||
EOF
|
||||
|
||||
doxygen "${rtd_doxyfile}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue