HeadMinifier.php
<?php
namespace Head;
class Minify {
static protected $minifier = null;
static public function instance(){
return self::$minifier ?? (self::$minifier = new self());
}
protected $html = '';
// protected $minifyHtml = '';
public function minifyStart(){
ob_start();
}
public function minifyEnd(){
$this->html .= "\n".ob_get_clean();
}
public function getHtml(){
$minified = $this->doMinification();
return $minified;
}
protected function doMinification(){
$tagResolvers = [
'title'=>new \Resolver\Title(),
'script'=>new \Resolver\Script(),
'link' =>new \Resolver\Style(),
];
$basicResolver = new \Resolver\Basic();
$doc = new \DomDocument();
$doc->loadHtml($this->html);
$nodes = [];
foreach ($doc->childNodes[1]->childNodes[0]->childNodes as $index => $node){
$nodes[$node->nodeName] = $nodes[$node->nodeName] ?? [];
$nodes[$node->nodeName][] = $node;
}
$html = '';
foreach ($nodes as $tagName=>$nodeArray){
$resolver = $tagResolvers[$tagName] ?? null;
if ($resolver==null)$resolver = $basicResolver;
$resolver->loadNodeArray($nodeArray);
$html .= $resolver->minifiedOutput();
$resolver->clear();
// echo 'one loop'."\n";
}
return $html;
// print_r($nodes);
// var_dump($doc->childNodes[0]);
// exit;
}
}