From 2d861dc2e37db5a8d66eea8c9eb2a7224681bafc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 4 Jul 2017 11:21:09 +0200 Subject: [PATCH] plugins: reST directives for m.css note/block/frame components. --- pelican-plugins/m/components.py | 148 ++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 pelican-plugins/m/components.py diff --git a/pelican-plugins/m/components.py b/pelican-plugins/m/components.py new file mode 100644 index 00000000..42eb7302 --- /dev/null +++ b/pelican-plugins/m/components.py @@ -0,0 +1,148 @@ +from docutils.parsers import rst +from docutils.parsers.rst import directives +from docutils import nodes + +class Transition(rst.Directive): + final_argument_whitespace = True + has_content = False + required_arguments = 1 + + def run(self): + text = ' '.join(self.arguments) + title_nodes, _ = self.state.inline_text(text, self.lineno) + transition_node = nodes.paragraph('', '', *title_nodes) + transition_node['classes'] += ['m-transition'] + return [transition_node] + +class Note(rst.Directive): + final_argument_whitespace = True + has_content = True + optional_arguments = 1 + + style_class = '' + + def run(self): + if len(self.arguments) == 1: + title_text = self.arguments[0] + title_nodes, _ = self.state.inline_text(title_text, self.lineno) + title_node = nodes.title('', '', *title_nodes) + + text = '\n'.join(self.content) + note_node = nodes.topic(text) + note_node['classes'] += ['m-note', self.style_class] + + if len(self.arguments) == 1: + note_node.append(title_node) + + self.state.nested_parse(self.content, self.content_offset, + note_node) + return [note_node] + +class DefaultNote(Note): + style_class = 'm-default' + +class PrimaryNote(Note): + style_class = 'm-primary' + +class SuccessNote(Note): + style_class = 'm-success' + +class WarningNote(Note): + style_class = 'm-warning' + +class DangerNote(Note): + style_class = 'm-danger' + +class InfoNote(Note): + style_class = 'm-info' + +class DimNote(Note): + style_class = 'm-dim' + +class Block(rst.Directive): + final_argument_whitespace = True + has_content = True + required_arguments = 1 + + style_class = '' + + def run(self): + title_text = self.arguments[0] + title_elements, _ = self.state.inline_text(title_text, self.lineno) + title_node = nodes.title('', '', *title_elements) + + text = '\n'.join(self.content) + note_node = nodes.topic(text) + note_node['classes'] += ['m-block', self.style_class] + note_node.append(title_node) + + self.state.nested_parse(self.content, self.content_offset, + note_node) + + return [note_node] + +class DefaultBlock(Block): + style_class = 'm-default' + +class PrimaryBlock(Block): + style_class = 'm-primary' + +class SuccessBlock(Block): + style_class = 'm-success' + +class WarningBlock(Block): + style_class = 'm-warning' + +class DangerBlock(Block): + style_class = 'm-danger' + +class InfoBlock(Block): + style_class = 'm-info' + +class DimBlock(Block): + style_class = 'm-dim' + +class Frame(rst.Directive): + final_argument_whitespace = True + has_content = True + optional_arguments = 1 + + style_class = '' + + def run(self): + if len(self.arguments) == 1: + title_text = self.arguments[0] + title_nodes, _ = self.state.inline_text(title_text, self.lineno) + title_node = nodes.title('', '', *title_nodes) + + text = '\n'.join(self.content) + note_node = nodes.topic(text) + note_node['classes'] += ['m-frame', self.style_class] + + if len(self.arguments) == 1: + note_node.append(title_node) + + self.state.nested_parse(self.content, self.content_offset, + note_node) + return [note_node] + +def register(): + rst.directives.register_directive('transition', Transition) + + rst.directives.register_directive('note-default', DefaultNote) + rst.directives.register_directive('note-primary', PrimaryNote) + rst.directives.register_directive('note-success', SuccessNote) + rst.directives.register_directive('note-warning', WarningNote) + rst.directives.register_directive('note-danger', DangerNote) + rst.directives.register_directive('note-info', InfoNote) + rst.directives.register_directive('note-dim', DimNote) + + rst.directives.register_directive('block-default', DefaultBlock) + rst.directives.register_directive('block-primary', PrimaryBlock) + rst.directives.register_directive('block-success', SuccessBlock) + rst.directives.register_directive('block-warning', WarningBlock) + rst.directives.register_directive('block-danger', DangerBlock) + rst.directives.register_directive('block-info', InfoBlock) + rst.directives.register_directive('block-dim', DimBlock) + + rst.directives.register_directive('frame', Frame) -- 2.30.2