Make /canonical-links happen

This commit is contained in:
2021-03-13 17:20:11 +01:00
parent d29f19696f
commit 13e4c4ff66
6 changed files with 112 additions and 107 deletions
+94 -89
View File
@@ -27,8 +27,101 @@ from . import util
bp = Blueprint('agora', __name__)
G = db.G
# The [[agora]] is a [[distributed knowledge graph]].
# Nodes are the heart of the [[agora]].
# In the [[agora]] there are no 404s. Everything that can be described with words has a node in the [[agora]].
# The [[agora]] is a [[search engine]]: anagora.org/agora-search
#
# Flask routes work so that the one closest to the function is the canonical one.
@bp.route('/wikilink/<node>')
@bp.route('/node/<node>/uprank/<user_list>')
@bp.route('/node/<node>')
@bp.route('/<node>')
def node(node,user_list=[]):
current_app.logger.debug(f'[[{node}]]: Assembling node.')
if user_list:
rank = user_list.split(",")
else:
rank = ['agora', 'flancian']
n = G.node(node)
if n.subnodes:
# earlier in the list means more highly ranked.
n.subnodes = util.uprank(n.subnodes, users=rank)
permutations = []
# if it's a 404, include permutations.
else:
permutations = G.existing_permutations(node)
search_subnodes = db.search_subnodes(node)
current_app.logger.debug(f'[[{node}]]: Assembled node.')
return render_template(
# yuck
'content.html',
node=n,
backlinks=n.back_links(),
pull_nodes=n.pull_nodes() if n.subnodes else permutations,
forwardlinks=n.forward_links() if n else [],
search=search_subnodes,
pulling_nodes=n.pulling_nodes(),
pushing_nodes=n.pushing_nodes(),
q=n.wikilink.replace('-', '%20'),
qstr=n.wikilink.replace('-', ' '),
# disabled a bit superstitiously due to [[heisenbug]] after I added this everywhere :).
# sorry for the fuzzy thinking but I'm short on time and want to get things done.
# (...famous last words).
# annotations=n.annotations(),
)
@bp.route('/node/<node>.json')
@bp.route('/node/<node>/uprank/<user_list>.json')
def node_json(node,user_list=""):
default_rank = ['agora', 'flancian']
rank = user_list.split(",")
if len(rank) == 0:
rank = default_rank
n = G.node(node)
if n.subnodes:
# earlier in the list means more highly ranked.
print("rank", rank)
n.subnodes = util.uprank(n.subnodes, users=rank)
permutations = []
# if it's a 404, include permutations.
else:
permutations = G.existing_permutations(node)
search_subnodes = db.search_subnodes(node)
return jsons.dump({"node": n, "back_links": n.back_links(), "pull_nodes": n.pull_nodes()})
# return render_template(
# 'node_rendered.html',
# node=n,
# backlinks=n.back_links(),
# pull_nodes=n.pull_nodes() if n.subnodes else permutations,
# forwardlinks=n.forward_links() if n else [],
# search=search_subnodes,
# pulling_nodes=n.pulling_nodes(),
# pushing_nodes=n.pushing_nodes(),
# query=n.wikilink.replace('-', '%20')
# )
@bp.route('/node/<node>@<user>')
@bp.route('/node/@<user>/<node>')
@bp.route('/@<user>/<node>')
def subnode(node, user):
n = G.node(node)
n.subnodes = util.filter(n.subnodes, user)
n.subnodes = util.uprank(n.subnodes, user)
search_subnodes = db.search_subnodes_by_user(node, user)
return render_template(
'subnode.html',
node=n,
)
# Special
@bp.route('/index')
@bp.route('/')
def index():
return redirect(url_for('.node', node='index'))
@@ -156,94 +249,6 @@ def search():
return redirect(url_for('.go', node=slugify(" ".join(tokens[1:]))))
return redirect(url_for('.node', node=slugify(q)))
# Entities
@bp.route('/wikilink/<node>')
@bp.route('/node/<node>')
@bp.route('/node/<node>/uprank/<user_list>')
def node(node,user_list=[]):
current_app.logger.debug(f'[[{node}]]: Assembling node.')
if user_list:
rank = user_list.split(",")
else:
rank = ['agora', 'flancian']
n = G.node(node)
if n.subnodes:
# earlier in the list means more highly ranked.
n.subnodes = util.uprank(n.subnodes, users=rank)
permutations = []
# if it's a 404, include permutations.
else:
permutations = G.existing_permutations(node)
search_subnodes = db.search_subnodes(node)
current_app.logger.debug(f'[[{node}]]: Assembled node.')
return render_template(
# yuck
'content.html',
node=n,
backlinks=n.back_links(),
pull_nodes=n.pull_nodes() if n.subnodes else permutations,
forwardlinks=n.forward_links() if n else [],
search=search_subnodes,
pulling_nodes=n.pulling_nodes(),
pushing_nodes=n.pushing_nodes(),
q=n.wikilink.replace('-', '%20'),
qstr=n.wikilink.replace('-', ' '),
# disabled a bit superstitiously due to [[heisenbug]] after I added this everywhere :).
# sorry for the fuzzy thinking but I'm short on time and want to get things done.
# (...famous last words).
# annotations=n.annotations(),
)
@bp.route('/node/<node>.json')
@bp.route('/node/<node>/uprank/<user_list>.json')
def node_json(node,user_list=""):
default_rank = ['agora', 'flancian']
rank = user_list.split(",")
if len(rank) == 0:
rank = default_rank
n = G.node(node)
if n.subnodes:
# earlier in the list means more highly ranked.
print("rank", rank)
n.subnodes = util.uprank(n.subnodes, users=rank)
permutations = []
# if it's a 404, include permutations.
else:
permutations = G.existing_permutations(node)
search_subnodes = db.search_subnodes(node)
return jsons.dump({"node": n, "back_links": n.back_links(), "pull_nodes": n.pull_nodes()})
# return render_template(
# 'node_rendered.html',
# node=n,
# backlinks=n.back_links(),
# pull_nodes=n.pull_nodes() if n.subnodes else permutations,
# forwardlinks=n.forward_links() if n else [],
# search=search_subnodes,
# pulling_nodes=n.pulling_nodes(),
# pushing_nodes=n.pushing_nodes(),
# query=n.wikilink.replace('-', '%20')
# )
@bp.route('/node/<node>@<user>')
@bp.route('/node/@<user>/<node>')
@bp.route('/@<user>/<node>')
def subnode(node, user):
n = G.node(node)
n.subnodes = util.filter(n.subnodes, user)
n.subnodes = util.uprank(n.subnodes, user)
search_subnodes = db.search_subnodes_by_user(node, user)
return render_template(
'subnode.html',
node=n,
)
@bp.route('/subnode/<path:subnode>')
def old_subnode(subnode):
+2 -2
View File
@@ -56,11 +56,11 @@
|
<a href="/today"></a>
|
<a href="/node/agora-cli">cli</a>
<a href="/agora-cli">cli</a>
|
<a href="#" style="text-decoration: none;" class="theme-toggle">🌙</a>
|
<a href="/node/agora-help" style="text-decoration: none;" class="help-button"></a>
<a href="/agora-help" style="text-decoration: none;" class="help-button"></a>
</div>
<hr />
+2 -2
View File
@@ -32,10 +32,10 @@ This site is very much under construction, but feel free to look around:
<li><a href="{{search_url}}">{{search}}</a> offers full text search over all subnodes (supports regexes).</li>
</ul>
The <a href="/node/wikilink">[[wikilink]]</a> is the heart of the Agora. <a href="/node/foo">/node/foo</a> will render every subnode that resolves to wikilink <a href="/node/foo">[[foo]]</a>. For example: <a href="/node/agora">[[Agora]]</a>.
The <a href="/wikilink">[[wikilink]]</a> is the heart of the Agora. <a href="/foo">/foo</a> will render every subnode that resolves to wikilink <a href="/foo">[[foo]]</a>. For example: <a href="/agora">[[Agora]]</a>.
<br /><br />
For more information, please visit the <a href="https://flancia.org/go/agora">Agora repository.</a> If you're interested in knowing what's coming, please refer to <a href="https://anagora.org/node/agora-plan">Agora plan</a>.
For more information, please visit the <a href="https://flancia.org/go/agora">Agora repository.</a> If you're interested in knowing what's coming, please refer to <a href="https://anagora.org/agora-plan">Agora plan</a>.
</div>
{% include "node_rendered.html" %}
+5 -5
View File
@@ -21,7 +21,7 @@
<span class="backlinks-header">← back</span><br />
{% if backlinks %}
{% for link in backlinks %}
<a href="/node/{{link}}">{{link}}</a><br />
<a href="/{{link}}">{{link}}</a><br />
{% endfor %}
{% else %}
(none)
@@ -33,7 +33,7 @@
<span class="pushlinks-header">↑ pushing</span><br />
{% if pushing_nodes %}
{% for node in pushing_nodes %}
<a href="/node/{{node.uri}}">{{node.uri}}</a><br />
<a href="/{{node.uri}}">{{node.uri}}</a><br />
{% endfor %}
{% else %}
(none)
@@ -45,7 +45,7 @@
<div class="pulllinks">
<span class="pulllinks-header"> ↑pushing</span><br />
{% for node in pull_nodes %}
<a href="/node/{{node.uri}}">{{node.uri}}</a><br />
<a href="/{{node.uri}}">{{node.uri}}</a><br />
{% endfor %}
<br />
-->
@@ -53,7 +53,7 @@
<span class="pulllinks-header">↓ pulling</span><br />
{% if pulling_nodes %}
{% for node in pulling_nodes %}
<a href="/node/{{node.uri}}">{{node.uri}}</a><br />
<a href="/{{node.uri}}">{{node.uri}}</a><br />
{% endfor %}
{% else %}
(none)
@@ -66,7 +66,7 @@
<span class="forwardlinks-header">→ forward</span><br />
{% if forwardlinks %}
{% for link in forwardlinks %}
<a href="/node/{{link}}">{{link}}</a><br />
<a href="/{{link}}">{{link}}</a><br />
{% endfor %}
{% else %}
(none)
+4 -4
View File
@@ -23,7 +23,7 @@
If you <a href="https://flancia.org/go/agora">contributed content</a> related to '{{qstr}}' to the agora , it would show up here :)
<ul>
<li>
For example a note named <code>{{node}}.md</code> or an image named <code>{{node}}.jpg</code>. <a href="/node/sign-up"
For example a note named <code>{{node}}.md</code> or an image named <code>{{node}}.jpg</code>. <a href="/sign-up"
</li>
<li>
<strong>Sign up now</strong></a> and start participating!
@@ -45,7 +45,7 @@
{% if node.subnodes %}
<div class="node">
<span class="node-header">→ node <a href="/node/{{node.uri}}">[[{{node.uri}}]]</a></span>
<span class="node-header">→ node <a href="/{{node.uri}}">[[{{node.uri}}]]</a></span>
{% for subnode in node.subnodes %}
<div class="subnode">
@@ -63,7 +63,7 @@
<div class="pushed-subnode">
<div class="subnode-header">
<span class="subnode-id">↳ subnode <a href="/@{{subnode.user}}/{{node.uri}}">[[@{{subnode.user}}/{{node.uri}}]]</a></span><br />
<span class="subnode-links">pushed from <a href="/subnode/{{subnode.uri}}">{{subnode.uri}}</a> by <a href="/@{{subnode.user}}">@{{subnode.user}}</a></span>
<span class="subnode-links">pushed from <a href="/sub{{subnode.uri}}">{{subnode.uri}}</a> by <a href="/@{{subnode.user}}">@{{subnode.user}}</a></span>
</div>
<ul>
{{ subnode.render()|linkify|safe }}
@@ -76,7 +76,7 @@
{% for node in pull_nodes %}
<div class="node">
<span class="node-header">⥅ pulled node <a href="/node/{{node.uri}}">[[{{node.uri}}]]</a></span>
<span class="node-header">⥅ pulled node <a href="/{{node.uri}}">[[{{node.uri}}]]</a></span>
{% if node.subnodes %}
{% for subnode in node.subnodes %}
+5 -5
View File
@@ -22,7 +22,7 @@
<div class="not-found">
No subnodes matching your query.
<br /><br />
Try going up to node <a href="/node/{{node.uri}}">[[{{node.uri}}]]</a> or perhaps <a href="/search">search</a>.
Try going up to node <a href="/{{node.uri}}">[[{{node.uri}}]]</a> or perhaps <a href="/search">search</a>.
</div>
{% endif %}
{% endif %}
@@ -32,7 +32,7 @@ Try going up to node <a href="/node/{{node.uri}}">[[{{node.uri}}]]</a> or perhap
{% for subnode in node.subnodes %}
<div class="subnode">
<div class="subnode-header">
<span>Subnode <a href="/@{{subnode.user}}/{{node.uri}}">[[@{{subnode.user}}/{{node.uri}}]]</a></span> in node <a href="/node/{{subnode.wikilink}}">[[{{subnode.wikilink}}]]</a></span><br />
<span>Subnode <a href="/@{{subnode.user}}/{{node.uri}}">[[@{{subnode.user}}/{{node.uri}}]]</a></span> in node <a href="/{{subnode.wikilink}}">[[{{subnode.wikilink}}]]</a></span><br />
<span class="subnode-links">from <a href="/raw/{{subnode.uri}}">{{subnode.uri}}</a> by <a href="/@{{subnode.user}}">@{{subnode.user}}</a></span>
</div>
{{ subnode.render()|linkify|safe }}
@@ -42,7 +42,7 @@ Try going up to node <a href="/node/{{node.uri}}">[[{{node.uri}}]]</a> or perhap
<div class="links">
<div class="backlinks">
<span class="backlinks-header">To see links, go up to node <a href="/node/{{node.uri}}">[[{{node.uri}}]]</a>.</span>
<span class="backlinks-header">To see links, go up to node <a href="/{{node.uri}}">[[{{node.uri}}]]</a>.</span>
</div>
</div>
{% endif %}
@@ -51,12 +51,12 @@ Try going up to node <a href="/node/{{node.uri}}">[[{{node.uri}}]]</a> or perhap
<!-- old_subnode uses this -->
{% if subnode %}
<div class="subnode">
<span class="subnode-header">Subnode <a href="/{{subnode.uri}}">[[{{subnode.uri}}]]</a> by <a href="/@{{subnode.user}}">@{{subnode.user}}</a> in node <a href="/node/{{subnode.wikilink}}">[[{{subnode.wikilink}}]]</a></span>
<span class="subnode-header">Subnode <a href="/{{subnode.uri}}">[[{{subnode.uri}}]]</a> by <a href="/@{{subnode.user}}">@{{subnode.user}}</a> in node <a href="/{{subnode.wikilink}}">[[{{subnode.wikilink}}]]</a></span>
{{ subnode.render()|linkify|safe }}
</div>
<div class="links">
<div class="backlinks">
<span class="backlinks-header">To see links, go up to node <a href="/node/{{subnode.wikilink}}">[[{{subnode.wikilink}}]]</a>.</span>
<span class="backlinks-header">To see links, go up to node <a href="/{{subnode.wikilink}}">[[{{subnode.wikilink}}]]</a>.</span>
</div>
</div>