mirror of
https://github.com/NovaGM/ModuleBuilder.git
synced 2024-08-15 00:23:33 +00:00
[*Theme] Stricter character set for variable extraction regex
This commit is contained in:
parent
8aa61cf30b
commit
768db5ae3f
1 changed files with 170 additions and 0 deletions
170
src/preprocessors/genericTheme.js
Normal file
170
src/preprocessors/genericTheme.js
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
const discordVars = [
|
||||||
|
'--header-primary',
|
||||||
|
'--header-secondary',
|
||||||
|
'--text-normal',
|
||||||
|
'--text-muted',
|
||||||
|
'--text-link',
|
||||||
|
'--channels-default',
|
||||||
|
'--interactive-normal',
|
||||||
|
'--interactive-hover',
|
||||||
|
'--interactive-active',
|
||||||
|
'--interactive-muted',
|
||||||
|
'--background-primary',
|
||||||
|
'--background-secondary',
|
||||||
|
'--background-secondary-alt',
|
||||||
|
'--background-tertiary',
|
||||||
|
'--background-accent',
|
||||||
|
'--background-floating',
|
||||||
|
'--background-mobile-primary',
|
||||||
|
'--background-mobile-secondary',
|
||||||
|
'--background-modifier-hover',
|
||||||
|
'--background-modifier-active',
|
||||||
|
'--background-modifier-selected',
|
||||||
|
'--background-modifier-accent',
|
||||||
|
'--background-mentioned',
|
||||||
|
'--background-mentioned-hover',
|
||||||
|
'--background-message-hover',
|
||||||
|
'--background-help-warning',
|
||||||
|
'--background-help-info',
|
||||||
|
'--scrollbar-thin-thumb',
|
||||||
|
'--scrollbar-thin-track',
|
||||||
|
'--scrollbar-auto-thumb',
|
||||||
|
'--scrollbar-auto-track',
|
||||||
|
'--scrollbar-auto-scrollbar-color-thumb',
|
||||||
|
'--scrollbar-auto-scrollbar-color-track',
|
||||||
|
'--elevation-stroke',
|
||||||
|
'--elevation-low',
|
||||||
|
'--elevation-medium',
|
||||||
|
'--elevation-high',
|
||||||
|
'--logo-primary',
|
||||||
|
'--focus-primary',
|
||||||
|
'--radio-group-dot-foreground',
|
||||||
|
'--guild-header-text-shadow',
|
||||||
|
'--channeltextarea-background',
|
||||||
|
'--activity-card-background',
|
||||||
|
'--textbox-markdown-syntax',
|
||||||
|
'--deprecated-card-bg',
|
||||||
|
'--deprecated-card-editable-bg',
|
||||||
|
'--deprecated-store-bg',
|
||||||
|
'--deprecated-quickswitcher-input-background',
|
||||||
|
'--deprecated-quickswitcher-input-placeholder',
|
||||||
|
'--deprecated-text-input-bg',
|
||||||
|
'--deprecated-text-input-border',
|
||||||
|
'--deprecated-text-input-border-hover',
|
||||||
|
'--deprecated-text-input-border-disabled',
|
||||||
|
'--deprecated-text-input-prefix',
|
||||||
|
];
|
||||||
|
|
||||||
|
export default (manifest, content, repo) => {
|
||||||
|
let variables = content.match(/--([^*!\n}]*): ([^*!\n}]*);/g) || [];
|
||||||
|
if (variables.length > 0)
|
||||||
|
variables = variables.map((x) => {
|
||||||
|
const spl = x.split(':');
|
||||||
|
|
||||||
|
let name = spl[0].trim();
|
||||||
|
let val = spl.slice(1).join(':').trim().slice(0, -1).replace(' !important', '');
|
||||||
|
|
||||||
|
let type = 'text';
|
||||||
|
|
||||||
|
if (val.match(/(#[0-9a-fA-F]{6}|([0-9]{1,3}, ?[0-9]{1,3}, ?[0-9]{1,3}))/)) {
|
||||||
|
type = 'color';
|
||||||
|
}
|
||||||
|
|
||||||
|
return [name, val, type];
|
||||||
|
});
|
||||||
|
|
||||||
|
// Filter out Discord standard vars, and duplicate names
|
||||||
|
if (variables.length > 0)
|
||||||
|
variables = variables.filter(
|
||||||
|
(x, i, s) =>
|
||||||
|
!discordVars.includes(x[0]) &&
|
||||||
|
!x[1].includes('var(') &&
|
||||||
|
!x[0].includes('glasscord') &&
|
||||||
|
s.indexOf(s.find((y) => y[0] === x[0])) === i,
|
||||||
|
);
|
||||||
|
|
||||||
|
const toShowSettings = repo[5] === true && variables.length > 0;
|
||||||
|
|
||||||
|
console.log(variables, toShowSettings);
|
||||||
|
|
||||||
|
return `// Generated by MS2Builder - genericTheme preprocessor / porter
|
||||||
|
let style;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
goosemodHandlers: {
|
||||||
|
onImport: async () => {
|
||||||
|
style = document.createElement("style");
|
||||||
|
document.head.appendChild(style);
|
||||||
|
style.appendChild(
|
||||||
|
document.createTextNode(
|
||||||
|
\`${content}\`
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (${toShowSettings} || (goosemodScope.settings.gmSettings.get().allThemeSettings)) goosemodScope.settings.createItem('${
|
||||||
|
manifest.name
|
||||||
|
}', [
|
||||||
|
'',
|
||||||
|
|
||||||
|
${variables
|
||||||
|
.map(
|
||||||
|
(x) => `{
|
||||||
|
type: '${x[2] === 'color' ? 'text-and-color' : 'text-input'}',
|
||||||
|
text: '${x[0]
|
||||||
|
.replace('--rs-', '--radial-status:-')
|
||||||
|
.substring(2)
|
||||||
|
.replace(/-/g, ' ')
|
||||||
|
.replace(/\w\S*/g, (_) => _[0].toUpperCase() + _.substring(1).toLowerCase())
|
||||||
|
.replace('Rgb', 'RGB')
|
||||||
|
.replace('Afk', 'AFK')
|
||||||
|
.replace('Dnd', 'DND')}',
|
||||||
|
|
||||||
|
oninput: (val) => {
|
||||||
|
${
|
||||||
|
x[1][0] !== '#'
|
||||||
|
? `val = parseInt(val.substring(1, 3), 16).toString() + ', ' + parseInt(val.substring(3, 5), 16).toString() + ', ' + parseInt(val.substring(5, 7), 16).toString()`
|
||||||
|
: ''
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(val);
|
||||||
|
|
||||||
|
document.body.style.setProperty('${x[0]}', val);
|
||||||
|
},
|
||||||
|
initialValue: () => {
|
||||||
|
let val = document.body.style.getPropertyValue(\`${x[0]}\`) || \`${x[1]}\`;
|
||||||
|
${
|
||||||
|
x[2] === 'color'
|
||||||
|
? `if (val[0] !== '#') { val = '#' + val.split(', ').map((x) => parseInt(x).toString(16).padStart(2, '0')).join(''); }`
|
||||||
|
: ''
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(val);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}`,
|
||||||
|
)
|
||||||
|
.join(', ')}
|
||||||
|
])
|
||||||
|
},
|
||||||
|
|
||||||
|
onRemove: async () => {
|
||||||
|
style.remove();
|
||||||
|
|
||||||
|
try {
|
||||||
|
goosemodScope.settings.removeItem('${manifest.name}');
|
||||||
|
} catch (e) { }
|
||||||
|
},
|
||||||
|
|
||||||
|
getSettings: async () => [${variables
|
||||||
|
.map((x) => `['${x[0]}', document.body.style.getPropertyValue(\`${x[0]}\`)]`)
|
||||||
|
.join(', ')}],
|
||||||
|
loadSettings: async (settings) => {
|
||||||
|
settings.forEach((x) => {
|
||||||
|
document.body.style.setProperty(x[0], x[1]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};`;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue