Add custom tag suggestion handler (#424)

This commit is contained in:
Gandum2077
2025-06-24 19:47:14 +08:00
committed by GitHub
parent 838d5c9c3e
commit d5d72911ed
6 changed files with 48 additions and 11 deletions

View File

@@ -184,6 +184,9 @@ class ComicSource {
final HandleClickTagEvent? handleClickTagEvent;
/// Callback when a tag suggestion is selected in search.
final TagSuggestionSelectFunc? onTagSuggestionSelected;
final LinkHandler? linkHandler;
final bool enableTagsSuggestions;
@@ -259,6 +262,7 @@ class ComicSource {
this.idMatcher,
this.translations,
this.handleClickTagEvent,
this.onTagSuggestionSelected,
this.linkHandler,
this.enableTagsSuggestions,
this.enableTagsTranslate,

View File

@@ -148,6 +148,7 @@ class ComicSourceParser {
_parseIdMatch(),
_parseTranslation(),
_parseClickTagEvent(),
_parseTagSuggestionSelectFunc(),
_parseLinkHandler(),
_getValue("search.enableTagsSuggestions") ?? false,
_getValue("comic.enableTagsTranslate") ?? false,
@@ -1057,6 +1058,19 @@ class ComicSourceParser {
};
}
TagSuggestionSelectFunc? _parseTagSuggestionSelectFunc() {
if (!_checkExists("search.onTagSuggestionSelected")) {
return null;
}
return (namespace, tag) {
var res = JsEngine().runCode("""
ComicSource.sources.$_key.search.onTagSuggestionSelected(
${jsonEncode(namespace)}, ${jsonEncode(tag)})
""");
return res is String ? res : "$namespace:$tag";
};
}
LinkHandler? _parseLinkHandler() {
if (!_checkExists("comic.link")) {
return null;

View File

@@ -44,5 +44,10 @@ typedef VoteCommentFunc = Future<Res<int?>> Function(
typedef HandleClickTagEvent = PageJumpTarget? Function(
String namespace, String tag);
/// Handle tag suggestion selection event. Should return the text to insert
/// into the search field.
typedef TagSuggestionSelectFunc = String Function(
String namespace, String tag);
/// [rating] is the rating value, 0-10. 1 represents 0.5 star.
typedef StarRatingFunc = Future<Res<bool>> Function(String comicId, int rating);