chiark / gitweb /
plugins: reST directives for m.css note/block/frame components.
authorVladimír Vondruš <mosra@centrum.cz>
Tue, 4 Jul 2017 09:21:09 +0000 (11:21 +0200)
committerVladimír Vondruš <mosra@centrum.cz>
Wed, 5 Jul 2017 23:02:08 +0000 (01:02 +0200)
pelican-plugins/m/components.py [new file with mode: 0644]

diff --git a/pelican-plugins/m/components.py b/pelican-plugins/m/components.py
new file mode 100644 (file)
index 0000000..42eb730
--- /dev/null
@@ -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)