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 @@
-
Find in Current File
+ @if (isQueryLong) {
+
+ Query exceeds 80 characters...
+
+ } @else if (isQueryNotFound) {
+
+ Query not found...
+ {{query}}
+
+ } @else if (!isQueryLong && !isQueryNotFound) {
+
Find in Current File:
+ {{query}}
+
+ }
@@ -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..."
/>
- Find
- Find All
+ Find
+
+ Find All
+
@@ -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..."
/>
- Replace
- Replace All
+ Replace
+
+ Replace All
+
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);
}