您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
More theme control for my-online-database.com
- // ==UserScript==
- // @name Custom Theme Editor
- // @namespace https://my-online-database.com/
- // @version 1.0
- // @icon https://i.imgur.com/41ykvVf.png
- // @description More theme control for my-online-database.com
- // @author New Jack 9999
- // @match https://my-online-database.com/
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // Utility function to convert RGB to Hex
- function rgbToHex(rgb) {
- // Check if input is already in hex
- if (rgb.startsWith('#')) return rgb;
- const result = rgb.match(/\d+/g);
- if (!result) return '#000000';
- const r = parseInt(result[0]).toString(16).padStart(2, '0');
- const g = parseInt(result[1]).toString(16).padStart(2, '0');
- const b = parseInt(result[2]).toString(16).padStart(2, '0');
- return `#${r}${g}${b}`;
- }
- // Define the color picker elements
- const colorPickerElements = [
- { label: 'Primary Color', variable: '--primary-color' },
- { label: 'Secondary Color', variable: '--secondary-color' },
- { label: 'Border Color', variable: '--border-color' },
- { label: 'Header Background', variable: '--header-bg' },
- { label: 'Row Hover', variable: '--row-hover' },
- { label: 'Toolbar Background', variable: '--toolbar-bg' },
- { label: 'Selected Background', variable: '--selected-bg' },
- { label: 'Danger Color', variable: '--danger-color' },
- { label: 'Success Color', variable: '--success-color' },
- { label: 'Warning Color', variable: '--warning-color' },
- { label: 'App Header Background', variable: '--app-header-bg' },
- { label: 'Text Primary', variable: '--text-primary' },
- { label: 'Text Secondary', variable: '--text-secondary' },
- { label: 'Text Muted', variable: '--text-muted' },
- { label: 'Background Primary', variable: '--bg-primary' },
- { label: 'Background Secondary', variable: '--bg-secondary' },
- { label: 'Background Tertiary', variable: '--bg-tertiary' },
- { label: 'Input Background', variable: '--input-bg' },
- { label: 'Input Border', variable: '--input-border' },
- { label: 'Input Text', variable: '--input-text' },
- { label: 'Input Placeholder', variable: '--input-placeholder' },
- { label: 'Card Background', variable: '--card-bg' },
- { label: 'Modal Background', variable: '--modal-bg' },
- { label: 'Tooltip Background', variable: '--tooltip-bg' },
- { label: 'Tooltip Text', variable: '--tooltip-text' },
- { label: 'Button Text Color', variable: '--text-buttoncolor' }
- ];
- // Define predefined themes with default colors
- const predefinedThemes = {
- 'Hello Kitty 1': {
- '--primary-color': '#FFC0CB', // Pink
- '--secondary-color': '#FF69B4', // HotPink
- '--border-color': '#FFD700', // Gold
- '--header-bg': '#FFB6C1', // LightPink
- '--row-hover': '#FFF0F5', // LavenderBlush
- '--toolbar-bg': '#FF1493', // DeepPink
- '--selected-bg': '#DB7093', // PaleVioletRed
- '--danger-color': '#FF4500', // OrangeRed
- '--success-color': '#32CD32', // LimeGreen
- '--warning-color': '#FFA500', // Orange
- '--app-header-bg': '#FF69B4', // HotPink
- '--text-primary': '#800080', // Purple
- '--text-secondary': '#FF1493', // DeepPink
- '--text-muted': '#DA70D6', // Orchid
- '--bg-primary': '#FFF0F5', // LavenderBlush
- '--bg-secondary': '#FFB6C1', // LightPink
- '--bg-tertiary': '#FFC0CB', // Pink
- '--input-bg': '#FFFAFA', // Snow
- '--input-border': '#FF69B4', // HotPink
- '--input-text': '#800080', // Purple
- '--input-placeholder': '#DA70D6', // Orchid
- '--card-bg': '#FFE4E1', // MistyRose
- '--modal-bg': '#FFDAB9', // PeachPuff
- '--tooltip-bg': '#FF69B4', // HotPink
- '--tooltip-text': '#FFFFFF', // White
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'DOS 1': {
- '--primary-color': '#000080', // Navy
- '--secondary-color': '#0000FF', // Blue
- '--border-color': '#808080', // Gray
- '--header-bg': '#00008B', // DarkBlue
- '--row-hover': '#C0C0C0', // Silver
- '--toolbar-bg': '#1E90FF', // DodgerBlue
- '--selected-bg': '#4682B4', // SteelBlue
- '--danger-color': '#FF0000', // Red
- '--success-color': '#00FF00', // Lime
- '--warning-color': '#FFD700', // Gold
- '--app-header-bg': '#0000CD', // MediumBlue
- '--text-primary': '#FFFFFF', // White
- '--text-secondary': '#D3D3D3', // LightGray
- '--text-muted': '#A9A9A9', // DarkGray
- '--bg-primary': '#000000', // Black
- '--bg-secondary': '#2F4F4F', // DarkSlateGray
- '--bg-tertiary': '#696969', // DimGray
- '--input-bg': '#1C1C1C', // Very Dark Gray
- '--input-border': '#FFFFFF', // White
- '--input-text': '#FFFFFF', // White
- '--input-placeholder': '#808080', // Gray
- '--card-bg': '#333333', // Dark Gray
- '--modal-bg': '#2F4F4F', // DarkSlateGray
- '--tooltip-bg': '#000080', // Navy
- '--tooltip-text': '#FFFFFF', // White
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'Ethereum': {
- '--primary-color': '#3C3C3D', // Ethereum Dark Gray
- '--secondary-color': '#8C8C8C', // Ethereum Light Gray
- '--border-color': '#CCCCCC', // Light Gray
- '--header-bg': '#24292E', // Dark Header
- '--row-hover': '#2C2F33', // Darker Hover
- '--toolbar-bg': '#7289DA', // Blurple
- '--selected-bg': '#99AAB5', // Light Gray
- '--danger-color': '#F04747', // Red
- '--success-color': '#43B581', // Green
- '--warning-color': '#FAA61A', // Orange
- '--app-header-bg': '#2C2F33', // Darker Header
- '--text-primary': '#FFFFFF', // White
- '--text-secondary': '#99AAB5', // Light Gray
- '--text-muted': '#72767D', // Gray
- '--bg-primary': '#23272A', // Dark Background
- '--bg-secondary': '#2C2F33', // Darker Background
- '--bg-tertiary': '#99AAB5', // Light Gray
- '--input-bg': '#2C2F33', // Dark Input
- '--input-border': '#99AAB5', // Light Gray
- '--input-text': '#FFFFFF', // White
- '--input-placeholder': '#72767D', // Gray
- '--card-bg': '#2C2F33', // Dark Card
- '--modal-bg': '#23272A', // Dark Modal
- '--tooltip-bg': '#99AAB5', // Light Gray
- '--tooltip-text': '#23272A', // Dark Text
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'Reddit': {
- '--primary-color': '#FF4500', // OrangeRed
- '--secondary-color': '#FFFFFF', // White
- '--border-color': '#FF4500', // OrangeRed
- '--header-bg': '#FF4500', // OrangeRed
- '--row-hover': '#FFD9B3', // Light Orange
- '--toolbar-bg': '#FF4500', // OrangeRed
- '--selected-bg': '#FFB347', // Light Orange
- '--danger-color': '#FF0000', // Red
- '--success-color': '#00FF00', // Lime
- '--warning-color': '#FFA500', // Orange
- '--app-header-bg': '#FF4500', // OrangeRed
- '--text-primary': '#FFFFFF', // White
- '--text-secondary': '#FF4500', // OrangeRed
- '--text-muted': '#B3B3B3', // Gray
- '--bg-primary': '#FFFFFF', // White
- '--bg-secondary': '#F5F5F5', // Light Gray
- '--bg-tertiary': '#FFDDCC', // Light Orange
- '--input-bg': '#FFFFFF', // White
- '--input-border': '#FF4500', // OrangeRed
- '--input-text': '#000000', // Black
- '--input-placeholder': '#B3B3B3', // Gray
- '--card-bg': '#FFFFFF', // White
- '--modal-bg': '#FFFFFF', // White
- '--tooltip-bg': '#FF4500', // OrangeRed
- '--tooltip-text': '#FFFFFF', // White
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'Google Chrome': {
- '--primary-color': '#4285F4', // Blue
- '--secondary-color': '#34A853', // Green
- '--border-color': '#EA4335', // Red
- '--header-bg': '#4285F4', // Blue
- '--row-hover': '#F4B400', // Yellow
- '--toolbar-bg': '#DB4437', // Red
- '--selected-bg': '#0F9D58', // Green
- '--danger-color': '#DB4437', // Red
- '--success-color': '#0F9D58', // Green
- '--warning-color': '#F4B400', // Yellow
- '--app-header-bg': '#4285F4', // Blue
- '--text-primary': '#FFFFFF', // White
- '--text-secondary': '#34A853', // Green
- '--text-muted': '#EA4335', // Red
- '--bg-primary': '#FFFFFF', // White
- '--bg-secondary': '#F1F3F4', // Light Gray
- '--bg-tertiary': '#D3D3D3', // Light Gray
- '--input-bg': '#FFFFFF', // White
- '--input-border': '#EA4335', // Red
- '--input-text': '#202124', // Dark Gray
- '--input-placeholder': '#5F6368', // Gray
- '--card-bg': '#FFFFFF', // White
- '--modal-bg': '#FFFFFF', // White
- '--tooltip-bg': '#EA4335', // Red
- '--tooltip-text': '#FFFFFF', // White
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'Firefox': {
- '--primary-color': '#FF7139', // Firefox Orange
- '--secondary-color': '#1C1C1C', // Dark Gray
- '--border-color': '#FF7139', // Firefox Orange
- '--header-bg': '#FF7139', // Firefox Orange
- '--row-hover': '#FFDAB9', // PeachPuff
- '--toolbar-bg': '#FF7139', // Firefox Orange
- '--selected-bg': '#FF8C00', // Dark Orange
- '--danger-color': '#FF0000', // Red
- '--success-color': '#00FF00', // Lime
- '--warning-color': '#FFA500', // Orange
- '--app-header-bg': '#FF7139', // Firefox Orange
- '--text-primary': '#FFFFFF', // White
- '--text-secondary': '#1C1C1C', // Dark Gray
- '--text-muted': '#A9A9A9', // DarkGray
- '--bg-primary': '#FFFFFF', // White
- '--bg-secondary': '#F5F5F5', // Light Gray
- '--bg-tertiary': '#D3D3D3', // Light Gray
- '--input-bg': '#FFFFFF', // White
- '--input-border': '#FF7139', // Firefox Orange
- '--input-text': '#1C1C1C', // Dark Gray
- '--input-placeholder': '#A9A9A9', // DarkGray
- '--card-bg': '#FFFFFF', // White
- '--modal-bg': '#FFFFFF', // White
- '--tooltip-bg': '#FF7139', // Firefox Orange
- '--tooltip-text': '#FFFFFF', // White
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'Internet Explorer': {
- '--primary-color': '#1C62CD', // IE Blue
- '--secondary-color': '#0078D7', // IE Light Blue
- '--border-color': '#FFFFFF', // White
- '--header-bg': '#1C62CD', // IE Blue
- '--row-hover': '#D0D0D0', // Light Gray
- '--toolbar-bg': '#0078D7', // IE Light Blue
- '--selected-bg': '#005A9E', // Darker Blue
- '--danger-color': '#FF0000', // Red
- '--success-color': '#00FF00', // Lime
- '--warning-color': '#FFA500', // Orange
- '--app-header-bg': '#1C62CD', // IE Blue
- '--text-primary': '#FFFFFF', // White
- '--text-secondary': '#0078D7', // IE Light Blue
- '--text-muted': '#A9A9A9', // DarkGray
- '--bg-primary': '#FFFFFF', // White
- '--bg-secondary': '#F5F5F5', // Light Gray
- '--bg-tertiary': '#D3D3D3', // Light Gray
- '--input-bg': '#0078D7', // IE Light Blue
- '--input-border': '#0078D7', // IE Light Blue
- '--input-text': '#1C62CD', // IE Blue
- '--input-placeholder': '#A9A9A9', // DarkGray
- '--card-bg': '#2F2F2F', // Darker Gray
- '--modal-bg': '#1C62CD', // Very Dark Gray
- '--tooltip-bg': '#0078D7', // IE Light Blue
- '--tooltip-text': '#FFFFFF', // White
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'Pirate Bay': {
- '--primary-color': '#000000', // Black
- '--secondary-color': '#FFD700', // Gold
- '--border-color': '#FFFFFF', // White
- '--header-bg': '#000000', // Black
- '--row-hover': '#333333', // Dark Gray
- '--toolbar-bg': '#FFD700', // Gold
- '--selected-bg': '#555555', // Medium Gray
- '--danger-color': '#FF0000', // Red
- '--success-color': '#00FF00', // Lime
- '--warning-color': '#FFA500', // Orange
- '--app-header-bg': '#000000', // Black
- '--text-primary': '#FFFFFF', // White
- '--text-secondary': '#FFD700', // Gold
- '--text-muted': '#A9A9A9', // DarkGray
- '--bg-primary': '#1C1C1C', // Very Dark Gray
- '--bg-secondary': '#333333', // Dark Gray
- '--bg-tertiary': '#555555', // Medium Gray
- '--input-bg': '#333333', // Dark Gray
- '--input-border': '#FFD700', // Gold
- '--input-text': '#FFFFFF', // White
- '--input-placeholder': '#A9A9A9', // DarkGray
- '--card-bg': '#2F2F2F', // Darker Gray
- '--modal-bg': '#1C1C1C', // Very Dark Gray
- '--tooltip-bg': '#FFD700', // Gold
- '--tooltip-text': '#000000', // Black
- '--text-buttoncolor': '#FFFFFF' // White
- },
- 'Black on White': { // New Theme Added
- '--primary-color': '#000000', // Black
- '--secondary-color': '#000000', // Black
- '--border-color': '#000000', // Black
- '--header-bg': '#FFFFFF', // White
- '--row-hover': '#FFFFFF', // White
- '--toolbar-bg': '#FFFFFF', // White
- '--selected-bg': '#FFFFFF', // White
- '--danger-color': '#FF0000', // Red
- '--success-color': '#00FF00', // Lime
- '--warning-color': '#FFA500', // Orange
- '--app-header-bg': '#FFFFFF', // White
- '--text-primary': '#000000', // Black
- '--text-secondary': '#000000', // Black
- '--text-muted': '#000000', // Black
- '--bg-primary': '#FFFFFF', // White
- '--bg-secondary': '#FFFFFF', // White
- '--bg-tertiary': '#FFFFFF', // White
- '--input-bg': '#FFFFFF', // White
- '--input-border': '#000000', // Black
- '--input-text': '#000000', // Black
- '--input-placeholder': '#000000', // Black
- '--card-bg': '#FFFFFF', // White
- '--modal-bg': '#FFFFFF', // White
- '--tooltip-bg': '#FFFFFF', // White
- '--tooltip-text': '#000000', // Black
- '--text-buttoncolor': '#000000' // Black
- }
- };
- // Function to get theme from localStorage or use predefined default
- function getTheme(themeName) {
- const savedTheme = localStorage.getItem(`custom_css1_theme_${themeName}`);
- if (savedTheme) {
- return JSON.parse(savedTheme);
- } else {
- return predefinedThemes[themeName] || predefinedThemes['Default'];
- }
- }
- // Function to save theme to localStorage
- function saveTheme(themeName, themeStyles) {
- localStorage.setItem(`custom_css1_theme_${themeName}`, JSON.stringify(themeStyles));
- console.log(`Theme "${themeName}" saved to localStorage.`);
- }
- // Function to apply theme to the document
- function applyTheme(themeStyles) {
- Object.keys(themeStyles).forEach(variable => {
- document.documentElement.style.setProperty(variable, themeStyles[variable]);
- });
- }
- // Function to reset a theme to its default
- function resetTheme(themeName) {
- const defaultTheme = predefinedThemes[themeName];
- if (defaultTheme) {
- applyTheme(defaultTheme);
- saveTheme(themeName, defaultTheme);
- updateColorPickerValues(defaultTheme);
- console.log(`Theme "${themeName}" has been reset to its default colors.`);
- } else {
- console.warn(`No default theme found for "${themeName}".`);
- }
- }
- // Function to create the theme editor container
- function createThemeEditor() {
- // Create the theme editor container
- const themeEditorContainer = document.createElement('div');
- themeEditorContainer.classList.add('theme-editor-container');
- themeEditorContainer.style.position = 'fixed';
- themeEditorContainer.style.top = '20px';
- themeEditorContainer.style.right = '20px';
- themeEditorContainer.style.backgroundColor = '#FFFFFF'; // White background for the editor
- themeEditorContainer.style.padding = '20px';
- themeEditorContainer.style.borderRadius = '5px';
- themeEditorContainer.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)';
- themeEditorContainer.style.zIndex = '9999';
- themeEditorContainer.style.display = 'none'; // Initially hidden
- themeEditorContainer.style.maxHeight = '80vh';
- themeEditorContainer.style.overflowY = 'auto';
- themeEditorContainer.style.width = '400px';
- themeEditorContainer.style.fontFamily = 'Arial, sans-serif';
- themeEditorContainer.style.color = '#000000'; // Set all text inside the editor to black
- // Create the theme editor header
- const themeEditorHeader = document.createElement('div');
- themeEditorHeader.style.display = 'flex';
- themeEditorHeader.style.justifyContent = 'space-between';
- themeEditorHeader.style.alignItems = 'center';
- themeEditorHeader.style.marginBottom = '10px';
- const headerTitle = document.createElement('span');
- headerTitle.textContent = 'Custom Theme Editor';
- headerTitle.style.fontWeight = 'bold';
- headerTitle.style.fontSize = '16px';
- headerTitle.style.color = '#000000'; // Ensure title is black
- const closeButton = document.createElement('button');
- closeButton.textContent = '×';
- closeButton.style.background = 'transparent';
- closeButton.style.border = 'none';
- closeButton.style.fontSize = '20px';
- closeButton.style.cursor = 'pointer';
- closeButton.title = 'Close';
- closeButton.style.lineHeight = '1';
- closeButton.style.padding = '0';
- closeButton.style.color = '#000000'; // Ensure close button is black
- // Attach event listener for the close button
- closeButton.addEventListener('click', () => {
- themeEditorContainer.style.display = 'none';
- });
- themeEditorHeader.appendChild(headerTitle);
- themeEditorHeader.appendChild(closeButton);
- // Create the theme editor content
- const themeEditorContent = document.createElement('div');
- themeEditorContent.classList.add('theme-editor-content');
- // Create theme selection dropdown
- const themeSelectionContainer = document.createElement('div');
- themeSelectionContainer.style.display = 'flex';
- themeSelectionContainer.style.alignItems = 'center';
- themeSelectionContainer.style.marginBottom = '15px';
- const themeSelectionLabel = document.createElement('label');
- themeSelectionLabel.textContent = 'Select Theme:';
- themeSelectionLabel.style.marginRight = '10px';
- themeSelectionLabel.style.flex = '0 0 100px';
- themeSelectionLabel.style.color = '#000000'; // Ensure label is black
- const themeSelectionDropdown = document.createElement('select');
- themeSelectionDropdown.style.flex = '1';
- themeSelectionDropdown.style.padding = '5px';
- themeSelectionDropdown.style.color = '#000000'; // Ensure dropdown text is black
- themeSelectionDropdown.style.backgroundColor = '#dddddd'; // White background
- themeSelectionDropdown.style.border = '1px solid #000000'; // Black border
- themeSelectionDropdown.style.borderRadius = '3px';
- // Populate dropdown with theme options
- Object.keys(predefinedThemes).forEach(themeName => {
- const option = document.createElement('option');
- option.value = themeName;
- option.textContent = themeName;
- themeSelectionDropdown.appendChild(option);
- });
- themeSelectionContainer.appendChild(themeSelectionLabel);
- themeSelectionContainer.appendChild(themeSelectionDropdown);
- themeEditorContent.appendChild(themeSelectionContainer);
- // Create color pickers container
- const colorPickersContainer = document.createElement('div');
- colorPickersContainer.classList.add('color-pickers-container');
- // Create color pickers
- colorPickerElements.forEach(element => {
- const colorPickerContainer = document.createElement('div');
- colorPickerContainer.style.display = 'flex';
- colorPickerContainer.style.alignItems = 'center';
- colorPickerContainer.style.marginBottom = '10px';
- const colorPickerLabel = document.createElement('label');
- colorPickerLabel.textContent = element.label;
- colorPickerLabel.style.marginRight = '10px';
- colorPickerLabel.style.flex = '1';
- colorPickerLabel.style.color = '#000000'; // Ensure label is black
- const colorPickerInput = document.createElement('input');
- colorPickerInput.type = 'color';
- colorPickerInput.value = '#000000'; // Placeholder, will be updated later
- colorPickerInput.style.flex = '1';
- colorPickerInput.style.cursor = 'pointer';
- colorPickerInput.style.border = '1px solid #000000'; // Black border
- colorPickerInput.style.borderRadius = '3px';
- colorPickerInput.style.padding = '0';
- colorPickerInput.style.height = '30px';
- // Attach event listener for color change
- colorPickerInput.addEventListener('input', () => {
- const selectedTheme = themeSelectionDropdown.value;
- const themeStyles = getTheme(selectedTheme);
- themeStyles[element.variable] = colorPickerInput.value;
- applyTheme(themeStyles);
- saveTheme(selectedTheme, themeStyles);
- });
- colorPickerContainer.appendChild(colorPickerLabel);
- colorPickerContainer.appendChild(colorPickerInput);
- colorPickersContainer.appendChild(colorPickerContainer);
- });
- themeEditorContent.appendChild(colorPickersContainer);
- // Create Reset button
- const resetButton = document.createElement('button');
- resetButton.textContent = 'Reset to Default';
- resetButton.style.marginTop = '15px';
- resetButton.style.padding = '5px 10px';
- resetButton.style.cursor = 'pointer';
- resetButton.style.border = '1px solid #ccc';
- resetButton.style.borderRadius = '3px';
- resetButton.style.backgroundColor = '#f0f0f0';
- resetButton.title = 'Reset current theme to default colors';
- resetButton.style.fontSize = '14px';
- resetButton.style.color = '#000000'; // Ensure button text is black
- resetButton.addEventListener('click', () => {
- const selectedTheme = themeSelectionDropdown.value;
- resetTheme(selectedTheme);
- });
- themeEditorContent.appendChild(resetButton);
- // Append header and content to the container
- themeEditorContainer.appendChild(themeEditorHeader);
- themeEditorContainer.appendChild(themeEditorContent);
- document.body.appendChild(themeEditorContainer);
- // Function to update color pickers based on selected theme
- function updateColorPickers(themeStyles) {
- const colorPickerInputs = colorPickersContainer.querySelectorAll('input[type="color"]');
- colorPickerInputs.forEach((input, index) => {
- const variable = colorPickerElements[index].variable;
- input.value = rgbToHex(themeStyles[variable].trim()) || '#000000';
- });
- }
- // Initialize with the first theme
- const initialTheme = themeSelectionDropdown.value;
- const initialThemeStyles = getTheme(initialTheme);
- applyTheme(initialThemeStyles);
- updateColorPickers(initialThemeStyles);
- // Handle theme selection change
- themeSelectionDropdown.addEventListener('change', () => {
- const selectedTheme = themeSelectionDropdown.value;
- const themeStyles = getTheme(selectedTheme);
- applyTheme(themeStyles);
- updateColorPickers(themeStyles);
- });
- return themeEditorContainer;
- }
- // Function to create the toggle button in the toolbar
- function createToggleButton(themeEditorContainer) {
- const toolbar = document.querySelector('.toolbar');
- if (!toolbar) {
- console.warn('Toolbar not found. Theme Editor button not added.');
- return;
- }
- const toggleButton = document.createElement('button');
- toggleButton.textContent = 'Theme Editor';
- toggleButton.style.marginLeft = '10px';
- toggleButton.style.padding = '5px 10px';
- toggleButton.style.cursor = 'pointer';
- toggleButton.style.border = '1px solid #ccc';
- toggleButton.style.borderRadius = '3px';
- toggleButton.style.backgroundColor = '#f0f0f0';
- toggleButton.title = 'Open Theme Editor';
- toggleButton.style.fontSize = '14px';
- toggleButton.style.color = '#000000'; // Ensure button text is black
- toggleButton.addEventListener('click', () => {
- if (themeEditorContainer.style.display === 'none' || themeEditorContainer.style.display === '') {
- themeEditorContainer.style.display = 'block';
- } else {
- themeEditorContainer.style.display = 'none';
- }
- });
- toolbar.appendChild(toggleButton);
- }
- // Function to initialize the theme editor
- function initializeThemeEditor() {
- if (!window.themeEditorInitialized) {
- window.themeEditorInitialized = true;
- const themeEditorContainer = createThemeEditor();
- createToggleButton(themeEditorContainer);
- console.log('Advanced Custom Theme Editor initialized.');
- }
- }
- // Observe DOM changes to detect when the toolbar is added
- function waitForToolbar() {
- const toolbar = document.querySelector('.toolbar');
- if (toolbar) {
- initializeThemeEditor();
- } else {
- // If toolbar is not found, set up a MutationObserver to watch for it
- const observer = new MutationObserver((mutations, obs) => {
- const toolbar = document.querySelector('.toolbar');
- if (toolbar) {
- initializeThemeEditor();
- obs.disconnect(); // Stop observing once toolbar is found
- }
- });
- observer.observe(document.body, { childList: true, subtree: true });
- }
- }
- // Run the waitForToolbar function after DOM is fully loaded
- if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', waitForToolbar);
- } else {
- waitForToolbar();
- }
- })();