Mercurial > kallithea
changeset 1301:7e75af301842 beta
Added simple forks page, resolves issue #179
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 02 May 2011 13:02:58 +0200 |
parents | 882ac77dc709 |
children | f0e904651f21 |
files | rhodecode/config/routing.py rhodecode/controllers/followers.py rhodecode/controllers/forks.py rhodecode/model/db.py rhodecode/templates/base/base.html rhodecode/templates/forks/forks.html rhodecode/templates/forks/forks_data.html |
diffstat | 7 files changed, 141 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/config/routing.py Mon May 02 12:40:57 2011 +0200 +++ b/rhodecode/config/routing.py Mon May 02 13:02:58 2011 +0200 @@ -341,4 +341,8 @@ rmap.connect('repo_followers_home', '/{repo_name:.*}/followers', controller='followers', action='followers', conditions=dict(function=check_repo)) + + rmap.connect('repo_forks_home', '/{repo_name:.*}/forks', + controller='forks', action='forks', + conditions=dict(function=check_repo)) return rmap
--- a/rhodecode/controllers/followers.py Mon May 02 12:40:57 2011 +0200 +++ b/rhodecode/controllers/followers.py Mon May 02 13:02:58 2011 +0200 @@ -44,7 +44,7 @@ def followers(self, repo_name): p = int(request.params.get('page', 1)) - repo_id = getattr(Repository.by_repo_name(repo_name), 'repo_id') + repo_id = Repository.by_repo_name(repo_name).repo_id d = UserFollowing.get_repo_followers(repo_id)\ .order_by(UserFollowing.follows_from) c.followers_pager = Page(d, page=p, items_per_page=20)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/controllers/forks.py Mon May 02 13:02:58 2011 +0200 @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.controllers.forks + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + forks controller for rhodecode + + :created_on: Apr 23, 2011 + :author: marcink + :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> + :license: GPLv3, see COPYING for more details. +""" +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +import logging + +from pylons import tmpl_context as c, request + +from rhodecode.lib.helpers import Page +from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator +from rhodecode.lib.base import BaseRepoController, render +from rhodecode.model.db import Repository, User, UserFollowing + +log = logging.getLogger(__name__) + + +class ForksController(BaseRepoController): + + @LoginRequired() + @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', + 'repository.admin') + def __before__(self): + super(ForksController, self).__before__() + + def forks(self, repo_name): + p = int(request.params.get('page', 1)) + repo_id = Repository.by_repo_name(repo_name).repo_id + d = Repository.get_repo_forks(repo_id) + c.forks_pager = Page(d, page=p, items_per_page=20) + + c.forks_data = render('/forks/forks_data.html') + + if request.params.get('partial'): + return c.forks_data + + return render('/forks/forks.html')
--- a/rhodecode/model/db.py Mon May 02 12:40:57 2011 +0200 +++ b/rhodecode/model/db.py Mon May 02 13:02:58 2011 +0200 @@ -237,6 +237,8 @@ enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True) enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True) description = Column("description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) + fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None) group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None) @@ -260,6 +262,11 @@ def by_repo_name(cls, repo_name): return Session.query(cls).filter(cls.repo_name == repo_name).one() + + @classmethod + def get_repo_forks(cls, repo_id): + return Session.query(cls).filter(Repository.fork_id == repo_id) + @property def just_name(self): return self.repo_name.split(os.sep)[-1]
--- a/rhodecode/templates/base/base.html Mon May 02 12:40:57 2011 +0200 +++ b/rhodecode/templates/base/base.html Mon May 02 13:02:58 2011 +0200 @@ -298,7 +298,7 @@ </a> </li> <li> - <a title="${_('Forks')}" href="#"> + <a title="${_('Forks')}" href="${h.url('repo_forks_home',repo_name=c.repo_name)}"> <span class="icon_short"> <img src="${h.url("/images/icons/arrow_divide.png")}" alt="${_('Forks')}" /> </span>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/templates/forks/forks.html Mon May 02 13:02:58 2011 +0200 @@ -0,0 +1,32 @@ +## -*- coding: utf-8 -*- +<%inherit file="/base/base.html"/> + +<%def name="title()"> + ${c.repo_name} ${_('Forks')} - ${c.rhodecode_name} +</%def> + +<%def name="breadcrumbs_links()"> + ${h.link_to(u'Home',h.url('/'))} + » + ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} + » + ${_('forks')} +</%def> + +<%def name="page_nav()"> + ${self.menu('forks')} +</%def> +<%def name="main()"> +<div class="box"> + <!-- box / title --> + <div class="title"> + ${self.breadcrumbs()} + </div> + <!-- end box / title --> + <div class="table"> + <div id="forks"> + ${c.forks_data} + </div> + </div> +</div> +</%def> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/templates/forks/forks_data.html Mon May 02 13:02:58 2011 +0200 @@ -0,0 +1,40 @@ +## -*- coding: utf-8 -*- + +% for f in c.forks_pager: + <div> + <div class="fork_user"> + <div class="gravatar"> + <img alt="gravatar" src="${h.gravatar_url(f.user.email,24)}"/> + </div> + <span style="font-size: 20px"> + <b>${f.user.username}</b> (${f.user.name} ${f.user.lastname}) / + ${h.link_to(f.repo_name,h.url('summary_home',repo_name=f.repo_name))} + </span> + <div style="padding:5px 3px 3px 42px;">${f.description}</div> + </div> + <div style="clear:both;padding-top: 10px"></div> + <div class="follower_date">${_('forked')} - + <span class="tooltip" title="${f.created_on}"> ${h.age(f.created_on)}</span></div> + <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div> + </div> +% endfor + +<div class="pagination-wh pagination-left"> +<script type="text/javascript"> + var data_div = 'forks'; + YAHOO.util.Event.onDOMReady(function(){ + YAHOO.util.Event.addListener( + YUD.getElementsByClassName('pager_link'),"click", + function(){ + YAHOO.util.Dom.setStyle(data_div,'opacity','0.3'); + }); + }); +</script> + +${c.forks_pager.pager('$link_previous ~2~ $link_next', +onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{ +success:function(o){YAHOO.util.Dom.get(data_div).innerHTML=o.responseText; +YUE.on(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){ + YAHOO.util.Dom.setStyle(data_div,'opacity','0.3');}); +YAHOO.util.Dom.setStyle(data_div,'opacity','1');}},null); return false;""")} +</div> \ No newline at end of file