Allow to create a `style.css` file in the documentation to override some styles. #180

This commit is contained in:
Stéphane Goetz 2020-04-25 22:32:43 +02:00
parent 4d312a44e6
commit db772b6a5e
3 changed files with 24 additions and 6 deletions

View File

@ -2,6 +2,11 @@ In its simplest form, a theme is an empty folder with a `config.json` file conta
After that, every setting is optional, but you can override everything if you'd like to. After that, every setting is optional, but you can override everything if you'd like to.
> **Overriding styles**
>
> If you want to tweak a few styles, you can create a `style.css` file at the root of your documentation
> directory and it will be included automatically. By doing this, you don't need to create a new theme.
## `config.json` options ## `config.json` options
Here is an example `config.json` file : Here is an example `config.json` file :

View File

@ -32,11 +32,18 @@ class DauxHelper
*/ */
protected static function getTheme(Config $config, $current_url) protected static function getTheme(Config $config, $current_url)
{ {
static $cache = [];
$htmlTheme = $config->getHTML()->getTheme(); $htmlTheme = $config->getHTML()->getTheme();
$theme_folder = $config->getThemesPath() . DIRECTORY_SEPARATOR . $htmlTheme; $theme_folder = $config->getThemesPath() . DIRECTORY_SEPARATOR . $htmlTheme;
$theme_url = $config->getBaseUrl() . 'themes/' . $htmlTheme . '/'; $theme_url = $config->getBaseUrl() . 'themes/' . $htmlTheme . '/';
$cache_key = "$current_url-$htmlTheme";
if (array_key_exists($cache_key, $cache)) {
return $cache[$cache_key];
}
$theme = []; $theme = [];
if (is_file($theme_folder . DIRECTORY_SEPARATOR . 'config.json')) { if (is_file($theme_folder . DIRECTORY_SEPARATOR . 'config.json')) {
$theme = json_decode(file_get_contents($theme_folder . DIRECTORY_SEPARATOR . 'config.json'), true); $theme = json_decode(file_get_contents($theme_folder . DIRECTORY_SEPARATOR . 'config.json'), true);
@ -45,7 +52,7 @@ class DauxHelper
} }
} }
//Default parameters for theme // Default parameters for theme
$theme += [ $theme += [
'name' => $htmlTheme, 'name' => $htmlTheme,
'css' => [], 'css' => [],
@ -54,6 +61,7 @@ class DauxHelper
'favicon' => '<base_url>themes/daux/img/favicon.png', 'favicon' => '<base_url>themes/daux/img/favicon.png',
'templates' => $theme_folder . DIRECTORY_SEPARATOR . 'templates', 'templates' => $theme_folder . DIRECTORY_SEPARATOR . 'templates',
'variants' => [], 'variants' => [],
'with_search' => $config->getHTML()->hasSearch()
]; ];
if ($config->getHTML()->hasThemeVariant()) { if ($config->getHTML()->hasThemeVariant()) {
@ -77,6 +85,14 @@ class DauxHelper
} }
} }
if ($theme['with_search']) {
$theme['css'][] = '<base_url>daux_libraries/search.css';
}
if (is_file($config->getDocumentationDirectory() . DIRECTORY_SEPARATOR . 'style.css')) {
$theme['css'][]= '<base_url>style.css';
}
$substitutions = [ $substitutions = [
'<local_base>' => $config->getLocalBase(), '<local_base>' => $config->getLocalBase(),
'<base_url>' => $current_url, '<base_url>' => $current_url,
@ -93,6 +109,8 @@ class DauxHelper
} }
} }
$cache[$cache_key] = $theme;
return $theme; return $theme;
} }

View File

@ -48,11 +48,6 @@
<?php foreach ($config->getTheme()->getCSS() as $css) { ?> <?php foreach ($config->getTheme()->getCSS() as $css) { ?>
<link href='<?= $css; ?>' rel='stylesheet' type='text/css'> <link href='<?= $css; ?>' rel='stylesheet' type='text/css'>
<?php } ?> <?php } ?>
<?php if ($config->getHTML()->hasSearch()) { ?>
<!-- Search -->
<link href="<?= $base_url; ?>daux_libraries/search.css" rel="stylesheet">
<?php } ?>
</head> </head>
<body class="<?= $this->section('classes'); ?>"> <body class="<?= $this->section('classes'); ?>">
<?= $this->section('content'); ?> <?= $this->section('content'); ?>