37 lines
742 B
Go
37 lines
742 B
Go
package pttodo
|
|
|
|
import "strings"
|
|
|
|
type Todos []Todo
|
|
|
|
func (todos Todos) LikeSearch(search string) Todos {
|
|
return todos.Like(func(todo Todo) bool {
|
|
return strings.Contains(
|
|
strings.ToLower(todo.Todo),
|
|
strings.ToLower(search),
|
|
)
|
|
})
|
|
}
|
|
|
|
func (todos Todos) LikeTags(tags []string) Todos {
|
|
return todos.Like(func(todo Todo) bool {
|
|
matches := true
|
|
for _, tag := range tags {
|
|
str := strings.TrimLeft(tag, "-")
|
|
want := !strings.HasPrefix(tag, "-")
|
|
matches = matches && strings.Contains(todo.Tags, str) == want
|
|
}
|
|
return matches
|
|
})
|
|
}
|
|
|
|
func (todos Todos) Like(like func(Todo) bool) Todos {
|
|
result := make(Todos, 0)
|
|
for i := range todos {
|
|
if like(todos[i]) {
|
|
result = append(result, todos[i])
|
|
}
|
|
}
|
|
return result
|
|
}
|