Exemplo n.º 1
0
 def render(self, context, mimetype, content, filename=None, url=None):
     content = content.read()
     content = re.split('\r[\n]', content) 
     if not content:
         return None
     head = content[0]
     if not head:
         return None
     head = re.split(',', head)
     
     if not head:
         return None
     thead = tag.thead(tag.tr([tag.th(h) for h in head]))
     content = content[1:]
     if not content:
         return None
     tbody = []
     for r in content:
         if r:
             r = re.split(',', r)
             if r:
                 tbody.append(tag.tr([tag.td(c) for c in r ]))
     
     return tag.table(thead,tag.tbody(tbody), 
         class_="wiki")
Exemplo n.º 2
0
        def fn(stream):
            for kind, data, pos in stream:
                if kind is END and data.localname == 'body':
                    first_time = req._tracdeveloper_hdlr.buf \
                                 and req._tracdeveloper_hdlr.buf[0].created

                    elm = tag.div(tag.table(
                        tag.thead(
                            tag.tr(
                                tag.th('Time'),
                                tag.th('Module'),
                                tag.th('Level'),
                                tag.th('Message'),
                            )),
                        class_='listing')([
                            tag.tr(
                                tag.td(int((r.created - first_time) * 1000)),
                                tag.td(r.module),
                                tag.td(r.levelname),
                                tag.td(r.getMessage()),
                                class_=(i % 2 and 'even' or 'odd'),
                            )
                            for i, r in enumerate(req._tracdeveloper_hdlr.buf)
                        ]),
                                  id='tracdeveloper-log')
                    for evt in elm.generate():
                        yield evt
                    del elm
                    req._tracdeveloper_hdlr.formatter = None
                    del req._tracdeveloper_hdlr.buf[:]
                    self.log.removeHandler(req._tracdeveloper_hdlr)
                    del req._tracdeveloper_hdlr
                yield kind, data, pos
Exemplo n.º 3
0
    def expand_macro(self, formatter, name, content):
        from trac.mimeview.api import Mimeview
        mime_map = Mimeview(self.env).mime_map
        mime_type_filter = ''
        args, kw = parse_args(content)
        if args:
            mime_type_filter = args.pop(0).strip().rstrip('*')

        mime_types = {}
        for key, mime_type in mime_map.iteritems():
            if (not mime_type_filter or
                mime_type.startswith(mime_type_filter)) and key != mime_type:
                mime_types.setdefault(mime_type, []).append(key)

        return tag.div(class_='mimetypes')(
            tag.table(class_='wiki')(
                tag.thead(tag.tr(
                    tag.th(_("MIME Types")),  # always use plural
                    tag.th(tag.a("WikiProcessors",
                                 href=formatter.context.href.wiki(
                                     'WikiProcessors'))))),
                tag.tbody(
                    tag.tr(tag.th(tag.code(mime_type),
                                  style="text-align: left"),
                           tag.td(tag.code(
                               ' '.join(sorted(mime_types[mime_type])))))
                    for mime_type in sorted(mime_types.keys()))))
Exemplo n.º 4
0
 def fn(stream):
     for kind, data, pos in stream:
         if kind is END and data.localname == 'body':
             first_time = req._tracdeveloper_hdlr.buf \
                          and req._tracdeveloper_hdlr.buf[0].created
             
             elm = tag.div(tag.table(tag.thead(tag.tr(
                 tag.th('Time'),
                 tag.th('Module'),
                 tag.th('Level'),
                 tag.th('Message'),
             )), class_='listing')([
                 tag.tr(
                     tag.td(int((r.created - first_time) * 1000)),
                     tag.td(r.module),
                     tag.td(r.levelname),
                     tag.td(r.getMessage()),
                     class_=(i%2 and 'even' or 'odd'),
                 )
                 for i, r in enumerate(req._tracdeveloper_hdlr.buf)
             ]), id='tracdeveloper-log')
             for evt in elm.generate():
                 yield evt
             del elm
             req._tracdeveloper_hdlr.formatter = None
             del req._tracdeveloper_hdlr.buf[:]
             self.log.removeHandler(req._tracdeveloper_hdlr)
             del req._tracdeveloper_hdlr
         yield kind, data, pos
Exemplo n.º 5
0
    def expand_macro(self, formatter, name, content):
        from trac.mimeview.api import Mimeview
        mime_map = Mimeview(self.env).mime_map
        mime_type_filter = ''
        args, kw = parse_args(content)
        if args:
            mime_type_filter = args.pop(0).strip().rstrip('*')

        mime_types = {}
        for key, mime_type in mime_map.iteritems():
            if (not mime_type_filter or
                mime_type.startswith(mime_type_filter)) and key != mime_type:
                mime_types.setdefault(mime_type, []).append(key)

        return tag.div(class_='mimetypes')(
            tag.table(class_='wiki')(
                tag.thead(tag.tr(
                    tag.th(_("MIME Types")),  # always use plural
                    tag.th(tag.a("WikiProcessors",
                                 href=formatter.context.href.wiki(
                                     'WikiProcessors'))))),
                tag.tbody(
                    tag.tr(tag.th(tag.tt(mime_type),
                                  style="text-align: left"),
                           tag.td(tag.code(
                               ' '.join(sorted(mime_types[mime_type])))))
                    for mime_type in sorted(mime_types.keys()))))
Exemplo n.º 6
0
	def htmlSeq(self,s,insideTable):
		from genshi.builder import tag
		table=tag.table(frame='box',rules='all',width='100%',**self.padding)
		if hasattr(s[0],'__len__') and not isinstance(s[0],str): # 2d array
			# disregard insideTable in this case
			for r in range(len(s) if type(s)!=AlignedBox3 else 2): # len(s) is sufficient, but some version of minieigen report erroneously that AlignedBox3 has length of 3
				tr=tag.tr()
				for c in range(len(s[0])):
					tr.append(tag.td(float2str(s[r][c]) if isinstance(s[r][c],float) else str(s[r][c]),align='right',width='%g%%'%(100./len(s[0])-1.)))
				table.append(tr)
			return table
		splitLen=0
		if len(s)>1:
			if isinstance(s[0],int): splitLen=self.splitIntSeq
			elif isinstance(s[0],str): splitLen=self.splitStrSeq
			elif isinstance(s[0],float): splitLen=self.splitFloatSeq
		# 1d array
		if splitLen==0 or len(s)<splitLen:
			ret=table if not insideTable else []
			for e in s: ret.append(tag.td(float2str(e) if isinstance(e,float) else str(e),align='right',width='%g%%'%(100./len(s)-1.)))
		# 1d array, but with lines broken
		else:
			ret=table
			for i,e in enumerate(s):
				if i%splitLen==0:
					tr=tag.tr()
				tr.append(tag.td(float2str(e) if isinstance(e,float) else str(e),align='right',width='%g%%'%(100./splitLen-1.)))
				# last in the line, or last overall
				if i%splitLen==(splitLen-1) or i==len(s)-1: table.append(tr)
		return ret
