From 49317d6789f4882bfa917bce0334b3c61bdbbb29 Mon Sep 17 00:00:00 2001 From: Salem Ghoweri Date: Sat, 2 Sep 2017 21:03:04 -0400 Subject: [PATCH 1/3] feature: add ability for Pattern Lab to automatically compile inline templates / patterns embedded in markdown files. Living Design System docs FTW --- .../PatternData/Rules/DocumentationRule.php | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/PatternLab/PatternData/Rules/DocumentationRule.php b/src/PatternLab/PatternData/Rules/DocumentationRule.php index 4e9ef3fa..3bde3cc2 100644 --- a/src/PatternLab/PatternData/Rules/DocumentationRule.php +++ b/src/PatternLab/PatternData/Rules/DocumentationRule.php @@ -16,6 +16,9 @@ use \PatternLab\PatternData; use \PatternLab\Parsers\Documentation; use \PatternLab\Timer; +use \PatternLab\Data; +use \PatternLab\PatternData\Exporters\PatternPathSrcExporter; +use \PatternLab\PatternEngine; class DocumentationRule extends \PatternLab\PatternData\Rule { @@ -49,8 +52,7 @@ public function run($depth, $ext, $path, $pathName, $name) { // parse data $text = file_get_contents($patternSourceDir.DIRECTORY_SEPARATOR.$pathName); - list($yaml,$markdown) = Documentation::parse($text); - + // grab the title and unset it from the yaml so it doesn't get duped in the meta if (isset($yaml["title"])) { $title = $yaml["title"]; @@ -73,7 +75,34 @@ public function run($depth, $ext, $path, $pathName, $name) { $category = ($patternSubtypeDoc) ? "patternSubtype" : "pattern"; $patternStoreKey = ($patternSubtypeDoc) ? $docPartial."-plsubtype" : $docPartial; - + + /** + * Setup the Pattern Loader so we can pre-render template markup used + * in our markdown files, prior to any markup getting parsed. + * Taken from Builder.php + */ + $ppdExporter = new PatternPathSrcExporter(); + $patternPathSrc = $ppdExporter->run(); + $options = array(); + $options["patternPaths"] = $patternPathSrc; + $patternEngineBasePath = PatternEngine::getInstance()->getBasePath(); + $patternLoaderClass = $patternEngineBasePath . "\Loaders\PatternLoader"; + $patternLoader = new $patternLoaderClass($options); + + + // Setup the default pattern data. + $data = Data::getPatternSpecificData($patternStoreKey); + + // Render the markdown content as a pattern, piping in the pattern-specific data from above. + $text = $patternLoader->render(array( + "pattern" => $text, + "data" => $data + )); + + // Finally parse the resulting content as normal markup; continue as usual. + list($yaml,$markdown) = Documentation::parse($text); + + $patternStoreData = array("category" => $category, "desc" => trim($markdown), "descExists" => true, From 2dd2a67e60a8b8e5b6633bfde86b51cbded6d873 Mon Sep 17 00:00:00 2001 From: Salem Ghoweri Date: Sat, 2 Sep 2017 21:42:36 -0400 Subject: [PATCH 2/3] Updating template logic to also merge together global / local data --- .../PatternData/Rules/DocumentationRule.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/PatternLab/PatternData/Rules/DocumentationRule.php b/src/PatternLab/PatternData/Rules/DocumentationRule.php index 3bde3cc2..44247c6c 100644 --- a/src/PatternLab/PatternData/Rules/DocumentationRule.php +++ b/src/PatternLab/PatternData/Rules/DocumentationRule.php @@ -90,8 +90,16 @@ public function run($depth, $ext, $path, $pathName, $name) { $patternLoader = new $patternLoaderClass($options); - // Setup the default pattern data. - $data = Data::getPatternSpecificData($patternStoreKey); + // Combine local + global pattern data. + $data = array(); + $globalData = Data::getPatternSpecificData($docPartial); + $localData = PatternData::getOption($docPartial)["data"]; + + if ($localData){ + $data = array_replace_recursive($localData, $globalData); + } else { + $data = $globalData; + } // Render the markdown content as a pattern, piping in the pattern-specific data from above. $text = $patternLoader->render(array( From 0bf6982ea3fe4b9795f6b1a15f25a15efc5951a2 Mon Sep 17 00:00:00 2001 From: Salem Ghoweri Date: Sat, 2 Sep 2017 21:51:10 -0400 Subject: [PATCH 3/3] Fix: swapping global / local data merge so local data overrides global data if both exist --- src/PatternLab/PatternData/Rules/DocumentationRule.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PatternLab/PatternData/Rules/DocumentationRule.php b/src/PatternLab/PatternData/Rules/DocumentationRule.php index 44247c6c..d91bab55 100644 --- a/src/PatternLab/PatternData/Rules/DocumentationRule.php +++ b/src/PatternLab/PatternData/Rules/DocumentationRule.php @@ -96,7 +96,7 @@ public function run($depth, $ext, $path, $pathName, $name) { $localData = PatternData::getOption($docPartial)["data"]; if ($localData){ - $data = array_replace_recursive($localData, $globalData); + $data = array_replace_recursive($globalData, $localData); } else { $data = $globalData; }