From de61d88d292d1959930ad9171c786b1da399a54f Mon Sep 17 00:00:00 2001 From: Djamil Legato Date: Fri, 23 Oct 2015 16:11:26 -0700 Subject: [PATCH 01/21] Synced travis.yml --- .travis.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2a2b5d695..578da9f7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,7 +52,11 @@ script: FILES="$RT_DEVTOOLS/grav-dist/*.zip"; for file in ${FILES[@]}; do NAME=${file##*/}; - REPO="$(echo ${NAME} | rev | cut -f 2- -d "-" | rev)"; + if [[ "$NAME" == *"-rc"* ]]; then + REPO="$(echo ${NAME} | rev | cut -f 3- -d "-" | rev)"; + else + REPO="$(echo ${NAME} | rev | cut -f 2- -d "-" | rev)"; + fi; if [[ $REPO == 'grav' || $REPO == 'grav-admin' || $REPO == 'grav-update' ]]; then REPO="grav"; fi; @@ -60,7 +64,7 @@ script: ASSETS="$(echo "${API}" | node gh-assets.js)"; TAG="$(echo "${API}" | grep tag_name | head -n 1 | cut -d '"' -f 4)"; if [ $REPO == "grav" ]; then - TAG=$TRAVIS_TAG; + TAG="$TRAVIS_TAG"; fi; if [ ! -z "$ASSETS" ]; then for asset in ${ASSETS[@]}; do From a614c8c7cc2e5872f9b2fa2e1dab78178783ba09 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sat, 24 Oct 2015 12:18:54 -0600 Subject: [PATCH 02/21] Added CSS Group asset support #374 --- CHANGELOG.md | 10 +++++ system/src/Grav/Common/Assets.php | 70 +++++++++++++++++++------------ 2 files changed, 53 insertions(+), 27 deletions(-) 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 */ From 868a61dd34160c4fababb7bfd850c409cb2cab1f Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sat, 24 Oct 2015 14:53:16 -0600 Subject: [PATCH 03/21] Fail quietly if file doesn't exist --- system/src/Grav/Common/Assets.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index e2f39d2e5..17bf5787b 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -976,7 +976,12 @@ class Assets $link = ROOT_DIR . $relative_path; } - $file = ($this->fetch_command instanceof Closure) ? $this->fetch_command->__invoke($link) : file_get_contents($link); + $file = ($this->fetch_command instanceof Closure) ? @$this->fetch_command->__invoke($link) : @file_get_contents($link); + + // No file found, skip it... + if ($file === false) { + continue; + } // Double check last character being if (!$css) { From 3e3b4548e9fc960d53ef47f44c74566d87d0fde3 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sat, 24 Oct 2015 15:21:25 -0600 Subject: [PATCH 04/21] Fix for inline JS and HTML entities #376 --- system/src/Grav/Common/Assets.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index 17bf5787b..677aee915 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -421,7 +421,7 @@ class Assets public function addInlineJs($asset, $priority = null, $group = null) { if (is_a($asset, 'Twig_Markup')) { - $asset = strip_tags((string)$asset); + $asset = html_entity_decode(strip_tags((string) $asset)); } $data = [ From 8407e5b2959b0e0b9648654540c5d92c0cc44be9 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sat, 24 Oct 2015 16:01:22 -0600 Subject: [PATCH 05/21] Metadata return a new Data object so nulls are possible #375 --- system/src/Grav/Common/Page/Medium/Medium.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index cf15863cf..9fc6640d9 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -68,6 +68,16 @@ class Medium extends Data implements RenderableInterface $this->reset(); } + /** + * Return just metadata from the Medium object + * + * @return $this + */ + public function meta() + { + return new Data($this->items); + } + /** * Add meta file for the medium. * @@ -376,8 +386,6 @@ class Medium extends Data implements RenderableInterface $this->querystring($this->querystring(null, false) . '&' . $qs); } - self::$grav['debugger']->addMessage($this->querystring()); - return $this; } From 5db8197db2215c1a676d78e3367e8ad959c537c6 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sat, 24 Oct 2015 22:35:44 -0600 Subject: [PATCH 06/21] use a regex to remove surrounding tags but not inline ones! #376 --- system/src/Grav/Common/Assets.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index 677aee915..d2bfe7c0d 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -421,7 +421,11 @@ class Assets public function addInlineJs($asset, $priority = null, $group = null) { if (is_a($asset, 'Twig_Markup')) { - $asset = html_entity_decode(strip_tags((string) $asset)); + $asset = trim(html_entity_decode($asset)); + preg_match('#(<([A-Z][A-Z0-9]*)>)+(.*)(<\/\2>)#i', $asset, $matches ); + if (isset($matches[3])) { + $asset = $matches[3]; + } } $data = [ From 8478d690a06344065d2cac1c57c6e23010c73462 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sun, 25 Oct 2015 16:20:01 -0600 Subject: [PATCH 07/21] Optimizations to the TAG regex handling for inline CSS/JS --- system/src/Grav/Common/Assets.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index d2bfe7c0d..f1a61b349 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -42,6 +42,8 @@ class Assets /** @const Regex to match CSS import content */ const CSS_IMPORT_REGEX = '{@import(.*);}'; + const HTML_TAG_REGEX = '#(<([A-Z][A-Z0-9]*)>)+(.*)(<\/\2>)#is'; + /** * Closure used by the pipeline to fetch assets. @@ -378,8 +380,13 @@ class Assets */ public function addInlineCss($asset, $priority = null, $group = null) { + $asset = trim($asset); + if (is_a($asset, 'Twig_Markup')) { - $asset = strip_tags((string)$asset); + preg_match(self::HTML_TAG_REGEX, $asset, $matches ); + if (isset($matches[3])) { + $asset = $matches[3]; + } } $data = [ @@ -420,9 +427,10 @@ class Assets */ public function addInlineJs($asset, $priority = null, $group = null) { + $asset = trim($asset); + if (is_a($asset, 'Twig_Markup')) { - $asset = trim(html_entity_decode($asset)); - preg_match('#(<([A-Z][A-Z0-9]*)>)+(.*)(<\/\2>)#i', $asset, $matches ); + preg_match(self::HTML_TAG_REGEX, $asset, $matches ); if (isset($matches[3])) { $asset = $matches[3]; } From 79f6380aae36c3d6bb354a73d90f43216d757ca4 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sun, 25 Oct 2015 16:43:52 -0600 Subject: [PATCH 08/21] improved merging of meta tags into title/alt/class --- system/src/Grav/Common/Page/Medium/Medium.php | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index 9fc6640d9..d3d3e6298 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -213,9 +213,29 @@ class Medium extends Data implements RenderableInterface } $attributes['style'] = $style; - !empty($title) && empty($attributes['title']) && $attributes['title'] = $title; - !empty($alt) && empty($attributes['alt']) && $attributes['alt'] = $alt; - !empty($class) && empty($attributes['class']) && $attributes['class'] = $class; + if (empty($attributes['title'])) { + if (!empty($title)) { + $attributes['title'] = $title; + } elseif (!empty($this->items['title'])) { + $attributes['title'] = $this->items['title']; + } + } + + if (empty($attributes['alt'])) { + if (!empty($alt)) { + $attributes['alt'] = $alt; + } elseif (!empty($this->items['alt'])) { + $attributes['alt'] = $this->items['alt']; + } + } + + if (empty($attributes['class'])) { + if (!empty($class)) { + $attributes['class'] = $class; + } elseif (!empty($this->items['class'])) { + $attributes['class'] = $this->items['class']; + } + } switch ($this->mode) { case 'text': From 95fd54d90942bd4c003763a67d4ea377d85440da Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sun, 25 Oct 2015 16:49:28 -0600 Subject: [PATCH 09/21] Moved grav variable into globals and removed from template variables --- system/src/Grav/Common/Twig/Twig.php | 1 - system/src/Grav/Common/Twig/TwigExtension.php | 12 ++++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Twig/Twig.php b/system/src/Grav/Common/Twig/Twig.php index 5b2319561..c983a76f4 100644 --- a/system/src/Grav/Common/Twig/Twig.php +++ b/system/src/Grav/Common/Twig/Twig.php @@ -142,7 +142,6 @@ class Twig // Set some standard variables for twig $this->twig_vars = array( - 'grav' => $this->grav, 'config' => $config, 'uri' => $this->grav['uri'], 'base_dir' => rtrim(ROOT_DIR, '/'), diff --git a/system/src/Grav/Common/Twig/TwigExtension.php b/system/src/Grav/Common/Twig/TwigExtension.php index 9424e8f87..2da411210 100644 --- a/system/src/Grav/Common/Twig/TwigExtension.php +++ b/system/src/Grav/Common/Twig/TwigExtension.php @@ -36,6 +36,18 @@ class TwigExtension extends \Twig_Extension return 'GravTwigExtension'; } + /** + * Register some standard globals + * + * @return array + */ + public function getGlobals() + { + return array( + 'grav' => $this->grav, + ); + } + /** * Return a list of all filters. * From feed15f75ba48a5b083430c7b89015dfac702ada Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sun, 25 Oct 2015 18:46:07 -0600 Subject: [PATCH 10/21] changelog update --- CHANGELOG.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78b7c9416..4d106285a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,11 @@ 1. [](#new) * Added support for CSS Asset groups 1. [](#improved) - * ... + * Missing pipelined remote asset will now fail quietly + * More reliably handle inline JS and CSS to remove only surrounding HTML tags + * `Medium.meta` returns new Data object so null checks are possible + * Improved Medium metadata merging to allow for automatic title/alt/class attributes + * Moved Grav object to global variable rather than template variable (useful for macros) 1. [](#bugfix) * ... @@ -28,7 +32,7 @@ 1. [](#improved) * Moved hardcoded mimetypes to `media.yaml` to be treated as Page media files * Set `errors: display: false` by default in `system.yaml` - * Strip out extra slashes in the URI + * Strip out extra slashes in the URI * Validate hostname to ensure it is valid * Ignore more SCM folders in Backups * Removed `home_redirect` settings from `system.yaml` @@ -39,7 +43,7 @@ * Debugbar vendor library update * Always fallback to english if other translations are not available 1. [](#bugfix) - * Fix for redirecting external URL with multi-language + * Fix for redirecting external URL with multi-language * Fix for Asset pipeline not respecting asset groups * Fix language files with child/parent theme relationships * Fixed a regression issue resulting in incorrect default language From d086664a61f68bb8bf5a95117e106e7c3792f580 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Mon, 26 Oct 2015 18:06:28 +0100 Subject: [PATCH 11/21] Check a positive value, not just "true" --- system/src/Grav/Common/User/User.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/User/User.php b/system/src/Grav/Common/User/User.php index 21cd61c38..68a8d4d9c 100644 --- a/system/src/Grav/Common/User/User.php +++ b/system/src/Grav/Common/User/User.php @@ -138,7 +138,7 @@ class User extends Data return false; } - return $this->get("access.{$action}") === true; + return in_array($this->get("access.{$action}"), array(true, 1, '1', 'yes', 'on', 'true'), true); } /** From edf6f86cb539e276c315b455df686aa4952a21b2 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Mon, 26 Oct 2015 18:29:22 +0100 Subject: [PATCH 12/21] Add a Utils::isPositive(). Use that. --- system/src/Grav/Common/User/User.php | 3 ++- system/src/Grav/Common/Utils.php | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/User/User.php b/system/src/Grav/Common/User/User.php index 68a8d4d9c..e11be723a 100644 --- a/system/src/Grav/Common/User/User.php +++ b/system/src/Grav/Common/User/User.php @@ -5,6 +5,7 @@ use Grav\Common\Data\Blueprints; use Grav\Common\Data\Data; use Grav\Common\File\CompiledYamlFile; use Grav\Common\GravTrait; +use Grav\Common\Utils; /** * User object @@ -138,7 +139,7 @@ class User extends Data return false; } - return in_array($this->get("access.{$action}"), array(true, 1, '1', 'yes', 'on', 'true'), true); + return Utils::isPositive($this->get("access.{$action}")); } /** diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index c0b15af44..8c55669a2 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -377,4 +377,14 @@ abstract class Utils } } + /** + * Checks if a value is positive + * + * @param string $value + * + * @return boolean + */ + public static function isPositive($value) { + return in_array($value, [true, 1, '1', 'yes', 'on', 'true'], true); + } } From 293dfad87e87120cb8153ca831a2a24d1914bad6 Mon Sep 17 00:00:00 2001 From: Thomas Breuss Date: Mon, 26 Oct 2015 19:35:08 +0100 Subject: [PATCH 13/21] Use of capital and small initial letters --- system/languages/de.yaml | 60 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/system/languages/de.yaml b/system/languages/de.yaml index 7cdc5d8e8..798e14d10 100644 --- a/system/languages/de.yaml +++ b/system/languages/de.yaml @@ -1,43 +1,43 @@ INFLECTOR_IRREGULAR: - 'person': 'personen' - 'man': 'menschen' - 'child': 'kinder' - 'sex': 'geschlecht' - 'move': 'züge' + 'person': 'Personen' + 'man': 'Menschen' + 'child': 'Kinder' + 'sex': 'Geschlecht' + 'move': 'Züge' NICETIME: NO_DATE_PROVIDED: Keine Daten vorhanden BAD_DATE: Falsches Datum AGO: her FROM_NOW: ab jetzt - SECOND: sekunde - MINUTE: minute - HOUR: stunde - DAY: tag - WEEK: woche - MONTH: monat - YEAR: jahr - DECADE: dekade + SECOND: Sekunde + MINUTE: Minute + HOUR: Stunde + DAY: Tag + WEEK: Woche + MONTH: Monat + YEAR: Jahr + DECADE: Dekade SEC: sek MIN: min HR: std - DAY: tag + DAY: Tag WK: wo MO: mo YR: yh DEC: dec - SECOND_PLURAL: sekunden - MINUTE_PLURAL: minuten - HOUR_PLURAL: stunden - DAY_PLURAL: tage - WEEK_PLURAL: wochen - MONTH_PLURAL: monate - YEAR_PLURAL: jahre - DECADE_PLURAL: dekaden - SEC_PLURAL: sekunden - MIN_PLURAL: minuten - HR_PLURAL: stunden - DAY_PLURAL: tage - WK_PLURAL: wochen - MO_PLURAL: monate - YR_PLURAL: jahre - DEC_PLURAL: dekaden + SECOND_PLURAL: Sekunden + MINUTE_PLURAL: Minuten + HOUR_PLURAL: Stunden + DAY_PLURAL: Tage + WEEK_PLURAL: Wochen + MONTH_PLURAL: Monate + YEAR_PLURAL: Jahre + DECADE_PLURAL: Dekaden + SEC_PLURAL: Sekunden + MIN_PLURAL: Minuten + HR_PLURAL: Stunden + DAY_PLURAL: Tage + WK_PLURAL: Wochen + MO_PLURAL: Monate + YR_PLURAL: Jahre + DEC_PLURAL: Dekaden From 8b414c388d19bf9a21bd5a23c2394df3fbd4276d Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 26 Oct 2015 17:14:58 -0600 Subject: [PATCH 14/21] wrapped_site option in `system.yaml` --- system/blueprints/config/system.yaml | 11 +++++++++++ system/config/system.yaml | 1 + 2 files changed, 12 insertions(+) diff --git a/system/blueprints/config/system.yaml b/system/blueprints/config/system.yaml index fca66cd30..b17fc3605 100644 --- a/system/blueprints/config/system.yaml +++ b/system/blueprints/config/system.yaml @@ -750,6 +750,17 @@ form: underline: true fields: + wrapped_site: + type: toggle + label: PLUGIN_ADMIN.WRAPPED_SITE + highlight: 0 + help: PLUGIN_ADMIN.WRAPPED_SITE_HELP + options: + 1: PLUGIN_ADMIN.YES + 0: PLUGIN_ADMIN.NO + validate: + type: bool + absolute_urls: type: toggle label: PLUGIN_ADMIN.ABSOLUTE_URLS diff --git a/system/config/system.yaml b/system/config/system.yaml index 366d1e549..443788d67 100644 --- a/system/config/system.yaml +++ b/system/config/system.yaml @@ -2,6 +2,7 @@ absolute_urls: false # Absolute or relative URLs for `base_url timezone: '' # Valid values: http://php.net/manual/en/timezones.php default_locale: # Default locale (defaults to system) param_sep: ':' # Parameter separator, use ';' for Apache on windows +wrapped_site: false # For themes/plugins to know if Grav is wrapped by another platform languages: supported: [] # List of languages supported. eg: [en, fr, de] From d88f56316d679e1bf13992673bf2117d46762f3b Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 26 Oct 2015 17:15:25 -0600 Subject: [PATCH 15/21] updated changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d106285a..aad2c4b8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,16 @@ 1. [](#new) * Added support for CSS Asset groups + * Added a `wrapped_site` system option for themes/plugins to use 1. [](#improved) * Missing pipelined remote asset will now fail quietly * More reliably handle inline JS and CSS to remove only surrounding HTML tags * `Medium.meta` returns new Data object so null checks are possible * Improved Medium metadata merging to allow for automatic title/alt/class attributes * Moved Grav object to global variable rather than template variable (useful for macros) + * German language improvements 1. [](#bugfix) - * ... + * Accept variety of `true` values in `User.authorize()` method # v1.0.0-rc.1 ## 10/23/2015 From 47e1eab6c154695c86998f75a89e2007f1ec735a Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 26 Oct 2015 17:31:48 -0600 Subject: [PATCH 16/21] updated bundled composer.phar --- bin/composer.phar | Bin 1116534 -> 1147592 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/composer.phar b/bin/composer.phar index deead1618f6b1e646cb9fd1d2146ab224bd01ea8..72b1546b2ff5624ec65ce7deecd8194c0580a44d 100755 GIT binary patch delta 39936 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 AwEzGB delta 20452 zcmbV!349dA(s*WecV>38$4u@!n}cjZ?t?%QazeOC!hMFYBpVV4n~;M`1QY}mQDBtv z0s(J9Kv72p1o0^-9ue_9!3z};kW+jLD)6tKp4|XG-}n7L`2DD!?&|95s_N?M>Rt}q z)$i9eeYY>t2|3xldS&#?$(EPv1{iLe<>S*Nf2JEMUKr@(<9KK9C;}U2ojom=N}+N^ zfmI%-7e&!V8wm_O)ILX^tB(~Q7HK7cdp{aHKz=JaRNiY8*F)N-~G$v z3z4+JV(=6FCEAO?+dnLrB#ZvEvC0stC%xnuhF-MroFQM_)`OxG_+)WLnY__ATwZ11 zz z$C2c9jy4h)+Angv{GuU7PT>Ppa{j!J&vVa~JSa07IXCaGHcYno_@vIgQ0Z;h%G<=r zy(lRH-?J6Z_HuWQ_Y>p%X(NG!xR@DU&u5XenqptFl^QlEh|>9Dxx2(ns0^jq++! z5LNGHQ@+?eh;}FNLsQ(_UNHpu`inbJs>C7)w0-#fopPRUk~)zjq`Ch7Z$`*&-#9T! zn>K+z%J)w~3n^5wwlY3Gxq~J=uhP_+qt!~;?Bmn@?AIgJN%S`di}PdXAOwED@x@Qk z8hVMDniUZE;XgZnk)3G4B{u))zOE@9Q%5v6&2qJ-wKTNct>F>)#Gx1N!m(Anz`m~9 z#joA()Ow;N1<)JLDmj3M!BF7AGy}thKZ-%{rDA-nEXRg=m{r zbDK@8Ic)1MuECiSK@sTQp0GomF|r#{)!f`fI2ayF5eT%Nicd!iNRb~EZItL%u~>Xe zPcaCr@7pJklJE--Al*-BJQMiEM?t~Zy?}OIBn_d3PHC{lq2C}{nBghx^czTP1plJY zx}J0#0;}FO* zRN{fYvO6G9v}ntNz)kBvxFlaUhsg_qO|lXYsgnBuN7{Dm**!P`+Mo~g7guW@Nrlbt zOrc{1CQweM1(vB@-GM$nzqSANfY$0Oe;F7~G5!cF6r1Acv!o zz6{Hug@EuLv@kS0TU@GH9)YIypY_5%-D&Ha;c4Q8tV&{4lu3?`2o_5M zXd{7-{<>MGGEN(Lxh2A;&dQ2wv+3}>M%ABnHS+SV2qPWmy@+xZ^LyN{CM}lVmzn4| zxiB(7ygP!@Cva)V;ulc&#VRIQCGYyZ6QgRA(EK=3lhnz`VoEeQs)QDrqe|31qtVRP z&AY&8eE7=WL}`xjN>m?;S`wX03-h9TioE7q2&`ROJr1{5O=`bKQ+_9+zS72C`cmC^ zJ7bOV47*K?)YdA2!*{&exu#ppni!kB%N|Tg|I6N2bf6O?7DV8w@VkGJzqEzQow1TU zDkfCr^*pWmLSz--RbGvC{D zakn6`1?_;)C$MJ8@^NxWYN&k7VMNk#;?KBVNh5(f_jO;WZl=c^COIY{K)j$C41rTd zEi7EqEmpQCaPo|VXgcFn3DlchL8f9BEWb@2mJ}mjPl%$eF^=-k%jlvBeFE!#nNjXx zu?MmkEw6WkhMrE>rjKw!;C+2O7}1Ck7E(K%ZcXbWDHeg3u038LZ|h0)A;>j}yz12d zp>68~F8Re@QWp)FXeEIIJKC(;)-S2npJ*~T_UzRG@T)gO`DdXdL6NcP41hc^>gM>_j?S7zqtCxS5NZ?_eVK1H- zLS@2VN`8R&P%>>KaD)HVOLA3yrplil?d`FWM;EL1MzA;MYwPY{eyX@k3*iWSbg^r^ zEEL30zETScX~A8PK?|D-28ma+orS=jgZ?=}-Z(!}4(;ur7=3$}(ZW5wM~dGJryLRZ z^PD?Bm(TScsd97yW3!g1cl_n(;f3<~LP3@b{b{%73n$ZpwP-voG!?mN;p?I)YUhb) z>SG2?I4h@54wp+xQsuN_lf1r|8s49%^cRQmugI36g>q+!udFN4B8AA3X_U^2l6sX+ z4m$72-*xtqrI8f1yi^NBCY4f*mr!uyr{A3=I|miYEoD|Yyi8ll$z=_c7?d@r#O9$D z?npT|L><>$9;$8=OSD*lK<8(|GWpvEJT3RpeBH4=Q$rODEQvx1-0$la?Ez9`-hTH&7G$p94pUAzD;L;I6%g_n|b$P{O+gO`(O@!IRVxKEs)u zh`n$H4W&?CSi#9354MO$@VG)IPhehU));wDBhh=TijY3UkCG@KqMhzG4$&;gFtnaF zH4mkR15*}3hK&7^BluC{9 z$f{~FKwA(5PWxdCCzsCkUo%CJOR93=BhgAV_ygLds=*6Y+EBxXX&Tr*Ow&N{aE z^3cd{#MKzNZ)~kP)Hd|0D}+-AaHuYaYa`K& zX}|OdzVe~*TE8>n>6%=CSPv|-&!O^2lpmhpP z^pFE;!&E}cuv0(#8Vo!%J?(LtiYDj?|+G&v#*@xqFJ4(h#7MjPI<+?$7z%|y0kcUw@b^g*y=}$Pib~Q;L=6c?vX#N z?=5eu*H+*=^`of}qNg^}!o5?QY2o@*7cDe2%%FuM4O-KXMol|Pqh=2w)3ng9Y1%|F z0M{Q`1_b_bcxaLQ`7})n$_(F%iGGy~h&qIsT}nVRjbnyIH#XHv!jD@aGgsT_!slt4nKw_{ z+>Xv0rII{>;tfyf*e9nfjF3ZmTRobI@Mxy}wtk`oLsz0p0!vyBEs<|uKo364kf9|b z!wTdr3$n!*wf&XA30wWYm(MRq74Oh02^=|S&@LQ@Mx1rnb^OMs2Ow6rkXDydO%wLi zMkVl%@;NLvM#MC_YnwXiTs1Au_69Yb`I4q|0{^Wm*UQf@Os4|=YGFJr7#7ixcSqu) zBaE%3wQ-iS-DQujbIlssTn8mCDFTiy)0yR|cYXr7pXem{pNn^cfzt)SP(7XlZ4WD|FsU3wuXpt0Vb7_aeDh3xceY;wt&>+g}H*O`m{!lxs}ek*cP zf$4VBjZ_GQHkHik$JZd4z{q-1Lu~to?p;_LH+&^8-IyY8du246VuzSGE@(^=QZLDlr53d|H@7Dx*>6+TAV2t33~Rqlc7GiSue@RO zhnie-Al#p8;CH_BMw)ok9;dGT#V zsH_?}u(G0bi2UfK+O7}om+sIlkB!>#!!OnP9o1I?7%+7(VLR6SzLb%({><1>bTu=` ziXyIUp3#ExYfYQhw)P=5SXu1PY~}oJtZsHY>@kI~x;q;LmEnv5MuagxLhNYPA1cBb zPFWJpJivf|7~@C3Vs*PBG-7tx(3VuKN(rrs^g?S=;e`K$SYVohD|k9cp|&9SIGT~*Od=C2Ia^zu zb8Fff8tYNngrpLd$h7ESMKbd_Yf6H_f-V#mrZBH52U3}CESyVczE=)qFe@0PESu@g zz``8nAtj^-^MYCVq7Ssuc-Xl=XKqCv{N! zFVyVTrOXzJSG$Zk7EJ9K7w*8y#3a-jvRU6aH3_7AgFh5+<^#o>Fvucay^jfkWy_hd zl+4NHOa(0!-_1;=rEPaJKhY^JTftc2rF)n%+OTv5&eObtnd$vJO7W)M%gh7&T0s-V zspX6X{A>K+9;O9zI1QLM}LX^B2Yh{eNKmEjMWkzU|G1!K@#cd@?K5 zmSEdTmQ(isz&ys-Zo*A1g3JwuaJchF=4oh7vvh~(K#MO+^&LS*;6OZuPGi+c#wnPz z{X+iaoR)Gs9Wg@}4hj4d-~+ z(@n5I$sf!njeb9a09XECPQm3rnTVU&P=c;99qOVcLRR&`!G>#0y+IWeSuzn2d7Uv6 zQsGM8b!H|D?g@I1*H)ggg<+!@h?>BAtKb8cJ%01hJ(X)Zc4+`a4Ps|QQ2=9F`w^2P zZ~NI-`5~0O#=w(1uWk~x{}OH1RD+0nH0S~6~?1W)-anVqby)9ep8 zKcy;--D`xk!QJ=*)jP^4JAu1_Eo6uFQ!GhNe!BSq{#K`voOL2fDgt7kM0QpU3uWk4Bg zWB;;9BVf+ZEn_P|sAjE7^aOUkg;L(%fRiD6kYa6Q?=b1f{tm~Abn(iEZEO`@?_HM& zVmNGBk7m)-!Ma(Betb6jCI>NjCVx1%fDO7?{>t|Y*e7%zmIT$;z`8rxM?F;*rD8E# zr#eYou(+U<_m;5ZybDL|VNwd0vZ9I;1GUT8u6>ZuGl70N+l%lPLCKF;&bmG1dH7^G zTYr-fr~y>n%|59ko#?0#vy#2t(@9W}Y?k3aYdmM|T;_dPX+xKv(T(+ms|T4V)d&P6WI~>xE+O*wz-|Os1+F*Z!9ZO4hzCl+)ApH9cb|bCB(hRWdVy*PE+b;AT zswmoa;kKu;5WkBR;h4gjmEF78{VYt%;2q|sM)&lQb6Z?VwGS7I^zT9MThektm6p zt8)E4mZPM=dXSBxT=gI&Pe^5h>Vp`JE9j${8YT00z zHyW3ahDgG=zw^Eddf%frIbK}gad7-J>!*BriWP7|=PqU zu;U^d=^cW293F=J%v#{z7m?-WO4b0@N_0TmE6^)@IPs!o5)2L!9^)iVu>Mu8~OSeA{S*^xx5bmRw;aPh52a>g&I=r9=raApU_q^p;Me zS7AJf!828$XZ9la|B1cs;>><9{VJO|$YfW~%e4)z+UZptQ<@sv8q`34hO4d3In~uR z!QpCcZEkf`W8hCu95Y;anoW%V3j!?vla0*ns-Ep^bvL@F{sfE-t^TCFfy4+SfI{iN0Xnqo(tAxXJmOSgZOi!(%wUN-n(mHxYf^K zRBr33yMu|mC8lj`Qy;q};@Pgyp5r0HD{*Ji zO1eG4oK0xAFPG?k?2@0lF}+%<8$&Er+n65dqbq_bWxD5XK}+bPtL{Qm5N(qgY@eHZ zLVK02gOnl_eweOWZ?7e(7W)ma_3W-W?Jjp+o1H%1lRr5dl!|#Ncf04M-cV;tVv^}L zldHC&*&aL5eM5b|eWE)S7?&jgj*ZuIIz)wwPQCxaCf6)ilP8xE-{P#Djw@ndoqA%* zAoZS;t9SEJd*ESNZB>VI*zr%Yy1c0ZTJX(YYLP~)Z0^9i#4gH7X~u-@V92>1O zK-6JfkfnVqMyRwo)s;sF1q+2NDXx`6UA4Ra^NH&&;`+Nnrl)3lURo%R?L z^)|sd1v3$tnsBu`o01Thit`q(7ph#3akit^YrBEpiEgbfU+q@kjA@tJ2FyuP&CRAA z?9Mjy9CQd`3`O>MwS^djXDSX4ZyH{|*5(;R)ATdFX<(g4rtve0&^+!cQFXD2s?m^4 z5hV=ktM!o!(KTbnr4jSUWBf-NS%0BH^Ict({==MZorsze)L28!l0;jptEI_V>q>OW$Bu9dGtnp< zSq@A`;mSZGpw>V%PWR@Pj5|VR`Kf zCQa4#@_Z<3r|Q@Q*e4nT;DwdCA@X;3`oXGcx_&VHKHaLn97ckmGfePRsWTHHy@(Hn z6*dfg{yHX9WlN!5^)M(~iY9w?JREDrn5e4N;HUVm(!FURR6?NgU7eqDex0sLP~A}i zZXPrYK+Du@n|OMAvE70GJ>Tv~#XM;m%zRoG4@;_b0ZPxOb-P$EtzaeUIo(ReJIl?_ z>n4W5$6*4MjEDD>cXZ3WeX?QIeqA7l@9L7hb*XENtXj=+%Hab#r(VhZQ0E>3zyG95haqQlMy3G14b@}Naz^LdyS1aqHNw^2-{nRJ zif{S~Of9X=?fAUURcDXyXu(vqtF);J&FzM2XI-7Ej_jEmJ1xPG8Kw_}7dkDzCe_ON zw>n!IplY-}4s65qc=`*|hry;cyb9PGrZiu=_+8ahuNl4H?qyxC9 z^Y_2S12xtqndH(x0-&f?$KA98tGfm^lZB+|*zKBaA3{BzcY`Jiu1?+E3t(?gvt2ow zq{ocIxWl5P3{KYn%D@L->m_A$s{XVNa@R4EGB#7cj)8_Nn1Hop>qR9tTYs5@F@Ays z>G_!1bQkD-mFj%`E(XThj9A$l(>_eOK2oXet$&^pvDG!UIj1zas#=@z-x-O}qeSn9 z?R`uJ<+&35w=8^Bf}I}kqc5=GCDo08;oCm?5+%N`{)c4f)}l{_EiK62o)&$X8D^Xo z1C)T<^|1_m9dDLE)T8_#UWz=O>@7qocP-HG302A;(qH4?gP!I9W%T3vnPwFH{>^%U zS3Y@(bc}pif7M8YraC!z{3Aom+WDMbX?sNlcNZ?ZlVk{YX9Tolxv&NK;b$ z4Ap&Zh^|TAK{+$Zz%e&_h3Nw^^$PC46dILAZL?S?=&_#)n4PI{hG8gDnuj|KY% zLjY`k(hvbh9!IB!pA}%=X~QUg170f(dCHKYY~Nrw$iae{Tt4hA;rx{=<XAy8MpU z2U34TjtvSP8x}J1!V7`Qk0*Z4lBPkROn5p40-a29A)QshUYlA^abX_ zA2e~f$}^`7-SyO>t9~(X%GtAqfn81x$4S=R(0bd?hCPh;`%drRhkh~Wyn_?&T#)~p z;os^af<=)!UKx4WaNg*_r~I$*<(^;^i=JDcqigVSo=d0HmG1$(7VqL}l8+B_~&xj&zKgVC8thO3B6SKjK)J*9ps z_<1@O-uVTc{;{5B6NC@re3i^8T>rjs&Y#}iD)&Fl4a)4=dv3PKzpN$mGf|&&f>&@G z?&hPQ_c89;Uuu%z-eZCZR(#7=k;Wx{Yh?w9K4-otpvSEn`f1jie0#qNIM z25dV;eDnn84_QC>2EiYP`B1`Q&n|*%|H(&Fw6Q;OL8_RJL||^=sUNvsM5F<5PXr%J zG3+O~AWCTHNp3(F4fyy3Z-i(5$x9UP)03FOQpI`YB$q|;icg_TTbCGuVDCxvDXUJQ zd8)G#ze44z6S{H=yQxaCpXLg%gl?y*)X2l*!A4AMoZ+qT*lA9r4P!q?X{&W-PIERm zbPsYW{>0@_qGNwTg{tHi>8%?1gFhkpeLYag>k_EU%@BNsvr3UW)aR_=5m!DSGZ>xHogTqF9-o(`Gbp6s{Y^- z3c6N|Ct70_`%t zn`DBI5+r}PH{L43_R&@YWQ0n6;a>{kRXL;?aAZ45xYHqJK<7Cw0@4a`&h{cc0g`^= z{ck2^hBb+35Zk*;AsEs*Uq-R*`BY~j-t3d*x=0vxmo5=D1faH43wb|`3-2lB!=WTm z^7XQb%P~Bpm5~VExz%oedsLmd5y!>vKHM zI58!I@g~msw~uihgr!Isx->^M#Eila*UKIJ<1P$)!%KNTI1_vWga1X2$PEwELZqPv z^_c;@9wNoUS0Pft-*M=Me}_tVc<{=#^;bRs`c4r214gu9Mxnm3wvU%((``^2CN)6c z89UK)P+Dx4Rd(;CaxI2FK#1cq#(> z6!c`6%;aHzju4Djnp`*uS;EO~P~V3i^p{=1q8#kQuZyAA^j#Ux4gcngytnp#5cw;* ztBzG@&)>QDT+u708BRCm(pq8gVp9YRdCq2pLCv;Em|xEifl6ni88xdpoYP7W{E&^Pb-jkg)KR~o1=<~CICo~uS1 zm@e~i9BqKo%lz;g${A~of)#$a%uAliYv1TYA^jQ-l6Zyp^VGie9M+yR2nn$A3ZD!a zYw*)*6r$m`EBt(pp4;JKr7=)>@OR#>!^bPTuks~2+&$oq>wLh2=Y>$nxyDO3@E83% zuH!EkVUmBvHQoe|UE{BoQYJk~okT}RYmB1=3|2}22wd86wxX;Ar8S@PUwwb zHzy<@_=yvW5M=T~EK{pY-~~J#++uGfN0?aR-mL#E7Exb>RISoQ!=f#mN%?6u|BB=Z zLKF;3p2iEvU3kg2N5X5J+0XKB_~Tjr8-0VbtpUzG$FDZTtHpJrg;?d<^L!qotlh%j zV-8G8F*!(!Dr#+wH7M1u^G9^B`$^txYQ$%K_`^F?fUN=HAK<@8A%R~ye05U51Fk3OK@$yKpA(9C5yofZhTyHcdDi4AAtD$b9pWFF>DHV< zm9w=C?yp4OcsyIGAwI|tM(0T7a3uge%#IxCbtVlqjFtkJG-YWI34`JK8r(xaES8LL zG*@Z|`$y>iCqIG95ko)@_Ab@M48&6{z5{aCk|&&ncJd^M*hf1)&%y;-qu#{eBgdiT zBL`IWCGQ;VjcxWiS4*pl^r%a-kHSY?jx>{FB4p0d$FTYNa50q)66}rW?_JJ1xKP4} z@Y<;wqPDWpM(=p=)&X;r%AVrxDSg5q_horf4*Ypc2xrkf(W$_eJSi6je=973#(dnL z4jHZJ+w!F>?_>!^qz)|_KFX28Kq|n!_fsQAfrw>fQsC+_A?$DIDY*sGB_<>dXEe2D zW(TG_65}-wi)qbxI8i92SkvO`JDQp_HKf7fLa8k1Klgxd3Z?8@@#Bl6XR%Hro92im zzPCuKX40XkSaKk!FP3ujX|ZXs_;|w@0lO1$<43)%XX2o#L@GwGr9|qjk8ey)hBGD7 zN}T)rQYnN>i+4L`xL~zKAGy|qx1r7B`JUPT7v-&b$ru6)Uo!dz<>$AcowDKu!}q+17cB*rJf`~gz5k~maq z@E(N;wWWVcC=3=>N)g71X%ps*?Oq*!J1iI=#lZWO(l;Ds4pxtpGT~U26zZwCUL^%5 z#b%_bf7J<)e2JzCdW}Ff2+d?+6=8kUFe#*qhYBgul480A$pI&NO8y1KRlP~xrRXoS zOR^`Y+LIHpy&W&JZxOa5$uoJ#9WK3i<4_Tx8zEKbVl!f44Nt|WzsQ9 zO4j5XrZkU|_I1fHbBr_(RlaqMlm?ZlczU@s24g9bbb~%)rOCKDQd8lXu~>IvtTZ(^ z9^a)lwqvA}nu=Dc-E=qF!8J~50_Z17aB7@%8cy`!f?qWWCLNqwi|^VN{)%V&u@<3; zf6!u-lrI8=@qc{+6Q~~U*Ct~;PC_LT9c>R2FyZ5I`nPy=Oaz50Y2m^U-ZNQcUaatv z-_2na?j!#n>Ffu42m`@9nDd2ot91hW+(S4^4i>?XGC`OI6MG6%J!8SnJRuD(jT1_t z*La}_T6zgn{{~e-)I48uYIyV`eE3&YE^Oj4`-5?ea{>lh-#jgZK+;m&-Zrz014`}_ z&|#GcNo4j8uPAPL#EFwnfX)GUH(XgEeBUJ_&nfEf^7WYsQjl_ArLbQ;Fm=r<0QOE0 z`ase+;jx=$sNf6}7uhS8 zf?sfbE*}Zv0X>hiQ&TS6R|(MtBvMk{o#(ZzYFW*#b5o1{juLLG>fQ~RyYX1IH;beQ z6QlrWd0#LoO|np7fx>M<4s0&5*_5Tv3U?O&#TM|uy$W+Acb~-jjk1%%)-K82VqF;n znRr;$(}YGCjk&UlQ^H`AM>5L8mxR~5B!OSg5Zf@peV2u9O5(4=OZ-g(D`IJznXh zX%;?rPchBU!93gQb*KsTtbKg4$%z%^PE$Nx4H~r~PQ^1{5@HuiAZdS?%Z<=Z! zg5O5_T435JUq5}nAtMLF(b2wFkoK2qVZ`fLb{T?o{SUB3CY$>rYL*eL`W-~rKw^U{FXd2j| zL$U6$LI&jP-E1?+tgQ za7S;ezdu>$4b6?U_*6=rysJ718m^m5l(mJ{){ux8Rc++%_a-%xE9(r!G1^*Zg$<0& ztSouhTJZsVn}nXSrI#&EDXF*lg=JEo6NAW!@eK{Li0tqv=yK0WbW{zfswo>-Q968_ z1CO7@cG|8qEV8|_kZF7+Qr!Hua{6uY46B6f7x6vj_7BC#ur_@0FvFQzgzx?9k#YKi zrctep=9ew6x72jq}zOKp#%(Nk8Xt(z79L&8_%0 zp$Vmczda(4skAZ-6Y(N6iI-v+{5^^kW1-?}#fLQ*VM3)Ky#qsx(jNW9)QM?|#UveM z@Q&$-uk^4EIur0{{PlQgs*v3)H!m0eOFL!g1POm2qD+)}ng+EsyGN+AffpxX%-=pq zid0Tblw1s)o`fl*Et8}|2&|UsV0Dd@>m>oJD|P1h+nC`mf*1nCcR&+*5vKK;vvmi<5c Cbc&<^ From 5c9c37888971ace2f79aa7b3c5ac0199272cfcce Mon Sep 17 00:00:00 2001 From: hwmaier Date: Tue, 27 Oct 2015 23:04:21 +1000 Subject: [PATCH 17/21] onTwigPageVariables event handler gets Page object passed --- system/src/Grav/Common/Twig/Twig.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Twig/Twig.php b/system/src/Grav/Common/Twig/Twig.php index c983a76f4..381efe56f 100644 --- a/system/src/Grav/Common/Twig/Twig.php +++ b/system/src/Grav/Common/Twig/Twig.php @@ -7,6 +7,7 @@ use Grav\Common\Page\Page; use Grav\Common\Inflector; use Grav\Common\Utils; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; +use RocketTheme\Toolbox\Event\Event; /** * The Twig object handles all the Twig template rendering for Grav. It's a singleton object @@ -201,7 +202,7 @@ class Twig $content = $content !== null ? $content : $item->content(); // override the twig header vars for local resolution - $this->grav->fireEvent('onTwigPageVariables'); + $this->grav->fireEvent('onTwigPageVariables', new Event(['page' => $item])); $twig_vars = $this->twig_vars; $twig_vars['page'] = $item; From fafd72fcd8ea43f2f252f2e7c13f16f596bab5f5 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Tue, 27 Oct 2015 18:18:08 +0100 Subject: [PATCH 18/21] Add a items() method that returns the Data::items array --- system/src/Grav/Common/Data/Data.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/system/src/Grav/Common/Data/Data.php b/system/src/Grav/Common/Data/Data.php index 6a35fbc9e..2a12eb22d 100644 --- a/system/src/Grav/Common/Data/Data.php +++ b/system/src/Grav/Common/Data/Data.php @@ -224,6 +224,16 @@ class Data implements DataInterface return $this->file()->raw(); } + /** + * Return the data items. + * + * @return array + */ + public function items() + { + return $this->items; + } + /** * Set or get the data storage. * From 24eaa24839a1e269cd8057436e4680ad2be89711 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Tue, 27 Oct 2015 18:18:26 +0100 Subject: [PATCH 19/21] Check that label is set prior to access it --- system/src/Grav/Common/Data/Validation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index 1ad2f22a4..8bdc064af 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -36,7 +36,7 @@ class Validation // Validate type with fallback type text. $type = (string) isset($field['validate']['type']) ? $field['validate']['type'] : $field['type']; $method = 'type'.strtr($type, '-', '_'); - $name = ucfirst($field['label'] ? $field['label'] : $field['name']); + $name = ucfirst(isset($field['label']) ? $field['label'] : $field['name']); $message = (string) isset($field['validate']['message']) ? $field['validate']['message'] : 'Invalid input in "' . $language->translate($name) . '""'; if (method_exists(__CLASS__, $method)) { From 36e52146f536d33a5ac8dc6785af70a9d13e1781 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 27 Oct 2015 12:35:29 -0600 Subject: [PATCH 20/21] changelog updated --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aad2c4b8a..fa91a22cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,11 @@ # v1.0.0-rc.2 -## xx/xx/2015 +## 10/27/2015 1. [](#new) * Added support for CSS Asset groups * Added a `wrapped_site` system option for themes/plugins to use + * Pass `Page` object as event to `onTwigPageVariables()` event hook + * New `Data.items()` method to get all items 1. [](#improved) * Missing pipelined remote asset will now fail quietly * More reliably handle inline JS and CSS to remove only surrounding HTML tags @@ -11,8 +13,10 @@ * Improved Medium metadata merging to allow for automatic title/alt/class attributes * Moved Grav object to global variable rather than template variable (useful for macros) * German language improvements + * Updated bundled composer 1. [](#bugfix) * Accept variety of `true` values in `User.authorize()` method + * Fix for `Validation` throwing an error if no label set # v1.0.0-rc.1 ## 10/23/2015 From abf6d6638ef8486c708225a4dccc274ef50e061a Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 27 Oct 2015 14:47:27 -0600 Subject: [PATCH 21/21] version update --- system/defines.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/defines.php b/system/defines.php index 2adc2b99e..b3d9c06e4 100644 --- a/system/defines.php +++ b/system/defines.php @@ -2,7 +2,7 @@ // Some standard defines define('GRAV', true); -define('GRAV_VERSION', '1.0.0-rc.1'); +define('GRAV_VERSION', '1.0.0-rc.2'); define('DS', '/'); // Directories and Paths