1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-10 16:54:44 +02:00

Bump version to 3.0.248, adding new admin resign by KONKAT Studio @konkat-studio

This commit is contained in:
Ryan Cramer
2025-05-09 13:38:50 -04:00
parent e0f96733e6
commit b786dcff14
26 changed files with 8392 additions and 17 deletions

View File

@@ -80,7 +80,7 @@ class ProcessWire extends Wire {
* Reversion revision number
*
*/
const versionRevision = 247;
const versionRevision = 248;
/**
* Version suffix string (when applicable)

View File

@@ -46,7 +46,7 @@ class AdminThemeUikit extends AdminThemeFramework implements Module, Configurabl
public static function getModuleInfo() {
return array(
'title' => 'Uikit',
'version' => 35,
'version' => 36,
'summary' => 'Uikit v3 admin theme',
'autoload' => 'template=admin',
);
@@ -117,7 +117,7 @@ class AdminThemeUikit extends AdminThemeFramework implements Module, Configurabl
$this->set('ukGrid', false);
$this->set('configPhpHash', '');
$this->set('cssVersion', 0);
$this->set('themeName', ''); // @todo default
$this->set('themeName', 'default');
$this->set('themeInfos', array('z' => 'z')); // z=sleeping
$this->setClasses(array(
'input' => 'uk-input',

View File

@@ -60,11 +60,10 @@ $logoOptions = array('height' => '40px');
</nav>
</div>
</header>
<?php
if(strpos($adminTheme->layout, 'sidenav') === false) {
echo $adminTheme->renderNotices($notices);
echo $adminTheme->renderExtraMarkup('masthead');
}
?>
</div>
<?php
if($adminTheme->themeName === 'default') echo '</div><!--#pw-mastheads-->';
if(strpos($adminTheme->layout, 'sidenav') === false) {
echo $adminTheme->renderNotices($notices) . $adminTheme->renderExtraMarkup('masthead');
}
if($adminTheme->themeName != 'default') echo '</div><!--#pw-mastheads-->';

View File

@@ -4,8 +4,7 @@ if(!isset($title)) $title = 'Title';
if(!isset($formAction)) $formAction = './install.php';
$title = htmlentities($title, ENT_QUOTES, "UTF-8");
$formAction = htmlentities($formAction, ENT_QUOTES, "UTF-8");
?>
<!DOCTYPE html>
?><!DOCTYPE html>
<html class="pw" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
@@ -23,6 +22,8 @@ $formAction = htmlentities($formAction, ENT_QUOTES, "UTF-8");
<link type='text/css' href='wire/modules/AdminTheme/AdminThemeUikit/uikit-pw/pw.min.css' rel='stylesheet' />
<link type='text/css' href='wire/templates-admin/styles/AdminTheme.css' rel='stylesheet' />
<link type='text/css' href='wire/modules/AdminTheme/AdminThemeUikit/themes/default/admin.css' rel='stylesheet' />
<link type='text/css' href='wire/modules/AdminTheme/AdminThemeUikit/themes/default/install.css' rel='stylesheet' />
<link type='text/css' href='wire/templates-admin/styles/font-awesome/css/font-awesome.min.css' rel='stylesheet' />
<style type='text/css'>

View File

@@ -0,0 +1,189 @@
/* inter-regular - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: "Inter";
font-style: normal;
font-weight: 400;
src: url("./fonts/inter-v18-latin-regular.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* inter-italic - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: "Inter";
font-style: italic;
font-weight: 400;
src: url("./fonts/inter-v18-latin-italic.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* inter-600 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: "Inter";
font-style: normal;
font-weight: 600;
src: url("./fonts/inter-v18-latin-600.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* inter-600italic - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: "Inter";
font-style: italic;
font-weight: 600;
src: url("./fonts/inter-v18-latin-600italic.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* -------------------------------------------------------------------- */
/* ---- DEFAULT THEME VARIABLES (LIGHT and DARK) --------------------- */
/* ---- (keep active while uncommenting the others to test) --------- */
/* ----------------------------------------------------------------- */
:root {
color-scheme: light dark;
--main-color: #eb1d61;
--text-color: light-dark(black, white);
--muted-color: light-dark(rgba(0, 0, 0, 0.55), rgba(255, 255, 255, 0.6));
--border-color: light-dark(rgba(0, 0, 0, 0.16), #444);
--main-background:light-dark(#eee, #222);
--inputs-background:light-dark(#f8f8f8, #161616);
--blocks-background: light-dark(white, black);
--button-background: light-dark(var(--text-color), var(--main-color));
--button-color: light-dark(var(--blocks-background), var(--text-color));
--button-border: transparent;
--button-muted-background: light-dark(var(--muted-color), #404040);
--button-muted-color: light-dark(var(--blocks-background), var(--text-color));;
--button-muted-border: transparent;
--button-hover-background: light-dark(var(--main-color), var(--text-color));
--button-hover-color: var(--blocks-background);
--button-hover-border: transparent;
--menu-item-backgroud-hover: var(--main-background);
--masthead-background: var(--blocks-background);
--masthead-active-color: var(--text-color);
--masthead-text-color: var(--muted-color);
--masthead-border-color: var(--border-color);
--masthead-logo-color: var(--main-color);
--masthead-menu-item-backgroud-hover: var(--menu-item-backgroud-hover);
--masthead-input-background: var(--inputs-background);
--masthead-input-color: var(--text-color);
--masthead-input-border: var(--border-color);
--modal-color: rgba(0,0,0,0.7);
--alert-text-color: var(--text-color);
--alert-primary: var(--main-background);
--alert-warning: light-dark(#fcda6d, #d57f00);
--alert-success: light-dark(#97ecb2, #139472);
--alert-danger: light-dark(#ffc3c3, #8a1919);
--notes-background: light-dark(#ffd, #bdbdbd33);
--error-inline-text-color: light-dark(#cd0a0a, #ff1d1d);
--code-color: light-dark(#0173b0, #e7e695);
--code-background: light-dark(#0173b020, #3c3c3c5e);
}
@media (prefers-color-scheme: dark) {
* {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
}
body.light-theme,
html:has(body.light-theme) {
color-scheme: light;
}
body.dark-theme,
html:has(body.dark-theme) {
color-scheme: dark;
}
body.light-theme * {
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
}
body.dark-theme * {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body.main-color-red {
--main-color: #eb1d61;
}
body.main-color-green {
--main-color: #14ae85;
}
body.main-color-blue {
--main-color: #2380e6;
}
/* -------------------------------------------------------------------- */
/* ---- THEME WITH COLOR MASTHEAD VARIABLES -------------------------- */
/* ---- (these depend on the default theme variables) --------------- */
/* ----------------------------------------------------------------- */
/*
:root {
--masthead-background: var(--main-color);
--masthead-active-color: white;
--masthead-text-color: rgba(255,255,255,0.8);
--masthead-border-color: var(--main-background);
--masthead-logo-color: white;
--masthead-input-background: var(--masthead-background);
--masthead-input-color: var(--masthead-active-color);
--masthead-input-border: var(--masthead-text-color);
--masthead-menu-item-backgroud-hover: rgba(255,255,255,.2);
}
/* -------------------------------------------------------------------- */
/* ---- BORDERLESS --------------------------------------------------- */
/* ------------------------------------------------------------------ */
/*
:root {
--border-color: var(--main-background);
--inputs-background: var(--blocks-background);
}
/* -------------------------------------------------------------------- */
/* ---- MINIMAL LIGHT BLUE AND MINIMAL DARK VARIABLES ---------------- */
/* ------------------------------------------------------------------ */
/*
:root {
--text-color: light-dark(blue, white);
--main-color: var(--text-color);
--main-background:light-dark(white, #222);
--border-color: light-dark(var(--text-color), var(--text-color));
--text-background: var(--main-background);
--inputs-background: var(--text-background);
--blocks-background: var(--text-background);
--muted-color: light-dark(#7c8efd, #8b8b8b);
--button-background: var(--text-background);
--button-color: light-dark(var(--text-color), var(--text-color));
--button-muted-color: var(--muted-color);
--button-border: var(--button-color);
--button-muted-background: var(--button-background);
--button-muted-border: var(--button-muted-color);
--button-hover-background: var(--button-color);
--button-hover-color: var(--button-background);
--button-hover-border: var(--button-color);
--masthead-background: var(--text-background);
--masthead-active-color: light-dark(var(--text-color), var(--text-color));
--masthead-text-color: var(--masthead-active-color);
--masthead-border-color: var(--masthead-active-color);
--masthead-logo-color: var(--masthead-active-color);
--alert-text-color: var(--text-color);
--alert-primary: light-dark(#ffd, var(--text-background));
--alert-warning: light-dark(#fcda6d, #d57f00);
--alert-success: light-dark(#97ecb2, #139472);
--alert-danger: light-dark(#ec9797, #8a1919);
--notes-background: light-dark(#ffd, #bdbdbd33);
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,225 @@
function setupCommandSearch() {
const searchInput = document.querySelector("#pw-masthead .pw-search-input");
const sidebarSearchInput = document.querySelector(
"#offcanvas-nav .pw-search-input"
);
let previousFocusedElement = null;
let SearchOpen = false;
// Find the closest ancestor with class "pw-search-form"
const searchForm = searchInput.closest(".pw-search-form");
const sidebarSearchForm = sidebarSearchInput.closest(".pw-search-form");
const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0;
const shortcutText = isMac ? "⌘+K" : "Ctrl+K";
const sidebarShortcutText = isMac ? "⌘+⇧+K" : "Ctrl+⇧+K";
searchInput.setAttribute("placeholder", " ");
sidebarSearchInput.setAttribute("placeholder", " ");
searchForm.setAttribute("data-shortcut", shortcutText);
sidebarSearchForm.setAttribute("data-shortcut", sidebarShortcutText);
function openSearch() {
previousFocusedElement = document.activeElement;
searchInput.focus();
SearchOpen = true;
closeSidebar();
}
function closeSearch() {
searchInput.blur();
searchInput.value = "";
if (previousFocusedElement) {
previousFocusedElement.focus();
previousFocusedElement = null;
}
SearchOpen = false;
}
function openSearchSidebar() {
let sidebarToggleEL = document.getElementById("offcanvas-toggle");
if (sidebarToggleEL) {
let sidebarSearchInput = document.querySelector(
"#offcanvas-nav .pw-search-input"
);
sidebarToggleEL.click();
if (sidebarSearchInput) {
sidebarSearchInput.focus();
closeSearch();
}
}
}
function closeSidebar() {
let sidebarToggleEL = document.querySelector(
"body.uk-offcanvas-page .offcanvas-toggle"
);
if (sidebarToggleEL) {
sidebarToggleEL.click();
sidebarSearchInput.blur();
}
}
// Toggle on Ctrl/Cmd + K
document.addEventListener("keydown", (event) => {
const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0;
const isCommandKey = event.metaKey;
const isControlKey = event.ctrlKey;
const modifierKey = isMac ? isCommandKey : isControlKey;
if (modifierKey) {
if (event.key === "k") {
event.preventDefault();
// Ctrl/⌘+Shift+K focus on sidebar search
if (event.shiftKey) {
openSearchSidebar();
} else {
// Ctrl/⌘+K focus on search
if (SearchOpen) {
closeSearch();
} else {
openSearch();
}
}
}
// close search with escape
} else if (event.key === "Escape") {
closeSearch();
let sidebarToggleEL = document.querySelector(
"body.uk-offcanvas-page .offcanvas-toggle"
);
if (sidebarToggleEL) {
sidebarToggleEL.click();
}
}
});
}
var AdminDarkMode = {
isInit: false,
mode: -1,
body: null,
a: null,
init: function() {
this.body = $('body');
if(this.body.hasClass('light-theme')) {
this.mode = 0;
} else if(this.body.hasClass('dark-theme')) {
this.mode = 1;
}
this.a = $('.toggle-light-dark-mode');
this.updateLink();
this.isInit = true;
},
get: function() {
return this.mode;
},
getName: function(mode) {
if(typeof mode === 'undefined') mode = this.mode;
if(mode > 0) return 'dark';
if(mode < 0) return 'auto';
return 'light';
},
updateLink: function() {
var lightIcon = 'fa-' + this.a.attr('data-icon-light');
var darkIcon = 'fa-' + this.a.attr('data-icon-dark');
var autoIcon = 'fa-' + this.a.attr('data-icon-auto');
var modeName = this.getName();
if(modeName != 'auto') {
// reverse of mode name for link
modeName = modeName === 'dark' ? 'light' : 'dark';
}
var text = this.a.attr('data-label-' + modeName);
var icon = 'fa-' + this.a.attr('data-icon-' + modeName);
var $span = this.a.children('span');
var $icon = this.a.children('i');
$span.text(text);
$icon.removeClass(lightIcon + ' ' + darkIcon + ' ' + autoIcon).addClass(icon);
},
set: function(mode) {
this.body.removeClass(this.getName() + '-theme');
this.body.addClass(this.getName(mode) + '-theme');
this.mode = mode;
this.updateLink();
},
setLight: function() {
this.set(0);
},
setDark: function() {
this.set(1);
},
setAuto: function() {
this.set(-1);
},
save: function() {
$.post(ProcessWire.config.urls.admin, {set_admin_dark_mode: this.mode}, function(data) {
// console.log(data);
});
},
toggle: function() {
var newMode = this.mode > 0 ? 0 : 1;
this.set(newMode);
this.updateLink();
},
toggleDialog: function() {
var oldMode = this.mode;
var newMode = (oldMode < 0 ? oldMode : (oldMode > 0 ? 0 : 1));
var newModeName = this.getName(newMode);
var dialogHtml = $('#light-dark-mode-dialog').html();
var attr = 'data-name="' + newModeName + '"';
dialogHtml = dialogHtml.replace(attr, attr + ' checked');
var dialog = UIkit.modal.dialog(dialogHtml, { });
var $panel = $(dialog.panel);
$panel.css('transition', 'none');
this.set(newMode);
$panel.find('input').on('click', function() {
AdminDarkMode.set(parseInt($(this).val()));
});
$panel.find('button').on('click', function() {
if($(this).hasClass('uk-button-primary')) {
AdminDarkMode.save(); // Ok
} else {
AdminDarkMode.set(oldMode); // Cancel
}
});
$panel.find('input[value=' + newMode + ']');
return false;
},
};
// Call the setup function when the DOM is loaded
document.addEventListener("DOMContentLoaded", setupCommandSearch);
$(document).ready(function () {
$(".pw-notices").insertAfter("#pw-mastheads");
AdminDarkMode.init();
});

View File

@@ -0,0 +1,91 @@
$(document).ready(function() {
var colorClasses = 'main-color-red main-color-blue main-color-green main-color-custom';
var styleClasses = 'light-theme dark-theme';
var $body = $('body');
/**
* Get current style, 'light' or 'dark'
*
* @returns {string|string}
*
*/
function getCurrentStyleName() {
if($body.hasClass('dark-theme')) return 'dark';
if($body.hasClass('light-theme')) return 'light';
var bgcolor = $('#pw-mastheads').css('background-color');
bgcolor = bgcolor.replace(/[^0-9]/g, '').substring(0, 3);
$body.removeClass('auto-theme');
var styleName = bgcolor === '000' ? 'dark' : 'light';
$body.addClass(styleName + '-theme');
return styleName;
}
/**
* Get the main color code (hex or rgb), whether predefined or custom
*
* @returns {string}
*
*/
function getMainColor() {
var $wrap = $('#wrap_defaultMainColor');
var $f = $wrap.find('input:checked');
if($f.val() === 'custom') return $('#defaultMainColorCustom').val();
return $f.closest('label').find('.defaultMainColorLabel').css('background-color');
}
/**
* Update the main color for given rgb or hex code
*
* @param value
*
*/
function setMainColor(value) {
$('#main-color-custom').remove();
$('.pw-logo-native').css('color', value);
var styleName = getCurrentStyleName();
setButtonColor(styleName === 'dark' ? value : 'black');
$('head').append(
"<style type='text/css' id='main-color-custom'>" +
":root { " +
".main-color-custom { " +
"--main-color: " + value + "; " +
"} " +
"} " +
"</style>");
}
function setButtonColor(value) {
$('.ui-button').css('background-color', value);
}
$('#wrap_defaultStyleName').on('input', 'input', function() {
var styleName = $(this).val();
$body.removeClass(styleClasses).addClass(styleName + '-theme');
$('#defaultMainColor').trigger('input');
setButtonColor(styleName === 'light' ? 'black' : getMainColor());
});
$('#wrap_defaultMainColor').on('input', 'input', function() {
var value = 'main-color-' + $(this).val();
var color = $(this).closest('label').find('.defaultMainColorLabel').css('background') || $('#defaultMainColorCustom').val();
$body.removeClass(colorClasses).addClass(value);
setMainColor(color);
});
$('#defaultMainColorCustom').on('input', function() {
var value = $(this).val();
$body.removeClass(colorClasses).addClass('main-color-custom');
setMainColor(value);
});
$('.ui-button').on('mouseover', function() {
var color = getCurrentStyleName() === 'dark' ? 'white' : getMainColor();
$(this).css('background-color', color);
}).on('mouseout', function() {
var color = getCurrentStyleName() === 'dark' ? getMainColor() : 'black';
$(this).css('background-color', color);
});
});

View File

@@ -0,0 +1 @@
$(document).ready(function(){var colorClasses="main-color-red main-color-blue main-color-green main-color-custom";var styleClasses="light-theme dark-theme";var $body=$("body");function getCurrentStyleName(){if($body.hasClass("dark-theme"))return"dark";if($body.hasClass("light-theme"))return"light";var bgcolor=$("#pw-mastheads").css("background-color");bgcolor=bgcolor.replace(/[^0-9]/g,"").substring(0,3);$body.removeClass("auto-theme");var styleName=bgcolor==="000"?"dark":"light";$body.addClass(styleName+"-theme");return styleName}function getMainColor(){var $wrap=$("#wrap_defaultMainColor");var $f=$wrap.find("input:checked");if($f.val()==="custom")return $("#defaultMainColorCustom").val();return $f.closest("label").find(".defaultMainColorLabel").css("background-color")}function setMainColor(value){$("#main-color-custom").remove();$(".pw-logo-native").css("color",value);var styleName=getCurrentStyleName();setButtonColor(styleName==="dark"?value:"black");$("head").append("<style type='text/css' id='main-color-custom'>"+":root { "+".main-color-custom { "+"--main-color: "+value+"; "+"} "+"} "+"</style>")}function setButtonColor(value){$(".ui-button").css("background-color",value)}$("#wrap_defaultStyleName").on("input","input",function(){var styleName=$(this).val();$body.removeClass(styleClasses).addClass(styleName+"-theme");$("#defaultMainColor").trigger("input");setButtonColor(styleName==="light"?"black":getMainColor())});$("#wrap_defaultMainColor").on("input","input",function(){var value="main-color-"+$(this).val();var color=$(this).closest("label").find(".defaultMainColorLabel").css("background")||$("#defaultMainColorCustom").val();$body.removeClass(colorClasses).addClass(value);setMainColor(color)});$("#defaultMainColorCustom").on("input",function(){var value=$(this).val();$body.removeClass(colorClasses).addClass("main-color-custom");setMainColor(value)});$(".ui-button").on("mouseover",function(){var color=getCurrentStyleName()==="dark"?"white":getMainColor();$(this).css("background-color",color)}).on("mouseout",function(){var color=getCurrentStyleName()==="dark"?getMainColor():"black";$(this).css("background-color",color)})});

View File

@@ -0,0 +1,120 @@
<?php namespace ProcessWire;
/** @var AdminThemeUikit $adminTheme */
/** @var InputfieldWrapper $inputfields */
if($adminTheme->themeName === 'default') {
$adminTheme->wire()->config->scripts->add($adminTheme->url() . 'themes/default/config.js');
}
$inputfields->label = __('Default theme settings');
$inputfields->description = __('This default theme is created by Diogo Oliveira and Jan Ploch at [KONKAT STUDIO](https://konkat.studio/).');
$inputfields->icon = 'sliders';
$f = $inputfields->InputfieldRadios;
$f->attr('id+name', 'defaultStyleName');
$f->label = __('Would you like to default to light or dark mode?');
$f->description =
__('This setting is used for users that have not specifically chosen light or dark mode.') . ' ' .
__('When “Auto” is selected, the mode will be determined from the users browser or OS setting.');
$f->notes = __('Individual users can also choose light/dark/auto mode from the user tools menu.');
$f->addOption('light', __('Light'));
$f->addOption('dark', __('Dark'));
$f->addOption('auto', __('Auto') . ' ' .
'[span.detail] ' . __('(use browser/OS setting)') . ' [/span]' );
$f->optionColumns = 1;
$value = $adminTheme->get('defaultStyleName');
if(empty($value)) $value = 'auto';
$f->val($value);
$inputfields->add($f);
$f = $inputfields->InputfieldRadios;
$f->attr('id+name', 'defaultMainColor');
$f->label = __('Main color');
$span = "<span class='defaultMainColorLabel' style='color:#fff;padding:1px 5px 2px 5px;border-radius:4px;background:%s;'>%s</span>";
$f->addOption('red', sprintf($span, '#eb1d61', __('Red')));
$f->addOption('green', sprintf($span, '#14ae85', __('Green')));
$f->addOption('blue', sprintf($span, '#2380e6', __('Blue')));
$f->addOption('custom', __('Custom color picker…'));
$f->optionColumns = 1;
$f->entityEncodeText = false;
$f->columnWidth = 50;
$value = $adminTheme->get('defaultMainColor');
if(empty($value)) $value = 'red';
$f->val($value);
$inputfields->add($f);
$f = $inputfields->InputfieldText;
$f->attr('id+name', 'defaultMainColorCustom');
$f->label = __('Custom color');
$f->attr('type', 'color');
$f->showIf = 'defaultMainColor=custom';
$f->skipLabel = Inputfield::skipLabelHeader;
$f->appendMarkup .= " <span class='uk-margin-small-left uk-text-small'>&larr; " . __('Click to select a custom color') . "</span>";
$f->attr('style', 'width: 45px; padding: 1px 4px');
$value = (string) $adminTheme->get($f->attr('name'));
if(empty($value)) $value = '#eb1d61';
if(ctype_alnum(ltrim($value, '#'))) $f->val($value);
$inputfields->add($f);
$f = $inputfields->InputfieldCheckboxes;
$f->attr('id+name', 'defaultToggles');
$f->label = __('Toggles');
$f->addOption('noUserMenu',
__('Disable light/dark/auto setting in user tools menu?') . ' ' .
'[span.detail] ' . __('(this prevents users from making their own dark/light mode selection)') . ' [/span]'
);
$value = $adminTheme->get($f->name);
if(is_array($value)) $f->val($value);
$inputfields->add($f);
$url = $adminTheme->url() . 'themes/default/examples/';
$cssExamples = [
__('Borderless') => $url . 'borderless.css',
__('Masthead') => $url . 'masthead.css',
__('Minimal') => $url . 'minimal.css',
];
foreach($cssExamples as $label => $url) {
$cssExamples[$label] = "[$label]($url)";
}
$cssExamples = __('Examples:') . ' ' . implode(', ', $cssExamples);
$f = $inputfields->InputfieldURL;
$f->attr('name', 'defaultCustomCssFile');
$f->label = __('Custom CSS file');
$f->icon = 'css3';
$f->description = __('Enter a local URL (without scheme) relative to installation root, i.e. `/site/templates/styles/admin.css`');
$f->notes = $cssExamples;
$f->val((string) $adminTheme->get('defaultCustomCssFile'));
$f->allowQuotes = false;
$f->allowIDN = false;
$f->collapsed = Inputfield::collapsedBlank;
$inputfields->add($f);
$f->addHookAfter('processInput', function(HookEvent $e) {
$f = $e->object; /** @var InputfieldURL $f */
$value = (string) $f->val();
if(strpos($value, '//') !== false) {
$f->error(__('Do not include scheme (http, https) in your URL'));
$f->val('');
} else if($value) {
$file = $e->wire()->config->paths->root . ltrim($value, '/');
if(!file_exists($file)) {
$f->error(sprintf(__('File does not exist: %s'), $file));
}
}
});
if($adminTheme->wire()->config->advanced) {
$f = $inputfields->InputfieldTextarea;
$f->attr('name', 'defaultCustomCss');
$f->label = __('Custom CSS');
$f->icon = 'css3';
$f->description = __('Available in advanced mode only.');
$f->notes = $cssExamples;
$f->attr('style', 'font-family: Monaco, monospace');
$f->collapsed = Inputfield::collapsedBlank;
$value = (string) $adminTheme->get('defaultCustomCss');
$f->val(trim($value));
$inputfields->add($f);
}

View File

@@ -0,0 +1,258 @@
@import url("./admin-custom.css");
.mce-content-body {
font-family: "Inter", system-ui, sans-serif;
line-height: 1.5;
margin: 1rem;
font-size: 16px;
color: var(--text-color, #333);
background: var(--inputs-background, #f8f8f8);
}
a {
text-underline-offset: 0.125em;
}
.mce-content-body small {
font-size: 14px;
}
.mce-content-body strong,
.mce-content-body strong em,
.mce-content-body em strong {
font-weight: bold;
}
.mce-content-body em {
font-style: italic;
}
.mce-content-body h1,
.mce-content-body h2,
.mce-content-body h3,
.mce-content-body h4,
.mce-content-body h5,
.mce-content-body h6 {
color: var(--text-color, #222);
font-weight: bold;
line-height: 1.2em;
text-transform: none;
margin: 1rem 0;
}
.mce-content-body h1 {
font-size: 2rem;
}
.mce-content-body h2 {
font-size: 1.7rem;
}
.mce-content-body h3 {
font-size: 1.5rem;
}
.mce-content-body h4 {
font-size: 1.3rem;
}
.mce-content-body h5 {
font-size: 1.2rem;
}
.mce-content-body h6 {
font-size: 1.1rem;
}
.mce-content-body hr {
border-style: solid;
border-width: 1px 0 0 0;
}
.mce-content-body code {
border-radius: 3px;
padding: 0.1rem 0.2rem;
background-color: var(--muted-color, #f5f2f0);
color: var(--text-color, #222);
font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
}
.mce-content-body a {
color: var(--main-color, #0782c1);
text-decoration: underline;
}
.mce-content-body table:not([cellpadding]) td,
.mce-content-body table:not([cellpadding]) th {
padding: 0.4rem;
}
.mce-content-body
table[border]:not([border="0"]):not([style*="border-width"])
td,
.mce-content-body
table[border]:not([border="0"]):not([style*="border-width"])
th {
border-width: 1px;
}
.mce-content-body
table[border]:not([border="0"]):not([style*="border-style"])
td,
.mce-content-body
table[border]:not([border="0"]):not([style*="border-style"])
th {
border-style: solid;
}
.mce-content-body
table[border]:not([border="0"]):not([style*="border-color"])
td,
.mce-content-body
table[border]:not([border="0"]):not([style*="border-color"])
th {
border-color: var(--border-color, #ccc);
}
.mce-content-body span[lang] {
font-style: italic;
}
.mce-content-body table {
border-collapse: collapse;
}
.mce-content-body blockquote {
color: var(--text-color, #333);
border-color: var(--border-color, #ccc);
font-style: italic;
font-family: Georgia, Times, "Times New Roman", serif;
margin: 0;
padding: 0 1rem;
}
.mce-content-body:not([dir="rtl"]) blockquote {
border-left: 1px solid;
margin-left: 1.5rem;
padding-left: 1rem;
}
.mce-content-body[dir="rtl"] blockquote {
border-right: 2px solid;
margin-right: 1.5rem;
padding-right: 1rem;
}
.mce-content-body figure {
display: table;
margin-top: 1rem;
margin-bottom: 1rem;
}
.mce-content-body figure:first-child {
margin-top: 0;
}
.mce-content-body figure figcaption {
margin-top: 5px;
display: table-caption;
caption-side: bottom;
line-height: 1.3em;
font-size: 14px;
color: #999;
color: var(--muted-text, #999);
}
.mce-content-body .align_right,
.mce-content-body .align-right,
.mce-content-body .right {
text-align: right;
float: none;
}
.mce-content-body .align_left,
.mce-content-body .align-left,
.mce-content-body .left {
text-align: left;
float: none;
}
.mce-content-body .align_center,
.mce-content-body .align-center,
.mce-content-body .center {
text-align: center;
}
.mce-content-body .align_full,
.mce-content-body .align-full,
.mce-content-body .full {
text-align: justify;
}
.mce-content-body img.align_right,
.mce-content-body img.align-right,
.mce-content-body img.right,
.mce-content-body figure.align_right,
.mce-content-body figure.align-right,
.mce-content-body figure.right,
.mce-content-body table.align_right,
.mce-content-body table.align-right,
.mce-content-body table.right {
text-align: initial;
float: right;
margin-left: 1rem;
margin-right: 0;
margin-top: 0;
}
.mce-content-body img.align_left,
.mce-content-body img.align-left,
.mce-content-body img.left,
.mce-content-body figure.align_left,
.mce-content-body figure.align-left,
.mce-content-body figure.left,
.mce-content-body table.align_left,
.mce-content-body table.align-left,
.mce-content-body table.left {
text-align: initial;
float: left;
margin-top: 0;
margin-left: 0;
margin-right: 1rem;
}
.mce-content-body img.align_center,
.mce-content-body img.align-center,
.mce-content-body img.center,
.mce-content-body figure.align_center,
.mce-content-body figure.align-center,
.mce-content-body figure.center,
.mce-content-body table.align_center,
.mce-content-body table.align-center,
.mce-content-body table.center {
text-align: initial;
display: block;
margin-left: auto;
margin-right: auto;
}
.mce-content-body img.align_full,
.mce-content-body img.align-full,
.mce-content-body img.full,
.mce-content-body figure.align_full,
.mce-content-body figure.align-full,
.mce-content-body figure.full,
.mce-content-body table.align_full,
.mce-content-body table.align-full,
.mce-content-body table.full {
text-align: initial;
width: 100%;
}
.mce-content-body img {
max-width: 100%;
}
.mce-content-body img.align_center,
.mce-content-body img.align-center,
.mce-content-body img.center {
display: block;
}
.mce-content-body img:hover {
opacity: 0.9;
filter: alpha(opacity=90);
}
a > .mce-content-body img {
padding: 1px;
margin: 1px;
border: none;
outline: 1px solid var(--main-color, #0782c1);
}
.mce-content-body pre {
color: #333;
border: 1px dashed var(--border-color, #ccc);
padding: 0.5rem 1rem !important;
white-space: pre-wrap;
word-wrap: break-word;
-moz-tab-size: 4;
-o-tab-size: 4;
-webkit-tab-size: 4;
tab-size: 4;
}
.mce-content-body pre code {
background-color: initial;
}
.mce-content-body pre[class*="language-"] {
font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
font-size: 0.9375rem;
background: #f5f2f0;
margin: 0.5em 0;
padding: 0.5rem 1rem;
color: var(--muted-color, #777);
}
/*# sourceMappingURL=wire.css.map */

View File

@@ -0,0 +1 @@
/* intentionally blank */

View File

@@ -0,0 +1 @@
/* intentionally blank */

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
/* -------------------------------------------------------------------- */
/* ---- BORDERLESS --------------------------------------------------- */
/* ------------------------------------------------------------------ */
:root {
--border-color: var(--main-background);
--inputs-background: var(--blocks-background);
}

View File

@@ -0,0 +1,16 @@
/* -------------------------------------------------------------------- */
/* ---- THEME WITH COLOR MASTHEAD VARIABLES -------------------------- */
/* ---- (these depend on the default theme variables) --------------- */
/* ----------------------------------------------------------------- */
:root {
--masthead-background: var(--main-color);
--masthead-active-color: white;
--masthead-text-color: rgba(255,255,255,0.8);
--masthead-border-color: var(--main-background);
--masthead-logo-color: white;
--masthead-input-background: var(--masthead-background);
--masthead-input-color: var(--masthead-active-color);
--masthead-input-border: var(--masthead-text-color);
--masthead-menu-item-backgroud-hover: rgba(255,255,255,.2);
}

View File

@@ -0,0 +1,37 @@
/* -------------------------------------------------------------------- */
/* ---- MINIMAL LIGHT BLUE AND MINIMAL DARK VARIABLES ---------------- */
/* ------------------------------------------------------------------ */
:root {
--text-color: light-dark(blue, white);
--main-color: var(--text-color);
--main-background:light-dark(white, #222);
--border-color: light-dark(var(--text-color), var(--text-color));
--text-background: var(--main-background);
--inputs-background: var(--text-background);
--blocks-background: var(--text-background);
--muted-color: light-dark(#7c8efd, #8b8b8b);
--button-background: var(--text-background);
--button-color: light-dark(var(--text-color), var(--text-color));
--button-muted-color: var(--muted-color);
--button-border: var(--button-color);
--button-muted-background: var(--button-background);
--button-muted-border: var(--button-muted-color);
--button-hover-background: var(--button-color);
--button-hover-color: var(--button-background);
--button-hover-border: var(--button-color);
--masthead-background: var(--text-background);
--masthead-active-color: light-dark(var(--text-color), var(--text-color));
--masthead-text-color: var(--masthead-active-color);
--masthead-border-color: var(--masthead-active-color);
--masthead-logo-color: var(--masthead-active-color);
--alert-text-color: var(--text-color);
--alert-primary: light-dark(#ffd, var(--text-background));
--alert-warning: light-dark(#fcda6d, #d57f00);
--alert-success: light-dark(#97ecb2, #139472);
--alert-danger: light-dark(#ec9797, #8a1919);
--notes-background: light-dark(#ffd, #bdbdbd33);
}

View File

@@ -0,0 +1,121 @@
<?php namespace ProcessWire;
/** @var AdminThemeUikit $adminTheme */
/** @var WireInput $input */
/** @var Config $config */
/** @var Page $page */
/** @var User $user */
$themeInfo = $adminTheme->getThemeInfo();
$toggles = $adminTheme->defaultToggles;
$useDarkModeSwitcher =
$user->isLoggedin()
&& !in_array('noUserMenu', $toggles)
&& $user->hasPermission('page-edit');
/**
* Update TinyMCE to use our custom skin and content_css
*
*/
$adminTheme->addHookAfter('InputfieldTinyMCESettings::prepareSettingsForOutput', function(HookEvent $e) use($themeInfo) {
$o = $e->object; /** @var InputfieldTinyMCESettings $o */
$f = $o->inputfield;
$settings = $e->return;
$rootUrl = $e->wire()->config->urls->root;
$url = $rootUrl . ltrim($themeInfo['url'], '/');
if($rootUrl != '/' && strpos($url, $rootUrl) === 0) $url = substr($url, strlen($rootUrl)-1);
if(empty($settings['content_css']) || strpos($settings['content_css'], 'document.css') === false) {
$a = [
'content_css' => $url . 'content.css',
'content_css_url' => $url . 'content.css',
'skin_url' => rtrim($url, '/'),
'skin' => 'custom',
'toolbar_sticky_offset' => 55, // applies to inline mode only
];
$settings = array_merge($settings, $a);
$f->setArray($a);
} else {
// leave document mode as-is
}
$e->return = $settings;
});
/**
* Add a light/dark toggle to the user tools menu
*
*/
if($useDarkModeSwitcher) {
$adminTheme->addHookAfter('getUserNavArray', function(HookEvent $e) {
$adminTheme = $e->object; /** @var AdminThemeUikit $adminTheme */
$navArray = $e->return; /** @var array $navArray */
$lightLabel = __('Light mode', __FILE__);
$darkLabel = __('Dark mode', __FILE__);
$autoLabel = __('Auto', __FILE__);
$cancelLabel = $adminTheme->_('Cancel');
$okLabel = $adminTheme->_('Ok');
$dialogTitle = __('Light/dark mode');
array_unshift($navArray, [
'url' => '#toggle-light-dark-mode',
'title' => __('Light/dark', __FILE__),
'target' => '_top',
'icon' => 'adjust',
'class' => 'toggle-light-dark-mode',
'onclick' => 'return AdminDarkMode.toggleDialog();',
'data-label-light' => $lightLabel,
'data-label-dark' => $darkLabel,
'data-label-auto' => $dialogTitle,
'data-icon-light' => 'sun-o',
'data-icon-dark' => 'moon-o',
'data-icon-auto' => 'adjust',
]);
$e->return = $navArray;
$adminTheme->addExtraMarkup('body', '
<div id="light-dark-mode-dialog" hidden>
<div class="uk-modal-body">
<p>
<label><input type="radio" class="uk-radio" name="mode" data-name="light" value="0"> ' . $lightLabel . '</label>&nbsp;&nbsp;
<label><input type="radio" class="uk-radio" name="mode" data-name="dark" value="1"> ' . $darkLabel . '</label>&nbsp;&nbsp;
<label><input type="radio" class="uk-radio" name="mode" data-name="auto" value="-1"> ' . $autoLabel . '</label>
</p>
</div>
<div class="uk-modal-footer uk-text-right">
<button class="uk-button uk-button-default uk-modal-close" type="button">' . $cancelLabel . '</button>
<button class="uk-button uk-button-primary uk-modal-close" autofocus>' . $okLabel . '</button>
</div>
</div>
');
});
$setDarkMode = $input->post('set_admin_dark_mode');
if($setDarkMode !== null && $config->ajax && $page->process == 'ProcessHome') {
$setDarkMode = (int) $setDarkMode;
if($setDarkMode === 0 || $setDarkMode === 1 || $setDarkMode === -1) {
$user->meta('adminDarkMode', (int) $setDarkMode);
header('content-type', 'application/json');
return die(json_encode([
'status' => 'ok',
'adminDarkMode' => (int) $setDarkMode
]));
}
}
}
/**
* Add notes to InputfieldTinyMCE module config indicating which settings are overridden
*
*/
if($page->process == 'ProcessModule' && $input->get('name') === 'InputfieldTinyMCE') {
$page->wire()->addHookAfter('InputfieldTinyMCE::getModuleConfigInputfields', function(HookEvent $e) {
$inputfields = $e->arguments(0); /** @var InputfieldWrapper $inputfields */
$a = [ 'skin', 'content_css', 'content_css_url' ];
$note = __('PLEASE NOTE: this setting is currently overridden by AdminThemeUikit “default” theme.', __FILE__);
foreach($a as $name) {
$f = $inputfields->get($name);
if($f && $f->val() != 'document') $f->notes = $note;
}
});
}

View File

@@ -0,0 +1,21 @@
body:has(#pw-content-body > form[action="./install.php"]) #pw-mastheads {
visibility: hidden;
}
body:has(#pw-content-body > form[action="./install.php"]) #pw-content-head h1 {
background-image: url('data:image/svg+xml,<svg fill="%23eb1d61" height="40px" width="40px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid"><g><path d="M234.02346,56.2065308 C226.258185,44.611679 213.340949,31.3634673 200.370381,22.7873303 C173.426584,4.33370224 142.216153,-2.21573572 114.611028,0.642976614 C85.8219124,3.7470262 61.1714319,14.5951995 40.9049183,32.6861551 C22.1317268,49.454423 9.73715371,69.9560838 4.27586162,89.5083961 C-1.24942998,109.060708 -0.513435538,127.162331 1.45988289,140.794549 C3.53986718,154.629436 10.4304818,172.037714 10.4304818,172.037714 C11.8384712,175.376434 13.7904564,176.731123 14.8037821,177.296465 C19.8384108,180.048509 28.105015,177.627137 34.4516337,170.50169 C34.7716313,170.06435 34.9422967,169.45634 34.7716313,168.944332 C33.000978,162.128223 32.3609828,156.997474 31.7316543,153.029411 C30.2916651,145.178619 29.65167,132.026409 30.6116627,119.866214 C31.0916591,113.284776 32.3716494,106.244663 34.6116325,98.8632122 C38.9422665,84.281646 48.0728642,69.0600695 62.3447564,56.4092007 C77.715307,42.7876498 97.4271581,34.3715154 116.16835,32.1954806 C122.738967,31.4061347 135.240206,30.6487893 150.290759,34.3608485 C153.501401,35.1608613 167.282631,38.7555854 182.023853,48.7397449 C192.754438,56.0358614 201.394373,65.0386719 207.346328,73.9454809 C213.404949,82.44695 219.986232,96.783179 221.916885,107.279347 C224.647531,119.226204 224.647531,131.88774 222.706212,144.218603 C220.30623,156.570801 215.975596,168.581659 209.24498,179.152495 C204.605015,187.344626 194.983755,198.171465 183.613174,206.299595 C173.362585,213.510377 161.66134,218.715793 149.650764,221.595839 C143.57081,223.035862 137.469522,223.95321 131.218903,224.15588 C125.661612,224.32655 118.291001,224.15588 113.117706,223.2812 C105.427098,222.054513 103.82711,220.091815 102.067123,217.425106 C102.067123,217.425106 100.840466,215.505075 100.499135,210.36366 C100.616467,163.376243 100.595134,175.920443 100.595134,151.525387 C100.595134,144.63461 100.371136,138.383844 100.435135,132.709086 C100.755133,123.396937 101.54446,116.996835 108.20041,110.063391 C113.01104,104.953976 119.741656,101.87126 127.154934,101.87126 C129.405583,101.87126 137.160191,101.977929 143.97614,107.642019 C151.282751,113.74345 152.509409,122.084916 152.797407,124.314285 C154.461394,137.359827 145.842792,147.077316 142.536151,149.541355 C138.440182,152.613404 134.760209,154.106761 132.274895,154.981442 C126.984268,156.752137 121.170979,157.264145 115.944352,156.922806 C115.144358,156.869472 114.41903,157.392147 114.259031,158.19216 L112.499044,167.322972 C110.781724,174.256417 114.632361,176.795124 116.872345,177.691138 C124.029624,179.899173 130.376243,180.816521 137.896186,180.251179 C149.426765,179.440499 160.797346,174.896427 170.450607,165.893616 C178.663878,158.085492 183.346509,148.453338 184.946497,137.679832 C186.546485,125.722308 184.466501,112.847436 179.015875,101.945928 C173.021254,89.9244028 162.674665,79.8869091 149.042768,74.393488 C135.272206,68.9747348 124.317622,68.7827317 110.195062,72.3881226 L110.035063,72.4414568 C100.861799,75.5988406 93.0111915,79.4922361 84.8405865,87.9297042 C79.2406288,93.7537973 74.6539968,100.804577 71.8593512,108.762037 C69.0860388,116.783498 68.3393778,122.767594 68.2113788,132.069076 C68.0407134,138.959853 68.3713775,145.359955 68.3713775,151.354717 L68.3713775,190.832681 C68.3713775,203.462216 67.9447141,205.648918 68.3713775,212.145022 C68.6060424,216.454424 69.2033713,221.329168 71.091357,226.566585 C73.0326757,232.337344 77.1073116,238.257439 79.9019571,240.988149 C83.8165942,245.158882 88.7978899,248.508269 93.693853,250.588302 C104.904435,255.569715 120.125653,256.359061 132.466893,255.879054 C140.637498,255.569715 148.85077,254.439031 156.904042,252.529667 C173.010587,248.700272 188.477137,241.734828 202.077034,232.070673 C216.658258,221.798509 229.330162,207.782285 236.327442,195.878095 C245.298041,181.733869 251.100664,165.861616 254.119308,149.552022 C256.839287,133.210428 256.711288,116.452827 253.063316,100.356569 C250.183338,85.4229975 242.492729,69.0387358 233.61813,55.8118579 L234.02346,56.2065308 Z"></path></g></svg>');
background-repeat: no-repeat;
background-position: left center;
background-size: 37px;
padding-left: 51px;
}
body #pw-content-body > form[action="./install.php"] > h2 i {
margin-right: 7px;
}
.pw
body:has(#pw-content-body > form[action="./install.php"])
#pw-masthead-mobile {
visibility: hidden;
}

View File

@@ -0,0 +1,6 @@
<svg fill="currentColor" class="pw-logo-native" height="40px" width="40px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid">
<g>
<path d="M234.02346,56.2065308 C226.258185,44.611679 213.340949,31.3634673 200.370381,22.7873303 C173.426584,4.33370224 142.216153,-2.21573572 114.611028,0.642976614 C85.8219124,3.7470262 61.1714319,14.5951995 40.9049183,32.6861551 C22.1317268,49.454423 9.73715371,69.9560838 4.27586162,89.5083961 C-1.24942998,109.060708 -0.513435538,127.162331 1.45988289,140.794549 C3.53986718,154.629436 10.4304818,172.037714 10.4304818,172.037714 C11.8384712,175.376434 13.7904564,176.731123 14.8037821,177.296465 C19.8384108,180.048509 28.105015,177.627137 34.4516337,170.50169 C34.7716313,170.06435 34.9422967,169.45634 34.7716313,168.944332 C33.000978,162.128223 32.3609828,156.997474 31.7316543,153.029411 C30.2916651,145.178619 29.65167,132.026409 30.6116627,119.866214 C31.0916591,113.284776 32.3716494,106.244663 34.6116325,98.8632122 C38.9422665,84.281646 48.0728642,69.0600695 62.3447564,56.4092007 C77.715307,42.7876498 97.4271581,34.3715154 116.16835,32.1954806 C122.738967,31.4061347 135.240206,30.6487893 150.290759,34.3608485 C153.501401,35.1608613 167.282631,38.7555854 182.023853,48.7397449 C192.754438,56.0358614 201.394373,65.0386719 207.346328,73.9454809 C213.404949,82.44695 219.986232,96.783179 221.916885,107.279347 C224.647531,119.226204 224.647531,131.88774 222.706212,144.218603 C220.30623,156.570801 215.975596,168.581659 209.24498,179.152495 C204.605015,187.344626 194.983755,198.171465 183.613174,206.299595 C173.362585,213.510377 161.66134,218.715793 149.650764,221.595839 C143.57081,223.035862 137.469522,223.95321 131.218903,224.15588 C125.661612,224.32655 118.291001,224.15588 113.117706,223.2812 C105.427098,222.054513 103.82711,220.091815 102.067123,217.425106 C102.067123,217.425106 100.840466,215.505075 100.499135,210.36366 C100.616467,163.376243 100.595134,175.920443 100.595134,151.525387 C100.595134,144.63461 100.371136,138.383844 100.435135,132.709086 C100.755133,123.396937 101.54446,116.996835 108.20041,110.063391 C113.01104,104.953976 119.741656,101.87126 127.154934,101.87126 C129.405583,101.87126 137.160191,101.977929 143.97614,107.642019 C151.282751,113.74345 152.509409,122.084916 152.797407,124.314285 C154.461394,137.359827 145.842792,147.077316 142.536151,149.541355 C138.440182,152.613404 134.760209,154.106761 132.274895,154.981442 C126.984268,156.752137 121.170979,157.264145 115.944352,156.922806 C115.144358,156.869472 114.41903,157.392147 114.259031,158.19216 L112.499044,167.322972 C110.781724,174.256417 114.632361,176.795124 116.872345,177.691138 C124.029624,179.899173 130.376243,180.816521 137.896186,180.251179 C149.426765,179.440499 160.797346,174.896427 170.450607,165.893616 C178.663878,158.085492 183.346509,148.453338 184.946497,137.679832 C186.546485,125.722308 184.466501,112.847436 179.015875,101.945928 C173.021254,89.9244028 162.674665,79.8869091 149.042768,74.393488 C135.272206,68.9747348 124.317622,68.7827317 110.195062,72.3881226 L110.035063,72.4414568 C100.861799,75.5988406 93.0111915,79.4922361 84.8405865,87.9297042 C79.2406288,93.7537973 74.6539968,100.804577 71.8593512,108.762037 C69.0860388,116.783498 68.3393778,122.767594 68.2113788,132.069076 C68.0407134,138.959853 68.3713775,145.359955 68.3713775,151.354717 L68.3713775,190.832681 C68.3713775,203.462216 67.9447141,205.648918 68.3713775,212.145022 C68.6060424,216.454424 69.2033713,221.329168 71.091357,226.566585 C73.0326757,232.337344 77.1073116,238.257439 79.9019571,240.988149 C83.8165942,245.158882 88.7978899,248.508269 93.693853,250.588302 C104.904435,255.569715 120.125653,256.359061 132.466893,255.879054 C140.637498,255.569715 148.85077,254.439031 156.904042,252.529667 C173.010587,248.700272 188.477137,241.734828 202.077034,232.070673 C216.658258,221.798509 229.330162,207.782285 236.327442,195.878095 C245.298041,181.733869 251.100664,165.861616 254.119308,149.552022 C256.839287,133.210428 256.711288,116.452827 253.063316,100.356569 C250.183338,85.4229975 242.492729,69.0387358 233.61813,55.8118579 L234.02346,56.2065308 Z">
</path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,58 @@
<?php namespace ProcessWire;
/** @var Config $config */
/** @var AdminThemeUikit $adminTheme */
/** @var User $user */
/** @var WireInput $input */
/** @var Page $page */
$themeInfo = $adminTheme->getThemeInfo();
$customCss = $adminTheme->get('defaultCustomCss');
$customCssFile = $adminTheme->get('defaultCustomCssFile');
$mainColors = [
'red' => '#eb1d61',
'green' => '#14ae85',
'blue' => '#2380e6',
'custom' => $adminTheme->get('defaultMainColorCustom'),
];
$config->styles->append($themeInfo['url'] . 'admin.css');
$config->scripts->append($themeInfo['url'] . 'admin.js');
if($customCssFile) {
$config->styles->append($config->urls->root . ltrim($customCssFile, '/'));
}
if($page->process == 'ProcessModule' && $input->get('name') === $adminTheme->className()) {
$darkMode = null;
} else {
$darkMode = $user->meta('adminDarkMode');
}
if($darkMode === 1) {
$styleName = 'dark';
} else if($darkMode === 0) {
$styleName = 'light';
} else {
$styleName = $adminTheme->get('defaultStyleName');
if(empty($styleName)) $styleName = 'light';
}
$adminTheme->addBodyClass("$styleName-theme");
$mainColor = $adminTheme->get('defaultMainColor');
if(empty($mainColor)) $mainColor = 'red';
$adminTheme->addBodyClass("main-color-$mainColor");
$mainColorCode = isset($mainColors[$mainColor]) ? $mainColors[$mainColor] : $mainColors['red'];
if(strpos($mainColorCode, '#') === 0 && ctype_alnum(ltrim($mainColorCode, '#'))) {
$adminTheme->addExtraMarkup('head',
"<style id='main-color-custom' type='text/css'>:root { --main-color: $mainColorCode }</style>"
);
}
if($customCss) {
$customCss = htmlspecialchars($customCss, ENT_NOQUOTES);
$adminTheme->addExtraMarkup('head', "<style id='default-custom-css' type='text/css'>$customCss</style>");
}

File diff suppressed because it is too large Load Diff