Add /css-var slash command

- Add /css-var slash command to set CSS variables on some elements
- Update gallery div id to something actually unique ("#draggable_gallery")
This commit is contained in:
Wolfsblvt
2025-01-09 18:37:50 +01:00
parent 23779fe565
commit a8b5f8a95f
3 changed files with 91 additions and 1 deletions

View File

@ -277,7 +277,7 @@ function makeMovable(id = 'gallery') {
const newElement = $(template);
newElement.css('background-color', 'var(--SmartThemeBlurTintColor)');
newElement.attr('forChar', id);
newElement.attr('id', `${id}`);
newElement.attr('id', `draggable_${id}`);
newElement.find('.drag-grabber').attr('id', `${id}header`);
newElement.find('.dragTitle').text('Image Gallery');
//add a div for the gallery

View File

@ -3962,6 +3962,95 @@ $(document).ready(() => {
</div>
`,
}));
SlashCommandParser.addCommandObject(SlashCommand.fromProps({
name: 'css-var',
/** @param {{to: string, varname: string }} args @param {string} value @returns {string} */
callback: (args, value) => {
// Map enum to target selector
const targetSelector = {
chat: '#chat',
background: '#bg1',
gallery: '#draggable_gallery',
zoomedAvatar: 'div.zoomed_avatar',
}[args.to || 'chat'];
if (!targetSelector) {
toastr.error(`Invalid target: ${args.to}`);
return;
}
if (!args.varname) {
toastr.error('CSS variable name is required');
return;
}
if (!args.varname.startsWith('--')) {
toastr.error('CSS variable names must start with "--"');
return;
}
const elements = document.querySelectorAll(targetSelector);
if (elements.length === 0) {
toastr.error(`No elements found for ${args.to ?? 'chat'} with selector "${targetSelector}"`);
return;
}
elements.forEach(element => {
element.style.setProperty(args.varname, value);
});
console.info(`Set CSS variable "${args.varname}" to "${value}" on "${targetSelector}"`);
},
namedArgumentList: [
SlashCommandNamedArgument.fromProps({
name: 'varname',
description: 'CSS variable name (starting with double dashes)',
typeList: [ARGUMENT_TYPE.STRING],
isRequired: true,
}),
SlashCommandNamedArgument.fromProps({
name: 'to',
description: 'The target element to which the CSS variable will be applied',
typeList: [ARGUMENT_TYPE.STRING],
enumList: [
new SlashCommandEnumValue('chat', null, enumTypes.enum, enumIcons.message),
new SlashCommandEnumValue('background', null, enumTypes.enum, enumIcons.image),
new SlashCommandEnumValue('zoomedAvatar', null, enumTypes.enum, enumIcons.character),
new SlashCommandEnumValue('gallery', null, enumTypes.enum, enumIcons.image),
],
defaultValue: 'chat',
}),
],
unnamedArgumentList: [
SlashCommandArgument.fromProps({
description: 'CSS variable value',
typeList: [ARGUMENT_TYPE.STRING],
isRequired: true,
}),
],
helpString: `
<div>
Sets a CSS variable to a specified value on a target element.
<br />
Only setting of variable names is supported. They have to be prefixed with double dashes ("--exampleVar").
Setting actual CSS properties is not supported. Custom CSS in the theme settings can be used for that.
<br /><br />
<b>This value will be gone after a page reload!</b>
</div>
<div>
<strong>Example:</strong>
<ul>
<li>
<pre><code>/css-var varname="--SmartThemeBodyColor" #ff0000</code></pre>
Sets the text color of the chat to red
</li>
<li>
<pre><code>/css-var to=zoomedAvatar varname="--SmartThemeBlurStrength" 0</code></pre>
Remove the blur from the zoomed avatar
</li>
</ul>
</div>
`,
}));
SlashCommandParser.addCommandObject(SlashCommand.fromProps({
name: 'movingui',
callback: setmovingUIPreset,

View File

@ -37,6 +37,7 @@ export const enumIcons = {
voice: '🎤',
server: '🖥️',
popup: '🗔',
image: '🖼️',
true: '✔️',
false: '❌',