Example #1
0
 def _format_tagged(self, formatter, target, label):
     if label:
         href = formatter.context.href
         url = get_resource_url(self.env, Resource('tag', target), href)
         return tag.a(label, href=url)
     return render_resource_link(self.env, formatter.context,
                                 Resource('tag', target))
Example #2
0
 def test_resource_missing_summary_format(self):
     res = resource.Resource('fake', 'missing', version=1)
     link = resource.render_resource_link(self.env, self.context,
                                          res, 'summary')
     html = tag.a('fake:missing at version 1', class_='fake missing',
                  rel='nofollow', href='/trac.cgi/fake/missing?version=1')
     self.assertEqual(unicode(html), unicode(link))
Example #3
0
    def _format_tagged(self, formatter, ns, target, label, fullmatch=None):
        """Tag and tag query expression link formatter."""

        def unquote(text):
            """Strip all matching pairs of outer quotes from string."""
            while re.match(WikiParser.QUOTED_STRING, text):
                # Remove outer whitespace after stripped quotation too.
                text = text[1:-1].strip()
            return text
 
        label = label and unquote(label.strip()) or ''
        target = unquote(target.strip())
        tag_res = Resource('tag', target)
        if 'TAGS_VIEW' in formatter.perm(tag_res):
            context = formatter.context
            href = get_resource_url(self.env, tag_res, context.href)
            tag_sys = TagSystem(self.env)
            # Tag exists or tags query yields at least one match.
            if target in tag_sys.get_all_tags(formatter.req) or \
                    [(res, tags) for res, tags in
                     tag_sys.query(formatter.req, target)]:
                if label:
                    return tag.a(label, href=href)
                return render_resource_link(self.env, context, tag_res)
            else:
                return tag.a(label+'?', href=href, class_='missing tags',
                             rel='nofollow')
        else:
            return tag.span(label, class_='forbidden tags',
                            title=_("no permission to view tags"))
Example #4
0
 def _format_tagged(self, formatter, target, label):
     if label:
         href = formatter.context.href
         url = get_resource_url(self.env, Resource('tag', target), href)
         return tag.a(label, href=url)
     return render_resource_link(self.env, formatter.context,
                                 Resource('tag', target))
Example #5
0
 def test_resource_exists_default_format(self):
     res = resource.Resource('fake', 'exists', version=1)
     link = resource.render_resource_link(self.env, self.context, res)
     html = tag.a('fake:exists',
                  class_='fake',
                  href='/trac.cgi/fake/exists?version=1')
     self.assertEqual(unicode(html), unicode(link))
Example #6
0
 def test_resource_has_no_manager_default_format(self):
     res = resource.Resource('unmanaged', 'exists', version=1)
     link = resource.render_resource_link(self.env, self.context, res)
     html = tag.a('unmanaged:exists',
                  class_='unmanaged',
                  href='/trac.cgi/unmanaged/exists?version=1')
     self.assertEqual(unicode(html), unicode(link))
Example #7
0
 def test_resource_exists_summary_format(self):
     res = resource.Resource('fake', 'exists', version=1)
     link = resource.render_resource_link(self.env, self.context,
                                          res, 'summary')
     html = tag.a('fake:exists at version 1', class_='fake',
                  href='/trac.cgi/fake/exists?version=1')
     self.assertEqual(unicode(html), unicode(link))
Example #8
0
 def test_resource_missing_default_format(self):
     res = resource.Resource('fake', 'missing', version=1)
     link = resource.render_resource_link(self.env, self.context, res)
     html = tag.a('fake:missing',
                  class_='fake missing',
                  rel='nofollow',
                  href='/trac.cgi/fake/missing?version=1')
     self.assertEqual(unicode(html), unicode(link))
Example #9
0
 def test_resource_exists_summary_format(self):
     res = resource.Resource('fake', 'exists', version=1)
     link = resource.render_resource_link(self.env, self.context, res,
                                          'summary')
     html = tag.a('fake:exists at version 1',
                  class_='fake',
                  href='/trac.cgi/fake/exists?version=1')
     self.assertEqual(str(html), str(link))