Exemplo n.º 7
0
Arquivo: io.py Projeto: trucgiao91/woo
 def htmlSeq(self,s,insideTable):
     from genshi.builder import tag
     table=tag.table(frame='box',rules='all',width='100%',**self.padding)
     if hasattr(s[0],'__len__') and not isinstance(s[0],(str,unicode,bytes)): # 2d array
         # disregard insideTable in this case
         for r in range(len(s) if type(s)!=AlignedBox3 else 2): # len(s) is sufficient, but some version of minieigen report erroneously that AlignedBox3 has length of 3
             tr=tag.tr()
             for c in range(len(s[0])):
                 tr.append(tag.td(float2str(s[r][c]) if isinstance(s[r][c],float) else str(s[r][c]),align='right',width='%g%%'%(100./len(s[0])-1.)))
             table.append(tr)
         return table
     splitLen=0
     if len(s)>1:
         if isinstance(s[0],int): splitLen=self.splitIntSeq
         elif isinstance(s[0],(str,unicode)): splitLen=self.splitStrSeq
         elif isinstance(s[0],float): splitLen=self.splitFloatSeq
     # 1d array
     if splitLen==0 or len(s)<splitLen:
         ret=table if not insideTable else []
         for e in s: ret.append(tag.td(float2str(e) if isinstance(e,float) else str(e),align='right',width='%g%%'%(100./len(s)-1.)))
     # 1d array, but with lines broken
     else:
         ret=table
         for i,e in enumerate(s):
             if i%splitLen==0:
                 tr=tag.tr()
             tr.append(tag.td(float2str(e) if isinstance(e,float) else str(e),align='right',width='%g%%'%(100./splitLen-1.)))
             # last in the line, or last overall
             if i%splitLen==(splitLen-1) or i==len(s)-1: table.append(tr)
     return ret
Exemplo n.º 8
0
    def expand_macro(self, formatter, name, content):
        interwikis = []
        for k in sorted(self.keys()):
            prefix, url, title = self[k]
            interwikis.append({
                'prefix':
                prefix,
                'url':
                url,
                'title':
                title,
                'rc_url':
                self._expand_or_append(url, ['RecentChanges']),
                'description':
                url if title == prefix else title
            })

        return tag.table(
            tag.tr(tag.th(tag.em(_("Prefix"))), tag.th(tag.em(_("Site")))), [
                tag.tr(
                    tag.td(tag.a(w['prefix'], href=w['rc_url'])),
                    tag.td(tag.a(w['description'], href=w['url'])))
                for w in interwikis
            ],
            class_="wiki interwiki")
Exemplo n.º 9
0
def trainsToday(graph, searchDate, station):
    """rendered template text"""
    #print repr(searchDate)
    #print "subjs", len(list(graph.subjects(None, searchDate)))
    #print "dates", len(list(graph.triples((None, TT['date'], None))))
    # this was returning no rows in rdflib-2.4.x branch!
    #print list(graph.query('''SELECT ?d WHERE { ?x tt:date ?d }''', initNs=INITNS))

    dataRows = []
    for (searchDate2, trainNumber, trainName, tsa, taa, tsd, tad, status
         ) in graph.query(
        """SELECT ?searchDate ?trainNumber ?trainName
                  ?tsa ?taa ?tsd ?tad ?status WHERE {
             ?train a tt:Train;
                    rdfs:label ?trainNumber;
                    tt:stop ?stop .
             ?stop tt:date ?searchDate;
                   tt:station ?station .
             OPTIONAL { ?train tt:trainName ?trainName . }
             OPTIONAL { ?stop tt:status ?status . }
             OPTIONAL { ?stop tt:scheduledDepartureTime ?tsd . }
             OPTIONAL { ?stop tt:actualDepartureTime ?tad . }
             OPTIONAL { ?stop tt:scheduledArrivalTime ?tsa . }
             OPTIONAL { ?stop tt:actualArrivalTime ?taa . }
            }""", initNs=INITNS,
        initBindings={#'?searchDate' : searchDate,
                      '?station' : station}):
        if repr(searchDate2) != repr(searchDate): # workaround for sparql err
            continue
        dataRows.append((tad, taa, tsd, tsa, trainNumber, trainName, status))
    dataRows.sort(key=lambda r: [t for t in r[:4] if t]) # fancier ORDER BY

    rows = []
    now = literalNow()
    shownNow = False
    nowRow = T.tr(T.td("now", colspan="4", align="center", bgcolor="#D88585"))
    for (tad, taa, tsd, tsa, trainNumber, trainName, status) in dataRows:

        scheduledTime = tsd or tsa
        actualTime = tad or taa  # or 'estimated'
        
        if (actualTime or scheduledTime) > now and not shownNow:
            rows.append(nowRow)
            shownNow = True
            
        rows.append(T.tr(T.td(trainNumber, " ", trainName,
                              class_="trainNumber"),
                         T.td(scheduledTime),
                         T.td(actualTime, bgcolor="#EDEAD0"),
                         T.td(status)))
    if not shownNow:
        rows.append(nowRow)

    rows = T(*rows)
    tmpl = loader.load("okjtimes.html")
    return tmpl.generate(rows=rows, lastScan='?',
                         today=searchDate).render('html')
Exemplo n.º 10
0
 def generate_prefix(prefix):
     intertrac = intertracs[prefix]
     if isinstance(intertrac, basestring):
         yield tag.tr(tag.td(tag.b(prefix)), tag.td("Alias for ", tag.b(intertrac)))
     else:
         url = intertrac.get("url", "")
         if url:
             title = intertrac.get("title", url)
             yield tag.tr(tag.td(tag.a(tag.b(prefix), href=url + "/timeline")), tag.td(tag.a(title, href=url)))
Exemplo n.º 11
0
  def expand_macro(self, formatter, name, content, args):

    title = 'Color Scheme'
    classes = 'colormacro' 

    if args and 'title' in args:
      title = args['title']

    if args and 'class' in args:
      classes  += ' ' + args['class']


    tbody = []
    have_comment = False
    colors = self._parse_arguments(content)

    for color in colors:
      if len(color['title']) > 0:
        have_comment = True
      ## Create row
      tbody.append(
        [
          tag.td()(tag.strong(color['title'])),
          tag.td(
              style='background-color:' + color['orig']
            )(
              tag.div(style='color: black')(color['hex']),
              tag.div(style='color: white')(color['hex'])
          ),
          tag.td(
              style='background-color:' + color['orig']
            )(
              tag.div(style='color: black')(color['rgbp']),
              tag.div(style='color: white')(color['rgbp'])
          ),
        ]
      )
      ## end for loop

    if len(tbody) > 0:
      colcount = len(tbody[0])
      if not have_comment:
        colcount -= 1
      
      table = tag.table(class_=classes)
      table()(tag.thead()(tag.th(colspan='%d' % colcount)(title)))
      ## Attach row in table.
      if have_comment:
        table()(tag.tbody(class_='colorlist')([tag.tr(row) for row in tbody]))
      else:
        table()(tag.tbody(class_='colorlist')([tag.tr(row[1:]) for row in tbody]))

      return table;
    else:
      return tag.div(class_='colormacro')('Nothing to display')
