diff options
author | Sebastian Spaeth <Sebastian@SSpaeth.de> | 2011-05-08 20:35:54 +0200 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2011-05-10 16:01:43 -0500 |
commit | 9a16e16ffa9c0477bec6ea0bf1db7efd6f988638 (patch) | |
tree | 5dbbba02cb40cd23be76489a159d4718f66c8aa4 /mediagoblin | |
parent | 9d97145fe40cc2a7bce298cad618374375ad4d8b (diff) | |
download | mediagoblin-9a16e16ffa9c0477bec6ea0bf1db7efd6f988638.tar.lz mediagoblin-9a16e16ffa9c0477bec6ea0bf1db7efd6f988638.tar.xz mediagoblin-9a16e16ffa9c0477bec6ea0bf1db7efd6f988638.zip |
Implement simple media detail page
This patch creates a "homepage" for each media. The URL is
/u/<username>/m/<objID>.
On it we display the media and some details. It is ugly and lacking some
stuff but it works. The only thing left to do is to throw an 404 error
if the <username> and the media uploader don't correspond.
- Also create a user "home page" while at it. It is merely a place
holder for now though.
- Link from the entries on the homepage, to the media pages, so we
actually find them.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Diffstat (limited to 'mediagoblin')
-rw-r--r-- | mediagoblin/routing.py | 3 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/media_details.html | 34 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/root.html | 6 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/user_pages/media.html | 41 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/user_pages/user.html | 26 | ||||
-rw-r--r-- | mediagoblin/user_pages/__init__.py | 0 | ||||
-rw-r--r-- | mediagoblin/user_pages/routing.py | 24 | ||||
-rw-r--r-- | mediagoblin/user_pages/views.py | 52 | ||||
-rw-r--r-- | mediagoblin/views.py | 4 |
9 files changed, 185 insertions, 5 deletions
diff --git a/mediagoblin/routing.py b/mediagoblin/routing.py index b47bec8d..356ef678 100644 --- a/mediagoblin/routing.py +++ b/mediagoblin/routing.py @@ -18,7 +18,7 @@ from routes import Mapper from mediagoblin.auth.routing import auth_routes from mediagoblin.submit.routing import submit_routes - +from mediagoblin.user_pages.routing import user_routes def get_mapper(): mapping = Mapper() @@ -30,5 +30,6 @@ def get_mapper(): mapping.extend(auth_routes, '/auth') mapping.extend(submit_routes, '/submit') + mapping.extend(user_routes, '/u') return mapping diff --git a/mediagoblin/templates/mediagoblin/media_details.html b/mediagoblin/templates/mediagoblin/media_details.html new file mode 100644 index 00000000..a00354bc --- /dev/null +++ b/mediagoblin/templates/mediagoblin/media_details.html @@ -0,0 +1,34 @@ +{# +# 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/>. +#} +{% extends "mediagoblin/base.html" %} +{% block mediagoblin_content %} + + {# temporarily, an "image gallery" that isn't one really ;) #} + {% if media %} + <h2>Media details for {{media.title}}</h2> + <div> + <img src="{{ request.app.public_store.file_url( + media.media_files.main) }}" /> + + <br/>Uploaded: {{ media.created}} + <br/>Description: {{media.description}} + </div> + {% else %} + <p>Sorry, no such media found.<p/> + {% endif %} +{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/root.html b/mediagoblin/templates/mediagoblin/root.html index 06a89f3f..2cb0a9c0 100644 --- a/mediagoblin/templates/mediagoblin/root.html +++ b/mediagoblin/templates/mediagoblin/root.html @@ -43,8 +43,10 @@ <ul> {% for entry in media_entries %} <li> - <img src="{{ request.app.public_store.file_url( - entry['media_files']['thumb']) }}" /> + <a href="{{ request.urlgen('mediagoblin.user_pages.media_home', + user= entry.uploader.username, m_id= entry._id) }}"> + <img src="{{ request.app.public_store.file_url( + entry['media_files']['thumb']) }}" /></a> </li> {% endfor %} </ul> diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html new file mode 100644 index 00000000..08cc9251 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html @@ -0,0 +1,41 @@ +{# +# 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/>. +#} +{% extends "mediagoblin/base.html" %} +{% block mediagoblin_content %} + + {# temporarily, an "image gallery" that isn't one really ;) #} + {% if media %} + <h2>Media details for <a + href="{{ request.urlgen('mediagoblin.user_pages.user_home', + user= media.uploader.username) }}">{{media.uploader.username}}</a> + / {{media.title}} + </h2> + <div> + <img src="{{ request.app.public_store.file_url( + media.media_files.main) }}" /> + + <br/>Uploaded on {{ "%4d-%02d-%02d"|format(media.created.year, + media.created.month,media.created.day)}} by <a + href="{{ request.urlgen('mediagoblin.user_pages.user_home', + user= media.uploader.username) }}">{{media.uploader.username}}</a> + <br/>Description: {{media.description}} + </div> + {% else %} + <p>Sorry, no such media found.<p/> + {% endif %} +{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/user_pages/user.html b/mediagoblin/templates/mediagoblin/user_pages/user.html new file mode 100644 index 00000000..4ad34f51 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/user_pages/user.html @@ -0,0 +1,26 @@ +{# +# 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/>. +#} +{% extends "mediagoblin/base.html" %} +{% block mediagoblin_content -%} + {% if user %} + <h2>User page for '{{user.username}}'</h2> + {{user}} + {% else %} + <p>Sorry, no such user found.<p/> + {% endif %} +{% endblock %} diff --git a/mediagoblin/user_pages/__init__.py b/mediagoblin/user_pages/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/mediagoblin/user_pages/__init__.py diff --git a/mediagoblin/user_pages/routing.py b/mediagoblin/user_pages/routing.py new file mode 100644 index 00000000..10ecd4fd --- /dev/null +++ b/mediagoblin/user_pages/routing.py @@ -0,0 +1,24 @@ +1# 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/>. + +from routes.route import Route + +user_routes = [ + Route('mediagoblin.user_pages.user_home', "/{user}", + controller="mediagoblin.user_pages.views:user_home"), + Route('mediagoblin.user_pages.media_home', r'/{user}/m/{m_id}', + requirements=dict(m_id="[0-9a-fA-F]{24}"), + controller="mediagoblin.user_pages.views:media_home")] diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py new file mode 100644 index 00000000..b1a301d4 --- /dev/null +++ b/mediagoblin/user_pages/views.py @@ -0,0 +1,52 @@ +# 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/>. + +from webob import Response +from mongokit import ObjectId +import wtforms +#from mongokit import ObjectId + +def user_home(request): + """'Homepage' of a User()""" + user = request.db.User.find_one( + {'username': request.matchdict['user']}) + + medias = request.db.MediaEntry.find() + + template = request.template_env.get_template( + 'mediagoblin/user_pages/user.html') + return Response( + template.render( + {'request': request, + 'user': user, + 'medias': medias})) + +def media_home(request): + """'Homepage' of a MediaEntry()""" + media = request.db.MediaEntry.find_one( + ObjectId(request.matchdict['m_id'])) + + #check that media uploader and user correspondent + if media['uploader'].get('username') != request.matchdict['user']: + #TODO: How do I throw an error 404? + pass + + template = request.template_env.get_template( + 'mediagoblin/user_pages/media.html') + return Response( + template.render( + {'request': request, + 'media': media})) diff --git a/mediagoblin/views.py b/mediagoblin/views.py index 3728d4aa..f4c0598a 100644 --- a/mediagoblin/views.py +++ b/mediagoblin/views.py @@ -18,13 +18,13 @@ import datetime from webob import Response, exc import wtforms - +from mongokit import ObjectId from mediagoblin import models def root_view(request): media_entries = request.db.MediaEntry.find( {u'state': u'processed'}) - + template = request.template_env.get_template( 'mediagoblin/root.html') return Response( |