Example #10
0
 def test_resource_has_no_manager_summary_format(self):
     res = resource.Resource('unmanaged', 'exists', version=1)
     link = resource.render_resource_link(self.env, self.context, res,
                                          'summary')
     html = tag.a('unmanaged:exists at version 1',
                  class_='unmanaged',
                  href='/trac.cgi/unmanaged/exists?version=1')
     self.assertEqual(str(html), str(link))
Example #11
0
 def test_resource_missing_summary_format(self):
     res = resource.Resource('fake', 'missing', version=1)
     link = resource.render_resource_link(self.env, self.context, res,
                                          'summary')
     html = tag.a('fake:missing at version 1',
                  class_='fake missing',
                  rel='nofollow',
                  href='/trac.cgi/fake/missing?version=1')
     self.assertEqual(str(html), str(link))
Example #12
0
 def test_resource_link_ticket_context_milestone_missing(self):
     """Resource link in ticket context for non-existent milestone.
     """
     req = MockRequest(self.env, path_info='/ticket/1', authname='user1')
     resource = Resource('milestone', 'milestone1')
     context = web_context(req)
     link = render_resource_link(self.env, context, resource,
                                 format='compact')
     self.assertEqual('<a class="milestone missing">milestone1</a>',
                      unicode(link))
Example #13
0
 def test_resource_link_ticket_context_milestone_no_view_perm(self):
     """Resource link in ticket context with no milestone view permission.
     """
     milestone = Milestone(self.env)
     milestone.name = 'milestone1'
     milestone.insert()
     req = MockRequest(self.env, path_info='/ticket/1', authname='user1')
     resource = Resource('milestone', 'milestone1')
     context = web_context(req)
     link = render_resource_link(self.env, context, resource,
                                 format='compact')
     self.assertEqual('<a class="milestone">milestone1</a>',
                      unicode(link))
Example #14
0
 def test_resource_link_ticket_context_milestone_exists(self):
     """Resource link in ticket context for viewable milestone.
     """
     milestone = Milestone(self.env)
     milestone.name = 'milestone1'
     milestone.insert()
     req = MockRequest(self.env, path_info='/ticket/1')
     resource = Resource('milestone', 'milestone1')
     context = web_context(req)
     link = render_resource_link(self.env, context, resource,
                                 format='compact')
     self.assertEqual('<a class="milestone" href="/trac.cgi/milestone/'
                      'milestone1" title="No date set">milestone1</a>',
                      unicode(link))
Example #15
0
 def _link(resource):
     if resource.realm == 'tag':
         # Keep realm selection in tag links.
         return builder.a(resource.id,
                          href=self.get_href(req, tag=resource))
     elif resource.realm == 'ticket':
         # Return resource link including ticket status dependend
         #   class to allow for common Trac ticket link style.
         ticket = Ticket(env, resource.id)
         return builder.a('#%s' % ticket.id,
                          class_=ticket['status'],
                          href=formatter.href.ticket(ticket.id),
                          title=shorten_line(ticket['summary']))
     return render_resource_link(env, context, resource, 'compact')
Example #16
0
 def _link(resource):
     if resource.realm == 'tag':
         # Keep realm selection in tag links.
         return builder.a(resource.id,
                          href=self.get_href(req, tag=resource))
     elif resource.realm == 'ticket':
         # Return resource link including ticket status dependend
         #   class to allow for common Trac ticket link style.
         ticket = Ticket(env, resource.id)
         return builder.a('#%s' % ticket.id,
                          class_=ticket['status'],
                          href=formatter.href.ticket(ticket.id),
                          title=shorten_line(ticket['summary']))
     return render_resource_link(env, context, resource, 'compact')
Example #17
0
    def _wiki_view(self, req, stream):
        tags = self._page_tags(req)
        if not tags:
            return stream
        tag_system = TagSystem(self.env)
        add_stylesheet(req, 'tags/css/tractags.css')
        li = []
        for tag_ in tags:
            resource = Resource('tag', tag_)
            anchor = render_resource_link(self.env,
                Context.from_request(req, resource), resource)
            li.append(tag.li(anchor, ' '))

        insert = tag.ul(class_='tags')(tag.li('Tags', class_='header'), li)
        return stream | Transformer('//div[@class="buttons"]').before(insert)
