Tag autocomplete shows suggestions when typing #partial in capture bar. Tab/enter accepts, up/down navigates, esc dismisses. Query composition extends ? search with date filters (@today, @week, @month, <7d, >30d), card type filters (^snippet), all composable with existing text and tag filters.
This commit is contained in:
+53
-12
@@ -4,19 +4,23 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Result struct {
|
||||
Body string
|
||||
Glyph string
|
||||
Title *string
|
||||
Description *string
|
||||
TimeAnchor *string
|
||||
Tags []string
|
||||
FilterTags []string
|
||||
CardSuffix *string
|
||||
Pin bool
|
||||
Query bool
|
||||
Body string
|
||||
Glyph string
|
||||
Title *string
|
||||
Description *string
|
||||
TimeAnchor *string
|
||||
Tags []string
|
||||
FilterTags []string
|
||||
CardSuffix *string
|
||||
Pin bool
|
||||
Query bool
|
||||
QueryDateFrom *string
|
||||
QueryDateTo *string
|
||||
QueryCardType *string
|
||||
}
|
||||
|
||||
var validCardTypes = map[string]string{
|
||||
@@ -66,11 +70,48 @@ func Parse(input string) (*Result, error) {
|
||||
r.Glyph = ""
|
||||
tokens := strings.Fields(remaining)
|
||||
var bodyParts []string
|
||||
now := time.Now()
|
||||
for _, tok := range tokens {
|
||||
if strings.HasPrefix(tok, "#") && len(tok) > 1 && !strings.HasPrefix(tok, "##") {
|
||||
switch {
|
||||
case strings.HasPrefix(tok, "#") && len(tok) > 1 && !strings.HasPrefix(tok, "##"):
|
||||
tag := strings.ToLower(tok[1:])
|
||||
r.FilterTags = append(r.FilterTags, tag)
|
||||
} else {
|
||||
case tok == "@today":
|
||||
d := now.Format("2006-01-02")
|
||||
r.QueryDateFrom = &d
|
||||
r.QueryDateTo = &d
|
||||
case tok == "@yesterday":
|
||||
d := now.AddDate(0, 0, -1).Format("2006-01-02")
|
||||
r.QueryDateFrom = &d
|
||||
r.QueryDateTo = &d
|
||||
case tok == "@week":
|
||||
d := now.AddDate(0, 0, -7).Format("2006-01-02")
|
||||
r.QueryDateFrom = &d
|
||||
case tok == "@month":
|
||||
d := now.AddDate(0, -1, 0).Format("2006-01-02")
|
||||
r.QueryDateFrom = &d
|
||||
case strings.HasPrefix(tok, ">") && strings.HasSuffix(tok, "d"):
|
||||
if n, err := strconv.Atoi(tok[1 : len(tok)-1]); err == nil && n > 0 {
|
||||
d := now.AddDate(0, 0, -n).Format("2006-01-02")
|
||||
r.QueryDateTo = &d
|
||||
} else {
|
||||
bodyParts = append(bodyParts, tok)
|
||||
}
|
||||
case strings.HasPrefix(tok, "<") && strings.HasSuffix(tok, "d"):
|
||||
if n, err := strconv.Atoi(tok[1 : len(tok)-1]); err == nil && n > 0 {
|
||||
d := now.AddDate(0, 0, -n).Format("2006-01-02")
|
||||
r.QueryDateFrom = &d
|
||||
} else {
|
||||
bodyParts = append(bodyParts, tok)
|
||||
}
|
||||
case strings.HasPrefix(tok, "^") && len(tok) > 1:
|
||||
suffix := tok[1:]
|
||||
if ct, ok := validCardTypes[suffix]; ok {
|
||||
r.QueryCardType = &ct
|
||||
} else {
|
||||
bodyParts = append(bodyParts, tok)
|
||||
}
|
||||
default:
|
||||
bodyParts = append(bodyParts, tok)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user