Loklak Timeline Using Sphinx Extension In Yaydoc
In Yaydoc, I decided to add option, to show show the twitter timeline which showthe latest twitter feed. But I wanted to implement it using loklak instead of twitter embedded plugin. I started to search for an embedded plugin that exists for loklak. There is no such plugin, hence I built my own plugin. You can see the source code here.
Now that I have the plugin, the next phase is to add the plugin to the documentation. Adding the plugin by appending the plugin code to HTML is not viable. Therefore I decided to make Directive for Sphinx which adds a timeline based on the query parameter which user provides.
In order to make a Directive, I had to make a Sphinx extension which creates a timeline Directive. The Directive has to look like this
.. timeline :: fossasia
from docutils import nodes from docutils.parsers import rst class timeline(nodes.General, nodes.Element): pass def visit(self, node): tag=u'''
”’
.format(node.display_name) self.body.append(tag) self.visit_admonition(node) def depart(self, node): self.depart_admonition(node) class TimelineDirective(rst.Directive): name = 'timeline' node_class = timeline has_content = True required_argument = 1 optional_argument = 0 final_argument_whitespace = False option_spec = {} def run(self): node = self.node_class() node.display_name = self.content[0] return [node] def setup(app): app.add_javascript("https://cdn.rawgit.com/fossasia/loklak-timeline-plugin/master/plugi n.js") app.add_node(timeline, html=(visit, depart)) app.add_directive('timeline', TimelineDirective)
We have to create an empty class for Nodes that inherits`Node.General` and `Node.Elements`. This class is used for storing the value which will be passed by the directive.
I wrote a `Visit` function which executes when sphinx visits the `timeline` directive. `Visit` function basically appends the necessary html code needed to render the twitter timeline. Then I created TimelineDirective class which inherits rst.Directive. In that class, I defined a run method which read the argument from the directive and passed it to the node. Finally I defined a setup method which adds the loklak-timeline-plugin js to the render html node, and directive to the sphinx. Setup function has to be defined, in order to detect module as an extension by the sphinx.
Resources:
You must be logged in to post a comment.