Skip to content

Working Fix For Pattern Lab Lineages When Using Custom Twig Namespaces #21

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 34 additions & 16 deletions src/PatternLab/PatternData/Helpers/LineageHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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");

Expand All @@ -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
Expand All @@ -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();

Expand Down Expand Up @@ -173,21 +191,21 @@ public function run() {
"lineagePath" => "../../patterns/".$path."/".$path.$suffixRendered.".html");

}

}

}

}

}

}

PatternData::setPatternOption($patternStoreKey,"lineagesR",$patternLineagesR);

}

}

// handle all of those pseudo patterns
Expand Down