def post_process_request(self, req, template, content_type): if req.path_info.startswith('/ticket'): tkt_id = req.path_info[8:] # jQuery! add_script(req, 'mastertickets/jquery.js') # Add in the 'Blocked by' field blocking_ids = blocked_by(self.env, tkt_id) if blocking_ids: req.hdf['ticket.blockedby'] = ', '.join( [str(x) for x in blocking_ids]) req.hdf['ticket.fields.blockedby'] = { 'value': '', 'custom': 1, 'type': 'text', 'label': 'Blocked By', 'order': 10, # Force this to be at the end, since I am going to disappear it. } add_stylesheet(req, 'mastertickets/ticket.css') add_script(req, 'mastertickets/linkify_blockedby.js') # If any blockers are not closed, disable the resovle option img_src, img_alt = 'checkmark.gif', 'Blockers closed' for i in blocking_ids: if Ticket(self.env, i)['status'] != 'closed': if Ticket(self.env, tkt_id)['status'] != 'closed': add_script(req, 'mastertickets/disable_resolve.js') img_src, img_alt = 'x.png', 'Blockers open' else: img_src, img_alt = 'caution.png', 'Blockers open, but current ticket closed' # Magic stuff in the footer req.hdf['project.footer'] = Markup( req.hdf['project.footer'] + Markup( html.DIV(html.IMG(class_='blockedby_icon', src=req.href.chrome( 'mastertickets', img_src), alt=img_alt, title=img_alt), ' ', linkify_ids(self.env, req, blocking_ids), id='linkified_blockedby', style='display:none'))) # Linkify the 'Blocks' field blocks_ids = req.hdf.get('ticket.blocking') or '' blocks_ids = blocks_ids.replace('#', '') if blocks_ids: blocks_ids = [x.strip() for x in blocks_ids.split(',')] req.hdf['project.footer'] = Markup( req.hdf['project.footer'] + Markup( html.DIV(linkify_ids(self.env, req, blocks_ids), id='linkified_blocking', style='display:none'))) add_script(req, 'mastertickets/linkify_blocking.js') return template, content_type
def expand_macro(self, formatter, name, content): req = formatter.req # Analyze the arguments list, that should be in content args = content.split(',') if len(args) == 0: raise TracError("No argument provided for %s." % self.__class__.__name__) # The first must be the type of the chart chart_type = self._get_chart_type(args[0]) # The second the Sprint sprint_name = self._get_sprint(args[1]) width, height = self._get_dimensions(args[2:]) filter_by = None if len(args) >= 4: filter_by = args[3] chart_params = dict(sprint_name=sprint_name, width=width, height=height, filter_by=filter_by) debug(self.env, "Params: %s" % chart_params) chart = ChartGenerator(self.env).get_chartwidget( chart_type, **chart_params) chart.prepare_rendering(req) return html.DIV(chart.display())
def render_macro(self, req, name, content): search = prefix = limit = skips = None if not content: return html.H2('Need to specify a search') if content: argv = [arg.strip() for arg in content.split(',')] if len(argv) < 1: return html.H2('Need to specify a search') search = argv[0] if len(argv) > 1: prefix = argv[1] if len(argv) > 2: limit = argv[2] if len(argv) > 3: skips = argv[3] db = self.env.get_db_cnx() cursor = db.cursor() sql = 'SELECT name, max_version FROM (' \ 'SELECT name as name, text as text, ' \ ' max(version) AS max_version, ' \ ' max(time) AS max_time ' \ 'FROM wiki ' args = [] if prefix: sql += 'WHERE name LIKE %s' args.append(prefix + '%') if skips: if prefix: sql += ' AND ' sql += 'name != %s' args.append(skips) sql += ' GROUP BY name ORDER BY max_time ASC' if limit: sql += ' LIMIT %s' args.append(limit) sql += ') AS temptable WHERE text LIKE %s' args.append('%' + search + '%') cursor.execute(sql, args) wiki = WikiSystem(self.env) return html.DIV( html.UL([ html.LI( html.A(wiki.format_page_name(name), href=req.href.wiki(name))) for name, version in cursor ]))
def get_timeline_events(self, req, start, stop, filters): if 'changeset' in filters: format = req.args.get('format') wiki_format = self.wiki_format_messages show_files = self.timeline_show_files db = self.env.get_db_cnx() repos = self.env.get_repository(req.authname) for chgset in repos.get_changesets(start, stop): message = chgset.message or '--' if wiki_format: shortlog = wiki_to_oneliner(message, self.env, db, shorten=True) else: shortlog = shorten_line(message) if format == 'rss': title = Markup('Changeset [%s]: %s', chgset.rev, shortlog) href = req.abs_href.changeset(chgset.rev) if wiki_format: message = wiki_to_html(message, self.env, req, db, absurls=True) else: message = html.PRE(message) else: title = Markup('Changeset <em>[%s]</em> by %s', chgset.rev, chgset.author) href = req.href.changeset(chgset.rev) if wiki_format: if self.timeline_long_messages: message = wiki_to_html(message, self.env, req, db, absurls=True) else: message = wiki_to_oneliner(message, self.env, db, shorten=True) else: message = shortlog if show_files and req.perm.has_permission('BROWSER_VIEW'): files = [] for chg in chgset.get_changes(): if show_files > 0 and len(files) >= show_files: files.append(html.LI(Markup('…'))) break files.append(html.LI(html.DIV(class_=chg[2]), chg[0] or '/')) message = html.UL(files, class_="changes") + message yield 'changeset', href, title, chgset.date, chgset.author,\ message
def render_macro(self, req, name, content): prefix = limit = None if content: argv = [arg.strip() for arg in content.split(',')] if len(argv) > 0: prefix = argv[0] if len(argv) > 1: limit = int(argv[1]) db = self.env.get_db_cnx() cursor = db.cursor() sql = 'SELECT name, ' \ ' max(version) AS max_version, ' \ ' max(time) AS max_time ' \ 'FROM wiki' args = [] if prefix: sql += ' WHERE name LIKE %s' args.append(prefix + '%') sql += ' GROUP BY name ORDER BY max_time DESC' if limit: sql += ' LIMIT %s' args.append(limit) cursor.execute(sql, args) entries_per_date = [] prevdate = None for name, version, time in cursor: date = format_date(time) if date != prevdate: prevdate = date entries_per_date.append((date, [])) entries_per_date[-1][1].append((name, int(version))) wiki = WikiSystem(self.env) return html.DIV( [html.H3(date) + html.UL([html.LI( html.A(wiki.format_page_name(name), href=req.href.wiki(name)), ' ', version > 1 and html.SMALL('(', html.A('diff', href=req.href.wiki(name, action='diff', version=version)), ')') \ or None) for name, version in entries]) for date, entries in entries_per_date])
def render_macro(self, req, name, filter): from trac.config import Option from trac.wiki.formatter import wiki_to_html, wiki_to_oneliner filter = filter or '' sections = set([section for section, option in Option.registry.keys() if section.startswith(filter)]) return html.DIV(class_='tracini')( [(html.H2('[%s]' % section, id='%s-section' % section), html.TABLE(class_='wiki')( html.TBODY([html.TR(html.TD(html.TT(option.name)), html.TD(wiki_to_oneliner(option.__doc__, self.env))) for option in Option.registry.values() if option.section == section]))) for section in sorted(sections)])
def expand_macro(self, formatter, name, content): return html.DIV('Hello World, args = ', content, class_="code")
def error(msg, *args): return html.DIV(html.P(msg % args), class_='system-message')
def render_macro(self, req, name, content): return html.DIV('Hello World, args = ', content, class_="code")
def render(self, req, mimetype, content, filename=None, url=None): if url: return html.DIV(html.IMG(src=url, alt=filename), class_="image-file")