1 |
commit: 61701beabd3f081ab54d04c4e61aa538fcc76441 |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Tue Jul 31 13:56:05 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Tue Jul 31 13:56:05 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=61701bea |
7 |
|
8 |
Add urlize license text |
9 |
|
10 |
--- |
11 |
gpackages/apps/packages/templatetags/packages.py | 2 + |
12 |
gpackages/apps/packages/utils.py | 40 ++++++++++++++++++++++ |
13 |
gpackages/templates/package.html | 2 +- |
14 |
3 files changed, 43 insertions(+), 1 deletions(-) |
15 |
|
16 |
diff --git a/gpackages/apps/packages/templatetags/packages.py b/gpackages/apps/packages/templatetags/packages.py |
17 |
index 820daaf..4839dfa 100644 |
18 |
--- a/gpackages/apps/packages/templatetags/packages.py |
19 |
+++ b/gpackages/apps/packages/templatetags/packages.py |
20 |
@@ -8,6 +8,7 @@ register = template.Library() |
21 |
from ..models import RepositoryModel, EbuildModel, UseFlagDescriptionModel |
22 |
from ..views import arches |
23 |
from ..forms import ArchChoiceForm, FilteringForm |
24 |
+from ..utils import license_urlize |
25 |
from generic.utils import inclusion_cached_tag |
26 |
|
27 |
def last_updated_key(): |
28 |
@@ -45,6 +46,7 @@ def changelog_highlight_filter(text): |
29 |
return mark_safe(changelog_highlight(text)) |
30 |
|
31 |
register.filter('obfuscate', text_sincode) |
32 |
+register.filter('license_urlize', license_urlize) |
33 |
|
34 |
def recent_ebuilds_cache_key(num = 10): |
35 |
return 'recent_ebuilds_th_' + str(num) |
36 |
|
37 |
diff --git a/gpackages/apps/packages/utils.py b/gpackages/apps/packages/utils.py |
38 |
index 25150c2..c0ffbee 100644 |
39 |
--- a/gpackages/apps/packages/utils.py |
40 |
+++ b/gpackages/apps/packages/utils.py |
41 |
@@ -1,4 +1,13 @@ |
42 |
from package_info.generic import ToStrMixin |
43 |
+from django.utils.html import escape |
44 |
+from django.utils.safestring import mark_safe |
45 |
+from django.core.urlresolvers import reverse |
46 |
+from django.core.urlresolvers import NoReverseMatch |
47 |
+import re |
48 |
+LICENSE_STR_RE = r'[a-zA-Z0-9_\-\+\.]+' |
49 |
+USE_FLAG_RE = r'[a-zA-Z0-9]+\?' |
50 |
+license_re = re.compile(LICENSE_STR_RE) |
51 |
+use_re = re.compile(USE_FLAG_RE) |
52 |
|
53 |
def gen_args(args): |
54 |
t = '%s=%s' |
55 |
@@ -10,3 +19,34 @@ def get_link(host, script, args): |
56 |
'script': script, |
57 |
'args': get_args(args)} |
58 |
|
59 |
+def license_tokenize(license_str): |
60 |
+ s, l = 0, len(license_str) |
61 |
+ while s<l: |
62 |
+ m = use_re.match(license_str, s) |
63 |
+ if m is not None: |
64 |
+ yield ('use', m.group()) |
65 |
+ s = m.end() |
66 |
+ continue |
67 |
+ m = license_re.match(license_str, s) |
68 |
+ if m is not None: |
69 |
+ yield ('license', m.group()) |
70 |
+ s = m.end() |
71 |
+ continue |
72 |
+ |
73 |
+ yield (None, license_str[s]) |
74 |
+ s += 1 |
75 |
+ |
76 |
+def license_urlize(license_str): |
77 |
+ res_str = u'' |
78 |
+ for token, value in license_tokenize(license_str): |
79 |
+ value = escape(value) |
80 |
+ if token == 'license': |
81 |
+ try: |
82 |
+ link = reverse('license', kwargs = {'slug': value}) |
83 |
+ except NoReverseMatch: |
84 |
+ pass |
85 |
+ else: |
86 |
+ value = mark_safe('<a href="{1}">{0}</a>'.format(value, link)) |
87 |
+ |
88 |
+ res_str += value |
89 |
+ return mark_safe(res_str) |
90 |
|
91 |
diff --git a/gpackages/templates/package.html b/gpackages/templates/package.html |
92 |
index 00f1191..d1d4640 100644 |
93 |
--- a/gpackages/templates/package.html |
94 |
+++ b/gpackages/templates/package.html |
95 |
@@ -17,7 +17,7 @@ |
96 |
{% use_flag_table package %} |
97 |
</div> |
98 |
<div class="tab-pane" id="tab3"> |
99 |
- {{ package.latest_ebuild.license }} |
100 |
+ {{ package.latest_ebuild.license|license_urlize }} |
101 |
</div> |
102 |
</div> |
103 |
</div> |