diff --git a/list.m3u8 b/list.m3u8 new file mode 100644 index 0000000..e69de29 diff --git a/src/app/editor/search-replace/search-replace.component.html b/src/app/editor/search-replace/search-replace.component.html index 4b15e67..83d96f0 100644 --- a/src/app/editor/search-replace/search-replace.component.html +++ b/src/app/editor/search-replace/search-replace.component.html @@ -1,7 +1,20 @@
- + @if (isQueryLong) { + + } @else if (isQueryNotFound) { + + } @else if (!isQueryLong && !isQueryNotFound) { + + }
@@ -45,15 +58,27 @@ id="find-entry" class="form-control" type="search" - (keyup)="searchForString()" + (focus)="searchForString()" + (keyup)="findEntryKeyUpHandler($event)" + (input)="searchForString()" placeholder="Find in current file..." aria-label="Find in current file..." />
- - + +
@@ -68,15 +93,25 @@ id="replace-entry" class="form-control" type="search" - (keyup)="replaceEntry($event)" + (keyup.enter)="replaceEntry($event)" title="Replace in current file..." placeholder="Replace in current file..." />
- - + +
diff --git a/src/app/editor/search-replace/search-replace.component.ts b/src/app/editor/search-replace/search-replace.component.ts index 4d9867d..611804e 100644 --- a/src/app/editor/search-replace/search-replace.component.ts +++ b/src/app/editor/search-replace/search-replace.component.ts @@ -36,15 +36,18 @@ export class SearchReplaceComponent { @ViewChild('findEntryElm') findEntryElm!: ElementRef; @ViewChild('replaceEntryElm') replaceEntryElm!: ElementRef; + @Input() query: string = ""; + @Input() findOptions: string = ""; + @Input() isQueryLong: boolean = false; + @Input() isQueryNotFound: boolean = false; + private editor!: any; - @Input() findOptions: string = ""; private useWholeWordSearch: boolean = false; private searchOnlyInSelection: boolean = false; private useCaseSensitive: boolean = false; private useRegex: boolean = false; private selection: string = ""; - private query: string = ""; private toStr: string = ""; private isBackwards: boolean = false; private isWrap: boolean = true; @@ -179,16 +182,24 @@ export class SearchReplaceComponent { this.findOptions = findOptionsStr; } + public findPreviousEntry() { + this.editor.findPrevious(); + } public findNextEntry() { this.editor.findNext(); } + public findEntryKeyUpHandler(event: KeyboardEvent) { + if (!event.ctrlKey || !this.query) return; + + if (event.key === "ArrowUp") this.findPreviousEntry(); + if (event.key === "ArrowDown") this.findNextEntry(); + } + public findAllEntries() { this.query = this.findEntryElm.nativeElement.value; - if (!this.query) return; - let totalCount = this.editor.findAll(this.query, { backwards: this.isBackwards, wrap: this.isWrap, @@ -197,18 +208,12 @@ export class SearchReplaceComponent { regExp: this.useRegex, range: this.searchOnlyInSelection }); + + if (totalCount === 0) this.isQueryNotFound = true; } - public findPreviousEntry() { - this.editor.findPrevious(); - } - - public replaceEntry(event: any) { - if (event instanceof KeyboardEvent) { - if (event.key !== "Enter") { - return; - } - } + public replaceEntry(event: KeyboardEvent) { + if (this.isQueryLong || this.isQueryNotFound) return; let fromStr = this.findEntryElm.nativeElement.value; let toStr = this.replaceEntryElm.nativeElement.value; @@ -229,6 +234,8 @@ export class SearchReplaceComponent { } public replaceAll() { + if (this.isQueryLong || this.isQueryNotFound) return; + let fromStr = this.findEntryElm.nativeElement.value; let toStr = this.replaceEntryElm.nativeElement.value; @@ -242,23 +249,27 @@ export class SearchReplaceComponent { regExp: this.useRegex, range: this.searchOnlyInSelection }); + + this.isQueryNotFound = true; } public searchForString() { - if (event instanceof KeyboardEvent) { - if (event.key !== "Enter") { - return; - } - } + if (this.searchTimeoutId) { clearTimeout(this.searchTimeoutId); } this.query = this.findEntryElm.nativeElement.value; - if (!this.query) return; + if (!this.query) { + this.isQueryLong = false; + this.isQueryNotFound = false; - if (this.searchTimeoutId) { clearTimeout(this.searchTimeoutId); } + return; + } + + this.isQueryLong = (this.query.length > 80); + if (this.isQueryLong) return; this.searchTimeoutId = setTimeout(() => { - let totalCount = this.editor.find(this.query, { + let totalCount = this.editor.findAll(this.query, { backwards: this.isBackwards, wrap: this.isWrap, caseSensitive: this.useCaseSensitive, @@ -266,6 +277,8 @@ export class SearchReplaceComponent { regExp: this.useRegex, range: this.searchOnlyInSelection }); + + this.isQueryNotFound = (totalCount === 0); }, this.searchTimeout); }