UNPKG

ng-terminal

Version:

NgTerminal is a terminal component on Angular 17 or higher.

90 lines 10.8 kB
import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; /** * * In the past, indivisual property changes caused very unexpected behavior on NgTerminal. * To solve issues related to property changes, Queue is applied. */ export class LinearRenderService { constructor(hostRef) { this.hostRef = hostRef; this.handlerToCheckElementConnection = undefined; /** * This queue has items to have a influence on the view and items are handled in order. */ this.propertyChangeQueue = []; this.itemsToBeHandled = new Subject(); /** * Handle a next set of changes if it exists. */ this.handleImmediate = () => { if (!this.handlerToCheckElementConnection) { let list = this.propertyChangeQueue.splice(0, 1); if (list.length == 1) { this.itemsToBeHandled.next(list[0]); } } }; } get renderObservable() { return this.itemsToBeHandled; } /** * {@link handleNextOne()} calls {@link handleImmediate()} if an element is connected. * Otherwise, {@link pollAndHandle()} is called. */ handleNextOne(lazy = false) { if (!this.hostRef.nativeElement.isConnected || lazy) { this.pollAndHandle(!this.hostRef.nativeElement.isConnected ? 'NOT_CONNECTED_ELEMENT' : 'LAZY'); } else { this.handleImmediate(); } } /** * This method pushes item into {@link propertyChangeQueue}. * @param item */ pushAndHandle(item, lazy = false) { let changeWithDefault = { ...item, }; this.propertyChangeQueue.push(changeWithDefault); this.handleNextOne(lazy); } /** * {@link pollAndHandle()} continues checking whether new item is put on a queue to call {@link handleImmediate()}. */ pollAndHandle(mode) { const pollFunction = () => { if (this.handlerToCheckElementConnection) return; const interval = setInterval(() => { if (this.hostRef.nativeElement.isConnected) { clearInterval(interval); this.handlerToCheckElementConnection = undefined; this.handleImmediate(); } }, mode === 'NOT_CONNECTED_ELEMENT' ? 500 : 30); this.handlerToCheckElementConnection = interval; }; // Start polling pollFunction(); } ngOnDestroy() { if (this.handlerToCheckElementConnection) clearInterval(this.handlerToCheckElementConnection); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinearRenderService, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinearRenderService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinearRenderService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: () => [{ type: i0.ElementRef }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZWFyLXJlbmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGVybWluYWwvc3JjL2xpYi9saW5lYXItcmVuZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFFM0M7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUUvQixvQ0FBK0IsR0FDckMsU0FBUyxDQUFDO1FBRVo7O1dBRUc7UUFDSyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBd0Q1RDs7V0FFRztRQUNLLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7Z0JBQ3pDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQzthQUNGO1FBQ0gsQ0FBQyxDQUFDO0lBM0V3QyxDQUFDO0lBVzNDLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUs7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FDaEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXO2dCQUNyQyxDQUFDLENBQUMsdUJBQXVCO2dCQUN6QixDQUFDLENBQUMsTUFBTSxDQUNYLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FBQyxJQUF1QixFQUFFLElBQUksR0FBRyxLQUFLO1FBQ3hELElBQUksaUJBQWlCLEdBQUc7WUFDdEIsR0FBRyxJQUFJO1NBQ1IsQ0FBQztRQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxJQUFzQztRQUMxRCxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsK0JBQStCO2dCQUFFLE9BQU87WUFDakQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUMxQixHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7b0JBQzFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLCtCQUErQixHQUFHLFNBQVMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4QjtZQUNILENBQUMsRUFDRCxJQUFJLEtBQUssdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUM1QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLCtCQUErQixHQUFHLFFBQVEsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFDRixnQkFBZ0I7UUFDaEIsWUFBWSxFQUFFLENBQUM7SUFDakIsQ0FBQztJQWNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQywrQkFBK0I7WUFDdEMsYUFBYSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBakZVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFbGVtZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKlxuICogSW4gdGhlIHBhc3QsIGluZGl2aXN1YWwgcHJvcGVydHkgY2hhbmdlcyBjYXVzZWQgdmVyeSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIE5nVGVybWluYWwuXG4gKiBUbyBzb2x2ZSBpc3N1ZXMgcmVsYXRlZCB0byBwcm9wZXJ0eSBjaGFuZ2VzLCBRdWV1ZSBpcyBhcHBsaWVkLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTGluZWFyUmVuZGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZikge31cblxuICBwcml2YXRlIGhhbmRsZXJUb0NoZWNrRWxlbWVudENvbm5lY3Rpb24/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gPVxuICAgIHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhpcyBxdWV1ZSBoYXMgaXRlbXMgdG8gaGF2ZSBhIGluZmx1ZW5jZSBvbiB0aGUgdmlldyBhbmQgaXRlbXMgYXJlIGhhbmRsZWQgaW4gb3JkZXIuXG4gICAqL1xuICBwcml2YXRlIHByb3BlcnR5Q2hhbmdlUXVldWU6IFByb3BlcnR5Q2hhbmdlU2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBpdGVtc1RvQmVIYW5kbGVkID0gbmV3IFN1YmplY3Q8UHJvcGVydHlDaGFuZ2VTZXQ+KCk7XG5cbiAgZ2V0IHJlbmRlck9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxQcm9wZXJ0eUNoYW5nZVNldD4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zVG9CZUhhbmRsZWQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIGhhbmRsZU5leHRPbmUoKX0gY2FsbHMge0BsaW5rIGhhbmRsZUltbWVkaWF0ZSgpfSBpZiBhbiBlbGVtZW50IGlzIGNvbm5lY3RlZC5cbiAgICogT3RoZXJ3aXNlLCB7QGxpbmsgcG9sbEFuZEhhbmRsZSgpfSBpcyBjYWxsZWQuXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlTmV4dE9uZShsYXp5ID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LmlzQ29ubmVjdGVkIHx8IGxhenkpIHtcbiAgICAgIHRoaXMucG9sbEFuZEhhbmRsZShcbiAgICAgICAgIXRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LmlzQ29ubmVjdGVkXG4gICAgICAgICAgPyAnTk9UX0NPTk5FQ1RFRF9FTEVNRU5UJ1xuICAgICAgICAgIDogJ0xBWlknXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZUltbWVkaWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBwdXNoZXMgaXRlbSBpbnRvIHtAbGluayBwcm9wZXJ0eUNoYW5nZVF1ZXVlfS5cbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIHB1YmxpYyBwdXNoQW5kSGFuZGxlKGl0ZW06IFByb3BlcnR5Q2hhbmdlU2V0LCBsYXp5ID0gZmFsc2UpIHtcbiAgICBsZXQgY2hhbmdlV2l0aERlZmF1bHQgPSB7XG4gICAgICAuLi5pdGVtLFxuICAgIH07XG4gICAgdGhpcy5wcm9wZXJ0eUNoYW5nZVF1ZXVlLnB1c2goY2hhbmdlV2l0aERlZmF1bHQpO1xuICAgIHRoaXMuaGFuZGxlTmV4dE9uZShsYXp5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgcG9sbEFuZEhhbmRsZSgpfSBjb250aW51ZXMgY2hlY2tpbmcgd2hldGhlciBuZXcgaXRlbSBpcyBwdXQgb24gYSBxdWV1ZSB0byBjYWxsIHtAbGluayBoYW5kbGVJbW1lZGlhdGUoKX0uXG4gICAqL1xuICBwcml2YXRlIHBvbGxBbmRIYW5kbGUobW9kZTogJ05PVF9DT05ORUNURURfRUxFTUVOVCcgfCAnTEFaWScpIHtcbiAgICBjb25zdCBwb2xsRnVuY3Rpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5oYW5kbGVyVG9DaGVja0VsZW1lbnRDb25uZWN0aW9uKSByZXR1cm47XG4gICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlclRvQ2hlY2tFbGVtZW50Q29ubmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSW1tZWRpYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb2RlID09PSAnTk9UX0NPTk5FQ1RFRF9FTEVNRU5UJyA/IDUwMCA6IDMwXG4gICAgICApO1xuICAgICAgdGhpcy5oYW5kbGVyVG9DaGVja0VsZW1lbnRDb25uZWN0aW9uID0gaW50ZXJ2YWw7XG4gICAgfTtcbiAgICAvLyBTdGFydCBwb2xsaW5nXG4gICAgcG9sbEZ1bmN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGEgbmV4dCBzZXQgb2YgY2hhbmdlcyBpZiBpdCBleGlzdHMuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUltbWVkaWF0ZSA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuaGFuZGxlclRvQ2hlY2tFbGVtZW50Q29ubmVjdGlvbikge1xuICAgICAgbGV0IGxpc3QgPSB0aGlzLnByb3BlcnR5Q2hhbmdlUXVldWUuc3BsaWNlKDAsIDEpO1xuICAgICAgaWYgKGxpc3QubGVuZ3RoID09IDEpIHtcbiAgICAgICAgdGhpcy5pdGVtc1RvQmVIYW5kbGVkLm5leHQobGlzdFswXSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhbmRsZXJUb0NoZWNrRWxlbWVudENvbm5lY3Rpb24pXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGFuZGxlclRvQ2hlY2tFbGVtZW50Q29ubmVjdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUHJvcGVydHlDaGFuZ2VTZXQgPVxuICB8IHsgdGltZTogRGF0ZTsgdHlwZTogJ3Jvd0NoYW5nZWQnfVxuICB8IHsgdGltZTogRGF0ZTsgdHlwZTogJ2NvbHVtbkNoYW5nZWQnfVxuICB8IHtcbiAgICAgIHRpbWU6IERhdGU7IHR5cGU6ICdkcmFnZ2VkJztcbiAgICAgIGRyYWdnZWQ6IHsgZHJhZ2dlZFdpZHRoOiBzdHJpbmc7IGRyYWdnZWRIZWlnaHQ6IHN0cmluZyB9O1xuICAgIH1cbiAgfCB7IHRpbWU6IERhdGU7IHR5cGU6ICdob3N0UmVzaXplZCc7IGhvc3RSZXNpemVkOiB7IHdpZHRoOiBzdHJpbmc7IGhlaWdodDogc3RyaW5nIH0gfVxuICB8IHsgdGltZTogRGF0ZTsgdHlwZTogJ2RldGVjdEJveFJlc2l6ZWQnOyBkZXRlY3RCb3hSZXNpemVkOiB7IHdpZHRoOiBzdHJpbmcgfSB9XG4gIHwge1xuICAgICAgdGltZTogRGF0ZTsgdHlwZTogJ3h0ZXJtVmlld3BvcnRFeGNlZWRpbmdPdXRlckRpdic7XG4gICAgICB4dGVybVZpZXdwb3J0RXhjZWVkaW5nT3V0ZXJEaXY6IHtcbiAgICAgICAgd2lkdGg6IHN0cmluZztcbiAgICAgICAgaGVpZ2h0OiBzdHJpbmc7XG4gICAgICAgIG91dGVyRGl2V2lkdGg6IHN0cmluZztcbiAgICAgICAgb3V0ZXJEaXZIZWlnaHQ6IHN0cmluZztcbiAgICAgIH07XG4gICAgfVxuICB8IHsgdGltZTogRGF0ZTsgdHlwZTogJ25vbmUnIH07XG4iXX0=