Swap in 'latest' in lieu of 'subnodes', which is made less interesting

by the per-user views.
Right now it shows all subnodes in mtime order, but eventually it should
only show top N.
This commit is contained in:
Flancian 2020-11-17 10:49:21 +01:00
parent f6fad2f95e
commit ddcdb8de8b
6 changed files with 30 additions and 9 deletions

View file

@ -23,7 +23,7 @@ bp = Blueprint('agora', __name__)
@bp.route('/') @bp.route('/')
def index(): def index():
return render_template('index.html', version=config.AGORA_VERSION, help=url_for('agora.help'), nodes=url_for('agora.nodes'), subnodes=url_for('agora.subnodes'), users=url_for('agora.users'), journals=url_for('agora.journals'), search=url_for('agora.search')) return render_template('index.html', version=config.AGORA_VERSION, help=url_for('agora.help'), nodes=url_for('agora.nodes'), subnodes=url_for('agora.subnodes'), users=url_for('agora.users'), journals=url_for('agora.journals'), search=url_for('agora.search'), latest=url_for('agora.latest'))
@bp.route('/help') @bp.route('/help')
def help(): def help():
@ -39,13 +39,17 @@ def nodes():
def subnodes(): def subnodes():
return render_template('subnodes.html', subnodes=db.all_subnodes()) return render_template('subnodes.html', subnodes=db.all_subnodes())
@bp.route('/latest')
def latest():
return render_template('subnodes.html', header="Latest", subnodes=db.latest())
@bp.route('/users') @bp.route('/users')
def users(): def users():
return render_template('users.html', users=db.all_users()) return render_template('users.html', users=db.all_users())
@bp.route('/journals') @bp.route('/journals')
def journals(): def journals():
return render_template('nodes.html', nodes=db.all_journals()) return render_template('nodes.html', header="Journals", nodes=db.all_journals())
@bp.route('/today') @bp.route('/today')
def today(): def today():

View file

@ -77,6 +77,7 @@ class Subnode:
self.user = path_to_user(path) self.user = path_to_user(path)
with open(path) as f: with open(path) as f:
self.content = f.read() self.content = f.read()
self.mtime = os.path.getmtime(path)
self.outlinks = content_to_outlinks(self.content) self.outlinks = content_to_outlinks(self.content)
self.node = self.wikilink self.node = self.wikilink
# Initiate node for wikilink if this is the first subnode, append otherwise. # Initiate node for wikilink if this is the first subnode, append otherwise.
@ -124,9 +125,16 @@ def content_to_outlinks(content):
else: else:
return [] return []
def all_subnodes(): def all_subnodes(sort=True):
subnodes = [Subnode(f) for f in glob.glob(os.path.join(config.AGORA_PATH, '**/*.md'), recursive=True)] subnodes = [Subnode(f) for f in glob.glob(os.path.join(config.AGORA_PATH, '**/*.md'), recursive=True)]
return sorted(subnodes, key=lambda x: x.uri.lower()) if sort:
return sorted(subnodes, key=lambda x: x.uri.lower())
else:
return subnodes
def latest():
subnodes = all_subnodes(sort=False)
return sorted(subnodes, key=lambda x: -x.mtime)
def all_nodes(include_journals=True): def all_nodes(include_journals=True):
# first we fetch all subnodes, put them in a dict {wikilink -> [subnode]}. # first we fetch all subnodes, put them in a dict {wikilink -> [subnode]}.

View file

@ -31,9 +31,9 @@
</span> </span>
<span align=left> <span align=left>
<a href="/nodes">nodes</a> <a href="/nodes">nodes</a>
| <a href="/subnodes">subnodes</a>
| <a href="/journals">journals</a> | <a href="/journals">journals</a>
| <a href="/users">users</a> | <a href="/users">users</a>
| <a href="/latest">latest</a>
| <a href="/search">search</a> | <a href="/search">search</a>
</span> </span>
<span style="vertical-align: bottom; float:right"> <span style="vertical-align: bottom; float:right">

View file

@ -23,10 +23,10 @@ This is the <strong>Agora v{{version}}</strong>.<br />
<br /> <br />
This site is very much under construction, but feel free to look around: This site is very much under construction, but feel free to look around:
<ul> <ul>
<li><a href="{{nodes}}">{{nodes}}</a> lists all nodes in this Agora; a node is the set of all subnodes with a given title, or otherwise about the same entity. Subnodes can come from a variety of sources.</li> <li><a href="{{nodes}}">{{nodes}}</a> lists all non-journal nodes in this Agora; a node is the set of all subnodes with a given title, or otherwise about the same entity. Subnodes can come from a variety of sources; currently these are mostly notes as volunteered by users.</li>
<li><a href="{{subnodes}}">{{subnodes}}</a> lists all subnodes in this Agora; currently these are mostly notes as volunteered by users.</li> <li><a href="{{journals}}">{{journals}}</a> displays all journal entries (these are just nodes matching YYYY-MM-DD).</li>
<li><a href="{{journals}}">{{journals}}</a> displays all journal entries (these are notes matching YYYY-MM-DD).</li> <li><a href="{{users}}">{{users}}</a> displays all users in this Agora. Click through to see their subnodes.</li>
<li><a href="{{users}}">{{users}}</a> displays all users in this Agora, click through to see their subnodes.</li> <li><a href="{{subnodes}}">{{latest}}</a> shows which subnodes were added or modified recently.</li>
<li><a href="{{search}}">{{search}}</a> offers full text search over all subnodes (supports regexes).</li> <li><a href="{{search}}">{{search}}</a> offers full text search over all subnodes (supports regexes).</li>
</ul> </ul>

View file

@ -17,7 +17,11 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="listing"> <div class="listing">
{% if header %}
<h1> {{header}} </h1>
{% else %}
<h1> Nodes </h1> <h1> Nodes </h1>
{% endif %}
{% for node in nodes %} {% for node in nodes %}
<a href="{{node.url}}">{{node.wikilink}}</a> ({{node.size()}})<br /> <a href="{{node.url}}">{{node.wikilink}}</a> ({{node.size()}})<br />
{% endfor %} {% endfor %}

View file

@ -17,7 +17,12 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="listing"> <div class="listing">
{% if header %}
<h1> {{header}} </h1>
{% else %}
<h1> Subnodes </h1> <h1> Subnodes </h1>
{% endif %}
{% if not subnodes %} {% if not subnodes %}
No subnodes found for the given term or path. No subnodes found for the given term or path.
<br /><br /> <br /><br />