/** * Define o conversor de caminhos relativos utilizado pelo sistema para modificar os caminhos relativos definidos * nos arquivos CSS não-minificados. * * @access public * @param \Numenor\Html\ConversorCaminho $conversor Instância do conversor. * @return \Numenor\Html\ControleCss Instância do próprio objeto para encadeamento. */ public function setConversorCaminho(ConversorCaminho $conversor) : self { // Configura o destino dos arquivos conversor de caminhos relativos para o diretório de output // A origem deve ser configurada individualmente para cada arquivo processado $conversor->setDestino($this->diretorioOutput); $this->conversorCaminho = $conversor; return $this; }
/** * Processa a lista de arquivos CSS incluídos, alterando-os conforme necessário (minificação, concatenação, * etc.) e gerando os snippets de inclusão dos mesmos. * * @access protected */ protected function minificar() { // Reseta a lista de arquivos a serem incluídos $this->listaArquivosIncluir = []; // Adiciona os scripts remotos $listaRemoto = $this->gerarListaRemoto($this->listaCss); if (count($listaRemoto) > 0) { $this->listaArquivosIncluir = $listaRemoto; } if ($this->comportamentoPadrao === self::COMPORTAMENTO_PADRAO_DEV) { // Se está configurado para ter o comportamento padrão de ambiente de desenvolvimento, todos os arquivos // não-remotos são processados sem concatenação ou compactação $listaConcatCompact = []; $listaConcat = []; $listaCompact = []; $listaNormal = $this->arrayWrapper->mesclar($this->gerarListaNormal($this->listaCss), $this->gerarListaConcatCompact($this->listaCss)); $listaNormal = $this->arrayWrapper->mesclar($listaNormal, $this->gerarListaConcat($this->listaCss)); $listaNormal = $this->arrayWrapper->mesclar($listaNormal, $this->gerarListaCompact($this->listaCss)); } else { // Caso contrário, processa normalmente os assets de acordo com seus tipos $listaConcatCompact = $this->gerarListaConcatCompact($this->listaCss); $listaConcat = $this->gerarListaConcat($this->listaCss); $listaCompact = $this->gerarListaCompact($this->listaCss); $listaNormal = $this->gerarListaNormal($this->listaCss); } // Adiciona os arquivos que devem ser minificados e concatenados em um só arquivo if (count($listaConcatCompact) > 0) { $nomeConcatCompact = $this->gerarNome($listaConcatCompact); $minificadorConcatCompact = clone $this->minificadorCss; $outputConcatCompact = $this->diretorioOutput . $nomeConcatCompact . '.css'; if ($this->comportamentoPadrao === self::COMPORTAMENTO_PADRAO_HOMOLOG) { file_exists($outputConcatCompact) ? unlink($outputConcatCompact) : null; } if (!file_exists($outputConcatCompact)) { foreach ($listaConcatCompact as $css) { $minificadorConcatCompact->add($css); } $minificadorConcatCompact->minify($outputConcatCompact); } $this->listaArquivosIncluir[] = '<link rel="stylesheet" href="' . $this->urlBase . $nomeConcatCompact . '.css">' . \PHP_EOL; } unset($minificadorConcatCompact); // Adiciona os arquivos que devem ser concatenados em um só arquivo, sem minificação if (count($listaConcat) > 0) { $nomeConcat = $this->gerarNome($listaConcat); $outputConcat = $this->diretorioOutput . $nomeConcat . '.css'; if ($this->comportamentoPadrao === self::COMPORTAMENTO_PADRAO_HOMOLOG) { file_exists($outputConcat) ? unlink($outputConcat) : null; } if (!file_exists($outputConcat)) { foreach ($listaConcat as $css) { // Define a origem dos caminhos relativos $this->conversorCaminho->setOrigem(dirname($css)); file_put_contents($outputConcat, $this->corrigirCaminhoExterno(file_get_contents($css)) . \PHP_EOL, \FILE_APPEND); } } $this->listaArquivosIncluir[] = '<link rel="stylesheet" href="' . $this->urlBase . $nomeConcat . '.css">' . \PHP_EOL; } // Adiciona os arquivos que devem ser minificados, sem concatenação if (count($listaCompact) > 0) { foreach ($listaCompact as $css) { $minificadorCompact = clone $this->minificadorCss; $nomeCompact = $this->gerarNome([$css]); $outputCompact = $this->diretorioOutput . $nomeCompact . '.css'; if ($this->comportamentoPadrao === self::COMPORTAMENTO_PADRAO_HOMOLOG) { file_exists($outputCompact) ? unlink($outputCompact) : null; } if (!file_exists($outputCompact)) { $minificadorCompact->add($css); $minificadorCompact->minify($outputCompact); } $this->listaArquivosIncluir[] = '<link rel="stylesheet" href="' . $this->urlBase . $nomeCompact . '.css">' . \PHP_EOL; unset($minificadorCompact); } } // Adiciona os arquivos que devem ser processados sem minificação ou concatenação. if (count($listaNormal) > 0) { foreach ($listaNormal as $css) { if ($css instanceof CssRemoto) { $this->listaArquivosIncluir[] = $css->gerarSnippetInclusao(); } else { $nomeNormal = $this->gerarNome([$css]); $outputNormal = $this->diretorioOutput . $nomeNormal . '.css'; // Define a origem dos caminhos relativos $this->conversorCaminho->setOrigem(dirname($css)); if ($this->comportamentoPadrao === self::COMPORTAMENTO_PADRAO_DEV || $this->comportamentoPadrao === self::COMPORTAMENTO_PADRAO_HOMOLOG) { file_exists($outputNormal) ? unlink($outputNormal) : null; } if (!file_exists($outputNormal)) { file_put_contents($outputNormal, $this->corrigirCaminhoExterno(file_get_contents($css)) . \PHP_EOL, \FILE_APPEND); } $this->listaArquivosIncluir[] = '<link rel="stylesheet" href="' . $this->urlBase . $nomeNormal . '.css">' . \PHP_EOL; } } } }