-
Notifications
You must be signed in to change notification settings - Fork 594
/
issues.py
65 lines (49 loc) · 1.95 KB
/
issues.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from docutils import nodes
from docutils.parsers.rst import Directive
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
class issues(nodes.General, nodes.Element):
pass
class IssuesDirective(Directive):
has_content = True
required_arguments = 1
optional_arguments = 0
final_argument_whitespace = False
def run(self):
env = self.state.document.settings.env
base_url = env.config.issues_base_url
return [issues(label=self.arguments[0], base_url=base_url)]
def html_visit_issues_node(self, node):
if self.builder.name == 'epub':
raise nodes.SkipNode
label = node['label']
base_url = node['base_url']
aname = ''
if node.parent.hasattr('ids') and node.parent['ids']:
aname = node.parent['ids'][0]
target = self.builder.get_target_uri(self.builder.current_docname)
back_link = 'back-link: %s#%s' % (target, aname)
query = urlencode({'labels': label, 'body': back_link})
create_url = '%s/new?%s' % (base_url, query)
view_url = '%s?labels=%s&page=1&state=open' % (base_url, label)
self.body.append('<p><div class="btn-group" role="group">')
self.body.append('<a class="btn btn-link btn-xs" href="%s"><i class="glyphicon glyphicon-plus"></i> Issue</a>' % create_url)
self.body.append('<a class="btn btn-link btn-xs" href="%s"><i class="glyphicon glyphicon-search"></i> Issues</a>' % view_url)
self.body.append('</div></p>')
def html_depart_issues_node(self, node):
pass
def latex_visit_issues_node(self, node):
raise nodes.SkipNode
def epub_visit_issues_node(self, node):
raise nodes.SkipNode
def setup(app):
app.add_node(
issues,
html=(html_visit_issues_node, html_depart_issues_node),
latex=(latex_visit_issues_node, None),
epub=(epub_visit_issues_node, None)
)
app.add_config_value('issues_base_url', None, 'env')
app.add_directive("issues", IssuesDirective)