Exemplo n.º 1
0
class extendedcamelcase(Component):

    implements(IWikiSyntaxProvider)

    def __init__(self):
        self.wikisys = WikiSystem(self.env)

    # IWikiSyntaxProvider methods
    def get_wiki_syntax(self):
        # copied and modified from trac/wiki/api.py
        from trac.wiki.formatter import Formatter
        def wikipagename_link(formatter, match, fullmatch):
            return self._format_link(formatter, 'wiki', match, match)
        yield (r"(?P<name>\b([A-Z]+[a-z0-9]*)+[A-Z]+[a-z0-9]+\b)" , wikipagename_link)


    def get_link_resolvers(self):
        return []

    def _format_link(self, formatter, ns, page, label):
        # copied and modified from trac/wiki/api.py
        page, query, fragment = formatter.split_link(page)
        link = False
        if self.wikisys.has_page(page):
            link = True
        elif page[-1] == 's' and self.wikisys.has_page(page[:-1]):
            # if the page name ends in 's', see if there is a wiki page with the same name minus the 's'
            # if there is, it will be linked
            page = page[:-1]
            link = True
        href = formatter.href.wiki(page)+fragment
        if link:
            return html.A(label, href=href, class_='wiki')
        else:
            return html.A(label+'?', href=href, class_='missing wiki', rel='nofollow')
Exemplo n.º 2
0
    def expand_macro(self, formatter, name, args):
        curpage = formatter.resource.id

        # scoped TOC (e.g. TranslateRu/Guide or 0.X/Guide ...)
        prefix = ''
        guideprefix = GUIDE_NAME + '/'
        data = {
            'guide': GUIDE_NAME,
        }
        idx = curpage.find('/')
        if idx > 0:
            prefix = curpage[:idx + 1]
        if prefix.endswith(guideprefix):
            prefix = prefix[:len(prefix) - len(guideprefix)]
        ws = WikiSystem(self.env)
        return tag.div(
            tag.h4(_('Table of Contents')),
            tag.ul([
                tag.li(tag.a(title,
                             href=formatter.href.wiki(prefix + ref % data),
                             class_=(not ws.has_page(prefix + ref % data)
                                     and 'missing')),
                       class_=(prefix + ref % data == curpage and 'active'))
                for ref, title in self.TOC
            ]),
            class_='wiki-toc')
Exemplo n.º 3
0
    def load_conf(self):
        self.styles = {}
        self.template_filename = None

        wiki_system = WikiSystem(self.env)
        if not wiki_system.has_page('PageToOdtStyles'):
            raise Exception, 'Please create a PageToOdtStyles wiki page.'
        db = self.env.get_db_cnx()
        cursor = db.cursor()
        cursor.execute(
            "SELECT text FROM wiki WHERE name = 'PageToOdtStyles' ORDER BY version DESC LIMIT 1"
        )
        for (text, ) in cursor:
            page_content = text
            break

        for line in page_content.strip().splitlines():
            if line.find('=') != -1:
                name, value = [token.strip() for token in line.split("=", 2)]
                if name.startswith('style_'):
                    self.styles[name[6:]] = value
                elif name == 'template':
                    self.template_filename = os.path.join(
                        self.env.path, 'attachments', 'wiki',
                        'PageToOdtStyles', value)
