mirror of
https://github.com/osmarks/mycorrhiza.git
synced 2024-12-04 18:19:54 +00:00
Show ghost siblings
This commit is contained in:
parent
44f6fbe0b2
commit
49e5ca8a6f
32
tree/tree.go
32
tree/tree.go
@ -12,11 +12,27 @@ import (
|
||||
)
|
||||
|
||||
func findSiblingsAndDescendants(hyphaName string) ([]*sibling, map[string]bool) {
|
||||
hyphaDir := ""
|
||||
if hyphaRawDir := path.Dir(hyphaName); hyphaRawDir != "." {
|
||||
hyphaDir = hyphaRawDir
|
||||
}
|
||||
var (
|
||||
siblings = []*sibling{&sibling{hyphaName, 0, 0}}
|
||||
siblingsMap = make(map[string]bool)
|
||||
siblingCheck = func(h *hyphae.Hypha) hyphae.CheckResult {
|
||||
if path.Dir(hyphaName) == path.Dir(h.Name) && h.Name != hyphaName {
|
||||
siblings = append(siblings, &sibling{h.Name, 0, 0})
|
||||
// I don't like this double comparison, but it is only the way to circumvent some flickups
|
||||
if strings.HasPrefix(h.Name, hyphaDir) && h.Name != hyphaDir && h.Name != hyphaName {
|
||||
var (
|
||||
rawSubPath = strings.TrimPrefix(h.Name, hyphaDir)[1:]
|
||||
slashIdx = strings.IndexRune(rawSubPath, '/')
|
||||
)
|
||||
if slashIdx > -1 {
|
||||
var sibPath = h.Name[:slashIdx+len(hyphaDir)+1]
|
||||
if _, exists := siblingsMap[sibPath]; !exists {
|
||||
siblingsMap[sibPath] = false
|
||||
}
|
||||
} else { // it is a straight sibling
|
||||
siblingsMap[h.Name] = true
|
||||
}
|
||||
}
|
||||
return hyphae.CheckContinue
|
||||
}
|
||||
@ -31,9 +47,18 @@ func findSiblingsAndDescendants(hyphaName string) ([]*sibling, map[string]bool)
|
||||
|
||||
i7n = hyphae.NewIteration()
|
||||
)
|
||||
siblingsMap[hyphaName] = true
|
||||
|
||||
i7n.AddCheck(siblingCheck)
|
||||
i7n.AddCheck(descendantCheck)
|
||||
i7n.Ignite()
|
||||
|
||||
siblings := make([]*sibling, len(siblingsMap))
|
||||
sibIdx := 0
|
||||
for sibName, exists := range siblingsMap {
|
||||
siblings[sibIdx] = &sibling{sibName, 0, 0, exists}
|
||||
sibIdx++
|
||||
}
|
||||
sort.Slice(siblings, func(i, j int) bool {
|
||||
return siblings[i].name < siblings[j].name
|
||||
})
|
||||
@ -125,6 +150,7 @@ type sibling struct {
|
||||
name string
|
||||
directSubhyphaeCount int
|
||||
indirectSubhyphaeCount int
|
||||
exists bool
|
||||
}
|
||||
|
||||
func subhyphaeMatrix(children []child) (html string) {
|
||||
|
@ -36,7 +36,7 @@ pseudographics:
|
||||
|
||||
{% func siblingHTML(s *sibling) %}
|
||||
<li class="sibling-hyphae__entry">
|
||||
<a class="sibling-hyphae__link" href="/hypha/{%s s.name %}">
|
||||
<a class="sibling-hyphae__link {% if !s.exists %}wikilink_new{% endif %}" href="/hypha/{%s s.name %}">
|
||||
{%s util.BeautifulName(path.Base(s.name)) %}
|
||||
<span class="sibling-hyphae__count">
|
||||
{% if s.directSubhyphaeCount > 0 %}
|
||||
|
@ -156,7 +156,15 @@ func streamsiblingHTML(qw422016 *qt422016.Writer, s *sibling) {
|
||||
//line tree/view.qtpl:37
|
||||
qw422016.N().S(`
|
||||
<li class="sibling-hyphae__entry">
|
||||
<a class="sibling-hyphae__link" href="/hypha/`)
|
||||
<a class="sibling-hyphae__link `)
|
||||
//line tree/view.qtpl:39
|
||||
if !s.exists {
|
||||
//line tree/view.qtpl:39
|
||||
qw422016.N().S(`wikilink_new`)
|
||||
//line tree/view.qtpl:39
|
||||
}
|
||||
//line tree/view.qtpl:39
|
||||
qw422016.N().S(`" href="/hypha/`)
|
||||
//line tree/view.qtpl:39
|
||||
qw422016.E().S(s.name)
|
||||
//line tree/view.qtpl:39
|
||||
|
Loading…
Reference in New Issue
Block a user