adds previous and next links in the sidebar

Feature #401 - previous/next navigation on media pages
* media.html includes a new prev_next.html template containing the links
* prev_next.html calls functions added to the media model to retrieve
  the appropriate objects from the database, formatted with urlgen
* a small change to util.py brings ASCENDING into the mix
This commit is contained in:
Caleb Forbes Davis V 2011-07-02 06:15:58 -05:00
parent 0e3400357d
commit 9c0fe63fad
4 changed files with 74 additions and 2 deletions

View File

@ -22,7 +22,7 @@ from mediagoblin import util
from mediagoblin.auth import lib as auth_lib
from mediagoblin import mg_globals
from mediagoblin.db import migrations
from mediagoblin.db.util import DESCENDING, ObjectId
from mediagoblin.db.util import ASCENDING, DESCENDING, ObjectId
from mediagoblin.util import Pagination
###################
@ -155,6 +155,32 @@ class MediaEntry(Document):
user=uploader['username'],
media=unicode(self['_id']))
def url_to_prev(self, urlgen):
"""
Provide a url to the previous entry from this user, if there is one
"""
cursor = self.db.MediaEntry.find({'_id' : {"$lt": self['_id']},
'uploader': self['uploader']}).sort(
'_id', DESCENDING).limit(1)
if cursor.count():
return urlgen('mediagoblin.user_pages.media_home',
user=self.uploader()['username'],
media=unicode(cursor[0]['_id']))
def url_to_next(self, urlgen):
"""
Provide a url to the next entry from this user, if there is one
"""
cursor = self.db.MediaEntry.find({'_id' : {"$gt": self['_id']},
'uploader': self['uploader']}).sort(
'_id', ASCENDING).limit(1)
if cursor.count():
return urlgen('mediagoblin.user_pages.media_home',
user=self.uploader()['username'],
media=unicode(cursor[0]['_id']))
def uploader(self):
return self.db.User.find_one({'_id': self['uploader']})

View File

@ -30,7 +30,7 @@ document relevant to here:
import copy
# Imports that other modules might use
from pymongo import DESCENDING
from pymongo import ASCENDING, DESCENDING
from pymongo.errors import InvalidId
from mongokit import ObjectId

View File

@ -96,6 +96,7 @@
<div class="grid_4 omega media_sidebar">
<p>This is a sidebar! Yay!</p>
{% include "mediagoblin/utils/prev_next.html" %}
</div>
{% else %}
<p>Sorry, no such media found.<p/>

View File

@ -0,0 +1,45 @@
{#
# GNU MediaGoblin -- federated, autonomous media hosting
# Copyright (C) 2011 Free Software Foundation, Inc
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#}
{# Provide navigation links to neighboring media entries, if possible #}
{% set prev_entry_url = media.url_to_prev(request.urlgen) %}
{% set next_entry_url = media.url_to_next(request.urlgen) %}
<div>
{# There are no previous entries for the very first media entry #}
{% if prev_entry_url %}
<a href="{{ prev_entry_url }}">
{# TODO - insert 'Previous' and 'X' image sources #}
Previous
</a>
{% else %}
{# This is the first entry. display greyed-out 'previous' image #}
X
{% endif %}
{# Likewise, this could be the very last media entry #}
{% if next_entry_url %}
<a href="{{ next_entry_url }}">
{# TODO - insert 'Next' and 'X' image sources #}
Next
</a>
{% else %}
{# This is the last entry. display greyed-out 'next' image #}
X
{% endif %}
</div>