mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	Merge branch 'staging' into parser-followup-2
This commit is contained in:
		
							
								
								
									
										36
									
								
								public/scripts/slash-commands/AbstractEventTarget.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								public/scripts/slash-commands/AbstractEventTarget.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @abstract
 | 
			
		||||
 * @implements {EventTarget}
 | 
			
		||||
 */
 | 
			
		||||
export class AbstractEventTarget {
 | 
			
		||||
    constructor() {
 | 
			
		||||
        this.listeners = {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    addEventListener(type, callback, _options) {
 | 
			
		||||
        if (!this.listeners[type]) {
 | 
			
		||||
            this.listeners[type] = [];
 | 
			
		||||
        }
 | 
			
		||||
        this.listeners[type].push(callback);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dispatchEvent(event) {
 | 
			
		||||
        if (!this.listeners[event.type] || this.listeners[event.type].length === 0) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        this.listeners[event.type].forEach(listener => {
 | 
			
		||||
            listener(event);
 | 
			
		||||
        });
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    removeEventListener(type, callback, _options) {
 | 
			
		||||
        if (!this.listeners[type]) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        const index = this.listeners[type].indexOf(callback);
 | 
			
		||||
        if (index !== -1) {
 | 
			
		||||
            this.listeners[type].splice(index, 1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,22 +1,28 @@
 | 
			
		||||
export class SlashCommandAbortController {
 | 
			
		||||
import { AbstractEventTarget } from './AbstractEventTarget.js';
 | 
			
		||||
 | 
			
		||||
export class SlashCommandAbortController extends AbstractEventTarget {
 | 
			
		||||
    /**@type {SlashCommandAbortSignal}*/ signal;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        super();
 | 
			
		||||
        this.signal = new SlashCommandAbortSignal();
 | 
			
		||||
    }
 | 
			
		||||
    abort(reason = 'No reason.', isQuiet = false) {
 | 
			
		||||
        this.signal.isQuiet = isQuiet;
 | 
			
		||||
        this.signal.aborted = true;
 | 
			
		||||
        this.signal.reason = reason;
 | 
			
		||||
        this.dispatchEvent(new Event('abort'));
 | 
			
		||||
    }
 | 
			
		||||
    pause(reason = 'No reason.') {
 | 
			
		||||
        this.signal.paused = true;
 | 
			
		||||
        this.signal.reason = reason;
 | 
			
		||||
        this.dispatchEvent(new Event('pause'));
 | 
			
		||||
    }
 | 
			
		||||
    continue(reason = 'No reason.') {
 | 
			
		||||
        this.signal.paused = false;
 | 
			
		||||
        this.signal.reason = reason;
 | 
			
		||||
        this.dispatchEvent(new Event('continue'));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user