- Enhanced formatting in triggers.js for better readability, including consistent line breaks and indentation. - Updated utility functions in utils.js for improved clarity and organization, ensuring consistent formatting and spacing. - Refactored VNC button creation in vnc.js to enhance readability with better structured code. - Modified SQL migration script to improve readability by aligning SQL statements and enhancing the structure of the INSERT statement.
348 lines
9.2 KiB
JavaScript
348 lines
9.2 KiB
JavaScript
(function () {
|
|
/**
|
|
* Nexus Terminal — terminal colour themes.
|
|
* Provides a collection of preset xterm.js colour schemes and a manager
|
|
* for applying them to terminal instances.
|
|
*/
|
|
|
|
/**
|
|
* Preset terminal colour themes.
|
|
* Each entry contains the full xterm.js theme object.
|
|
*/
|
|
const THEMES = {
|
|
charcoal: {
|
|
label: "Charcoal (Default)",
|
|
theme: {
|
|
background: "#1c1c1c",
|
|
foreground: "#e4e4e4",
|
|
cursor: "#4ecdc4",
|
|
cursorAccent: "#1c1c1c",
|
|
selectionBackground: "rgba(78, 205, 196, 0.3)",
|
|
selectionForeground: "#ffffff",
|
|
black: "#1c1c1c",
|
|
red: "#ef5350",
|
|
green: "#66bb6a",
|
|
yellow: "#ffa726",
|
|
blue: "#42a5f5",
|
|
magenta: "#ab47bc",
|
|
cyan: "#4ecdc4",
|
|
white: "#e4e4e4",
|
|
brightBlack: "#555555",
|
|
brightRed: "#ff7043",
|
|
brightGreen: "#81c784",
|
|
brightYellow: "#ffcc02",
|
|
brightBlue: "#64b5f6",
|
|
brightMagenta: "#ce93d8",
|
|
brightCyan: "#80deea",
|
|
brightWhite: "#ffffff",
|
|
},
|
|
},
|
|
|
|
"solarized-dark": {
|
|
label: "Solarized Dark",
|
|
theme: {
|
|
background: "#002b36",
|
|
foreground: "#839496",
|
|
cursor: "#93a1a1",
|
|
cursorAccent: "#002b36",
|
|
selectionBackground: "rgba(147, 161, 161, 0.3)",
|
|
selectionForeground: "#fdf6e3",
|
|
black: "#073642",
|
|
red: "#dc322f",
|
|
green: "#859900",
|
|
yellow: "#b58900",
|
|
blue: "#268bd2",
|
|
magenta: "#d33682",
|
|
cyan: "#2aa198",
|
|
white: "#eee8d5",
|
|
brightBlack: "#586e75",
|
|
brightRed: "#cb4b16",
|
|
brightGreen: "#586e75",
|
|
brightYellow: "#657b83",
|
|
brightBlue: "#839496",
|
|
brightMagenta: "#6c71c4",
|
|
brightCyan: "#93a1a1",
|
|
brightWhite: "#fdf6e3",
|
|
},
|
|
},
|
|
|
|
monokai: {
|
|
label: "Monokai",
|
|
theme: {
|
|
background: "#272822",
|
|
foreground: "#f8f8f2",
|
|
cursor: "#f8f8f0",
|
|
cursorAccent: "#272822",
|
|
selectionBackground: "rgba(73, 72, 62, 0.6)",
|
|
selectionForeground: "#f8f8f2",
|
|
black: "#272822",
|
|
red: "#f92672",
|
|
green: "#a6e22e",
|
|
yellow: "#f4bf75",
|
|
blue: "#66d9ef",
|
|
magenta: "#ae81ff",
|
|
cyan: "#a1efe4",
|
|
white: "#f8f8f2",
|
|
brightBlack: "#75715e",
|
|
brightRed: "#f92672",
|
|
brightGreen: "#a6e22e",
|
|
brightYellow: "#f4bf75",
|
|
brightBlue: "#66d9ef",
|
|
brightMagenta: "#ae81ff",
|
|
brightCyan: "#a1efe4",
|
|
brightWhite: "#f9f8f5",
|
|
},
|
|
},
|
|
|
|
nord: {
|
|
label: "Nord",
|
|
theme: {
|
|
background: "#2e3440",
|
|
foreground: "#d8dee9",
|
|
cursor: "#d8dee9",
|
|
cursorAccent: "#2e3440",
|
|
selectionBackground: "rgba(136, 192, 208, 0.3)",
|
|
selectionForeground: "#eceff4",
|
|
black: "#3b4252",
|
|
red: "#bf616a",
|
|
green: "#a3be8c",
|
|
yellow: "#ebcb8b",
|
|
blue: "#81a1c1",
|
|
magenta: "#b48ead",
|
|
cyan: "#88c0d0",
|
|
white: "#e5e9f0",
|
|
brightBlack: "#4c566a",
|
|
brightRed: "#bf616a",
|
|
brightGreen: "#a3be8c",
|
|
brightYellow: "#ebcb8b",
|
|
brightBlue: "#81a1c1",
|
|
brightMagenta: "#b48ead",
|
|
brightCyan: "#8fbcbb",
|
|
brightWhite: "#eceff4",
|
|
},
|
|
},
|
|
|
|
dracula: {
|
|
label: "Dracula",
|
|
theme: {
|
|
background: "#282a36",
|
|
foreground: "#f8f8f2",
|
|
cursor: "#f8f8f2",
|
|
cursorAccent: "#282a36",
|
|
selectionBackground: "rgba(68, 71, 90, 0.6)",
|
|
selectionForeground: "#f8f8f2",
|
|
black: "#21222c",
|
|
red: "#ff5555",
|
|
green: "#50fa7b",
|
|
yellow: "#f1fa8c",
|
|
blue: "#bd93f9",
|
|
magenta: "#ff79c6",
|
|
cyan: "#8be9fd",
|
|
white: "#f8f8f2",
|
|
brightBlack: "#6272a4",
|
|
brightRed: "#ff6e6e",
|
|
brightGreen: "#69ff94",
|
|
brightYellow: "#ffffa5",
|
|
brightBlue: "#d6acff",
|
|
brightMagenta: "#ff92df",
|
|
brightCyan: "#a4ffff",
|
|
brightWhite: "#ffffff",
|
|
},
|
|
},
|
|
|
|
"one-dark": {
|
|
label: "One Dark",
|
|
theme: {
|
|
background: "#282c34",
|
|
foreground: "#abb2bf",
|
|
cursor: "#528bff",
|
|
cursorAccent: "#282c34",
|
|
selectionBackground: "rgba(82, 139, 255, 0.3)",
|
|
selectionForeground: "#abb2bf",
|
|
black: "#282c34",
|
|
red: "#e06c75",
|
|
green: "#98c379",
|
|
yellow: "#e5c07b",
|
|
blue: "#61afef",
|
|
magenta: "#c678dd",
|
|
cyan: "#56b6c2",
|
|
white: "#abb2bf",
|
|
brightBlack: "#5c6370",
|
|
brightRed: "#e06c75",
|
|
brightGreen: "#98c379",
|
|
brightYellow: "#e5c07b",
|
|
brightBlue: "#61afef",
|
|
brightMagenta: "#c678dd",
|
|
brightCyan: "#56b6c2",
|
|
brightWhite: "#ffffff",
|
|
},
|
|
},
|
|
|
|
"gruvbox-dark": {
|
|
label: "Gruvbox Dark",
|
|
theme: {
|
|
background: "#282828",
|
|
foreground: "#ebdbb2",
|
|
cursor: "#ebdbb2",
|
|
cursorAccent: "#282828",
|
|
selectionBackground: "rgba(214, 93, 14, 0.3)",
|
|
selectionForeground: "#ebdbb2",
|
|
black: "#282828",
|
|
red: "#cc241d",
|
|
green: "#98971a",
|
|
yellow: "#d79921",
|
|
blue: "#458588",
|
|
magenta: "#b16286",
|
|
cyan: "#689d6a",
|
|
white: "#a89984",
|
|
brightBlack: "#928374",
|
|
brightRed: "#fb4934",
|
|
brightGreen: "#b8bb26",
|
|
brightYellow: "#fabd2f",
|
|
brightBlue: "#83a598",
|
|
brightMagenta: "#d3869b",
|
|
brightCyan: "#8ec07c",
|
|
brightWhite: "#ebdbb2",
|
|
},
|
|
},
|
|
|
|
"tokyo-night": {
|
|
label: "Tokyo Night",
|
|
theme: {
|
|
background: "#1a1b26",
|
|
foreground: "#a9b1d6",
|
|
cursor: "#c0caf5",
|
|
cursorAccent: "#1a1b26",
|
|
selectionBackground: "rgba(41, 46, 66, 0.9)",
|
|
selectionForeground: "#c0caf5",
|
|
black: "#15161e",
|
|
red: "#f7768e",
|
|
green: "#9ece6a",
|
|
yellow: "#e0af68",
|
|
blue: "#7aa2f7",
|
|
magenta: "#bb9af7",
|
|
cyan: "#7dcfff",
|
|
white: "#a9b1d6",
|
|
brightBlack: "#414868",
|
|
brightRed: "#f7768e",
|
|
brightGreen: "#9ece6a",
|
|
brightYellow: "#e0af68",
|
|
brightBlue: "#7aa2f7",
|
|
brightMagenta: "#bb9af7",
|
|
brightCyan: "#7dcfff",
|
|
brightWhite: "#c0caf5",
|
|
},
|
|
},
|
|
|
|
"catppuccin-mocha": {
|
|
label: "Catppuccin Mocha",
|
|
theme: {
|
|
background: "#1e1e2e",
|
|
foreground: "#cdd6f4",
|
|
cursor: "#f5e0dc",
|
|
cursorAccent: "#1e1e2e",
|
|
selectionBackground: "rgba(88, 91, 112, 0.5)",
|
|
selectionForeground: "#cdd6f4",
|
|
black: "#45475a",
|
|
red: "#f38ba8",
|
|
green: "#a6e3a1",
|
|
yellow: "#f9e2af",
|
|
blue: "#89b4fa",
|
|
magenta: "#f5c2e7",
|
|
cyan: "#94e2d5",
|
|
white: "#bac2de",
|
|
brightBlack: "#585b70",
|
|
brightRed: "#f38ba8",
|
|
brightGreen: "#a6e3a1",
|
|
brightYellow: "#f9e2af",
|
|
brightBlue: "#89b4fa",
|
|
brightMagenta: "#f5c2e7",
|
|
brightCyan: "#94e2d5",
|
|
brightWhite: "#a6adc8",
|
|
},
|
|
},
|
|
|
|
"rose-pine": {
|
|
label: "Rosé Pine",
|
|
theme: {
|
|
background: "#191724",
|
|
foreground: "#e0def4",
|
|
cursor: "#524f67",
|
|
cursorAccent: "#e0def4",
|
|
selectionBackground: "rgba(110, 106, 134, 0.4)",
|
|
selectionForeground: "#e0def4",
|
|
black: "#26233a",
|
|
red: "#eb6f92",
|
|
green: "#31748f",
|
|
yellow: "#f6c177",
|
|
blue: "#9ccfd8",
|
|
magenta: "#c4a7e7",
|
|
cyan: "#ebbcba",
|
|
white: "#e0def4",
|
|
brightBlack: "#6e6a86",
|
|
brightRed: "#eb6f92",
|
|
brightGreen: "#31748f",
|
|
brightYellow: "#f6c177",
|
|
brightBlue: "#9ccfd8",
|
|
brightMagenta: "#c4a7e7",
|
|
brightCyan: "#ebbcba",
|
|
brightWhite: "#e0def4",
|
|
},
|
|
},
|
|
|
|
"solarized-light": {
|
|
label: "Solarized Light",
|
|
theme: {
|
|
background: "#fdf6e3",
|
|
foreground: "#657b83",
|
|
cursor: "#586e75",
|
|
cursorAccent: "#fdf6e3",
|
|
selectionBackground: "rgba(7, 54, 66, 0.2)",
|
|
selectionForeground: "#073642",
|
|
black: "#073642",
|
|
red: "#dc322f",
|
|
green: "#859900",
|
|
yellow: "#b58900",
|
|
blue: "#268bd2",
|
|
magenta: "#d33682",
|
|
cyan: "#2aa198",
|
|
white: "#eee8d5",
|
|
brightBlack: "#002b36",
|
|
brightRed: "#cb4b16",
|
|
brightGreen: "#586e75",
|
|
brightYellow: "#657b83",
|
|
brightBlue: "#839496",
|
|
brightMagenta: "#6c71c4",
|
|
brightCyan: "#93a1a1",
|
|
brightWhite: "#fdf6e3",
|
|
},
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Returns the theme object for the given theme name.
|
|
* Falls back to 'charcoal' if not found.
|
|
* @param {string} name
|
|
* @returns {Object} xterm.js theme object
|
|
*/
|
|
function getTerminalTheme(name) {
|
|
const entry = THEMES[name || "charcoal"];
|
|
return entry ? entry.theme : THEMES.charcoal.theme;
|
|
}
|
|
|
|
/**
|
|
* Returns all theme names and labels for building a selector.
|
|
* @returns {Array<{value: string, label: string}>}
|
|
*/
|
|
function listTerminalThemes() {
|
|
return Object.entries(THEMES).map(([value, entry]) => ({
|
|
value,
|
|
label: entry.label,
|
|
}));
|
|
}
|
|
|
|
window.NexusTerminal = window.NexusTerminal || {};
|
|
window.NexusTerminal.getTerminalTheme = getTerminalTheme;
|
|
window.NexusTerminal.listTerminalThemes = listTerminalThemes;
|
|
})();
|