web: search for unread tags when clicking under Unread section
This commit is contained in:
parent
c31f9d581f
commit
e0890f1181
@ -23,10 +23,15 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
|
|||||||
pager,
|
pager,
|
||||||
} => view_search_results(&query, results.as_slice(), *count, pager),
|
} => view_search_results(&query, results.as_slice(), *count, pager),
|
||||||
};
|
};
|
||||||
fn view_tag_li(display_name: &str, indent: usize, t: &Tag) -> Node<Msg> {
|
fn view_tag_li(display_name: &str, indent: usize, t: &Tag, search_unread: bool) -> Node<Msg> {
|
||||||
|
let href = if search_unread {
|
||||||
|
urls::search(&format!("is:unread tag:{}", t.name), 0)
|
||||||
|
} else {
|
||||||
|
urls::search(&format!("tag:{}", t.name), 0)
|
||||||
|
};
|
||||||
li![a![
|
li![a![
|
||||||
attrs! {
|
attrs! {
|
||||||
At::Href => urls::search(&format!("tag:{}", t.name), 0)
|
At::Href => href
|
||||||
},
|
},
|
||||||
(0..indent).map(|_| span![C!["tag-indent"], ""]),
|
(0..indent).map(|_| span![C!["tag-indent"], ""]),
|
||||||
i![
|
i![
|
||||||
@ -45,15 +50,15 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
|
|||||||
.take_while(|(a, b)| a == b)
|
.take_while(|(a, b)| a == b)
|
||||||
.count()
|
.count()
|
||||||
}
|
}
|
||||||
fn view_tag_list<'a>(tags: impl Iterator<Item = &'a Tag>) -> Vec<Node<Msg>> {
|
fn view_tag_list<'a>(
|
||||||
|
tags: impl Iterator<Item = &'a Tag>,
|
||||||
|
search_unread: bool,
|
||||||
|
) -> Vec<Node<Msg>> {
|
||||||
let mut lis = Vec::new();
|
let mut lis = Vec::new();
|
||||||
let mut last = Vec::new();
|
let mut last = Vec::new();
|
||||||
for t in tags {
|
for t in tags {
|
||||||
let parts: Vec<_> = t.name.split('/').collect();
|
let parts: Vec<_> = t.name.split('/').collect();
|
||||||
let mut n = matches(&last, &parts);
|
let mut n = matches(&last, &parts);
|
||||||
if t.name.starts_with("ZZCrap/Free") {
|
|
||||||
info!("n: {n}, parts: {parts:?} last: {last:?}");
|
|
||||||
}
|
|
||||||
if n <= parts.len() - 2 && parts.len() > 1 {
|
if n <= parts.len() - 2 && parts.len() > 1 {
|
||||||
// Synthesize fake tags for proper indenting.
|
// Synthesize fake tags for proper indenting.
|
||||||
for i in n..parts.len() - 1 {
|
for i in n..parts.len() - 1 {
|
||||||
@ -67,13 +72,14 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
|
|||||||
fg_color: "#000".to_string(),
|
fg_color: "#000".to_string(),
|
||||||
unread: 0,
|
unread: 0,
|
||||||
},
|
},
|
||||||
|
search_unread,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
last = parts[..parts.len() - 1].to_vec();
|
last = parts[..parts.len() - 1].to_vec();
|
||||||
n = parts.len() - 1;
|
n = parts.len() - 1;
|
||||||
}
|
}
|
||||||
let display_name = parts[n];
|
let display_name = parts[n];
|
||||||
lis.push(view_tag_li(&display_name, n, t));
|
lis.push(view_tag_li(&display_name, n, t, search_unread));
|
||||||
last = parts;
|
last = parts;
|
||||||
}
|
}
|
||||||
lis
|
lis
|
||||||
@ -90,7 +96,7 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
|
|||||||
aside![
|
aside![
|
||||||
C!["tags-menu", "menu"],
|
C!["tags-menu", "menu"],
|
||||||
IF!(!unread.is_empty() => p![C!["menu-label"], "Unread"]),
|
IF!(!unread.is_empty() => p![C!["menu-label"], "Unread"]),
|
||||||
IF!(!unread.is_empty() => ul![C!["menu-list"], view_tag_list(unread.into_iter())]),
|
IF!(!unread.is_empty() => ul![C!["menu-list"], view_tag_list(unread.into_iter(),true)]),
|
||||||
p![
|
p![
|
||||||
C!["menu-label"],
|
C!["menu-label"],
|
||||||
IF!(!force_tags_open =>
|
IF!(!force_tags_open =>
|
||||||
@ -109,7 +115,7 @@ pub(super) fn view(model: &Model) -> Node<Msg> {
|
|||||||
],
|
],
|
||||||
ul![
|
ul![
|
||||||
C!["menu-list"],
|
C!["menu-list"],
|
||||||
IF!(force_tags_open||tags_open.get() => model.tags.as_ref().map(|tags| view_tag_list(tags.iter()))),
|
IF!(force_tags_open||tags_open.get() => model.tags.as_ref().map(|tags| view_tag_list(tags.iter(),false))),
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
div![
|
div![
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user