Exemplo n.º 12
0
 def generate_prefix(prefix):
     intertrac = intertracs[prefix]
     if isinstance(intertrac, basestring):
         yield tag.tr(tag.td(tag.b(prefix)),
                      tag.td('Alias for ', tag.b(intertrac)))
     else:
         url = intertrac.get('url', '')
         if url:
             title = intertrac.get('title', url)
             yield tag.tr(
                 tag.td(tag.a(tag.b(prefix), href=url + '/timeline')),
                 tag.td(tag.a(title, href=url)))
Exemplo n.º 13
0
 def generate_prefix(prefix):
     intertrac = intertracs[prefix]
     if isinstance(intertrac, basestring):
         yield tag.tr(tag.td(tag.b(prefix)),
                      tag.td('Alias for ', tag.b(intertrac)))
     else:
         url = intertrac.get('url', '')
         if url:
             title = intertrac.get('title', url)
             yield tag.tr(tag.td(tag.a(tag.b(prefix),
                                       href=url + '/timeline')),
                          tag.td(tag.a(title, href=url)))
Exemplo n.º 14
0
 def test_genshi_builder():
     """Genshi template + tag builder"""
     stream = tag.TABLE([
         tag.tr([tag.td(c) for c in row.values()]) for row in table
     ]).generate()
     stream = genshi_tmpl2.generate(table=stream)
     stream.render('html', strip_whitespace=False)
Exemplo n.º 15
0
 def expand_macro(self, formatter, name, arguments):
     self.mc.options(arguments)
     extras = self.mc.extras()
     extra = ''
     if 'extra' in extras:
         extra = extras['extra']
     return tag.div(
         tag.h3('[[%s(%s)]]' % (name, arguments)),
         tag.table(tag.tr(tag.th('Name'), tag.th('Value'),
                          tag.th('Qualified'), tag.th('Default?'),
                          tag.th('Macroarg?'), tag.th('Extra?'),
                          tag.th('Known?'), tag.th('Default'),
                          tag.th('Documentation')),
                   self._show_option('text', self.mo_text,
                                     TracMacroConfigExample.mo_text),
                   self._show_option('bool', self.mo_bool,
                                     TracMacroConfigExample.mo_bool),
                   self._show_option('int', self.mo_int,
                                     TracMacroConfigExample.mo_int),
                   self._show_option('list', self.mo_list,
                                     TracMacroConfigExample.mo_list),
                   self._show_option('nodtext', self.mo_nodtext,
                                     TracMacroConfigExample.mo_nodtext),
                   self._show_option('nodbool', self.mo_nodbool,
                                     TracMacroConfigExample.mo_nodbool),
                   self._show_option('nodint', self.mo_nodint,
                                     TracMacroConfigExample.mo_nodint),
                   self._show_option('nodlist', self.mo_nodlist,
                                     TracMacroConfigExample.mo_nodlist),
                   self._show_extra('extra', extra),
                   border=1,
                   cellpadding=1,
                   cellspacing=0))
Exemplo n.º 16
0
    def expand_macro(self, formatter, name, content):
        args, opts = parse_args(content)
        if len(args) != 1:
            raise TracError("Requied single table name")
        table = args[0]
        excludes = [e.strip() for e in opts.get('exclude', '').split('|')]
        ccount = int(opts.get('column_count', 3))

        cdtsys = CustomDBTableSystem(self.env)
        try:
            items = cdtsys.sorted_column(table, 'name')
        except:
            raise TracError("Table not found: %s" % table)

        if excludes:
            items = [e for e in items if e not in excludes]

        ttable = tag.table(class_='wiki customdbtable')
        tr = td = None
        i = 0
        for item in items:
            if i % ccount == 0:
                tr = tag.tr()
                ttable(tr)
            td = tag.td(item)
            tr(td)
            i += 1
        while i % ccount != 0:
            tr(tag.td())
            i += 1
        return ttable
Exemplo n.º 17
0
    def expand_macro(self, formatter, name, content):
        args, opts = parse_args(content)
        if len(args) != 1:
            raise TracError("Requied single table name")
        table = args[0]
        excludes = [e.strip() for e in opts.get('exclude', '').split('|')]

        cdtsys = CustomDBTableSystem(self.env)
        try:
            columns = cdtsys.column_names(table)
        except:
            raise TracError("Table not found: %s" % table)

        _columns = opts.get('column', '')
        if _columns:
            _columns = [c.strip() for c in _columns.split('|')]
            if len(_columns) == 0:
                raise TracError("No column specified")
            for c in _columns:
                if c not in columns:
                    raise TracError("Column not found: %s" % c)
        else:
            _columns = columns

        ttable = tag.table(class_='wiki customdbtable')
        for row in cdtsys.sorted_dicts(table):
            if row['name'] in excludes:
                continue
            tr = tag.tr()
            for c in _columns:
                tr(tag.td(row[c]))
            ttable(tr)
        return ttable
Exemplo n.º 18
0
    def _get_row(self, ticket, columns):
        cells = []
        for column in columns:
            label = ticket.values.get(column)
            td = tag.td(label, class_=column)
            cells.append(td)

        ticket_class = ""
        ticket_status = ticket.values.get("status")
        if ticket_status == "closed":
            ticket_class = "closed"

        ticket_number = "#{}".format(ticket.id)
        link_td = tag.td(
            tag.a(
                ticket_number,
                class_=ticket_class,
                href=self.req.href.ticket(ticket.id),
                title=ticket_number,
            ),
            class_="id",
        )
        return tag.tr(
            link_td,
            cells,
            class_="trac-columns",
        )
