diff options
-rw-r--r-- | mediagoblin/db/models.py | 28 | ||||
-rw-r--r-- | mediagoblin/db/util.py | 2 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/user_pages/media.html | 1 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/utils/prev_next.html | 45 |
4 files changed, 74 insertions, 2 deletions
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index bf825a23..cfd83430 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -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 ################### @@ -154,6 +154,32 @@ class MediaEntry(Document): 'mediagoblin.user_pages.media_home', 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']}) diff --git a/mediagoblin/db/util.py b/mediagoblin/db/util.py index 46f899f7..70c37945 100644 --- a/mediagoblin/db/util.py +++ b/mediagoblin/db/util.py @@ -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 diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html index 3cebe2f9..6159a853 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/media.html +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html @@ -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/> diff --git a/mediagoblin/templates/mediagoblin/utils/prev_next.html b/mediagoblin/templates/mediagoblin/utils/prev_next.html new file mode 100644 index 00000000..e054ed23 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/utils/prev_next.html @@ -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> |