Exemplo n.º 4
0
class AutoLinksModule(Component):

    implements(IWikiSyntaxProvider)

    def __init__(self):
        self.wikisys = WikiSystem(self.env)
    
    # IWikiSyntaxProvider methods
    def get_wiki_syntax(self):
        # copied and modified from trac/wiki/api.py
        from trac.wiki.formatter import Formatter
        wiki_page_name = (
            r"(([A-Z]+[a-z]{2,})|([A-Z]{3,}s?))"
            r"(?:#[\w:](?<!\d)(?:[\w:.-]*[\w-])?)?" # optional fragment id
            r"(?=:(?:\Z|\s)|[^:a-zA-Z]|\s|\Z)" # what should follow it
            )
        
        def wikipagename_link(formatter, match, fullmatch):
            return self._format_link(formatter, 'wiki', match, match)
        
        yield (r"!?(?<![/\-])\b" + wiki_page_name, wikipagename_link)

        
    def get_link_resolvers(self):
        return []

    def _format_link(self, formatter, ns, page, label):
        # copied and modified from trac/wiki/api.py
        page, query, fragment = formatter.split_link(page)
        link = False
        if self.wikisys.has_page(page):
            link = True
        elif page[-1] == 's' and self.wikisys.has_page(page[:-1]):
            # if the page name ends in 's', see if there is a wiki page with the same name minus the 's'
            # if there is, it will be linked
            page = page[:-1]
            link = True

        if link:
            href = formatter.href.wiki(page) + fragment
            return html.A(label, href=href, class_='wiki')
        else:
            return label
Exemplo n.º 5
0
    def expand_macro(self, formatter, name, content):
        curpage = formatter.resource.id

        # scoped TOC (e.g. TranslateRu/TracGuide or 0.11/TracGuide ...)
        prefix = ''
        idx = curpage.find('/')
        if idx > 0:
            prefix = curpage[:idx+1]

        ws = WikiSystem(self.env)
        return tag.div(
            tag.h4(_('Table of Contents')),
            tag.ul([tag.li(tag.a(title, href=formatter.href.wiki(prefix+ref),
                                 class_=(not ws.has_page(prefix+ref) and
                                         'missing')),
                           class_=(prefix+ref == curpage and 'active'))
                    for ref, title in self.TOC]),
            class_='wiki-toc')
Exemplo n.º 6
0
    def expand_macro(self, formatter, name, content):
        curpage = formatter.resource.id

        # scoped TOC (e.g. TranslateRu/TracGuide or 0.11/TracGuide ...)
        prefix = ''
        idx = curpage.find('/')
        if idx > 0:
            prefix = curpage[:idx+1]

        ws = WikiSystem(self.env)
        return tag.div(
            tag.h4(_('Table of Contents')),
            tag.ul([tag.li(tag.a(title, href=formatter.href.wiki(prefix+ref),
                                 class_=(not ws.has_page(prefix+ref) and
                                         'missing')),
                           class_=(prefix+ref == curpage and 'active'))
                    for ref, title in self.TOC]),
            class_='wiki-toc')
Exemplo n.º 7
0
    def expand_macro(self, formatter, name, args):
        curpage = formatter.resource.id

        # scoped TOC (e.g. TranslateRu/Guide or 0.X/Guide ...)
        prefix = ''
        guideprefix =  GUIDE_NAME + '/'
        data = {'guide': GUIDE_NAME,}
        idx = curpage.find('/')
        if idx > 0:
            prefix = curpage[:idx+1]
        if prefix.endswith(guideprefix):
            prefix = prefix[:len(prefix)-len(guideprefix)]
        ws = WikiSystem(self.env)
        return tag.div(
            tag.h4(_('Table of Contents')),
            tag.ul([tag.li(tag.a(title,
                                 href=formatter.href.wiki(prefix+ref % data),
                                 class_=(not ws.has_page(prefix+ref % data) and
                                         'missing')),
                           class_=(prefix+ref % data== curpage and 'active'))
                    for ref, title in self.TOC]),
            class_='wiki-toc')
Exemplo n.º 8
0
    def load_conf(self):
        self.styles = {}
        self.template_filename = None

        wiki_system = WikiSystem(self.env)
        if not wiki_system.has_page('PageToOdtStyles'):
            raise Exception, 'Please create a PageToOdtStyles wiki page.'
        db = self.env.get_db_cnx()
        cursor = db.cursor()
        cursor.execute("SELECT text FROM wiki WHERE name = 'PageToOdtStyles' ORDER BY version DESC LIMIT 1")
        for (text,) in cursor:
            page_content = text
            break
        
        for line in page_content.strip().splitlines():
            if line.find('=') != -1:
                name, value = [token.strip()
                    for token in line.split("=", 2)]
                if name.startswith('style_'):
                    self.styles[ name[6:] ] = value
                elif name == 'template':
                    self.template_filename = os.path.join(
                        self.env.path, 'attachments', 'wiki',
                        'PageToOdtStyles', value)