Exemplo n.º 19
0
    def _generate_html(self, relation, relation_type, relation_role, stream, ticket):
        config = self.config['ticket-custom']
        try:
            if relation_type == 'one':
                if ticket[relation.name + '_' + relation_role] is not None:
                    target_ticket = Ticket(self.env, int(ticket[relation.name + '_' + relation_role]))

                    stream |= Transformer('//div[@id="ticket"]//td[@headers="h_%s"]/text()' % (relation.name + '_' + relation_role)) \
                        .replace(tag.a('#%s %s' % (target_ticket.id, target_ticket['summary']), href='/ticket/' + str(target_ticket.id)))
            else:
                if ticket[relation.name + '_' + relation_role] is not None:
                    target_tickets = [Ticket(self.env, int(i)) for i in ticket[relation.name + '_' + relation_role].split(',')]
                    format = map(unicode.strip, config.get(relation.name + '_' + relation_role + '.format').split(','))

                    tbody = tag.tbody()
                    for target_ticket in target_tickets:
                        columns = [tag.td(tag.a('#' + str(target_ticket.id), href='/ticket/' + str(target_ticket.id)))]
                        columns.extend([tag.td(target_ticket[field]) for field in format])
                        tbody.append(tag.tr(*columns))

                    stream |= Transformer('//div[@id="ticket"]//td[@headers="h_%s"]/text()' % (relation.name + '_' + relation_role)) \
                        .replace(tag.table(tbody, class_='relation_table'))
        except Exception as e:
            self.log.error(e.message)

        return stream
Exemplo n.º 20
0
    def expand_macro(self, formatter, name, args):
        from trac.config import Option
        section_filter = key_filter = ''
        args, kw = parse_args(args)
        if args:
            section_filter = args.pop(0).strip()
        if args:
            key_filter = args.pop(0).strip()

        registry = Option.get_registry(self.compmgr)
        sections = {}
        for (section, key), option in registry.iteritems():
            if section.startswith(section_filter):
                sections.setdefault(section, {})[key] = option

        return tag.div(class_='tracini')(
            (tag.h3(tag.code('[%s]' % section), id='%s-section' % section),
             tag.table(class_='wiki')(
                 tag.tbody(tag.tr(tag.td(tag.tt(option.name)),
                                  tag.td(format_to_oneliner(
                                      self.env, formatter.context,
                                      to_unicode(option.__doc__))))
                           for option in sorted(sections[section].itervalues(),
                                                key=lambda o: o.name)
                           if option.name.startswith(key_filter))))
            for section in sorted(sections))
Exemplo n.º 21
0
    def expand_macro(self, formatter, name, content):
        intertracs = {}
        for key, value in self.config.options('intertrac'):
            idx = key.rfind('.') # rsplit only in 2.4
            if idx > 0: # 0 itself doesn't help much: .xxx = ...
                prefix, attribute = key[:idx], key[idx+1:]
                intertrac = intertracs.setdefault(prefix, {})
                intertrac[attribute] = value
            else:
                intertracs[key] = value # alias

        def generate_prefix(prefix):
            intertrac = intertracs[prefix]
            if isinstance(intertrac, basestring):
                yield tag.tr(tag.td(tag.b(prefix)),
                             tag.td('Alias for ', tag.b(intertrac)))
            else:
                url = intertrac.get('url', '')
                if url:
                    title = intertrac.get('title', url)
                    yield tag.tr(tag.td(tag.a(tag.b(prefix),
                                              href=url + '/timeline')),
                                 tag.td(tag.a(title, href=url)))

        return tag.table(class_="wiki intertrac")(
            tag.tr(tag.th(tag.em('Prefix')), tag.th(tag.em('Trac Site'))),
            [generate_prefix(p) for p in sorted(intertracs.keys())])
Exemplo n.º 22
0
def render_table(items, colspec, render_item, colspace=1):
    try:
        columns = max(int(colspec), 1)
    except Exception:
        columns = 3

    nbsp = Markup('&nbsp;')
    # hdr = [tag.th(nbsp, 'Display'), tag.th('Markup', nbsp)]
    spacer_style = 'width:%dem;border:none' % colspace
    # Find max width to make value cols equally wide
    width = 0
    for i in items:
        if (isinstance(i, str) or isinstance(i, unicode)) and len(i) > width:
            width = len(i)
    value_style = 'border:none'
    #noinspection PyUnusedLocal
    value_style += ';width:%dem' % (width*2/3) if width else '' # empirical...

    def render_def(s):
        rendered = s and render_item(s) or None
        if isinstance(s, str):
            s = Markup(s.replace('&', '&amp;'))
        return [tag.td(rendered, nbsp, style='border:none'),
                tag.td(tag.kbd(s), style=value_style)]
    
    return tag.table(#tag.tr((hdr + [tag.td(style=spacer_style)]) *
                     #       (columns-1) + hdr),
                     [tag.tr([render_def(s) + [tag.td(style=spacer_style)]
                              for s in row[:-1]] + render_def(row[-1]))
                      for row in group_over(sorted(items), columns)],
                     class_='wiki', style='border:none')
Exemplo n.º 23
0
 def make_list(items):
     parts = [item.rsplit('.', 1) for item in items]
     return tag.table(tag.tbody(
         tag.tr(tag.td(c, class_='trac-name'),
                tag.td('(%s.*)' % m, class_='trac-name'))
         for m, c in parts),
                      class_='trac-pluglist')
Exemplo n.º 24
0
    def filter_stream(self, req, method, filename, stream, data):
        """
        Returns changed stream for `prefs_general.html` template with notification
        opt-out preference option.

        `req` is the current request object, `method` is the Genshi render
        method (xml, xhtml or text), `filename` is the filename of the template
        to be rendered, `stream` is the event stream and `data` is the data for
        the current template.
        """

        if filename == 'prefs_general.html' and req.authname != 'anonymous':
            stream |= Transformer('.//table').append(
                tag.tr(
                    tag.th(
                        tag.label('Ticket notifications opt-out:', **{'for': 'ticket-notification-optout'}),
                    ),
                    tag.td(
                        tag.input(type="hidden", name="ticket-notification-optout_cb", value=""),
                        tag.input(type="checkbox", id="ticket-notification-optout", name="ticket-notification-optout", checked=req.session.get('ticket-notification-optout') or None),
                    ),
                    **{'class': 'field'}
                ),
            )
        return stream
Exemplo n.º 25
0
    def expand_macro(self, formatter, name, content):
        intertracs = {}
        for key, value in self.config.options("intertrac"):
            idx = key.rfind(".")  # rsplit only in 2.4
            if idx > 0:  # 0 itself doesn't help much: .xxx = ...
                prefix, attribute = key[:idx], key[idx + 1 :]
                intertrac = intertracs.setdefault(prefix, {})
                intertrac[attribute] = value
            else:
                intertracs[key] = value  # alias
        if "trac" not in intertracs:
            intertracs["trac"] = {"title": _("The Trac Project"), "url": "http://trac.edgewall.org"}

        def generate_prefix(prefix):
            intertrac = intertracs[prefix]
            if isinstance(intertrac, basestring):
                yield tag.tr(tag.td(tag.b(prefix)), tag.td("Alias for ", tag.b(intertrac)))
            else:
                url = intertrac.get("url", "")
                if url:
                    title = intertrac.get("title", url)
                    yield tag.tr(tag.td(tag.a(tag.b(prefix), href=url + "/timeline")), tag.td(tag.a(title, href=url)))

        return tag.table(class_="wiki intertrac")(
            tag.tr(tag.th(tag.em("Prefix")), tag.th(tag.em("Trac Site"))),
            [generate_prefix(p) for p in sorted(intertracs.keys())],
        )