Example #18
0
    def _wiki_view(self, req, stream):
        tags = self._page_tags(req)
        if not tags:
            return stream
        tag_system = TagSystem(self.env)
        add_stylesheet(req, 'tags/css/tractags.css')
        li = []
        for tag_ in tags:
            resource = Resource('tag', tag_)
            anchor = render_resource_link(self.env,
                                          Context.from_request(req, resource),
                                          resource)
            li.append(tag.li(anchor, ' '))

        insert = tag.ul(class_='tags')(tag.li('Tags', class_='header'), li)
        return stream | Transformer('//div[@class="buttons"]').before(insert)
Example #19
0
    def _wiki_view(self, req, stream):
        add_stylesheet(req, 'tags/css/tractags.css')
        tags = self._page_tags(req)
        if not tags:
            return stream
        li = []
        for tag_ in tags:
            resource = Resource('tag', tag_)
            anchor = render_resource_link(self.env, web_context(req, resource),
                                          resource)
            anchor = anchor(rel='tag')
            li.append(tag.li(anchor, ' '))

        # TRANSLATOR: Header label text for tag list at wiki page bottom.
        insert = tag.ul(class_='tags')(tag.li(_("Tags"), class_='header'), li)
        return stream | (
            Transformer('//div[contains(@class,"wikipage")]').after(insert))
Example #20
0
    def _wiki_view(self, req, stream):
        add_stylesheet(req, 'tags/css/tractags.css')
        tags = self._page_tags(req)
        if not tags:
            return stream
        li = []
        for tag_ in tags:
            resource = Resource('tag', tag_)
            anchor = render_resource_link(self.env,
                Context.from_request(req, resource), resource)
            anchor = anchor(rel='tag')
            li.append(tag.li(anchor, ' '))

        # TRANSLATOR: Header label text for tag list at wiki page bottom.
        insert = tag.ul(class_='tags')(tag.li(_("Tags"), class_='header'), li)
        return stream | (Transformer('//div[contains(@class,"wikipage")]')
                         .after(insert))
Example #21
0
 def _format_tagged(self, formatter, target, label):
     RE = re.compile(r'^(\\[\'"]*\'|\\[\'"]*\"|"|\')(.*)(\1)')
     iter_max = 5
     iter_run = 0
     for iter_run in range(0, iter_max):
         # Reduce outer quotations.
         ctarget = RE.sub(r'\2', target)
         iter_run += 1
         if ctarget == target or iter_run > iter_max:
             self.env.log.debug(' ,'.join([target, ctarget, str(iter_run)]))
             break
         target = ctarget
     if label:
         href = formatter.context.href
         url = get_resource_url(self.env, Resource('tag', target), href)
         return tag.a(label, href=url)
     return render_resource_link(self.env, formatter.context,
                                 Resource('tag', target))
Example #22
0
 def _format_tagged(self, formatter, target, label):
     RE = re.compile(r'^(\\[\'"]*\'|\\[\'"]*\"|"|\')(.*)(\1)')
     iter_max = 5
     iter_run = 0
     for iter_run in range(0, iter_max):
         # Reduce outer quotations.
         ctarget = RE.sub(r'\2', target)
         iter_run += 1
         if ctarget == target or iter_run > iter_max:
             self.env.log.debug(' ,'.join([target, ctarget, str(iter_run)]))
             break
         target = ctarget
     if label:
         href = formatter.context.href
         url = get_resource_url(self.env, Resource('tag', target), href)
         return tag.a(label, href=url)
     return render_resource_link(self.env, formatter.context,
                                 Resource('tag', target))
