~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/templatefunctions.py

  • Committer: Robey Pointer
  • Date: 2006-12-23 19:29:05 UTC
  • Revision ID: robey@lag.net-20061223192905-wwzq2hluxta8k5mf
add setup.py info so an sdist tarball can be made

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#
2
 
# This program is free software; you can redistribute it and/or modify
3
 
# it under the terms of the GNU General Public License as published by
4
 
# the Free Software Foundation; either version 2 of the License, or
5
 
# (at your option) any later version.
6
 
#
7
 
# This program is distributed in the hope that it will be useful,
8
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 
# GNU General Public License for more details.
11
 
#
12
 
# You should have received a copy of the GNU General Public License
13
 
# along with this program; if not, write to the Free Software
14
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
 
#
16
 
 
17
 
import cgi
18
 
import os
19
 
 
20
 
import pkg_resources
21
 
 
22
 
import bzrlib
23
 
 
24
 
import loggerhead
25
 
from loggerhead.zptsupport import zpt
26
 
 
27
 
 
28
 
templatefunctions = {}
29
 
 
30
 
 
31
 
def templatefunc(func):
32
 
    templatefunctions[func.__name__] = func
33
 
    return func
34
 
 
35
 
 
36
 
_base = os.path.dirname(__file__)
37
 
 
38
 
 
39
 
def _pt(name):
40
 
    return zpt(os.path.join(_base, 'templates', name + '.pt'))
41
 
 
42
 
 
43
 
templatefunctions['macros'] = _pt('macros').macros
44
 
templatefunctions['breadcrumbs'] = _pt('breadcrumbs').macros
45
 
 
46
 
 
47
 
@templatefunc
48
 
def file_change_summary(url, entry, file_changes, style='normal', currently_showing=None):
49
 
    if style == 'fragment':
50
 
        def file_link(filename):
51
 
            if currently_showing and filename == currently_showing:
52
 
                return '<b><a href="#%s">%s</a></b>' % (
53
 
                    cgi.escape(filename), cgi.escape(filename))
54
 
            else:
55
 
                return revision_link(
56
 
                    url, entry.revno, filename, '#' + filename)
57
 
    else:
58
 
        def file_link(filename):
59
 
            return '<a href="%s%s" title="View changes to %s in revision %s">%s</a>' % (
60
 
                url(['/revision', entry.revno]), '#' + filename, cgi.escape(filename),
61
 
                cgi.escape(entry.revno), cgi.escape(filename))
62
 
    return _pt('revisionfilechanges').expand(
63
 
        entry=entry, file_changes=file_changes, file_link=file_link, **templatefunctions)
64
 
 
65
 
 
66
 
@templatefunc
67
 
def revisioninfo(url, branch, entry, file_changes=None, currently_showing=None, merged_in=None):
68
 
    from loggerhead import util
69
 
    return _pt('revisioninfo').expand(
70
 
        url=url, change=entry, branch=branch, util=util,
71
 
        file_changes=file_changes, currently_showing=currently_showing,
72
 
        merged_in=merged_in, **templatefunctions)
73
 
 
74
 
 
75
 
@templatefunc
76
 
def branchinfo(branch):
77
 
    if branch.served_url is not None:
78
 
        return _pt('branchinfo').expand(branch=branch, **templatefunctions)
79
 
    else:
80
 
        return ''
81
 
 
82
 
 
83
 
@templatefunc
84
 
def collapse_button(group, name, branch, normal='block'):
85
 
    return _pt('collapse-button').expand(
86
 
        group=group, name=name, normal=normal, branch=branch,
87
 
        **templatefunctions)
88
 
 
89
 
 
90
 
@templatefunc
91
 
def collapse_all_button(group, branch, normal='block'):
92
 
    return _pt('collapse-all-button').expand(
93
 
        group=group, normal=normal, branch=branch,
94
 
        **templatefunctions)
95
 
 
96
 
 
97
 
@templatefunc
98
 
def revno_with_nick(entry):
99
 
    if entry.branch_nick:
100
 
        extra = ' ' + entry.branch_nick
101
 
    else:
102
 
        extra = ''
103
 
    return '(%s%s)' % (entry.revno, extra)
104
 
 
105
 
 
106
 
@templatefunc
107
 
def search_box(branch, navigation):
108
 
    return _pt('search-box').expand(branch=branch, navigation=navigation,
109
 
        **templatefunctions)
110
 
 
111
 
 
112
 
@templatefunc
113
 
def feed_link(branch, url):
114
 
    return _pt('feed-link').expand(branch=branch, url=url, **templatefunctions)
115
 
 
116
 
 
117
 
@templatefunc
118
 
def menu(branch, url, fileview_active=False):
119
 
    return _pt('menu').expand(branch=branch, url=url,
120
 
        fileview_active=fileview_active, **templatefunctions)
121
 
 
122
 
 
123
 
@templatefunc
124
 
def view_link(url, revno, path):
125
 
    return '<a href="%s" title="Annotate %s">%s</a>' % (
126
 
        url(['/view', revno, path]), cgi.escape(path), cgi.escape(path))
127
 
 
128
 
@templatefunc
129
 
def revision_link(url, revno, path, frag=''):
130
 
    return '<a href="%s%s" title="View changes to %s in revision %s">%s</a>' % (
131
 
        url(['/revision', revno, path]), frag, cgi.escape(path),
132
 
        cgi.escape(revno), cgi.escape(path))
133
 
 
134
 
 
135
 
@templatefunc
136
 
def loggerhead_version():
137
 
    return loggerhead.__version__
138
 
 
139
 
_cached_generator_string = None
140
 
 
141
 
@templatefunc
142
 
def generator_string():
143
 
    global _cached_generator_string
144
 
    if _cached_generator_string is None:
145
 
        versions = []
146
 
 
147
 
        # TODO: Errors -- e.g. from a missing/invalid __version__ attribute, or
148
 
        # ValueError accessing Distribution.version -- should be non-fatal.
149
 
 
150
 
        versions.append(('Loggerhead', loggerhead.__version__))
151
 
 
152
 
        import sys
153
 
        python_version = bzrlib._format_version_tuple(sys.version_info)
154
 
        versions.append(('Python', python_version))
155
 
 
156
 
        versions.append(('Bazaar', bzrlib.__version__))
157
 
 
158
 
        Paste = pkg_resources.get_distribution('Paste')
159
 
        versions.append(('Paste', Paste.version))
160
 
 
161
 
        try:
162
 
            PasteDeploy = pkg_resources.get_distribution('PasteDeploy')
163
 
        except pkg_resources.DistributionNotFound:
164
 
            pass
165
 
        else:
166
 
            versions.append(('PasteDeploy', PasteDeploy.version))
167
 
 
168
 
        import simpletal
169
 
        versions.append(('SimpleTAL', simpletal.__version__))
170
 
 
171
 
        try:
172
 
            import pygments
173
 
        except ImportError:
174
 
            pass
175
 
        else:
176
 
            versions.append(('Pygments', pygments.__version__))
177
 
 
178
 
        try:
179
 
            from bzrlib.plugins import search
180
 
        except ImportError:
181
 
            pass
182
 
        else:
183
 
            bzr_search_version = bzrlib._format_version_tuple(
184
 
                search.version_info)
185
 
            versions.append(('bzr-search', bzr_search_version))
186
 
 
187
 
        # TODO: On old Python versions, elementtree may be used.
188
 
 
189
 
        import simplejson
190
 
        versions.append(('simplejson', simplejson.__version__))
191
 
 
192
 
        try:
193
 
            Dozer = pkg_resources.get_distribution('Dozer')
194
 
        except pkg_resources.DistributionNotFound:
195
 
            pass
196
 
        else:
197
 
            versions.append(('Dozer', Dozer.version))
198
 
 
199
 
        version_strings = ("%s/%s" % t for t in versions)
200
 
        _cached_generator_string = ' '.join(version_strings)
201
 
    return _cached_generator_string