Exemplo n.º 26
0
    def expand_macro(self, formatter, name, content):
        intertracs = {}
        for key, value in self.intertrac_section.options():
            idx = key.rfind('.')
            if idx > 0: # 0 itself doesn't help much: .xxx = ...
                prefix, attribute = key[:idx], key[idx+1:]
                intertrac = intertracs.setdefault(prefix, {})
                intertrac[attribute] = value
            else:
                intertracs[key] = value # alias
        if 'trac' not in intertracs:
            intertracs['trac'] = {'title': _('The Trac Project'),
                                  'url': 'http://trac.edgewall.org'}

        def generate_prefix(prefix):
            intertrac = intertracs[prefix]
            if isinstance(intertrac, basestring):
                yield tag.tr(tag.td(tag.b(prefix)),
                             tag.td('Alias for ', tag.b(intertrac)))
            else:
                url = intertrac.get('url', '')
                if url:
                    title = intertrac.get('title', url)
                    yield tag.tr(tag.td(tag.a(tag.b(prefix),
                                              href=url + '/timeline')),
                                 tag.td(tag.a(title, href=url)))

        return tag.table(class_="wiki intertrac")(
            tag.tr(tag.th(tag.em('Prefix')), tag.th(tag.em('Trac Site'))),
            [generate_prefix(p) for p in sorted(intertracs.keys())])
Exemplo n.º 27
0
def render_table(items, colspec, render_item, colspace=1):
    try:
        columns = max(int(colspec), 1)
    except Exception:
        columns = 3

    nbsp = Markup('&nbsp;')
    # hdr = [tag.th(nbsp, 'Display'), tag.th('Markup', nbsp)]
    spacer_style = 'width:%dem;border:none' % colspace
    # Find max width to make value cols equally wide
    width = 0
    for i in items:
        if (isinstance(i, str) or isinstance(i, unicode)) and len(i) > width:
            width = len(i)
    value_style = 'border:none'
    #noinspection PyUnusedLocal
    if width:
        # empirical...
        value_style = '%s;width:%dem' % (value_style, width*2/3)

    def render_def(s):
        rendered = s and render_item(s) or None
        if isinstance(s, str):
            s = Markup(s.replace('&', '&amp;'))
        return [tag.td(rendered, nbsp, style='border:none'),
                tag.td(tag.kbd(s), style=value_style)]
    
    return tag.table(#tag.tr((hdr + [tag.td(style=spacer_style)]) *
                     #       (columns-1) + hdr),
                     [tag.tr([render_def(s) + [tag.td(style=spacer_style)]
                              for s in row[:-1]] + render_def(row[-1]))
                      for row in group_over(sorted(items), columns)],
                     class_='wiki', style='border:none')
Exemplo n.º 28
0
 def expand_macro(self, formatter, name, arguments):
     self.mc.options(arguments)
     extras = self.mc.extras()
     extra = ''
     if 'extra' in extras:
         extra = extras['extra']
     return tag.div(
         tag.h3('[[%s(%s)]]' % ( name, arguments )),
         tag.table(
           tag.tr(
             tag.th('Name'), tag.th('Value'), tag.th('Qualified'),
             tag.th('Default?'), tag.th('Macroarg?'), tag.th('Extra?'),
             tag.th('Known?'), tag.th('Default'), tag.th('Documentation')
           ),
           self._show_option('text', self.mo_text,
                             TracMacroConfigExample.mo_text),
           self._show_option('bool', self.mo_bool,
                             TracMacroConfigExample.mo_bool),
           self._show_option('int', self.mo_int,
                             TracMacroConfigExample.mo_int),
           self._show_option('list', self.mo_list,
                             TracMacroConfigExample.mo_list),
           self._show_option('nodtext', self.mo_nodtext,
                             TracMacroConfigExample.mo_nodtext),
           self._show_option('nodbool', self.mo_nodbool,
                             TracMacroConfigExample.mo_nodbool),
           self._show_option('nodint', self.mo_nodint,
                             TracMacroConfigExample.mo_nodint),
           self._show_option('nodlist', self.mo_nodlist,
                             TracMacroConfigExample.mo_nodlist),
           self._show_extra('extra', extra),
           border=1, cellpadding=1, cellspacing=0
         )
     )
Exemplo n.º 29
0
    def expand_macro(self, formatter, name, content):
        interwikis = []
        for k in sorted(self.keys()):
            prefix, url, title = self[k]
            interwikis.append({
                'prefix': prefix, 'url': url, 'title': title,
                'rc_url': self._expand_or_append(url, ['RecentChanges']),
                'description': url if title == prefix else title})

        return tag.table(tag.tr(tag.th(tag.em(_("Prefix"))),
                                tag.th(tag.em(_("Site")))),
                         [tag.tr(tag.td(tag.a(w['prefix'], href=w['rc_url'])),
                                 tag.td(tag.a(w['description'],
                                              href=w['url'])))
                          for w in interwikis ],
                         class_="wiki interwiki")
Exemplo n.º 30
0
    def expand_macro(self, formatter, name, content):
        intertracs = {}
        for key, value in self.intertrac_section.options():
            idx = key.rfind('.')
            if idx > 0:  # 0 itself doesn't help much: .xxx = ...
                prefix, attribute = key[:idx], key[idx + 1:]
                intertrac = intertracs.setdefault(prefix, {})
                intertrac[attribute] = value
            else:
                intertracs[key] = value  # alias
        if 'trac' not in intertracs:
            intertracs['trac'] = {
                'title': _('The Trac Project'),
                'url': 'http://trac.edgewall.org'
            }

        def generate_prefix(prefix):
            intertrac = intertracs[prefix]
            if isinstance(intertrac, basestring):
                yield tag.tr(tag.td(tag.b(prefix)),
                             tag.td('Alias for ', tag.b(intertrac)))
            else:
                url = intertrac.get('url', '')
                if url:
                    title = intertrac.get('title', url)
                    yield tag.tr(
                        tag.td(tag.a(tag.b(prefix), href=url + '/timeline')),
                        tag.td(tag.a(title, href=url)))

        return tag.table(class_="wiki intertrac")(
            tag.tr(tag.th(tag.em('Prefix')), tag.th(tag.em('Trac Site'))),
            [generate_prefix(p) for p in sorted(intertracs.keys())])
