+ add CustomCSS extension

This commit is contained in:
maxpozdeev 2022-11-22 00:29:55 +03:00
parent 27bdebfde4
commit 01e688b49e
6 changed files with 110 additions and 0 deletions

1
.gitignore vendored
View file

@ -3,5 +3,6 @@ src/db/config.php
src/db/config-*
src/config.php
src/includes/vendor/
src/content/theme/custom.css
tests/

View file

@ -0,0 +1 @@
deny from all

View file

@ -0,0 +1,6 @@
{
"bundleId": "CustomCSS",
"name": "Custom CSS",
"version": "1.0",
"description": "Add you own css rules"
}

View file

@ -0,0 +1,7 @@
{
"ext.CustomCSS.name": "Custom CSS",
"customcss.h_css": "CSS",
"customcss.d_css": "Write you own CSS rules",
"customcss.not_writable": "CSS file is not writable, check permissions for custom.css",
"customcss.saved": "Saved"
}

View file

@ -0,0 +1,7 @@
{
"ext.CustomCSS.name": "Дополнительные стили",
"customcss.h_css": "CSS",
"customcss.d_css": "Добавляйте собственные стили CSS",
"customcss.not_writable": "Ошибка записи в файл, проверьте права доступа к custom.css",
"customcss.saved": "Сохранено"
}

View file

@ -0,0 +1,88 @@
<?php declare(strict_types=1);
/*
This file is a part of myTinyTodo.
(C) Copyright 2022 Max Pozdeev <maxpozdeev@gmail.com>
Licensed under the GNU GPL version 2 or any later. See file COPYRIGHT for details.
*/
if (!defined('MTTPATH')) {
die("Unexpected usage.");
}
function mtt_ext_customcss_instance(): MTTExtension
{
return new CustomCssExtension();
}
class CustomCssExtension extends MTTExtension implements MTTExtensionSettingsInterface
{
//the same as dir name
const bundleId = 'CustomCSS';
// settings domain
const domain = "ext.customcss.json";
const cssFilename = 'custom.css';
function init()
{
$prefs = self::preferences();
if (isset($prefs['css'])) {
$href = htmlspecialchars( get_unsafe_mttinfo('theme_url'). self::cssFilename. '?v='. ($prefs['edited'] ?? 0) );
$cb = function() use ($href) {
print "<link rel='stylesheet' type='text/css' href='$href'>\n";
};
add_action('theme_head_end', $cb);
}
}
function settingsPage(): string
{
$e = function($s) { return __($s, true); };
$prefs = self::preferences();
$css = htmlspecialchars($prefs['css'] ?? '');
return
<<<EOD
<div class="tr">
<div class="th"> {$e('customcss.h_css')}
<div class="descr">{$e('customcss.d_css')}</div>
</div>
<div class="td"> <textarea name="css" class="inmax monospace">$css</textarea> </div>
</div>
EOD;
}
function saveSettings(array $params, ?string &$outMessage): bool
{
if (defined('MTT_DEMO')) {
$outMessage = "Demo";
return true;
}
$css = $params['css'] ?? '';
$cssFilename = MTT_THEME_PATH. self::cssFilename;
if (!file_exists($cssFilename)) {
@touch($cssFilename);
}
if (!is_writable($cssFilename)) {
$outMessage = __('customcss.not_writable');
return false;
}
@file_put_contents($cssFilename, $css);
$outMessage = __('customcss.saved');
return true;
}
static function preferences(): array
{
$prefs['cssFilename'] = $cssFilename = MTT_THEME_PATH. self::cssFilename;
if (file_exists($prefs['cssFilename'])) {
$prefs['edited'] = filemtime($cssFilename) ?? 0;
$prefs['css'] = @file_get_contents($cssFilename) ?? '';
}
return $prefs;
}
}