58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
import { app } from '../../../scripts/app.js';
|
|
|
|
app.registerExtension({
|
|
name: 'Scroll Over Textarea',
|
|
settings: [
|
|
{
|
|
id: 'scroll_over_textarea.enable',
|
|
name: 'Prevent Scrolling Within Textareas',
|
|
type: 'boolean',
|
|
defaultValue: true,
|
|
onChange: (newVal, oldVal) => {
|
|
updateTextareaScrollListener(newVal);
|
|
},
|
|
},
|
|
],
|
|
async setup() {
|
|
console.log('Scroll Over Textarea Extension Loaded');
|
|
const cb = (event) => {
|
|
app.canvas.processMouseWheel(event);
|
|
event.preventDefault();
|
|
};
|
|
app.canvas['_ignore_textarea_scroll_callback'] = cb;
|
|
updateTextareaScrollListener();
|
|
},
|
|
async nodeCreated(node) {
|
|
const enabled = app.extensionManager.setting.get(
|
|
'scroll_over_textarea.enable'
|
|
);
|
|
setTimeout(() => {
|
|
updateTextareaScrollListener(enabled);
|
|
}, 50);
|
|
},
|
|
});
|
|
|
|
function updateTextareaScrollListener(
|
|
ignoreTextareaScroll = app.extensionManager.setting.get(
|
|
'scroll_over_textarea.enable'
|
|
)
|
|
) {
|
|
const textareas = document.querySelectorAll('textarea.comfy-multiline-input');
|
|
|
|
textareas.forEach((textarea) => {
|
|
if (app.canvas) {
|
|
if (ignoreTextareaScroll) {
|
|
textarea.addEventListener(
|
|
'mousewheel',
|
|
app.canvas['_ignore_textarea_scroll_callback']
|
|
);
|
|
} else {
|
|
textarea.removeEventListener(
|
|
'mousewheel',
|
|
app.canvas['_ignore_textarea_scroll_callback']
|
|
);
|
|
}
|
|
}
|
|
});
|
|
}
|