Exemplo n.º 31
0
    def filter_stream(self, req, method, filename, stream, data):
        """
        Adds project total count information in project summary block::

            Downloads: 288

        """
        # TODO: Make interface for the project summary box and implement it here

        # Filter only the summary table wiki macro
        if filename != 'multiproject_summary.html':
            return stream

        # Load project and followers info
        project = Project.get(self.env)
        count = ProjectDownloadEntry.total_download_count(project.id)

        if count == 0:
            return stream

        # Add following information into project summary block
        trans = Transformer('//div[@class="summary"]/table').append(
            tag.tr(
                tag.th('Downloads:'),
                tag.td(count)
            )
        )

        return stream | trans
Exemplo n.º 32
0
    def expand_macro(self, formatter, name, content):
        content = content.strip() if content else ''
        name_filter = content.strip('*')
        items = {}
        for subscriber in NotificationSystem(self.env).subscribers:
            name = subscriber.__class__.__name__
            if not name_filter or name.startswith(name_filter):
                items[name] = subscriber.description()

        return tag.div(class_='trac-subscriberlist')(tag.table(class_='wiki')(
            tag.thead(tag.tr(tag.th(_("Subscriber")),
                             tag.th(_("Description")))),
            tag.tbody(
                tag.tr(tag.td(tag.code(name)),
                       tag.td(items[name]),
                       class_='odd' if idx % 2 else 'even')
                for idx, name in enumerate(sorted(items.keys())))))
Exemplo n.º 33
0
def generate_home(self, req):
    
    model = ZoteroModelProvider(self.env)
    
    title = tag.h1( 'Tops' )
    authors_top = model.count_by_author_top()
    authors = []
    for creatorID, firstName, lastName in authors_top:
        authors.append(tag.a( lastName + ' ' + firstName, 
                href = req.href.zotero('qjump', author = creatorID) ) )
        authors.append(tag.span(' | '))
    authors = tag.tr(tag.th( tag.b('Authors:'), 
        tag.td( authors, 
                tag.a('more...', href = req.href.zotero('cloud', t = 'author' ) ) ),
        valign="top", style="text-align: right; width: 15%;"))
    
    publisher_top = model.count_by_publisher_top()
    publisher = []
    for p in publisher_top:
        publisher.append(tag.a( p, 
                href = req.href.zotero('qjump', publisher = p) ) )
        publisher.append(tag.br())
    publisher = tag.tr(tag.th( tag.b('Publishers:'), 
            tag.td(publisher, 
                   tag.a('more...', href = req.href.zotero('cloud', t = 'publisher' ))),
            valign="top", style="text-align: right; width: 15%;"))
    
    year_top = model.count_by_year_top()
    years = []
    for y in year_top:
        years.append(tag.a( y, 
                href = req.href.zotero('qjump', year = y) ) )
        years.append(tag.span(' | '))
    years = tag.tr(tag.th( tag.b('Years:'), 
            tag.td(years, 
                   tag.a('more...', href = req.href.zotero('cloud', t = 'year' ))),
            valign="top", style="text-align: right; width: 15%;"))
    # For recently add
    recent_ids = model.get_recents()
    recents_title = tag.div( tag.br(), tag.br(),tag.h1('Recent Changes'))
    recents = render_refs_box(self, req, recent_ids )
    home = tag.div( title, 
        tag.table(authors, years, publisher, border="0", cellpadding="2", cellspacing="2"),
        recents_title, recents)
    
    return home
Exemplo n.º 34
0
def render_table(items, colspec, render_item):
    try:
        columns = max(int(colspec), 1)
    except:
        columns = 3

    nbsp = Markup('&nbsp;')
    hdr = [tag.th('Markup', nbsp), tag.th(nbsp, 'Display')]
    def render_def(s):
        rendered = s and render_item(s) or None
        return [tag.td(s), tag.td(rendered)] 
    
    return tag.table(tag.tr((hdr + [tag.th(nbsp)]) * (columns-1) + hdr),
                     [tag.tr([render_def(s) + [tag.td(nbsp)]
                              for s in row[:-1]] + render_def(row[-1]))
                      for row in group(sorted(items), columns)],
                     class_="wiki")
Exemplo n.º 35
0
def test_genshi_builder():
    """Genshi template + tag builder"""
    stream = tag.TABLE([
        tag.tr([tag.td(c) for c in row.values()])
        for row in table
    ]).generate()
    stream = genshi_tmpl2.generate(table=stream)
    stream.render('html', strip_whitespace=False)
Exemplo n.º 36
0
 def _show_extra(self, name, val):
     return tag.tr(tag.td('%s' % name), tag.td('%s' % val),
                   tag.td('%s %s' % self.mc.option_qualified_name(name)),
                   tag.td('%s' % self.mc.option_is_default(name)),
                   tag.td('%s' % self.mc.option_is_macroarg(name)),
                   tag.td('%s' % self.mc.option_is_extra(name)),
                   tag.td('%s' % self.mc.option_is_known(name)), tag.td(''),
                   tag.td(''))
Exemplo n.º 37
0
    def expand_macro(self, formatter, name, args):
        from trac.config import ConfigSection, Option
        section_filter = key_filter = ''
        args, kw = parse_args(args)
        if args:
            section_filter = args.pop(0).strip()
        if args:
            key_filter = args.pop(0).strip()

        def getdoc(option_or_section):
            doc = to_unicode(option_or_section.__doc__)
            if doc:
                doc = dgettext(option_or_section.doc_domain, doc)
            return doc

        registry = ConfigSection.get_registry(self.compmgr)
        sections = dict((name, getdoc(section))
                        for name, section in registry.iteritems()
                        if name.startswith(section_filter))

        registry = Option.get_registry(self.compmgr)
        options = {}
        for (section, key), option in registry.iteritems():
            if section.startswith(section_filter):
                options.setdefault(section, {})[key] = option
                sections.setdefault(section, '')

        def default_cell(option):
            default = option.default
            if default is True:
                default = 'true'
            elif default is False:
                default = 'false'
            elif default == 0:
                default = '0.0' if isinstance(default, float) else '0'
            elif default:
                default = ', '.join(to_unicode(val) for val in default) \
                          if isinstance(default, (list, tuple)) \
                          else to_unicode(default)
            else:
                return tag.td(_("(no default)"), class_='nodefault')
            return tag.td(tag.code(default), class_='default')

        return tag.div(class_='tracini')(
            (tag.h3(tag.code('[%s]' % section), id='%s-section' % section),
             format_to_html(self.env, formatter.context, section_doc),
             tag.table(class_='wiki')(tag.tbody(
                 tag.tr(
                     tag.td(tag.tt(option.name)),
                     tag.td(
                         format_to_oneliner(self.env, formatter.context,
                                            getdoc(option))),
                     default_cell(option))
                 for option in sorted(options.get(section, {}).itervalues(),
                                      key=lambda o: o.name)
                 if option.name.startswith(key_filter))))
            for section, section_doc in sorted(sections.iteritems()))