Exemplo n.º 9
0
    def _render_view(self, req, page):
        version = page.resource.version

        # Add registered converters
        if page.exists:
            for conversion in Mimeview(self.env) \
                              .get_supported_conversions('text/x-trac-wiki'):
                conversion_href = req.href.wiki(page.name, version=version,
                                                format=conversion.key)
                add_link(req, 'alternate', conversion_href, conversion.name,
                         conversion.in_mimetype)

        data = self._page_data(req, page)
        if page.name == self.START_PAGE:
            data['title'] = ''

        ws = WikiSystem(self.env)
        context = web_context(req, page.resource)
        higher, related = [], []
        if not page.exists:
            if 'WIKI_CREATE' not in req.perm(page.resource):
                raise ResourceNotFound(_("Page %(name)s not found",
                                         name=page.name))
            formatter = OneLinerFormatter(self.env, context)
            if '/' in page.name:
                parts = page.name.split('/')
                for i in xrange(len(parts) - 2, -1, -1):
                    name = '/'.join(parts[:i] + [parts[-1]])
                    if not ws.has_page(name):
                        higher.append(ws._format_link(formatter, 'wiki',
                                                      '/' + name, name, False))
            else:
                name = page.name
            name = name.lower()
            related = [each for each in ws.pages
                       if name in each.lower()
                          and 'WIKI_VIEW' in req.perm(self.realm, each)]
            related.sort()
            related = [ws._format_link(formatter, 'wiki', '/' + each, each,
                                       False)
                       for each in related]

        latest_page = WikiPage(self.env, page.name)

        prev_version = next_version = None
        if version:
            version = as_int(version, None)
            if version is not None:
                for hist in latest_page.get_history():
                    v = hist[0]
                    if v != version:
                        if v < version:
                            if not prev_version:
                                prev_version = v
                                break
                        else:
                            next_version = v

        prefix = self.PAGE_TEMPLATES_PREFIX
        templates = [template[len(prefix):]
                     for template in ws.get_pages(prefix)
                     if 'WIKI_VIEW' in req.perm(self.realm, template)]

        # -- prev/up/next links
        if prev_version:
            add_link(req, 'prev',
                     req.href.wiki(page.name, version=prev_version),
                     _("Version %(num)s", num=prev_version))

        parent = None
        if version:
            add_link(req, 'up', req.href.wiki(page.name, version=None),
                     _("View latest version"))
        elif '/' in page.name:
            parent = page.name[:page.name.rindex('/')]
            add_link(req, 'up', req.href.wiki(parent, version=None),
                     _("View parent page"))

        if next_version:
            add_link(req, 'next',
                     req.href.wiki(page.name, version=next_version),
                     _('Version %(num)s', num=next_version))

        # Add ctxtnav entries
        if version:
            prevnext_nav(req, _("Previous Version"), _("Next Version"),
                         _("View Latest Version"))
        else:
            if parent:
                add_ctxtnav(req, _('Up'), req.href.wiki(parent))
            self._wiki_ctxtnav(req, page)

        # Plugin content validation
        fields = {'text': page.text}
        for manipulator in self.page_manipulators:
            manipulator.prepare_wiki_page(req, page, fields)
        text = fields.get('text', '')

        data.update({
            'context': context,
            'text': text,
            'latest_version': latest_page.version,
            'attachments': AttachmentModule(self.env).attachment_data(context),
            'start_page': self.START_PAGE,
            'default_template': self.DEFAULT_PAGE_TEMPLATE,
            'templates': templates,
            'version': version,
            'higher': higher, 'related': related,
            'resourcepath_template': 'wiki_page_path.html',
            'fullwidth': req.session.get('wiki_fullwidth'),
        })
        add_script(req, 'common/js/wiki.js')
        return 'wiki_view.html', data
