diff --git a/app/agora.py b/app/agora.py index 46d35e7..8a6b021 100644 --- a/app/agora.py +++ b/app/agora.py @@ -34,9 +34,10 @@ def index(): return render_template( 'node_rendered.html', node=n, - backlinks=[x.wikilink for x in db.nodes_by_outlink(node)], + backlinks=n.back_links(), pushlinks=n.push_links() if n else [], pull_nodes=n.pull_nodes() if n else [], + pulling_nodes=n.pulling_nodes() if n else [], forwardlinks=n.forward_links() if n else [], ) @@ -123,11 +124,12 @@ def node(node): return render_template( 'node_rendered.html', node=n, - backlinks=[x.wikilink for x in db.nodes_by_outlink(node)], + backlinks=n.back_links(), pushlinks=n.push_links() if n else [], pull_nodes=n.pull_nodes() if n else [], forwardlinks=n.forward_links() if n else [], search=search_subnodes, + pulling_nodes=n.pulling_nodes(), query=n.wikilink.replace('-', '%20') ) diff --git a/app/db.py b/app/db.py index ccf5837..4beca8d 100644 --- a/app/db.py +++ b/app/db.py @@ -118,6 +118,10 @@ class Node: links.extend(subnode.go()) return links + # The following section is particularly confusing. + # Some functions return wikilinks, some return full blown nodes. + # We probably want to converge on the latter. + # TODO: fix. def forward_links(self): links = [] for subnode in self.subnodes: @@ -127,17 +131,32 @@ class Node: # Pattern: (subject).action_object. # Could be modeled with RDF? def pull_nodes(self): + # the nodes *being pulled* by this node. nodes = [] for subnode in self.subnodes: nodes.extend(subnode.pull_nodes()) return sorted(set(nodes), key=lambda x: x.uri) + def pulling_nodes(self): + # the nodes pulling *this* node. + # compare with: pull_nodes. + nodes = [] + for wikilink in self.back_links(): + n = G.node(wikilink) + if self.wikilink in [n.wikilink for n in n.pull_nodes()]: + nodes.append(n) + return nodes + def push_links(self): links = [] for subnode in self.subnodes: links.extend(subnode.push_links()) return sorted(set(links)) + def back_links(self): + return sorted([x.wikilink for x in nodes_by_outlink(self.wikilink)]) + + class Subnode: """A subnode is a note or media resource volunteered by a user of the Agora. diff --git a/app/templates/links.html b/app/templates/links.html index 197c28d..44e0758 100644 --- a/app/templates/links.html +++ b/app/templates/links.html @@ -34,11 +34,17 @@ -->