1
0
mirror of https://github.com/pattern-lab/patternlab-php.git synced 2025-03-15 19:39:42 +01:00

Remove unnecessary patterns, update naming structure of patterns, update template and page demos

This commit is contained in:
Brad Frost 2014-03-10 14:12:18 -04:00
commit 1c320c1a73
37 changed files with 176 additions and 229 deletions

View File

@ -15,13 +15,19 @@
* php builder/builder.php -gc
* In addition to the -g flag features it will also generate CSS for each pattern. Resource instensive.
*
* php builder.php -gp
* Generates only the patterns a site. Does NOT clean public/ when generating the site.
*
* php builder.php -w
* Generates the site like the -g flag and then watches for changes in the 'source' directories &
* files. Will re-generate files if they've changed.
*
* php builder.php -wr
* In addition to the -w flag features it will also automatically start the auto-reload server.
*
*
* php builder.php -wp
* Similar to the -w flag but it only generates and then watches the patterns. Does NOT clean public/ when generating the site.
*
* php builder.php -v
* Prints out the current version of Pattern Lab.
*
@ -50,7 +56,7 @@ if (php_sapi_name() != 'cli') {
}
// grab the arguments from the command line
$args = getopt("gwcrv");
$args = getopt("gwcrvpn");
// load Pattern Lab's config, if first time set-up move files appropriately too
$co = new PatternLab\Configurer;
@ -66,14 +72,28 @@ if (isset($args["v"])) {
if (isset($args["g"]) || isset($args["w"])) {
$g = new PatternLab\Generator($config);
$c = false;
// set some default values
$enableCSS = false;
$moveStatic = true;
$noCacheBuster = false;
// check to see if CSS for patterns should be parsed & outputted
if (isset($args["c"]) && !isset($args["w"])) {
$c = true;
$enableCSS = true;
}
$g->generate($c);
// check to see if we should just generate the patterns
if (isset($args["p"])) {
$moveStatic = false;
}
// check to see if we should turn off the cachebuster value
if (isset($args["n"])) {
$noCacheBuster = true;
}
$g->generate($enableCSS,$moveStatic,$noCacheBuster);
// have some fun
if (!isset($args["w"])) {
@ -86,13 +106,15 @@ if (isset($args["g"]) || isset($args["w"])) {
if (isset($args["w"])) {
$w = new PatternLab\Watcher($config);
$a = false;
// set some default values
$reload = false;
if (isset($args["r"])) {
$a = true;
$reload = true;
}
$w->watch($a);
$w->watch($reload,$moveStatic);
}
@ -105,12 +127,16 @@ if (!isset($args["g"]) && !isset($args["w"]) && !isset($args["v"])) {
print " Iterates over the 'source' directories & files and generates the entire site a single time.\n";
print " It also cleans the 'public' directory.\n\n";
print " php ".$_SERVER["PHP_SELF"]." -gc\n";
print " In addition to the -g flag features it will also generate CSS for each pattern. Resource instensive.\n\n";
print " In addition to the -g flag features it will also generate CSS for each pattern. Resource intensive.\n\n";
print " php ".$_SERVER["PHP_SELF"]." -gp\n";
print " Generates only the patterns a site. Does NOT clean public/ when generating the site.\n\n";
print " php ".$_SERVER["PHP_SELF"]." -w\n";
print " Generates the site like the -g flag and then watches for changes in the 'source' directories &\n";
print " files. Will re-generate files if they've changed.\n\n";
print " php ".$_SERVER["PHP_SELF"]." -wr\n";
print " In addition to the -w flag features it will also automatically start the auto-reload server.\n\n";
print " php ".$_SERVER["PHP_SELF"]." -wp\n";
print " Similar to the -w flag but it only generates and then watches the patterns. Does NOT clean public/ when generating the site.\n\n";
print " php ".$_SERVER["PHP_SELF"]." -v\n";
print " Prints out the current version of Pattern Lab.\n\n";

View File

@ -9,7 +9,7 @@ v = "0.7.8"
ie = "scss,DS_Store,less"
// directories and files to ignore when building or watching the source dir, separate with a comma
id = "scss,.svn"
id = "scss,.svn,.sass-cache"
// choose which ports the websocket services should run on
autoReloadPort = "8002"
@ -28,4 +28,4 @@ ishControlsHide = ""
patternStates = "inprogress,inreview,complete"
// the pattern types that shouldn't be included in the style guide
styleGuideExcludes = ""
styleGuideExcludes = ""

View File

@ -44,6 +44,7 @@ class Builder {
protected $patternCSS; // an array to hold the CSS generated for patterns
protected $cssRuleSaver; // where css rule saver will be initialized
protected $cacheBuster; // a timestamp used to bust the cache for static assets like CSS and JS
protected $noCacheBuster; // should we turn the cache buster on or off?
protected $patternHead; // the header to be included on patterns
protected $patternFoot; // the footer to be included on patterns
protected $mainPageHead; // the header to be included on main pages
@ -390,7 +391,7 @@ class Builder {
protected function gatherData() {
// set the cacheBuster
$this->cacheBuster = time();
$this->cacheBuster = $this->noCacheBuster ? 0 : time();
// gather the data from the main source data.json
if (file_exists($this->sd."/_data/_data.json")) {

View File

@ -28,8 +28,9 @@ class Generator extends Builder {
/**
* Pulls together a bunch of functions from builder.lib.php in an order that makes sense
* @param {Boolean} decide if CSS should be parsed and saved. performance hog.
* @param {Boolean} decide if static files like CSS and JS should be moved
*/
public function generate($enableCSS = false) {
public function generate($enableCSS = false, $moveStatic = true, $noCacheBuster = false) {
$timePL = true; // track how long it takes to generate a PL site
@ -40,6 +41,8 @@ class Generator extends Builder {
$starttime = $mtime;
}
$this->noCacheBuster = $noCacheBuster;
if ($enableCSS) {
// enable CSS globally throughout PL
@ -58,7 +61,7 @@ class Generator extends Builder {
$this->gatherPatternInfo();
// clean the public directory to remove old files
if ($this->cleanPublic == "true") {
if (($this->cleanPublic == "true") && $moveStatic) {
$this->cleanPublic();
}
@ -83,29 +86,34 @@ class Generator extends Builder {
}
// iterate over all of the other files in the source directory
$objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->sd."/"), \RecursiveIteratorIterator::SELF_FIRST);
// make sure dots are skipped
$objects->setFlags(\FilesystemIterator::SKIP_DOTS);
foreach($objects as $name => $object) {
// move all of the files unless pattern only is set
if ($moveStatic) {
// clean-up the file name and make sure it's not one of the pattern lab files or to be ignored
$fileName = str_replace($this->sd.DIRECTORY_SEPARATOR,"",$name);
if (($fileName[0] != "_") && (!in_array($object->getExtension(),$this->ie)) && (!in_array($object->getFilename(),$this->id))) {
// iterate over all of the other files in the source directory
$objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->sd."/"), \RecursiveIteratorIterator::SELF_FIRST);
// make sure dots are skipped
$objects->setFlags(\FilesystemIterator::SKIP_DOTS);
foreach($objects as $name => $object) {
// catch directories that have the ignored dir in their path
$ignoreDir = $this->ignoreDir($fileName);
// check to see if it's a new directory
if (!$ignoreDir && $object->isDir() && !is_dir($this->pd."/".$fileName)) {
mkdir($this->pd."/".$fileName);
}
// check to see if it's a new file or a file that has changed
if (!$ignoreDir && $object->isFile() && (!file_exists($this->pd."/".$fileName))) {
$this->moveStaticFile($fileName);
// clean-up the file name and make sure it's not one of the pattern lab files or to be ignored
$fileName = str_replace($this->sd.DIRECTORY_SEPARATOR,"",$name);
if (($fileName[0] != "_") && (!in_array($object->getExtension(),$this->ie)) && (!in_array($object->getFilename(),$this->id))) {
// catch directories that have the ignored dir in their path
$ignoreDir = $this->ignoreDir($fileName);
// check to see if it's a new directory
if (!$ignoreDir && $object->isDir() && !is_dir($this->pd."/".$fileName)) {
mkdir($this->pd."/".$fileName);
}
// check to see if it's a new file or a file that has changed
if (!$ignoreDir && $object->isFile() && (!file_exists($this->pd."/".$fileName))) {
$this->moveStaticFile($fileName);
}
}
}

View File

@ -30,8 +30,10 @@ class Watcher extends Builder {
/**
* Watch the source/ directory for any changes to existing files. Will run forever if given the chance.
* @param {Boolean} decide if the reload server should be turned on
* @param {Boolean} decide if static files like CSS and JS should be moved
*/
public function watch($reload = false) {
public function watch($reload = false, $moveStatic = true) {
// automatically start the auto-refresh tool
if ($reload) {
@ -155,55 +157,60 @@ class Watcher extends Builder {
}
// iterate over all of the other files in the source directory and move them if their modified time has changed
$objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->sd."/"), \RecursiveIteratorIterator::SELF_FIRST);
// make sure dots are skipped
$objects->setFlags(\FilesystemIterator::SKIP_DOTS);
foreach($objects as $name => $object) {
if ($moveStatic) {
// clean-up the file name and make sure it's not one of the pattern lab files or to be ignored
$fileName = str_replace($this->sd.DIRECTORY_SEPARATOR,"",$name);
if (($fileName[0] != "_") && (!in_array($object->getExtension(),$this->ie)) && (!in_array($object->getFilename(),$this->id))) {
$objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->sd."/"), \RecursiveIteratorIterator::SELF_FIRST);
// make sure dots are skipped
$objects->setFlags(\FilesystemIterator::SKIP_DOTS);
foreach($objects as $name => $object) {
// catch directories that have the ignored dir in their path
$ignoreDir = $this->ignoreDir($fileName);
// check to see if it's a new directory
if (!$ignoreDir && $object->isDir() && !isset($o->$fileName) && !is_dir($this->pd."/".$fileName)) {
mkdir($this->pd."/".$fileName);
$o->$fileName = "dir created"; // placeholder
print $fileName."/ directory was created...\n";
}
// check to see if it's a new file or a file that has changed
if (file_exists($name)) {
// clean-up the file name and make sure it's not one of the pattern lab files or to be ignored
$fileName = str_replace($this->sd.DIRECTORY_SEPARATOR,"",$name);
if (($fileName[0] != "_") && (!in_array($object->getExtension(),$this->ie)) && (!in_array($object->getFilename(),$this->id))) {
$mt = $object->getMTime();
if (!$ignoreDir && $object->isFile() && !isset($o->$fileName) && !file_exists($this->pd."/".$fileName)) {
$o->$fileName = $mt;
$this->moveStaticFile($fileName,"added");
if ($object->getExtension() == "css") {
$this->updateSite($fileName,"changed",0); // make sure the site is updated for MQ reasons
}
} else if (!$ignoreDir && $object->isFile() && isset($o->$fileName) && ($o->$fileName != $mt)) {
$o->$fileName = $mt;
$this->moveStaticFile($fileName,"changed");
if ($object->getExtension() == "css") {
$this->updateSite($fileName,"changed",0); // make sure the site is updated for MQ reasons
}
} else if (!isset($o->fileName)) {
$o->$fileName = $mt;
// catch directories that have the ignored dir in their path
$ignoreDir = $this->ignoreDir($fileName);
// check to see if it's a new directory
if (!$ignoreDir && $object->isDir() && !isset($o->$fileName) && !is_dir($this->pd."/".$fileName)) {
mkdir($this->pd."/".$fileName);
$o->$fileName = "dir created"; // placeholder
print $fileName."/ directory was created...\n";
}
// check to see if it's a new file or a file that has changed
if (file_exists($name)) {
$mt = $object->getMTime();
if (!$ignoreDir && $object->isFile() && !isset($o->$fileName) && !file_exists($this->pd."/".$fileName)) {
$o->$fileName = $mt;
$this->moveStaticFile($fileName,"added");
if ($object->getExtension() == "css") {
$this->updateSite($fileName,"changed",0); // make sure the site is updated for MQ reasons
}
} else if (!$ignoreDir && $object->isFile() && isset($o->$fileName) && ($o->$fileName != $mt)) {
$o->$fileName = $mt;
$this->moveStaticFile($fileName,"changed");
if ($object->getExtension() == "css") {
$this->updateSite($fileName,"changed",0); // make sure the site is updated for MQ reasons
}
} else if (!isset($o->fileName)) {
$o->$fileName = $mt;
}
} else {
unset($o->$fileName);
}
} else {
unset($o->$fileName);
}
}
}
$c = true;
// taking out the garbage. basically killing mustache after each run.

View File

@ -1 +0,0 @@
<div class="byline">by {{ author.first-name }} {{ author.last-name }} on <time datetime="2013-04-06T12:32+00:00">June 3rd</time></div>

View File

@ -1,3 +0,0 @@
<blockquote class="pullquote">
<p>A pull quote is a quotation or excerpt from an article</p>
</blockquote>

View File

@ -4,7 +4,7 @@
{{> atoms-square }}
</div>
<div class="b-text">
<h2 class="headline">{{ headline.short }}</h2>
<h2 class="b-title">{{ headline.short }}</h2>
<p>{{ excerpt.medium }}</p>
</div>
</a>

View File

@ -0,0 +1,6 @@
<div class="block block-headline">
<a href="{{ url }}" class="b-inner">
<h2 class="b-title">{{ headline.short }}</h2>
{{> atoms-time }}
</a>
</div>

View File

@ -1,6 +0,0 @@
<div class="block block-headline">
<a href="{{ url }}">
<h2 class="headline">Headline: Lorem Ipsum Dolor Amet Sit</h2>
{{> atoms-time }}
</a>
</div>

View File

@ -1,10 +1,10 @@
<div class="block block-hero">
<a href="{{ url }}" class="inner">
<a href="{{ url }}" class="b-inner">
<div class="b-thumb">
{{> atoms-landscape-16x9 }}
</div>
<div class="b-text">
<h2 class="headline">{{ headline.medium }}</h2>
<h2 class="b-title">{{ headline.medium }}</h2>
</div>
</a>
</div>

View File

@ -4,7 +4,7 @@
{{> atoms-square }}
</div>
<div class="b-text">
<h2 class="headline">{{ title }}</h2>
<h2 class="b-title">{{ title }}</h2>
</div>
</a>
</div>

View File

@ -1 +0,0 @@
<!--<iframe width=650 height=400 frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/?ie=UTF8&amp;hq=&amp;hnear=2903+Simkins+Ct,+Palo+Alto,+California+94303&amp;ll=37.44041,-122.117335&amp;spn=0.017412,0.019462&amp;t=m&amp;z=16&amp;output=embed"></iframe>-->

View File

@ -1,5 +1,5 @@
<nav id="nav" class="nav">
<ul>
<ul class="nav-list">
<li><a href="{{ url }}">Home</a></li>
<li><a href="{{ url }}">About</a></li>
<li><a href="{{ url }}">Blog</a></li>

View File

@ -1,9 +1,9 @@
<li class="comment-container">
<div class="comment-meta">
{{> atoms-avatar }}
<h4 class="comment-name"><a href="#">{{name.first}} {{name.last}}</a></h4>
<h4 class="comment-name"><a href="#">{{ name.first }} {{ name.last }}</a></h4>
</div>
<div class="comment-text">
<p>{{description}}</p>
<p>{{ description }}</p>
</div>
</li>

View File

@ -0,0 +1,3 @@
<div class="alert alert-{{ alertClass }}">
{{ excerpt.short }}
</div>

View File

@ -19,8 +19,4 @@
<p>Donec posuere fringilla nunc, vitae venenatis diam scelerisque vel. Nullam vitae mauris magna. Mauris et diam quis justo volutpat tincidunt congue nec magna. Curabitur vitae orci elit. Ut mollis massa id magna vestibulum consequat. Proin rutrum lectus justo, sit amet tincidunt est. Vivamus vitae lacinia risus.
</p>
{{> molecules-pullquote }}
<p>Donec venenatis imperdiet tortor, vitae blandit odio interdum ut. Integer orci metus, lobortis id lacinia eget, rutrum vitae justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In pretium fermentum justo nec pharetra. Maecenas eget dapibus justo. Ut quis est risus. Nullam et eros at odio commodo venenatis quis et augue. Sed sed augue at tortor porttitor hendrerit nec ut nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin sollicitudin enim consectetur mi commodo quis cursus ante pretium. Nunc gravida cursus nisi in gravida. Suspendisse eget tortor sed urna consequat tincidunt. Etiam eget convallis lectus. Suspendisse cursus rutrum massa ac faucibus.
</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, suscipit repellendus nulla accusantium deserunt sed explicabo voluptate sapiente ratione inventore molestiae nihil earum repellat quia odit vitae perspiciatis aliquam amet?</p>

View File

@ -3,9 +3,9 @@
<h2 class="section-title">59 Comments</h2>
{{> molecules-comment-form }}
<ul class="comment-list">
{{#listItems.five}}
{{# listItems.five }}
{{> molecules-single-comment }}
{{/listItems.five}}
{{/ listItems.five }}
</ul>
</div>
{{> molecules-pagination }}

View File

@ -1,10 +0,0 @@
<div class="carousel-list-carousel">
<div class="carousel-container">
{{> molecules-inset-block }}
<div>
<div class="carousel-controls">
<a href="#" class="carousel-prev">&larr;</a>
<div class="carousel-pagination">1/5</div>
<a href="#" class="carousel-next">&rarr;</a>
</div>
</div>

View File

@ -0,0 +1,10 @@
<section class="section related-posts">
<h3 class="section-title">Related Posts</h3>
<ul class="headline-list">
<li><h4><a href="#">{{ headline.short }}</a></h4></li>
<li><h4><a href="#">{{ headline.short }}</a></h4></li>
<li><h4><a href="#">{{ headline.short }}</a></h4></li>
<li><h4><a href="#">{{ headline.short }}</a></h4></li>
<li><h4><a href="#">{{ headline.short }}</a></h4></li>
</ul>
</section>

View File

@ -1,11 +0,0 @@
<section class="section related-posts">
<h3 class="section-title">Related Posts</h3>
<ul class="headline-list">
<li><h4><a href="#">Headline Lorem ipsum dolor sit amet</a></h4></li>
<li><h4><a href="#">Laborum, molestiae, rerum, dolores eveniet </a></h4></li>
<li><h4><a href="#">quae est fugit distinctio iure odit minus non ipsum </a></h4></li>
<li><h4><a href="#">dolorum deserunt omnis voluptates voluptatum</a></h4></li>
<li><h4><a href="#">nventore dignissimos vel molestiae, rerum, dolore</a></h4></li>
<li><h4><a href="#"></a></h4></li>
</ul>
</section>

View File

@ -1,31 +1,39 @@
<div class="page" id="page">
{{> organisms-header }}
<div role="main">
{{> molecules-block-hero }}
{{# emergency }}
{{> molecules-alert }}
{{/ emergency }}
{{# hero }}
{{> molecules-block-hero }}
{{/ hero}}
<div class="g g-3up">
<div class="gi">
{{> molecules-inset-block }}
</div>
<div class="gi">
{{> molecules-inset-block }}
</div>
<div class="gi">
{{> molecules-inset-block }}
</div>
{{# touts}}
<div class="gi">
{{> molecules-block-inset }}
</div>
{{/ touts}}
</div><!--end 3up-->
<hr />
<div class="l-two-col">
<div class="l-main">
{{> organisms-latest-posts }}
<section class="section latest-posts">
<h2 class="section-title">Latest Posts</h2>
<ul class="post-list">
{{# latest-posts}}
<li>{{> molecules-media-block }}</li>
{{/ latest-posts}}
</ul>
<a href="#" class="text-btn">View more posts</a>
</section>
</div>
<div class="l-sidebar">
{{> organisms-recent-tweets }}
</div>
</div>
</div><!--end l-sidebar-->
</div><!--End role=main-->
{{> organisms-footer }}
</div>

View File

@ -6,7 +6,7 @@
<article class="article">
<header class="article-header">
<h1>Article Headline Lorem ipsum dolor sit aweofij</h1>
{{> molecules-byline-author-time }}
{{> molecules-byline }}
</header>
{{> organisms-article-body }}
</article><!--end .article-->

View File

@ -1,6 +1,7 @@
{
"title" : "Home Page",
"bodyClass": "home",
"emergency" : false,
"hero" : [
{
"img": {

View File

@ -1,42 +1 @@
<div class="page" id="page">
{{# emergency }}
<div style="width: 100%; height: 30px; background-color: #ccc; padding: 20px; color: #fff; font-size: 3em;">
Emergency!!!
</div>
{{/ emergency }}
{{> organisms-header }}
<div role="main">
{{# hero }}
{{> molecules-block-hero }}
{{/ hero}}
<div class="g g-3up">
{{# touts}}
<div class="gi">
{{> molecules-inset-block }}
</div>
{{/ touts}}
</div><!--end 3up-->
<hr />
<div class="l-two-col">
<div class="l-main">
<section class="section latest-posts">
<h2 class="section-title">Latest Posts</h2>
<ul class="post-list">
{{# latest-posts}}
<li>{{> molecules-media-block }}</li>
{{/ latest-posts}}
</ul>
<a href="#" class="text-btn">View more posts</a>
</section>
</div>
<div class="l-sidebar">
{{> organisms-recent-tweets }}
</div><!--end l-sidebar-->
</div><!--End role=main-->
{{> organisms-footer }}
</div>
{{> templates-homepage }}

View File

@ -1,3 +1,8 @@
{
"emergency": "true"
"emergency": {
"alertClass" : "error",
"excerpt" : {
"short" : "Emergency! This is a variation of the core homepage template."
}
}
}

View File

@ -1,51 +1 @@
<div class="page" id="page">
{{> organisms-header }}
<div role="main">
<div class="l-two-col">
<div class="l-main">
<article class="article">
<header class="article-header">
<h1>Top 10 Trails You Have To Hike Before You Die</h1>
{{> molecules-byline-author-time }}
</header>
<p class="intro">This is where a post about hiking trails would live. I'm not going to write an article about hiking trails. That would take a lot of time.</p>
<p><a href="#">This is a link, possibly to an external resource.</a> In a post about hiking trails, there would probably be talk about how to get to featured trails, what to pack, where to camp, and so on and so forth. I don't have any expertise in this subject matter so I'm not going to attempt to write about it.</p>
{{> atoms-landscape-16x9 }}
<p>If I were to write about it, I'd probably do some research on the topic first. But even then, I probably Sed a orci turpis. Aliquam aliquet placerat dui, consectetur tincidunt leo tristique et. Vivamus enim nisi, blandit a venenatis quis, convallis et arcu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris libero sapien, placerat in sodales eu, tempor quis dui. Vivamus egestas faucibus pulvinar. Maecenas eget diam nunc. Phasellus at sem eros, ac suscipit neque. Phasellus sollicitudin libero a odio dignissim scelerisque. Aliquam purus nulla, tempor eget ullamcorper quis, rhoncus non dui.
</p>
<blockquote>
This trail is amazing. I've never seen anything like it.
</blockquote>
<p>Cras at fringilla ipsum. Donec nec libero eget est blandit dignissim a eu ante. Morbi augue nulla, luctus eu sagittis vel, malesuada ut felis. Aliquam erat volutpat. Morbi malesuada augue ac massa hendrerit fermentum. Integer scelerisque lacus a dolor convallis lobortis. Curabitur mollis ante in massa ultricies dignissim.
</p>
{{> atoms-unordered }}
{{> atoms-ordered }}
<p>Donec posuere fringilla nunc, vitae venenatis diam scelerisque vel. Nullam vitae mauris magna. Mauris et diam quis justo volutpat tincidunt congue nec magna. Curabitur vitae orci elit. Ut mollis massa id magna vestibulum consequat. Proin rutrum lectus justo, sit amet tincidunt est. Vivamus vitae lacinia risus.
</p>
{{> molecules-pullquote }}
<p>Donec venenatis imperdiet tortor, vitae blandit odio interdum ut. Integer orci metus, lobortis id lacinia eget, rutrum vitae justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In pretium fermentum justo nec pharetra. Maecenas eget dapibus justo. Ut quis est risus. Nullam et eros at odio commodo venenatis quis et augue. Sed sed augue at tortor porttitor hendrerit nec ut nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin sollicitudin enim consectetur mi commodo quis cursus ante pretium. Nunc gravida cursus nisi in gravida. Suspendisse eget tortor sed urna consequat tincidunt. Etiam eget convallis lectus. Suspendisse cursus rutrum massa ac faucibus.
</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, suscipit repellendus nulla accusantium deserunt sed explicabo voluptate sapiente ratione inventore molestiae nihil earum repellat quia odit vitae perspiciatis aliquam amet?</p>
</article><!--end .article-->
{{> molecules-social-share }}
{{> organisms-comment-thread }}
</div><!--end l-main-->
<div class="l-sidebar">
{{> organisms-related-posts }}
{{> organisms-recent-tweets }}
</div><!--end l-sidebar-->
</div><!--end l-two-col-->
</div><!--End role=main-->
{{> organisms-footer }}
</div>
{{> templates-article }}