Exemplo n.º 10
0
    def _render_view(self, req, page):
        version = page.resource.version

        # Add registered converters
        if page.exists:
            for conversion in Mimeview(self.env).get_supported_conversions(
                                                 'text/x-trac-wiki'):
                conversion_href = req.href.wiki(page.name, version=version,
                                                format=conversion[0])
                # or...
                conversion_href = get_resource_url(self.env, page.resource,
                                                req.href, format=conversion[0])
                add_link(req, 'alternate', conversion_href, conversion[1],
                         conversion[3])

        data = self._page_data(req, page)
        if page.name == 'WikiStart':
            data['title'] = ''

        ws = WikiSystem(self.env)
        context = web_context(req, page.resource)
        higher, related = [], []
        if not page.exists:
            if 'WIKI_CREATE' not in req.perm(page.resource):
                raise ResourceNotFound(_('Page %(name)s not found',
                                         name=page.name))
            formatter = OneLinerFormatter(self.env, context)
            if '/' in page.name:
                parts = page.name.split('/')
                for i in range(len(parts) - 2, -1, -1):
                    name = '/'.join(parts[:i] + [parts[-1]])
                    if not ws.has_page(name):
                        higher.append(ws._format_link(formatter, 'wiki',
                                                    '/' + name, name, False))
            else:
                name = page.name
            name = name.lower()
            related = [each for each in ws.pages
                       if name in each.lower()
                          and 'WIKI_VIEW' in req.perm('wiki', each)]
            related.sort()
            related = [ws._format_link(formatter, 'wiki', '/' + each, each,
                                       False)
                       for each in related]

        latest_page = WikiPage(self.env, page.name, version=None)
        req.perm(latest_page.resource).require('WIKI_VIEW')

        prev_version = next_version = None
        if version:
            try:
                version = int(version)
                for hist in latest_page.get_history():
                    v = hist[0]
                    if v != version:
                        if v < version:
                            if not prev_version:
                                prev_version = v
                                break
                        else:
                            next_version = v
            except ValueError:
                version = None

        prefix = self.PAGE_TEMPLATES_PREFIX
        templates = [template[len(prefix):]
                     for template in ws.get_pages(prefix)
                     if 'WIKI_VIEW' in req.perm('wiki', template)]

        # -- prev/up/next links
        if prev_version:
            add_link(req, 'prev',
                     req.href.wiki(page.name, version=prev_version),
                     _('Version %(num)s', num=prev_version))

        parent = None
        if version:
            add_link(req, 'up', req.href.wiki(page.name, version=None),
                     _('View latest version'))
        elif '/' in page.name:
            parent = page.name[:page.name.rindex('/')]
            add_link(req, 'up', req.href.wiki(parent, version=None),
                     _("View parent page"))

        if next_version:
            add_link(req, 'next',
                     req.href.wiki(page.name, version=next_version),
                     _('Version %(num)s', num=next_version))

        # Add ctxtnav entries
        if version:
            prevnext_nav(req, _('Previous Version'), _('Next Version'),
                         _('View Latest Version'))
        else:
            if parent:
                add_ctxtnav(req, _('Up'), req.href.wiki(parent))
            self._wiki_ctxtnav(req, page)

        # Plugin content validation
        fields = {'text': page.text}
        for manipulator in self.page_manipulators:
            manipulator.prepare_wiki_page(req, page, fields)
        text = fields.get('text', '')

        data.update({
            'context': context,
            'text': text,
            'latest_version': latest_page.version,
            'attachments': AttachmentModule(self.env).attachment_data(context),
            'default_template': self.DEFAULT_PAGE_TEMPLATE,
            'templates': templates,
            'version': version,
            'higher': higher, 'related': related,
            'resourcepath_template': 'wiki_page_path.html',
        })
        add_script(req, 'common/js/folding.js')
        return 'wiki_view.html', data, None