--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <title>m.components | A Pelican Blog</title>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400,400i,600%7CSource+Sans+Pro:400,400i,600,600i" />
+ <link rel="stylesheet" href="static/m-dark.css" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <meta property="og:title" content="m.components" />
+ <meta name="twitter:title" content="m.components" />
+ <meta property="og:url" content="page.html" />
+ <meta name="twitter:url" content="page.html" />
+ <meta property="og:description" content="no." />
+ <meta name="twitter:description" content="no." />
+ <meta name="twitter:card" content="summary" />
+ <meta property="og:type" content="website" />
+</head>
+<body>
+<header><nav id="navigation">
+ <div class="m-container">
+ <div class="m-row">
+ <a href="./" id="m-navbar-brand" class="m-col-t-9 m-col-m-none m-left-m">A Pelican Blog</a>
+ </div>
+ </div>
+</nav></header>
+<main>
+<article>
+ <div class="m-container m-container-inflatable">
+ <div class="m-row">
+ <div class="m-col-l-10 m-push-l-1">
+ <h1>m.components</h1>
+<!-- content -->
+<aside class="m-block m-default">
+<h3>Default block</h3>
+<p>Text.</p>
+</aside>
+<aside class="m-text-right m-block m-success">
+<h3>Success block</h3>
+<p>First paragraph, aligned to the right.</p>
+<p><em>Second</em> paragraph, also.</p>
+</aside>
+<aside class="m-note m-default">
+<h3>Default note</h3>
+<p>Text.</p>
+</aside>
+<aside class="m-note m-danger">
+<h3>Danger note</h3>
+<p>First paragraph.</p>
+<p><em>Second</em> paragraph.</p>
+</aside>
+<aside class="m-text-center m-note m-warning">
+Warning note without title, centered.</aside>
+<aside class="m-frame">
+<h3>Frame with title</h3>
+<p>Text.</p>
+</aside>
+<aside class="m-text-left m-frame">
+Frame <em>without</em> title, on the left.</aside>
+<figure class="m-flat m-code-figure">
+<pre>Some
+ code
+snippet</pre>
+<p>And a resulting output.</p>
+</figure>
+<figure class="m-console-figure">
+<pre class="m-console">Console</pre>
+<p>And text.</p>
+</figure>
+<div class="m-text m-dim">
+Dim text.</div>
+<p class="m-transition">~ ~ ~</p>
+<a class="m-button m-warning" href="./page.html"><span>Button text.</span></a>
+<a class="m-button m-success" href="#"><div class="m-big">
+First text.</div>
+<div class="m-small">
+Second text.</div>
+</a>
+<!-- /content -->
+ </div>
+ </div>
+ </div>
+</article>
+</main>
+</body>
+</html>
--- /dev/null
+m.components
+############
+
+:summary: no.
+
+.. block-default:: Default block
+
+ Text.
+
+.. block-success:: Success block
+ :class: m-text-right
+
+ First paragraph, aligned to the right.
+
+ *Second* paragraph, also.
+
+.. note-default:: Default note
+
+ Text.
+
+.. note-danger:: Danger note
+
+ First paragraph.
+
+ *Second* paragraph.
+
+.. note-warning::
+ :class: m-text-center
+
+ Warning note without title, centered.
+
+.. frame:: Frame with title
+
+ Text.
+
+.. frame::
+ :class: m-text-left
+
+ Frame *without* title, on the left.
+
+.. code-figure::
+ :class: m-flat
+
+ ::
+
+ Some
+ code
+ snippet
+
+ And a resulting output.
+
+.. console-figure::
+
+ .. class:: m-console
+
+ ::
+
+ Console
+
+ And text.
+
+.. text-dim::
+
+ Dim text.
+
+.. transition:: ~ ~ ~
+
+.. button-warning:: {filename}/page.rst
+
+ Button text.
+
+.. button-success:: #
+
+ First text.
+
+ Second text.
--- /dev/null
+from m.test import PluginTestCase
+
+class Components(PluginTestCase):
+ def __init__(self, *args, **kwargs):
+ super().__init__(__file__, '', *args, **kwargs)
+
+ def test(self):
+ self.run_pelican({
+ 'PLUGINS': ['m.htmlsanity', 'm.components']
+ })
+
+ self.assertEqual(*self.actual_expected_contents('page.html'))