Changeset 1911
- Timestamp:
- 07/06/2005 11:20:07 AM (3 years ago)
- Location:
- branches/cboos-dev/intertrac-branch
- Files:
-
- 26 modified
-
htdocs/css/about.css (modified) (1 diff)
-
templates/ticket.cs (modified) (2 diffs)
-
templates/timeline.cs (modified) (1 diff)
-
trac/About.py (modified) (6 diffs)
-
trac/attachment.py (modified) (1 diff)
-
trac/Browser.py (modified) (3 diffs)
-
trac/Diff.py (modified) (1 diff)
-
trac/Milestone.py (modified) (2 diffs)
-
trac/mimeview/patch.py (modified) (1 diff)
-
trac/Roadmap.py (modified) (4 diffs)
-
trac/Search.py (modified) (1 diff)
-
trac/ticket/query.py (modified) (2 diffs)
-
trac/ticket/report.py (modified) (2 diffs)
-
trac/ticket/web_ui.py (modified) (5 diffs)
-
trac/Timeline.py (modified) (3 diffs)
-
trac/util.py (modified) (1 diff)
-
trac/versioncontrol/svn_fs.py (modified) (3 diffs)
-
trac/web/auth.py (modified) (1 diff)
-
trac/web/chrome.py (modified) (5 diffs)
-
trac/web/main.py (modified) (3 diffs)
-
trac/web/modpython_frontend.py (modified) (1 diff)
-
trac/web/standalone.py (modified) (2 diffs)
-
trac/web/tests/chrome.py (modified) (1 diff)
-
trac/wiki/formatter.py (modified) (4 diffs)
-
trac/wiki/tests/wiki-tests.txt (modified) (1 diff)
-
trac/wiki/web_ui.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/cboos-dev/intertrac-branch/htdocs/css/about.css
r1587 r1911 36 36 37 37 #content.about_plugins td.xtnpts { margin-top: 1em; } 38 #content.about_plugins td.xtnpts ul { list-style: none; margin: 0; padding: 0; } 39 #content.about_plugins td.xtnpts ul ul { list-style: square; margin: 0; padding: 0 0 0 2em; } 38 #content.about_plugins td.xtnpts ul { list-style: square; margin: 0; padding: 0 0 0 2em; } -
branches/cboos-dev/intertrac-branch/templates/ticket.cs
r1863 r1911 124 124 <?cs if:trac.acl.TICKET_CHGPROP || trac.acl.TICKET_APPEND ?> 125 125 <form action="<?cs var:ticket.href ?>#preview" method="post"> 126 <input type="hidden" name="ts" value="<?cs var:ticket.ts ?>"/> 126 127 <hr /> 127 128 <h3><a name="edit" onfocus="document.getElementById('comment').focus()">Add/Change #<?cs … … 153 154 <td class="fullrow" colspan="3"><input type="text" id="summary" name="summary" value="<?cs 154 155 var:ticket.summary ?>" size="70" /> 155 </tr><?cs 156 </tr><?cs 157 if:len(ticket.fields.type.options) ?> 158 <tr> 159 <th><label for="type">Type:</label></th> 160 <td><?cs 161 call:hdf_select(ticket.fields.type.options, 'type', ticket.type, 0) ?> 162 </td> 163 </tr><?cs 164 /if ?><?cs 156 165 if:trac.acl.TICKET_ADMIN ?><tr> 157 166 <th><label for="description">Description:</label></th> -
branches/cboos-dev/intertrac-branch/templates/timeline.cs
r1618 r1911 21 21 </fieldset> 22 22 <div class="buttons"> 23 <input type="submit" value="Update" />23 <input type="submit" name="update" value="Update" /> 24 24 </div> 25 25 </form><?cs -
branches/cboos-dev/intertrac-branch/trac/About.py
r1863 r1911 60 60 <table><thead><tr><th class="section">Section</th> 61 61 <th class="name">Name</th><th class="value">Value</th></tr></thead><?cs 62 each:section = about.config ?> 63 <tr><th rowspan="<?cs var:len(section.options) ?>"><?cs var:section.name ?></th><?cs 64 each:option = section.options ?><?cs if:name(option) != 0 ?><tr><?cs /if ?> 65 <td><?cs var:option.name ?></td> 66 <td><?cs var:option.value ?></td> 67 </tr><?cs /each ?><?cs 62 each:section = about.config ?><?cs 63 if:len(section.options) ?> 64 <tr><th rowspan="<?cs var:len(section.options) ?>"><?cs var:section.name ?></th><?cs 65 each:option = section.options ?><?cs if:name(option) != 0 ?><tr><?cs /if ?> 66 <td><?cs var:option.name ?></td> 67 <td><?cs var:option.value ?></td> 68 </tr><?cs 69 /each ?><?cs 70 /if ?><?cs 68 71 /each ?></table> 69 72 <div id="help"> … … 88 91 </tr><?cs /if ?><?cs 89 92 if:len(plugin.extension_points) ?><tr> 90 <th class="xtnpts">Extension points:</th> 91 <td class="xtnpts"><ul><?cs each:extension_point = plugin.extension_points ?> 92 <li> 93 <code><?cs var:extension_point.module ?>.<?cs var:extension_point.interface ?></code><?cs 94 if:len(extension_point.extensions) ?> (<?cs 95 var:len(extension_point.extensions) ?> extensions)<ul><?cs 96 each:extension = extension_point.extensions ?> 97 <li><a href="#<?cs var:extension.module ?>.<?cs 98 var:extension.name ?>"><?cs var:extension.name ?></a></li><?cs 99 /each ?></ul><?cs 100 /if ?> 101 </li><?cs 102 /each ?></ul></td></tr><?cs 93 <th class="xtnpts" rowspan="<?cs var:len(plugin.extension_points) ?>"> 94 Extension points:</th><?cs 95 each:extension_point = plugin.extension_points ?><?cs 96 if:name(extension_point) != 0 ?><tr><?cs /if ?> 97 <td class="xtnpts"> 98 <code><?cs var:extension_point.module ?>.<?cs var:extension_point.interface ?></code><?cs 99 if:len(extension_point.extensions) ?> (<?cs 100 var:len(extension_point.extensions) ?> extensions)<ul><?cs 101 each:extension = extension_point.extensions ?> 102 <li><a href="#<?cs var:extension.module ?>.<?cs 103 var:extension.name ?>"><?cs var:extension.name ?></a></li><?cs 104 /each ?></ul><?cs 105 /if ?> 106 <div class="description"><?cs var:extension_point.description ?></div> 107 </td></tr><?cs 108 /each ?><?cs 103 109 /if ?> 104 110 </table><?cs … … 169 175 self._render_plugins(req) 170 176 171 add_stylesheet(req, ' about.css')177 add_stylesheet(req, 'css/about.css') 172 178 template = req.hdf.parse(self.about_cs) 173 179 return template, None … … 193 199 194 200 def _render_plugins(self, req): 201 try: 202 from trac.wiki.formatter import wiki_to_html 203 import inspect 204 def getdoc(obj): 205 return wiki_to_html(inspect.getdoc(obj), self.env, req) 206 except: 207 def getdoc(obj): 208 return obj.__doc__ 195 209 req.perm.assert_permission('CONFIG_VIEW') 196 210 import sys … … 203 217 plugin = {'name': component.__name__} 204 218 if component.__doc__: 205 plugin['description'] = component.__doc__219 plugin['description'] = getdoc(component) 206 220 207 221 module = sys.modules[component.__module__] … … 216 230 'module': xtnpt.interface.__module__}) 217 231 if xtnpt.interface.__doc__: 218 xtnpts[-1]['description'] = xtnpt.interface.__doc__232 xtnpts[-1]['description'] = getdoc(xtnpt.interface) 219 233 extensions = [] 220 234 for extension in ComponentMeta._registry.get(xtnpt.interface, []): -
branches/cboos-dev/intertrac-branch/trac/attachment.py
r1880 r1911 274 274 self._render_view(req, attachment) 275 275 276 add_stylesheet(req, 'c ode.css')276 add_stylesheet(req, 'css/code.css') 277 277 return 'attachment.cs', None 278 278 -
branches/cboos-dev/intertrac-branch/trac/Browser.py
r1863 r1911 165 165 self._render_file(req, repos, node, rev) 166 166 167 add_stylesheet(req, ' browser.css')167 add_stylesheet(req, 'css/browser.css') 168 168 return 'browser.cs', None 169 169 … … 286 286 add_link(req, 'alternate', raw_href, 'Original Format', mime_type) 287 287 288 add_stylesheet(req, 'c ode.css')288 add_stylesheet(req, 'css/code.css') 289 289 290 290 # IWikiSyntaxProvider methods … … 469 469 return 'log_rss.cs', 'application/rss+xml' 470 470 471 add_stylesheet(req, ' browser.css')472 add_stylesheet(req, ' diff.css')471 add_stylesheet(req, 'css/browser.css') 472 add_stylesheet(req, 'css/diff.css') 473 473 474 474 rss_href = make_log_href(path, format='rss', stop_rev=stop_rev) -
branches/cboos-dev/intertrac-branch/trac/Diff.py
r1864 r1911 163 163 add_link(req, 'alternate', '?format=zip&'+diff_params, 'Zip Archive', 164 164 'application/zip', 'zip') 165 add_stylesheet(req, 'c hangeset.css')166 add_stylesheet(req, ' diff.css')165 add_stylesheet(req, 'css/changeset.css') 166 add_stylesheet(req, 'css/diff.css') 167 167 return 'diff.cs', None 168 168 -
branches/cboos-dev/intertrac-branch/trac/Milestone.py
r1863 r1911 281 281 cursor = db.cursor() 282 282 cursor.execute("SELECT completed,name,description FROM milestone " 283 "WHERE completed>=%s AND completed<=%s", start, stop) 283 "WHERE completed>=%s AND completed<=%s", 284 (start, stop,)) 284 285 for completed,name,description in cursor: 285 286 title = 'Milestone <em>%s</em> completed' % escape(name) … … 330 331 self._render_view(req, db, milestone) 331 332 332 add_stylesheet(req, ' roadmap.css')333 add_stylesheet(req, 'css/roadmap.css') 333 334 return 'milestone.cs', None 334 335 -
branches/cboos-dev/intertrac-branch/trac/mimeview/patch.py
r1633 r1911 81 81 hdf['diff.files'] = d 82 82 83 add_stylesheet(req, ' diff.css')83 add_stylesheet(req, 'css/diff.css') 84 84 return hdf.render(hdf.parse(self.diff_cs)) 85 85 -
branches/cboos-dev/intertrac-branch/trac/Roadmap.py
r1863 r1911 86 86 return 87 87 88 add_stylesheet(req, ' roadmap.css')88 add_stylesheet(req, 'css/roadmap.css') 89 89 90 90 # FIXME should use the 'webcal:' scheme, probably … … 105 105 req.end_headers() 106 106 107 cursor = db.cursor() 108 cursor.execute("SELECT name,value FROM enum WHERE type='priority'") 107 from trac.ticket import Priority 109 108 priorities = {} 110 for name, value in cursor:111 priorities[ name] = float(value)109 for priority in Priority.select(self.env): 110 priorities[priority.name] = float(priority.value) 112 111 def get_priority(ticket): 113 112 value = priorities.get(ticket['priority']) … … 165 164 write_prop('DESCRIPTION', milestone['description_source']) 166 165 write_prop('END', 'VEVENT') 167 for t icket in [ticketfor ticket in milestone['tickets']168 if ticket['owner'] == user]:169 ticket = Ticket( db, ticket['id'])166 for tkt_id in [ticket['id'] for ticket in milestone['tickets'] 167 if ticket['owner'] == user]: 168 ticket = Ticket(self.env, tkt_id) 170 169 write_prop('BEGIN', 'VTODO') 171 170 if milestone.has_key('date'): 172 171 write_prop('RELATED-TO', uid) 173 172 write_date('DUE', localtime(milestone['due'])) 174 write_prop('SUMMARY', 'Ticket #%i: %s' % (ticket ['id'],173 write_prop('SUMMARY', 'Ticket #%i: %s' % (ticket.id, 175 174 ticket['summary'])) 176 write_prop('URL', req.base_url + '/ticket/' + str(ticket['id']))175 write_prop('URL', self.env.abs_href.ticket(ticket.id)) 177 176 write_prop('DESCRIPTION', ticket['description']) 178 177 priority = get_priority(ticket) … … 185 184 "WHERE ticket=%s AND field='status' " 186 185 "ORDER BY time desc LIMIT 1", 187 (ticket ['id'],))186 (ticket.id,)) 188 187 row = cursor.fetchone() 189 188 if row: -
branches/cboos-dev/intertrac-branch/trac/Search.py
r1863 r1911 108 108 add_link(req, 'next', self.env.href.search(params, page=page + 1)) 109 109 110 add_stylesheet(req, ' search.css')110 add_stylesheet(req, 'css/search.css') 111 111 return 'search.cs', None 112 112 -
branches/cboos-dev/intertrac-branch/trac/ticket/query.py
r1880 r1911 29 29 from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 30 30 from trac.web.main import IRequestHandler 31 from trac.wiki import wiki_to_html, wiki_to_oneliner, IWikiMacroProvider, IWikiSyntaxProvider 31 from trac.wiki import wiki_to_html, wiki_to_oneliner, IWikiMacroProvider, \ 32 IWikiSyntaxProvider 32 33 from trac.util import escape, shorten_line, sql_escape, CRLF, TRUE 33 34 … … 457 458 def display_html(self, req, query): 458 459 req.hdf['title'] = 'Custom Query' 459 add_stylesheet(req, ' report.css')460 add_stylesheet(req, 'css/report.css') 460 461 461 462 db = self.env.get_db_cnx() -
branches/cboos-dev/intertrac-branch/trac/ticket/report.py
r1863 r1911 140 140 req.hdf['report.query_href'] = self.env.href.query() 141 141 142 add_stylesheet(req, ' report.css')142 add_stylesheet(req, 'css/report.css') 143 143 return 'report.cs', None 144 144 … … 381 381 return None 382 382 383 add_stylesheet(req, 'report.css')384 383 return 'report.cs', None 385 384 -
branches/cboos-dev/intertrac-branch/trac/ticket/web_ui.py
r1863 r1911 93 93 req.hdf['newticket.fields.' + name] = field 94 94 95 add_stylesheet(req, ' ticket.css')95 add_stylesheet(req, 'css/ticket.css') 96 96 return 'newticket.cs', None 97 97 … … 161 161 ticket.populate(req.args) 162 162 req.hdf['ticket.action'] = action 163 req.hdf['ticket.ts'] = req.args.get('ts') 163 164 req.hdf['ticket.reassign_owner'] = req.args.get('reassign_owner') \ 164 165 or req.authname … … 174 175 else: 175 176 req.hdf['ticket.reassign_owner'] = req.authname 177 # Store a timestamp in order to detect "mid air collisions" 178 req.hdf['ticket.ts'] = ticket.time_changed 176 179 177 180 self._insert_ticket_data(req, db, ticket, reporter_id) … … 195 198 add_link(req, 'up', req.session['query_href']) 196 199 197 add_stylesheet(req, ' ticket.css')200 add_stylesheet(req, 'css/ticket.css') 198 201 return 'ticket.cs', None 199 202 … … 271 274 else: 272 275 req.perm.assert_permission('TICKET_APPEND') 276 277 # Mid air collision? 278 if int(req.args.get('ts')) != ticket.time_changed: 279 raise TracError("Sorry, can not save your changes. " 280 "This ticket has been modified by someone else " 281 "since you started", 'Mid Air Collision') 273 282 274 283 # Do any action on the ticket? -
branches/cboos-dev/intertrac-branch/trac/Timeline.py
r1863 r1911 103 103 fromdate = time.mktime((t[0], t[1], t[2], 23, 59, 59, t[6], t[7], t[8])) 104 104 try: 105 daysback = max(0, int(req.args.get('daysback', ''))) 105 daysback = max(0, int(req.args.get('daysback', '') \ 106 or req.session.get('timeline.daysback', ''))) 106 107 except ValueError: 107 108 daysback = int(self.config.get('timeline', 'default_daysback')) … … 112 113 for event_provider in self.event_providers: 113 114 available_filters += event_provider.get_timeline_filters(req) 114 filters = [f[0] for f in available_filters if f[0] in req.args.keys()] 115 if not filters: 116 filters = [f[0] for f in available_filters] 115 116 filters = [] 117 if req.args.has_key('update'): # setup filters from the update request 118 for f in available_filters: 119 if f[0] in req.args.keys(): 120 filters.append(f[0]) 121 req.session['timeline.filter.%s' % f[0]] = '1' 122 else: 123 req.session['timeline.filter.%s' % f[0]] = '0' 124 req.session['timeline.daysback'] = daysback 125 else: # setup filters from the session 126 no_session = True 127 for f in available_filters: 128 enabled = req.session.get('timeline.filter.%s' % f[0], None) 129 if enabled == '1': 130 filters.append(f[0]) 131 elif enabled == '0': 132 no_session = False 133 if no_session and not filters: 134 filters = [f[0] for f in available_filters] 117 135 118 136 stop = fromdate … … 162 180 return 'timeline_rss.cs', 'application/rss+xml' 163 181 164 add_stylesheet(req, ' timeline.css')182 add_stylesheet(req, 'css/timeline.css') 165 183 rss_href = self.env.href.timeline([(f, 'on') for f in filters], 166 184 daysback=90, max=50, format='rss') -
branches/cboos-dev/intertrac-branch/trac/util.py
r1854 r1911 182 182 shortline = text[:i]+' ...' 183 183 return shortline 184 185 def quote_cookie_value(path): 186 """ 187 Cookie values can not contain " ,;" characters. 188 """ 189 return path.replace(' ', '%20').replace(';', '%3B').replace(',', '%3C') 184 190 185 191 def hex_entropy(bytes=32): -
branches/cboos-dev/intertrac-branch/trac/versioncontrol/svn_fs.py
r1780 r1911 305 305 if self.has_node(old_path, old_rev): 306 306 old_node = self.get_node(old_path, old_rev) 307 else: 308 raise TracError, ('The Base for Diff is invalid: path %s' 309 ' doesn\'t exist in revision %s' \ 310 % (old_path, old_rev)) 307 311 if self.has_node(new_path, new_rev): 308 312 new_node = self.get_node(new_path, new_rev) 309 if not old_node and not new_node:310 raise TracError, ('None of the Diff arguments are valid: '311 'neither %s in revision %s nor %s in revision %s exist '312 'in the repository' % (old_path, old_rev,313 new_path, new_rev))314 elif old_node and new_node:315 if new_node.kind != old_node.kind:316 raise TracError, ('Diff mismatch: Trying to diff '317 'a %s (%s in revision %s) '318 'with a %s (%s in revision %s).' \319 % (old_node.kind, old_path, old_rev,320 new_node.kind, new_path, new_rev))321 if new_node:322 isdir = new_node.isdir323 313 else: 324 isdir = old_node.isdir 325 if isdir: 314 raise TracError, ('The Target for Diff is invalid: path %s' 315 ' doesn\'t exist in revision %s' \ 316 % (new_path, new_rev)) 317 if new_node.kind != old_node.kind: 318 raise TracError, ('Diff mismatch: Base is a %s (%s in revision %s) ' 319 'and Target is a %s (%s in revision %s).' \ 320 % (old_node.kind, old_path, old_rev, 321 new_node.kind, new_path, new_rev)) 322 if new_node.isdir: 326 323 editor = DiffChangeEditor() 327 324 e_ptr, e_baton = delta.make_editor(editor, self.pool) … … 329 326 new_root = fs.revision_root(self.fs_ptr, new_rev, self.pool) 330 327 def authz_cb(root, path, pool): return 1 331 text_deltas = 0 # as this is currently re-done in Diff.py...328 text_deltas = 0 # as this is anyway re-done in Diff.py... 332 329 entry_props = 0 # ("... typically used only for working copy updates") 333 330 repos.svn_repos_dir_delta(old_root, old_path, '', … … 335 332 e_ptr, e_baton, authz_cb, 336 333 text_deltas, 337 isdir and 1 or 0,334 1, # directory 338 335 entry_props, 339 336 ignore_ancestry, -
branches/cboos-dev/intertrac-branch/trac/web/auth.py
r1646 r1911 82 82 self.authname = req.remote_user 83 83 req.outcookie['trac_auth'] = cookie 84 req.outcookie['trac_auth']['path'] = req.cgi_location84 req.outcookie['trac_auth']['path'] = util.quote_cookie_value(req.cgi_location) 85 85 86 86 def logout(self): -
branches/cboos-dev/intertrac-branch/trac/web/chrome.py
r1854 r1911 30 30 31 31 def add_link(req, rel, href, title=None, mimetype=None, classname=None): 32 """ 33 Add a link to the HDF data set that will be inserted as <link> element in 32 """Add a link to the HDF data set that will be inserted as <link> element in 34 33 the <head> of the generated HTML 35 34 """ … … 47 46 48 47 def add_stylesheet(req, filename, mimetype='text/css'):
