diff --git a/pylons_app/controllers/error.py b/pylons_app/controllers/error.py --- a/pylons_app/controllers/error.py +++ b/pylons_app/controllers/error.py @@ -8,7 +8,7 @@ from pylons.i18n.translation import _ from pylons_app.lib.base import BaseController, render from pylons.middleware import media_path from pylons_app.lib.utils import check_repo -from pylons_app.lib.filters import clean_repo +import pylons_app.lib.helpers as h log = logging.getLogger(__name__) class ErrorController(BaseController): @@ -39,7 +39,7 @@ class ErrorController(BaseController): if resp.status_int == 404: org_e = request.environ.get('pylons.original_request').environ c.repo_name = repo_name = org_e['PATH_INFO'].split('/')[1] - c.repo_name_cleaned = clean_repo(c.repo_name) + c.repo_name_cleaned = h.repo_name_slug(c.repo_name) if check_repo(repo_name, g.base_path): return render('/errors/error_404.html') diff --git a/pylons_app/lib/filters.py b/pylons_app/lib/filters.py --- a/pylons_app/lib/filters.py +++ b/pylons_app/lib/filters.py @@ -26,14 +26,6 @@ simple filters for hg apps html template from mercurial import util from mercurial.templatefilters import age as _age, person as _person -from string import punctuation - -def clean_repo(repo_name): - for x in punctuation: - if x != '_': - repo_name = repo_name.replace(x, '') - repo_name = repo_name.lower().strip() - return repo_name.replace(' ', '_') age = lambda x:_age(x) capitalize = lambda x: x.capitalize() diff --git a/pylons_app/lib/helpers.py b/pylons_app/lib/helpers.py --- a/pylons_app/lib/helpers.py +++ b/pylons_app/lib/helpers.py @@ -21,7 +21,7 @@ from webhelpers.pylonslib import Flash a from webhelpers.pylonslib.secure_form import secure_form from webhelpers.text import chop_at, collapse, convert_accented_entities, \ convert_misc_entities, lchop, plural, rchop, remove_formatting, \ - replace_whitespace, urlify + replace_whitespace, urlify, truncate #Custom helper here :) @@ -92,6 +92,35 @@ def pygmentize_annotation(filenode, **kw return literal(annotate_highlight(filenode, url_func, **kwargs)) +def recursive_replace(str, replace=' '): + """ + Recursive replace of given sign to just one instance + @param str: given string + @param replace:char to find and replace multiple instances + + Examples:: + >>> recursive_replace("Mighty---Mighty-Bo--sstones",'-') + 'Mighty-Mighty-Bo-sstones' + """ + + if str.find(replace * 2) == -1: + return str + else: + str = str.replace(replace * 2, replace) + return recursive_replace(str, replace) + +def repo_name_slug(value): + """ + Return slug of name of repository + """ + slug = urlify(value) + for c in """=[]\;',/~!@#$%^&*()+{}|:""": + slug = slug.replace(c, '-') + print slug + slug = recursive_replace(slug, '-') + print slug + return slug + files_breadcrumbs = _FilesBreadCrumbs() link = _Link() flash = _Flash() diff --git a/pylons_app/templates/base/base.html b/pylons_app/templates/base/base.html --- a/pylons_app/templates/base/base.html +++ b/pylons_app/templates/base/base.html @@ -151,15 +151,4 @@ def is_current(selected): %endif %endif -%def> - - -<%def name="message_slug(msg)"> - <% - limit = 60 - if len(msg) > limit: - return msg[:limit]+'...' - else: - return msg - %> %def> \ No newline at end of file diff --git a/pylons_app/templates/index.html b/pylons_app/templates/index.html --- a/pylons_app/templates/index.html +++ b/pylons_app/templates/index.html @@ -37,7 +37,7 @@ from pylons_app.lib import filters %for cnt,repo in enumerate(c.repos_list):
${cs._ctx.date()|n,filters.age} | ${cs.author|n,filters.person} | r${cs.revision} | - ${h.link_to(message_slug(cs.message), + ${h.link_to(truncate(cs.message,60), h.url('changeset_home',repo_name=c.repo_name,revision=cs._short), title=cs.message)} |