Exemplo n.º 38
0
 def _render_mergeinfo(self, name, mode, context, props):
     rows = []
     for row in props[name].splitlines():
         try:
             (path, revs) = row.rsplit(":", 1)
             rows.append([tag.td(path), tag.td(revs.replace(",", u",\u200b"))])
         except ValueError:
             rows.append(tag.td(row, colspan=2))
     return tag.table(tag.tbody([tag.tr(row) for row in rows]), class_="props")
Exemplo n.º 39
0
 def _table_row(self, req, ticket, columns):
     # Is the ticket closed?
     ticket_class = ''
     if ticket['status'] == 'closed':
         ticket_class = 'closed'
     return tag.tr(
             tag.td(tag.a("#%s" % ticket.id, href=req.href.ticket(ticket.id), title="Child ticket #%s" % ticket.id, class_=ticket_class), class_="id"),
             [ tag.td(ticket[s], class_=s) for s in columns ],
             )
Exemplo n.º 40
0
 def _show_option(self, name, val, spec):
     return tag.tr(tag.td('%s' % name), tag.td('%s' % val),
                   tag.td('%s %s' % self.mc.option_qualified_name(name)),
                   tag.td('%s' % self.mc.option_is_default(name)),
                   tag.td('%s' % self.mc.option_is_macroarg(name)),
                   tag.td('%s' % self.mc.option_is_extra(name)),
                   tag.td('%s' % self.mc.option_is_known(name)),
                   tag.td('%s' % str(spec.default)),
                   tag.td('%s' % spec.__doc__))
        def table_header(self):
		# use genshi to build header row, also use th for table headings
		# (note, we don't start the table here, as all genshi objects have to be self-contained)
		return tag.thead(tag.tr(tag.th('Ticket'),
			      tag.th('Summary'),
			      tag.th('Modified'),
			      tag.th('Owner'),
			      tag.th('Component'),
			      tag.th('Status')))
Exemplo n.º 42
0
    def expand_macro(self, formatter, name, args):
        if not args:
            return Markup()

        config = None
        if name == self.CONFIG_KEY:
            lines = args.splitlines()
            if not lines or not lines[0].startswith('#!'):
                return Markup()
            config = self._parse_config([i.strip() for i in lines[0][2:].split(',')])
        else:
            config = self.CONFIG[name]

        if not config:
            return Markup()

        def to_html(text):
            if not text:
                return ''
            return Markup('<br>'.join([format_to_oneliner(self.env, formatter.context, line) \
                                for line in text.splitlines()]))

        def has_keys(dict, keys):
            for key in keys:
                if dict.has_key(key):
                    return True
            return False

        rows = self.parse_doc(args)
        if not rows:
            return Markup()

        seen = []
        for desc, keys in config:
            if [row for row in rows if has_keys(row, keys)]:
                seen.append(desc)

        thead = tag.thead()
        for desc, keys in config:
            if not desc in seen:
                continue
            thead(tag.td(tag.b(desc)))

        tbody = tag.tbody()
        for row in rows:
            trow = tag.tr()
            for desc, keys in config:
                if not desc in seen:
                    continue
                tcol = tag.td()
                for key in keys:
                    if row.has_key(key):
                        tcol(to_html(row[key]))
                trow(tcol)
            tbody(trow)

        return tag.table([thead, tbody], class_='wiki')
Exemplo n.º 43
0
def render_refs_box(self, req, ids, order = 'year', desc = 1, headhref=False,
    path=[],args=[],page=None,max=None ):
    # Check parameters
    if not ids:
        return []     
    
    columns = self.env.config.get('zotero', 'columns','firstCreator, year, publicationTitle, title' )
    columns = columns.split(',')
    columns = [c.strip() for c in columns]
   
    model = ZoteroModelProvider(self.env)
    if page:
        page = (page-1)*max
    data = model.get_item_columns_by_iids(ids,columns, order, desc = desc, offset=page,limit=max)
    
    apath = args_path(args)
    
    heads = []
    for idx, column in enumerate(columns):
        label = column
        if zotero_fields_mapping_name.has_key(column):
            label = zotero_fields_mapping_name[column]['label']
        if headhref and path:
            head = []
            th_class = ''
            th_href = req.href(path, order=column)+apath
            if order == column:
                if desc:
                    th_class = 'desc'
                else:
                    th_class = 'asc'
                    th_href = req.href(path, order=column, desc = str(1))+apath
            head = tag.th(tag.a(label, href = th_href),class_= th_class)
            heads.append(head)
        else:
            heads.append(tag.th(label))
    body = []
    for idx, item in enumerate(data):
        item_class = 'even'
        if idx % 2 == 1:
            item_class = 'odd'
        item_td = []
        for idx, col in enumerate(columns):
            col_td = []
            if not col or item[idx+1] == 'None':
                col_td = tag.td()
            elif col == 'title':
                col_td = tag.td(tag.a(item[idx+1], 
                    href = req.href.zotero('item',str(item[0]))))
            else:   
                col_td = tag.td(item[idx+1])
            item_td.append(col_td)
        item_tr = tag.tr( item_td,class_=item_class)
        body.append(item_tr)
    return tag.table( tag.thead( heads ), tag.tbody(body),
        class_="listing dirlist", id="dirlist")
Exemplo n.º 44
0
 def expand_macro(self, formatter, name, content, args=None):
     t = [render_table(p, '1',
                       lambda s: self._format_phrase(formatter, s, None))
          for p in [self.fixme_phrases, self.todo_phrases,
                    self.done_phrases]]
     style = 'border:none;text-align:center;vertical-align:top'
     spacer = tag.td(style='width:2em;border:none')
     return tag.table(tag.tr(tag.td(t[0], style=style), spacer,
                             tag.td(t[1], style=style), spacer,
                             tag.td(t[2], style=style)))
Exemplo n.º 45
0
    def expand_macro(self, formatter, name, content):
        content = content.strip() if content else ''
        name_filter = content.strip('*')
        items = {}
        for subscriber in NotificationSystem(self.env).subscribers:
            name = subscriber.__class__.__name__
            if not name_filter or name.startswith(name_filter):
                items[name] = subscriber.description()

        return tag.div(class_='trac-subscriberlist')(
            tag.table(class_='wiki')(
                tag.thead(tag.tr(
                    tag.th(_("Subscriber")),
                    tag.th(_("Description")))),
                tag.tbody(
                    tag.tr(tag.td(tag.code(name)),
                           tag.td(items[name]),
                           class_='odd' if idx % 2 else 'even')
                    for idx, name in enumerate(sorted(items.keys())))))
