diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cb97d31d..78b7c9416 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# v1.0.0-rc.2 +## xx/xx/2015 + +1. [](#new) + * Added support for CSS Asset groups +1. [](#improved) + * ... +1. [](#bugfix) + * ... + # v1.0.0-rc.1 ## 10/23/2015 diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index 14a9161ef..e2f39d2e5 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -227,21 +227,22 @@ class Assets * It checks for duplicates. * You may add more than one asset passing an array as argument. * - * @param mixed $asset - * @param int $priority the priority, bigger comes first - * @param bool $pipeline false if this should not be pipelined + * @param mixed $asset + * @param int $priority the priority, bigger comes first + * @param bool $pipeline false if this should not be pipelined + * @param null $group * * @return $this */ - public function addCss($asset, $priority = null, $pipeline = null) + public function addCss($asset, $priority = null, $pipeline = null, $group = null) { if (is_array($asset)) { foreach ($asset as $a) { - $this->addCss($a, $priority, $pipeline); + $this->addCss($a, $priority, $pipeline, $group); } return $this; } elseif (isset($this->collections[$asset])) { - $this->add($this->collections[$asset], $priority, $pipeline); + $this->add($this->collections[$asset], $priority, $pipeline, $group); return $this; } @@ -253,7 +254,8 @@ class Assets 'asset' => $asset, 'priority' => intval($priority ?: 10), 'order' => count($this->css), - 'pipeline' => $pipeline ?: true + 'pipeline' => $pipeline ?: true, + 'group' => $group ?: 'head' ]; // check for dynamic array and merge with defaults @@ -369,11 +371,12 @@ class Assets * For adding chunks of string-based inline CSS * * @param mixed $asset - * @param int $priority the priority, bigger comes first + * @param int $priority the priority, bigger comes first + * @param null $group * * @return $this */ - public function addInlineCss($asset, $priority = null) + public function addInlineCss($asset, $priority = null, $group = null) { if (is_a($asset, 'Twig_Markup')) { $asset = strip_tags((string)$asset); @@ -382,7 +385,8 @@ class Assets $data = [ 'priority' => intval($priority ?: 10), 'order' => count($this->inline_css), - 'asset' => $asset + 'asset' => $asset, + 'group' => $group ?: 'head' ]; // check for dynamic array and merge with defaults @@ -447,11 +451,12 @@ class Assets /** * Build the CSS link tags. * + * @param string $group name of the group * @param array $attributes * * @return string */ - public function css($attributes = []) + public function css($group = 'head', $attributes = []) { if (!$this->css) { return null; @@ -479,29 +484,37 @@ class Assets $attributes = $this->attributes(array_merge(['type' => 'text/css', 'rel' => 'stylesheet'], $attributes)); $output = ''; + $inline_css = ''; + if ($this->css_pipeline) { - $pipeline_result = $this->pipelineCss(); + $pipeline_result = $this->pipelineCss($group); if ($pipeline_result) { $output .= '' . "\n"; } foreach ($this->css_no_pipeline as $file) { - $media = isset($file['media']) ? sprintf(' media="%s"', $file['media']) : ''; - $output .= '' . "\n"; + if ($group && $file['group'] == $group) { + $media = isset($file['media']) ? sprintf(' media="%s"', $file['media']) : ''; + $output .= '' . "\n"; + } } } else { foreach ($this->css as $file) { - $media = isset($file['media']) ? sprintf(' media="%s"', $file['media']) : ''; - $output .= '' . "\n"; + if ($group && $file['group'] == $group) { + $media = isset($file['media']) ? sprintf(' media="%s"', $file['media']) : ''; + $output .= '' . "\n"; + } } } // Render Inline CSS - if (count($this->inline_css) > 0) { - $output .= "\n"; + } + + if ($inline_css) { + $output .= "\n\n"; } @@ -582,7 +595,7 @@ class Assets * * @return string */ - protected function pipelineCss() + protected function pipelineCss($group = 'head') { /** @var Cache $cache */ $cache = self::getGrav()['cache']; @@ -594,7 +607,7 @@ class Assets // clear no-pipeline assets lists $this->css_no_pipeline = []; - $file = md5(json_encode($this->css) . $this->css_minify . $this->css_rewrite) . '.css'; + $file = md5(json_encode($this->css) . $this->css_minify . $this->css_rewrite . $group) . '.css'; $relative_path = "{$this->base_url}" . basename(ASSETS_DIR) . "/{$file}"; $absolute_path = ASSETS_DIR . $file; @@ -606,10 +619,12 @@ class Assets // Remove any non-pipeline files foreach ($this->css as $id => $asset) { - if (!$asset['pipeline']) { - $this->css_no_pipeline[$id] = $asset; - } else { - $temp_css[$id] = $asset; + if ($asset['group'] == $group) { + if (!$asset['pipeline']) { + $this->css_no_pipeline[$id] = $asset; + } else { + $temp_css[$id] = $asset; + } } } @@ -930,6 +945,7 @@ class Assets * Download and concatenate the content of several links. * * @param array $links + * @param bool $css * * @return string */