| #!/usr/bin/env python |
| # -*- coding: UTF-8 -*- |
| |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| r"""Bloodhound Macros""" |
| |
| from genshi.builder import tag |
| from trac.util.translation import _, cleandoc_ |
| from trac.wiki.api import WikiSystem |
| from trac.wiki.macros import WikiMacroBase |
| |
| from bhdashboard.admin import GUIDE_NAME |
| |
| class UserGuideTocMacro(WikiMacroBase): |
| _description = cleandoc_("""Display a Guide table of contents |
| |
| This macro provides the table-of-contents specific to the user Guide |
| """ |
| ) |
| TOC = [('%(guide)s/Index', 'Index'), |
| ('%(guide)s/Install', 'Installation'), |
| ('%(guide)s/InterfaceCustomization', 'Customization'), |
| ('%(guide)s/Plugins', 'Plugins'), |
| ('%(guide)s/Upgrade', 'Upgrading'), |
| ('%(guide)s/Ini', 'Configuration'), |
| ('%(guide)s/Admin', 'Administration'), |
| ('%(guide)s/Backup', 'Backup'), |
| ('%(guide)s/Logging', 'Logging'), |
| ('%(guide)s/Permissions' , 'Permissions'), |
| ('%(guide)s/Wiki', 'The Wiki'), |
| ('WikiFormatting', 'Wiki Formatting'), |
| ('%(guide)s/Timeline', 'Timeline'), |
| ('%(guide)s/Browser', 'Repository Browser'), |
| ('%(guide)s/RevisionLog', 'Revision Log'), |
| ('%(guide)s/Changeset', 'Changesets'), |
| ('%(guide)s/Tickets', 'Tickets'), |
| ('%(guide)s/Workflow', 'Workflow'), |
| ('%(guide)s/Roadmap', 'Roadmap'), |
| ('%(guide)s/Query', 'Ticket Queries'), |
| ('%(guide)s/BatchModify', 'Batch Modify'), |
| ('%(guide)s/Reports', 'Reports'), |
| ('%(guide)s/Rss', 'RSS Support'), |
| ('%(guide)s/Notification', 'Notification'), |
| ] |
| |
| 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') |