103 lines
2.6 KiB
JavaScript
103 lines
2.6 KiB
JavaScript
import { app } from "../../../scripts/app.js";
|
|
import { $el } from "../../../scripts/ui.js";
|
|
import { ConfigSetting, addJNodesSetting } from "./common/SettingsManager.js"
|
|
|
|
class CustomizationConfigSetting extends ConfigSetting {
|
|
constructor(settingName, defaultValue) {
|
|
super("Customization." + settingName, defaultValue);
|
|
}
|
|
}
|
|
|
|
export let setting_FontSize = new CustomizationConfigSetting("MultilineText.Font.Size", 80);
|
|
export let setting_FontFamily = new CustomizationConfigSetting("MultilineText.Font.Family", 'monospace');
|
|
|
|
function setTextAreaFontSize(textarea, size) {
|
|
textarea.style.fontSize = size.toString() + "%";
|
|
}
|
|
|
|
function setTextAreaFontFamily(textarea, fontFamily) {
|
|
textarea.style.fontFamily = fontFamily;
|
|
}
|
|
|
|
function setFontOnGivenTextArea(textarea) {
|
|
setTextAreaFontSize(textarea,setting_FontSize.value);
|
|
setTextAreaFontFamily(textarea, setting_FontFamily.value);
|
|
}
|
|
|
|
function setFontOnAllTextAreas() {
|
|
const textareas = document.querySelectorAll('textarea');
|
|
|
|
for (const textarea of textareas) {
|
|
setFontOnGivenTextArea(textarea);
|
|
}
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "JNodes.Customization.MultilineText.Font",
|
|
async loadedGraphNode(node) {
|
|
|
|
for (const wid in node.widgets) {
|
|
if (node.widgets[wid]?.element?.type == 'textarea') {
|
|
setFontOnGivenTextArea(node.widgets[wid]?.element);
|
|
}
|
|
}
|
|
},
|
|
async setup() {
|
|
|
|
// Font Family Setting
|
|
{
|
|
const supportedTypefaces =
|
|
[
|
|
'monospace', 'Arial, sans-serif', 'Lora',
|
|
];
|
|
|
|
const labelWidget = $el("label", {
|
|
textContent: "Multiline Text Font Family:",
|
|
});
|
|
|
|
const settingWidget = $el(
|
|
"select",
|
|
{
|
|
oninput: (e) => {
|
|
setting_FontFamily.value = e.target.value;
|
|
setFontOnAllTextAreas();
|
|
},
|
|
},
|
|
supportedTypefaces.map((m) =>
|
|
$el("option", {
|
|
value: m,
|
|
textContent: m,
|
|
selected: setting_FontFamily.value === m,
|
|
})
|
|
)
|
|
);
|
|
|
|
const tooltip =
|
|
"The font typeface to use for multiline text boxes";
|
|
addJNodesSetting(labelWidget, settingWidget, tooltip);
|
|
}
|
|
|
|
// Font Size Setting
|
|
{
|
|
const labelWidget = $el("label", {
|
|
textContent: "Multiline Text Font Size (%):",
|
|
});
|
|
|
|
const settingWidget = $el("input", {
|
|
type: "number",
|
|
min: "1",
|
|
value: setting_FontSize.value,
|
|
oninput: (e) => {
|
|
let value = e.target.valueAsNumber;
|
|
if (value <= 1.0) { value = 1.0; }
|
|
setting_FontSize.value = value;
|
|
setFontOnAllTextAreas();
|
|
},
|
|
});
|
|
|
|
const tooltip =
|
|
"The font size (expressed as a percentage) to use for multiline text boxes";
|
|
addJNodesSetting(labelWidget, settingWidget, tooltip);
|
|
}
|
|
}
|
|
}); |