/** * Gather all of the information related to the patterns */ public static function gather($options = array()) { // set default vars $exportClean = isset($options["exportClean"]) ? $options["exportClean"] : false; $exportFiles = isset($options["exportClean"]) ? $options["exportFiles"] : false; $dispatcherInstance = Dispatcher::getInstance(); // cleaning the var for use below, i know this is stupid $options = array(); // dispatch that the data gather has started $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.gatherStart", $event); // load up the rules for parsing patterns and the directories self::loadRules($options); // dispatch that the rules are loaded $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.rulesLoaded", $event); // iterate over the patterns & related data and regenerate the entire site if they've changed // seems a little silly to use symfony finder here. not really giving me any power $patternObjects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(Config::getOption("patternSourceDir")), \RecursiveIteratorIterator::SELF_FIRST); $patternObjects->setFlags(\FilesystemIterator::SKIP_DOTS); // sort the returned objects $patternObjects = iterator_to_array($patternObjects); ksort($patternObjects); $patternSourceDir = Config::getOption("patternSourceDir"); foreach ($patternObjects as $name => $object) { $ext = $object->getExtension(); $isDir = $object->isDir(); $isFile = $object->isFile(); $path = str_replace($patternSourceDir . "/", "", $object->getPath()); $pathName = str_replace($patternSourceDir . "/", "", $object->getPathname()); $name = $object->getFilename(); $depth = substr_count($pathName, DIRECTORY_SEPARATOR); // iterate over the rules and see if the current file matches one, if so run the rule foreach (self::$rules as $rule) { if ($rule->test($depth, $ext, $isDir, $isFile, $name)) { $rule->run($depth, $ext, $path, $pathName, $name); } } } // dispatch that the data is loaded $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.dataLoaded", $event); // make sure all of the appropriate pattern data is pumped into $this->d for rendering patterns $dataLinkExporter = new DataLinkExporter(); $dataLinkExporter->run(); // make sure all of the appropriate pattern data is pumped into $this->d for rendering patterns $dataMergeExporter = new DataMergeExporter(); $dataMergeExporter->run(); // dispatch that the raw pattern helper is about to start $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.rawPatternHelperStart", $event); // add the lineage info to PatternData::$store $rawPatternHelper = new RawPatternHelper(); $rawPatternHelper->run(); // dispatch that the raw pattern helper is ended $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.rawPatternHelperEnd", $event); // dispatch that the lineage helper is about to start $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.lineageHelperStart", $event); // add the lineage info to PatternData::$store $lineageHelper = new LineageHelper(); $lineageHelper->run(); // dispatch that the lineage helper is ended $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.lineageHelperEnd", $event); // dispatch that the pattern state helper is about to start $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.patternStateHelperStart", $event); // using the lineage info update the pattern states on PatternData::$store $patternStateHelper = new PatternStateHelper(); $patternStateHelper->run(); // dispatch that the pattern state helper is ended $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.patternStateHelperEnd", $event); // set-up code pattern paths $ppdExporter = new PatternPathSrcExporter(); $patternPathSrc = $ppdExporter->run(); $options = array(); $options["patternPaths"] = $patternPathSrc; // dispatch that the code helper is about to start $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.codeHelperStart", $event); // render out all of the patterns and store the generated info in PatternData::$store $options["exportFiles"] = $exportFiles; $options["exportClean"] = $exportClean; $patternCodeHelper = new PatternCodeHelper($options); $patternCodeHelper->run(); // dispatch that the pattern code helper is ended $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.patternCodeHelperEnd", $event); // dispatch that the gather has ended $event = new PatternDataEvent($options); $dispatcherInstance->dispatch("patternData.gatherEnd", $event); }
/** * Generates the view all pages */ protected function generateViewAllPages() { // set-up the dispatcher $dispatcherInstance = Dispatcher::getInstance(); // note the beginning of the operation $dispatcherInstance->dispatch("builder.generateViewAllPagesStart"); // default vars $patternPublicDir = Config::getOption("patternPublicDir"); $htmlHead = Template::getHTMLHead(); $htmlFoot = Template::getHTMLFoot(); $patternHead = Template::getPatternHead(); $patternFoot = Template::getPatternFoot(); $filesystemLoader = Template::getFilesystemLoader(); $stringLoader = Template::getStringLoader(); $globalData = Data::get(); // load the pattern loader $ppdExporter = new PatternPathSrcExporter(); $patternPathSrc = $ppdExporter->run(); $options = array(); $options["patternPaths"] = $patternPathSrc; $patternEngineBasePath = PatternEngine::getInstance()->getBasePath(); $patternLoaderClass = $patternEngineBasePath . "\\Loaders\\PatternLoader"; $patternLoader = new $patternLoaderClass($options); // make sure view all is set $globalData["viewall"] = true; // make sure the pattern dir exists if (!is_dir($patternPublicDir)) { mkdir($patternPublicDir); } // add view all to each list $store = PatternData::get(); foreach ($store as $patternStoreKey => $patternStoreData) { if ($patternStoreData["category"] == "patternSubtype") { // grab the partials into a data object for the style guide $ppExporter = new PatternPartialsExporter(); $partials = $ppExporter->run($patternStoreData["type"], $patternStoreData["name"]); if (!empty($partials["partials"])) { // add the pattern data so it can be exported $patternData = array(); $patternData["patternPartial"] = "viewall-" . $patternStoreData["typeDash"] . "-" . $patternStoreData["nameDash"]; $globalData["patternLabHead"] = $stringLoader->render(array("string" => Template::getHTMLHead(), "data" => array("cacheBuster" => $partials["cacheBuster"]))); $globalData["patternLabFoot"] = $stringLoader->render(array("string" => Template::getHTMLFoot(), "data" => array("cacheBuster" => $partials["cacheBuster"], "patternData" => json_encode($patternData)))); // render the parts and join them $header = $patternLoader->render(array("pattern" => $patternHead, "data" => $globalData)); $code = $filesystemLoader->render(array("template" => "viewall", "data" => $partials)); $footer = $patternLoader->render(array("pattern" => $patternFoot, "data" => $globalData)); $viewAllPage = $header . $code . $footer; // if the pattern directory doesn't exist create it $patternPath = $patternStoreData["pathDash"]; if (!is_dir($patternPublicDir . "/" . $patternPath)) { mkdir($patternPublicDir . "/" . $patternPath); file_put_contents($patternPublicDir . "/" . $patternPath . "/index.html", $viewAllPage); } else { file_put_contents($patternPublicDir . "/" . $patternPath . "/index.html", $viewAllPage); } } } else { if ($patternStoreData["category"] == "patternType" && PatternData::hasPatternSubtype($patternStoreData["nameDash"])) { // grab the partials into a data object for the style guide $ppExporter = new PatternPartialsExporter(); $partials = $ppExporter->run($patternStoreData["name"]); if (!empty($partials["partials"])) { // add the pattern data so it can be exported $patternData = array(); $patternData["patternPartial"] = "viewall-" . $patternStoreData["nameDash"] . "-all"; // add the pattern lab specific mark-up $partials["patternLabHead"] = $stringLoader->render(array("string" => $htmlHead, "data" => array("cacheBuster" => $partials["cacheBuster"]))); $partials["patternLabFoot"] = $stringLoader->render(array("string" => $htmlFoot, "data" => array("cacheBuster" => $partials["cacheBuster"], "patternData" => json_encode($patternData)))); // render the parts and join them $header = $patternLoader->render(array("pattern" => $patternHead, "data" => $globalData)); $code = $filesystemLoader->render(array("template" => "viewall", "data" => $partials)); $footer = $patternLoader->render(array("pattern" => $patternFoot, "data" => $globalData)); $viewAllPage = $header . $code . $footer; // if the pattern directory doesn't exist create it $patternPath = $patternStoreData["pathDash"]; if (!is_dir($patternPublicDir . "/" . $patternPath)) { mkdir($patternPublicDir . "/" . $patternPath); file_put_contents($patternPublicDir . "/" . $patternPath . "/index.html", $viewAllPage); } else { file_put_contents($patternPublicDir . "/" . $patternPath . "/index.html", $viewAllPage); } } } } } // note the end of the operation $dispatcherInstance->dispatch("builder.generateViewAllPagesEnd"); }