Example #23
0
    def _format_tagged(self, formatter, ns, target, label, fullmatch=None):
        """Tag and tag query expression link formatter."""
        def unquote(text):
            """Strip all matching pairs of outer quotes from string."""
            while re.match(WikiParser.QUOTED_STRING, text):
                # Remove outer whitespace after stripped quotation too.
                text = text[1:-1].strip()
            return text

        label = label and unquote(label.strip()) or ''
        target = unquote(target.strip())

        query = target
        # Pop realms from query expression.
        all_realms = self.tag_system.get_taggable_realms(formatter.perm)
        realms = query_realms(target, all_realms)
        if realms:
            kwargs = dict((realm, 'on') for realm in realms)
            target = re.sub('(^|\W)realm:\S+(\W|$)', ' ', target).strip()
        else:
            kwargs = {}

        tag_res = Resource('tag', target)
        if 'TAGS_VIEW' not in formatter.perm(tag_res):
            return tag.span(label,
                            class_='forbidden tags',
                            title=_("no permission to view tags"))

        context = formatter.context
        href = self.tag_system.get_resource_url(tag_res, context.href, kwargs)
        if all_realms and (target in self.tag_system.get_all_tags(
                formatter.req) or not iter_is_empty(
                    self.tag_system.query(formatter.req, query))):
            # At least one tag provider is available and tag exists or
            # tags query yields at least one match.
            if label:
                return tag.a(label, href=href)
            return render_resource_link(self.env, context, tag_res)

        return tag.a(label + '?',
                     href=href,
                     class_='missing tags',
                     rel='nofollow')
Example #24
0
    def _format_tagged(self, formatter, ns, target, label, fullmatch=None):
        """Tag and tag query expression link formatter."""

        def unquote(text):
            """Strip all matching pairs of outer quotes from string."""
            while re.match(WikiParser.QUOTED_STRING, text):
                # Remove outer whitespace after stripped quotation too.
                text = text[1:-1].strip()
            return text

        label = label and unquote(label.strip()) or ''
        target = unquote(target.strip())

        query = target
        # Pop realms from query expression.
        all_realms = self.tag_system.get_taggable_realms(formatter.perm)
        realms = query_realms(target, all_realms)
        if realms:
            kwargs = dict((realm, 'on') for realm in realms)
            target = re.sub('(^|\W)realm:\S+(\W|$)', ' ', target).strip()
        else:
            kwargs = {}

        tag_res = Resource('tag', target)
        if 'TAGS_VIEW' not in formatter.perm(tag_res):
            return tag.span(label, class_='forbidden tags',
                            title=_("no permission to view tags"))

        context = formatter.context
        href = self.tag_system.get_resource_url(tag_res, context.href, kwargs)
        if all_realms and (
                target in self.tag_system.get_all_tags(formatter.req) or
                not iter_is_empty(self.tag_system.query(formatter.req,
                                                        query))):
            # At least one tag provider is available and tag exists or
            # tags query yields at least one match.
            if label:
                return tag.a(label, href=href)
            return render_resource_link(self.env, context, tag_res)

        return tag.a(label+'?', href=href, class_='missing tags',
                     rel='nofollow')
Example #25
0
    def _post_process_request_wiki_view(self, req):
        add_stylesheet(req, 'tags/css/tractags.css')
        tags = self._page_tags(req)
        if not tags:
            return
        li = []
        for t in tags:
            resource = Resource('tag', t)
            anchor = render_resource_link(self.env, web_context(req, resource),
                                          resource)
            anchor = anchor(rel='tag')
            li.append(tag.li(anchor, ' '))

        # TRANSLATOR: Header label text for tag list at wiki page bottom.
        insert = tag.ul(class_='tags')(tag.li(_("Tags"), class_='header'), li)

        filter_lst = []
        # xpath = //div[contains(@class,"wikipage")]
        xform = JTransformer('div[class*=wikipage]')
        filter_lst.append(xform.after(Markup(insert)))

        self._add_jtransform(req, filter_lst)
        return
Example #26
0
 def test_resource_has_no_manager_default_format(self):
     res = resource.Resource('unmanaged', 'exists', version=1)
     link = resource.render_resource_link(self.env, self.context, res)
     html = tag.a('unmanaged:exists', class_='unmanaged',
                  href='/trac.cgi/unmanaged/exists?version=1')
     self.assertEqual(unicode(html), unicode(link))
Example #27
0
 def link(resource):
     return render_resource_link(self.env, formatter.context,
                                 resource, 'compact')