Skip to content

Commit 755799c

Browse files
authored
Merge pull request #841 from sphinx-contrib/explicit-confluence-params-access-on-nodes
explicit confluence-parameters fetch for confluence nodes
2 parents 9fb5e43 + 88d9005 commit 755799c

File tree

2 files changed

+40
-18
lines changed

2 files changed

+40
-18
lines changed

sphinxcontrib/confluencebuilder/nodes.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
from docutils import nodes
55

66

7+
# name for this extension's custom node parameters
8+
CONFLUENCE_PARAMS_KEY = 'confluence-params'
9+
10+
711
class ConfluenceParams(nodes.Element):
812
"""
913
confluence parameter-holding node
@@ -22,7 +26,7 @@ class ConfluenceParams(nodes.Element):
2226
"""
2327
def __init__(self, rawsource='', *children, **attributes):
2428
nodes.Element.__init__(self, rawsource, *children, **attributes)
25-
self.params = self.attributes.setdefault('confluence-params', {})
29+
self.params = self.attributes.setdefault(CONFLUENCE_PARAMS_KEY, {})
2630

2731

2832
class confluence_doc_card(nodes.Structural, ConfluenceParams):
@@ -217,3 +221,20 @@ class jira_issue(nodes.Inline, ConfluenceParams):
217221
Defines a "JIRA" node to represent a Confluence JIRA macro configured to
218222
display a single JIRA issue.
219223
"""
224+
225+
226+
def confluence_parameters_fetch(node):
227+
"""
228+
fetch confluence parameters tracked on a node
229+
230+
This call will look at the node's attributes and extract the
231+
Confluence-specific parameters (dictionary) from the instance.
232+
233+
Args:
234+
node: the node holding Confluence-specific parameters
235+
236+
Return:
237+
the parameters dictionary
238+
"""
239+
240+
return node.attributes[CONFLUENCE_PARAMS_KEY]

sphinxcontrib/confluencebuilder/storage/translator.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from sphinxcontrib.confluencebuilder.compat import docutils_findall as findall
1212
from sphinxcontrib.confluencebuilder.exceptions import ConfluenceError
1313
from sphinxcontrib.confluencebuilder.locale import L
14+
from sphinxcontrib.confluencebuilder.nodes import confluence_parameters_fetch as PARAMS
1415
from sphinxcontrib.confluencebuilder.std.confluence import CONFLUENCE_MAX_WIDTH
1516
from sphinxcontrib.confluencebuilder.std.confluence import FALLBACK_HIGHLIGHT_STYLE
1617
from sphinxcontrib.confluencebuilder.std.confluence import FCMMO
@@ -2295,7 +2296,7 @@ def visit_versionmodified(self, node):
22952296

22962297
def visit_confluence_excerpt(self, node):
22972298
self.body.append(self._start_ac_macro(node, 'excerpt'))
2298-
for k, v in sorted(node.params.items()):
2299+
for k, v in sorted(PARAMS(node).items()):
22992300
self.body.append(self._build_ac_param(node, k, v))
23002301
self.body.append(self._start_ac_rich_text_body_macro(node))
23012302
self.context.append(self._end_ac_rich_text_body_macro(node) +
@@ -2325,7 +2326,7 @@ def visit_confluence_excerpt_include(self, node):
23252326
doctitle = doclink
23262327

23272328
self.body.append(self._start_ac_macro(node, 'excerpt-include'))
2328-
for k, v in sorted(node.params.items()):
2329+
for k, v in sorted(PARAMS(node).items()):
23292330
self.body.append(self._build_ac_param(node, k, v))
23302331

23312332
attribs = {
@@ -2474,13 +2475,13 @@ def visit_confluence_page_generation_notice(self, node):
24742475
raise nodes.SkipNode
24752476

24762477
def visit_confluence_source_link(self, node):
2477-
uri = node.params['url']
2478+
uri = PARAMS(node)['url']
24782479

24792480
docname = self.docname
24802481
suffix = self.builder.env.doc2path(docname, base=None)[len(docname):]
2481-
uri = uri.format(page=docname, suffix=suffix, **node.params)
2482+
uri = uri.format(page=docname, suffix=suffix, **PARAMS(node))
24822483

2483-
source_text = node.params.get('text', L('Edit Source'))
2484+
source_text = PARAMS(node).get('text', L('Edit Source'))
24842485
uri = self.encode(uri)
24852486

24862487
if self.v2:
@@ -2539,20 +2540,20 @@ def visit_confluence_doc_card(self, node):
25392540
self.body.append(self._start_ac_rich_text_body_macro(node))
25402541

25412542
docname = posixpath.normpath(self.docparent +
2542-
path.splitext(node.params['href'].split('#')[0])[0])
2543+
path.splitext(PARAMS(node)['href'].split('#')[0])[0])
25432544
doctitle = self.state.title(docname)
25442545
if doctitle:
25452546
attribs = {}
25462547

2547-
if 'data-card-appearance' in node.params:
2548+
if 'data-card-appearance' in PARAMS(node):
25482549
attribs['ac:card-appearance'] = \
2549-
node.params['data-card-appearance']
2550+
PARAMS(node)['data-card-appearance']
25502551

2551-
if 'data-layout' in node.params:
2552-
attribs['ac:layout'] = node.params['data-layout']
2552+
if 'data-layout' in PARAMS(node):
2553+
attribs['ac:layout'] = PARAMS(node)['data-layout']
25532554

2554-
if 'data-width' in node.params:
2555-
attribs['ac:width'] = node.params['data-width']
2555+
if 'data-width' in PARAMS(node):
2556+
attribs['ac:width'] = PARAMS(node)['data-width']
25562557

25572558
doctitle = self.encode(doctitle)
25582559
self.body.append(self._start_tag(node, 'ac:link', **attribs))
@@ -2591,7 +2592,7 @@ def visit_confluence_doc_card_inline(self, node):
25912592
raise nodes.SkipNode
25922593

25932594
def visit_confluence_link_card(self, node):
2594-
options = dict(node.params)
2595+
options = dict(PARAMS(node))
25952596
url = self.encode(options.pop('href'))
25962597
options['href'] = url
25972598

@@ -2615,7 +2616,7 @@ def visit_confluence_link_card_inline(self, node):
26152616
# raw href | give it an inline card appearance
26162617
attribs = {
26172618
'data-card-appearance': 'inline',
2618-
'href': self.encode(node.params['href']),
2619+
'href': self.encode(PARAMS(node)['href']),
26192620
}
26202621

26212622
self.body.append(self._start_tag(node, 'a', **attribs))
@@ -2725,7 +2726,7 @@ def visit_confluence_mention_inline(self, node):
27252726

27262727
def _visit_jira_node(self, node):
27272728
self.body.append(self._start_ac_macro(node, 'jira'))
2728-
for k, v in sorted(node.params.items()):
2729+
for k, v in sorted(PARAMS(node).items()):
27292730
self.body.append(self._build_ac_param(node, k, v))
27302731
self.body.append(self._end_ac_macro(node))
27312732

@@ -2740,7 +2741,7 @@ def _visit_jira_node(self, node):
27402741

27412742
def visit_confluence_status_inline(self, node):
27422743
self.body.append(self._start_ac_macro(node, 'status'))
2743-
for k, v in sorted(node.params.items()):
2744+
for k, v in sorted(PARAMS(node).items()):
27442745
self.body.append(self._build_ac_param(node, k, v))
27452746
self.body.append(self._end_ac_macro(node))
27462747

@@ -2752,7 +2753,7 @@ def visit_confluence_status_inline(self, node):
27522753

27532754
def visit_confluence_toc(self, node):
27542755
self.body.append(self._start_ac_macro(node, 'toc'))
2755-
for k, v in sorted(node.params.items()):
2756+
for k, v in sorted(PARAMS(node).items()):
27562757
self.body.append(self._build_ac_param(node, k, v))
27572758
self.body.append(self._end_ac_macro(node))
27582759

0 commit comments

Comments
 (0)