diff --git a/src/PatternLab/PatternData/Helpers/LineageHelper.php b/src/PatternLab/PatternData/Helpers/LineageHelper.php index 1d5676e5..3e34967b 100644 --- a/src/PatternLab/PatternData/Helpers/LineageHelper.php +++ b/src/PatternLab/PatternData/Helpers/LineageHelper.php @@ -43,17 +43,19 @@ public function run() { $store = PatternData::get(); foreach ($store as $patternStoreKey => $patternStoreData) { - if (($patternStoreData["category"] == "pattern") && (!isset($patternStoreData["pseudo"]))) { + // Check for lineages in patterns AND sub-patterns + if (($patternStoreData["category"] == "pattern" || $patternStoreData["category"] == "patternSubtype") && (!isset($patternStoreData["pseudo"]))) { $patternLineages = array(); $fileData = isset($patternStoreData["patternRaw"]) ? $patternStoreData["patternRaw"] : ""; + $foundLineages = $this->findLineages($fileData); if (!empty($foundLineages)) { foreach ($foundLineages as $lineage) { - - /** + + /** * Fix for Pattern Lab Lineages when using Twig Namespaces. * Converts the full file path to PL-friendly shorthand so * they are internally registered. @@ -98,8 +100,24 @@ public function run() { $lineage = $patternType . "-" . $patternName; /* [11] */ } - if (PatternData::getOption($lineage)) { + + // If we're having trouble finding a pattern's lineage (ex. due to using Twig namespaces that don't match a pattern's parent directory), try finding a pattern with the same pattern name. Solves https://github.com/EvanLovely/plugin-twig-namespaces/issues/4 + if (PatternData::getOption($lineage) == false){ + // Strip off the original lineage's pattern type so we can compare the original pattern name to the new one if we find a potential match. + $origPatternName = list($before, $after) = explode('-', $lineage, 2)[1]; + //Loop through the patterns available and compare each pattern's patternName with the original lineage match that was found + foreach ($store as $altPatternStoreKey => $nestedPatternStoreData) { + $altPatternName = list($before, $after) = explode('-', $altPatternStoreKey, 2)[1]; + + // If we can't figure out the original pattern's lineage but found a match, use that instead. + if ($origPatternName == $altPatternName){ + $lineage = $altPatternStoreKey; + } + } + } + + if (PatternData::getOption($lineage)) { $patternLineages[] = array("lineagePattern" => $lineage, "lineagePath" => "../../patterns/".$patternStoreData["pathDash"]."/".$patternStoreData["pathDash"].$suffixRendered.".html"); @@ -109,18 +127,18 @@ public function run() { $fileName = $patternStoreData["pathName"].".".$patternExtension; Console::writeWarning("you may have a typo in ".$fileName.". `".$lineage."` is not a valid pattern..."); } - + } - + } // add the lineages to the PatternData::$store PatternData::setPatternOption($patternStoreKey,"lineages",$patternLineages); } - + } - + } // handle all of those pseudo patterns @@ -141,7 +159,7 @@ public function run() { $store = PatternData::get(); foreach ($store as $patternStoreKey => $patternStoreData) { - if (($patternStoreData["category"] == "pattern") && (!isset($patternStoreData["pseudo"])) && isset($patternStoreData["partial"])) { + if (($patternStoreData["category"] == "pattern" || $patternStoreData["category"] == "patternSubtype") && (!isset($patternStoreData["pseudo"])) && isset($patternStoreData["partial"])) { $patternLineagesR = array(); @@ -173,21 +191,21 @@ public function run() { "lineagePath" => "../../patterns/".$path."/".$path.$suffixRendered.".html"); } - + } - + } - + } - + } - + } - + PatternData::setPatternOption($patternStoreKey,"lineagesR",$patternLineagesR); } - + } // handle all of those pseudo patterns