Exemplo n.º 46
0
Arquivo: api.py Projeto: pkdevbox/trac
 def _body_rows():
     for idx, line in enumerate(_group_lines(stream)):
         row = tag.tr()
         for annotator, data in annotator_datas:
             if annotator:
                 annotator.annotate_row(context, row, idx + 1, line, data)
             else:
                 row.append(tag.td())
         row.append(tag.td(line))
         yield row
Exemplo n.º 47
0
    def expand_macro(self, formatter, name, args):
        from trac.config import ConfigSection, Option
        section_filter = key_filter = ''
        args, kw = parse_args(args)
        if args:
            section_filter = args.pop(0).strip()
        if args:
            key_filter = args.pop(0).strip()

        def getdoc(option_or_section):
            doc = to_unicode(option_or_section.__doc__)
            if doc:
                doc = dgettext(option_or_section.doc_domain, doc)
            return doc

        registry = ConfigSection.get_registry(self.compmgr)
        sections = dict((name, getdoc(section))
                        for name, section in registry.iteritems()
                        if name.startswith(section_filter))

        registry = Option.get_registry(self.compmgr)
        options = {}
        for (section, key), option in registry.iteritems():
            if section.startswith(section_filter):
                options.setdefault(section, {})[key] = option
                sections.setdefault(section, '')

        def default_cell(option):
            default = option.default
            if default is True:
                default = 'true'
            elif default is False:
                default = 'false'
            elif default == 0:
                default = '0.0' if isinstance(default, float) else '0'
            elif default:
                default = ', '.join(to_unicode(val) for val in default) \
                          if isinstance(default, (list, tuple)) \
                          else to_unicode(default)
            else:
                return tag.td(_("(no default)"), class_='nodefault')
            return tag.td(tag.code(default), class_='default')

        return tag.div(class_='tracini')(
            (tag.h3(tag.code('[%s]' % section), id='%s-section' % section),
             format_to_html(self.env, formatter.context, section_doc),
             tag.table(class_='wiki')(tag.tbody(
                 tag.tr(tag.td(tag.tt(option.name)),
                        tag.td(format_to_oneliner(
                            self.env, formatter.context, getdoc(option))),
                        default_cell(option))
                 for option in sorted(options.get(section, {}).itervalues(),
                                      key=lambda o: o.name)
                 if option.name.startswith(key_filter))))
            for section, section_doc in sorted(sections.iteritems()))
Exemplo n.º 48
0
 def _render_mergeinfo(self, name, mode, context, props):
     rows = []
     for row in props[name].splitlines():
         try:
             (path, revs) = row.rsplit(':', 1)
             rows.append([tag.td(path),
                          tag.td(revs.replace(',', u',\u200b'))])
         except ValueError:
             rows.append(tag.td(row, colspan=2))
     return tag.table(tag.tbody([tag.tr(row) for row in rows]),
                      class_='props')
Exemplo n.º 49
0
 def _body_rows():
     for idx, line in enumerate(_group_lines(stream)):
         row = tag.tr()
         for annotator, data in annotator_datas:
             if annotator:
                 annotator.annotate_row(context, row, idx + 1, line,
                                        data)
             else:
                 row.append(tag.td())
         row.append(tag.td(line))
         yield row
Exemplo n.º 50
0
    def expand_macro(self, formatter, name, content):
        evs = EarnValueSystem(self.env)
        kwargs = self._parse_arg(content)
        users = evs.get_users(formatter.req, kwargs.get('users', 'authenticated'))
        format = kwargs.get('format', 'table')
        start_time = self._parse_date(kwargs.get('start'), 0)
        end_time = self._parse_date(kwargs.get('end'), None)

        if format == 'plain':
            ev = dict([(u, evs.get_user_ev(u, start_time, end_time)) for u in users])
            tags = []
            for k, v in ev.items():
                tags.append(tag.span(k + ': ' + str(v)))
                tags.append(tag.br)
            return tag.p(*tags)

        elif format == 'table':
            evc = evs.get_users_ev_detail(users, start_time, end_time)
            rows = [tag.tr(
                tag.td(ev['action_name']),
                tag.td(ev['value']),
                tag.td(ev['fullname']),
                tag.td(ev['time']),
                tag.td(ev['summary'])
            ) for evcs in evc.values() for ev in evcs ]
            return tag.div(
                tag.table(tag.thead(
                    tag.tr(
                        tag.th('Action'),
                        tag.th('Value'),
                        tag.th('User'),
                        tag.th('Date'),
                        tag.th('Summary'), class_='trac-columns')
                ),
                tag.tbody(
                    *rows
                ), class_='listing tickets')
            )

        return None
Exemplo n.º 51
0
    def expand_macro(self, formatter, name, content):
        from trac.config import ConfigSection, Option
        section_filter = key_filter = ''
        args, kw = parse_args(content)
        if args:
            section_filter = args.pop(0).strip()
        if args:
            key_filter = args.pop(0).strip()

        def getdoc(option_or_section):
            doc = to_unicode(option_or_section.__doc__)
            if doc:
                doc = dgettext(option_or_section.doc_domain, doc)
            return doc

        registry = ConfigSection.get_registry(self.compmgr)
        sections = dict((name, getdoc(section))
                        for name, section in registry.iteritems()
                        if name.startswith(section_filter))

        registry = Option.get_registry(self.compmgr)
        options = {}
        for (section, key), option in registry.iteritems():
            if section.startswith(section_filter):
                options.setdefault(section, {})[key] = option
                sections.setdefault(section, '')

        def default_cell(option):
            default = option.default
            if default is not None and default != '':
                return tag.td(tag.code(option.dumps(default)),
                              class_='default')
            else:
                return tag.td(_("(no default)"), class_='nodefault')

        return tag.div(class_='tracini')(
            (tag.h3(tag.code('[%s]' % section), id='%s-section' % section),
             format_to_html(self.env, formatter.context, section_doc),
             tag.table(class_='wiki')(tag.tbody(
                 tag.tr(tag.td(tag.code(option.name)),
                        tag.td(
                            format_to_oneliner(self.env, formatter.context,
                                               getdoc(option))),
                        default_cell(option),
                        class_='odd' if idx % 2 else 'even')
                 for idx, option in enumerate(
                     sorted(options.get(section, {}).itervalues(),
                            key=lambda o: o.name))
                 if option.name.startswith(key_filter))))
            for section, section_doc in sorted(sections.iteritems()))
Exemplo n.º 52
0
 def options_table(section, options):
     if options:
         return tag.table(class_='wiki')(
             tag.tbody(
                 tag.tr(
                     tag.td(tag.a(tag.code(option.name),
                                  class_='tracini-option',
                                  href='#%s-%s-option' %
                                       (section, option.name))),
                     tag.td(format_to_html(self.env, formatter.context,
                                           option.doc)),
                     default_cell(option),
                     id='%s-%s-option' % (section, option.name),
                     class_='odd' if idx % 2 else 'even')
              for idx, option in enumerate(options)))