diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9430cf..2c478c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,29 @@
Pico Changelog
==============
-### Version 1.0.2
+### Version 1.0.3
Released: -
```
+* [Changed] Improve documentation
+* [Changed] Add CSS rules for definition lists to default theme
+* [Changed] Always use `on404Content...` execution path when serving a `404.md`
+* [Changed] Deny access to `.git` directory (`.htaccess` file)
+* [Changed] Use Pico's `404.md` to deny access to `.git`, `config`, `content`,
+* `content-sample`, `lib` and `vendor` dirs (`.htaccess` file)
+* [Fixed] #342: Fix responsiveness in default theme
+* [Fixed] #344: Improve HTTPS detection with proxies
+* [Fixed] #346: Force HTTPS to load Google Fonts in default theme
+```
+
+### Version 1.0.2
+Released: 2016-03-16
+
+```
+* [Changed] Various small improvements and changes...
* [Fixed] Check dependencies when a plugin is enabled by default
+* [Fixed] Allow `Pico::$requestFile` to point to somewhere outside `content_dir`
+* [Fixed] #336: Fix `Date` meta header parsing with ISO-8601 datetime strings
```
### Version 1.0.1
diff --git a/_build/deploy-phpdoc-release.sh b/_build/deploy-phpdoc-release.sh
index 42f11e2..8d3410e 100755
--- a/_build/deploy-phpdoc-release.sh
+++ b/_build/deploy-phpdoc-release.sh
@@ -6,8 +6,11 @@ fi
if [ "$DEPLOY_VERSION_BADGE" != "true" ]; then
echo "Skipping version badge deployment because it has been disabled"
fi
-if [ "$DEPLOY_PHPDOC_RELEASES" != "true" ] || [ "$DEPLOY_VERSION_BADGE" != "true" ]; then
- [ "$DEPLOY_PHPDOC_RELEASES" != "true" ] && [ "$DEPLOY_VERSION_BADGE" != "true" ] && exit 0 || echo
+if [ "$DEPLOY_VERSION_FILE" != "true" ]; then
+ echo "Skipping version file deployment because it has been disabled"
+fi
+if [ "$DEPLOY_PHPDOC_RELEASES" != "true" ] || [ "$DEPLOY_VERSION_BADGE" != "true" ] || [ "$DEPLOY_VERSION_FILE" != "true" ]; then
+ [ "$DEPLOY_PHPDOC_RELEASES" != "true" ] && [ "$DEPLOY_VERSION_BADGE" != "true" ] && [ "$DEPLOY_VERSION_FILE" != "true" ] && exit 0 || echo
fi
DEPLOYMENT_ID="${TRAVIS_BRANCH//\//_}"
@@ -51,7 +54,7 @@ if [ "$DEPLOY_VERSION_BADGE" == "true" ]; then
"release" "$TRAVIS_TAG" "blue"
# commit version badge
- echo "Committing changes..."
+ echo "Committing version badge..."
git add "$DEPLOYMENT_DIR/badges/pico-version.svg"
git commit \
--message="Update version badge for $TRAVIS_TAG" \
@@ -60,6 +63,22 @@ if [ "$DEPLOY_VERSION_BADGE" == "true" ]; then
echo
fi
+# update version file
+if [ "$DEPLOY_VERSION_FILE" == "true" ]; then
+ generate-version.sh \
+ "$DEPLOYMENT_DIR/_data/version.yml" \
+ "${TRAVIS_TAG#v}"
+
+ # commit version file
+ echo "Committing version file..."
+ git add "$DEPLOYMENT_DIR/_data/version.yml"
+ git commit \
+ --message="Update version file for $TRAVIS_TAG" \
+ "$DEPLOYMENT_DIR/_data/version.yml"
+ [ $? -eq 0 ] || exit 1
+ echo
+fi
+
# deploy
github-deploy.sh "$TRAVIS_REPO_SLUG" "tags/$TRAVIS_TAG" "$TRAVIS_COMMIT"
[ $? -eq 0 ] || exit 1
diff --git a/_build/generate-version.sh b/_build/generate-version.sh
new file mode 100755
index 0000000..4a3ec8b
--- /dev/null
+++ b/_build/generate-version.sh
@@ -0,0 +1,57 @@
+#!/usr/bin/env bash
+
+##
+# Updates the version file
+#
+# @author Daniel Rudolf
+# @link http://picocms.org
+# @license http://opensource.org/licenses/MIT
+#
+
+set -e
+
+# parameters
+VERSION_FILE_PATH="$1" # target file path
+VERSION_FULL="$2" # full version string (e.g. 1.0.0-beta.1+7b4ad7f)
+
+# print parameters
+echo "Generating version file..."
+printf 'VERSION_FILE_PATH="%s"\n' "$VERSION_FILE_PATH"
+printf 'VERSION_FULL="%s"\n' "$VERSION_FULL"
+echo
+
+# evaluate version constraint (see http://semver.org/)
+printf 'Evaluating version constraint...\n'
+if [[ "$VERSION_FULL" =~ ^([0-9]+)\.([0-9]{1,2})\.([0-9]{1,2})(-([0-9A-Za-z\.\-]+))?(\+([0-9A-Za-z\.\-]+))?$ ]]; then
+ VERSION_MAJOR="${BASH_REMATCH[1]}"
+ VERSION_MINOR="${BASH_REMATCH[2]}"
+ VERSION_PATCH="${BASH_REMATCH[3]}"
+ VERSION_SUFFIX="${BASH_REMATCH[5]}"
+ VERSION_BUILD="${BASH_REMATCH[7]}"
+
+ VERSION_MILESTONE="$VERSION_MAJOR.$VERSION_MINOR"
+ VERSION_NAME="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
+ VERSION_ID="$VERSION_MAJOR$(printf '%02d' "$VERSION_MINOR")$(printf '%02d' "$VERSION_PATCH")"
+else
+ echo "Invalid version constraint; skipping..." >&2
+ exit 1
+fi
+
+# generate version file
+printf 'Updating version file...\n'
+echo -n "" > "$VERSION_FILE_PATH"
+exec 3> "$VERSION_FILE_PATH"
+
+printf 'full: %s\n' "$VERSION_FULL" >&3
+printf 'name: %s\n' "$VERSION_NAME" >&3
+printf 'milestone: %s\n' "$VERSION_MILESTONE" >&3
+printf 'id: %d\n' "$VERSION_ID" >&3
+printf 'major: %d\n' "$VERSION_MAJOR" >&3
+printf 'minor: %d\n' "$VERSION_MINOR" >&3
+printf 'patch: %d\n' "$VERSION_PATCH" >&3
+printf 'suffix: %s\n' "$VERSION_SUFFIX" >&3
+printf 'build: %s\n' "$VERSION_BUILD" >&3
+
+exec 3>&-
+
+echo
diff --git a/content-sample/index.md b/content-sample/index.md
index b1c8529..086c56c 100644
--- a/content-sample/index.md
+++ b/content-sample/index.md
@@ -135,10 +135,10 @@ something like the following:
{% endif %}
{% endfor %}
```
-4. Make sure to exclude the blog articles from your page navigation. You can
- achieve this by adding `{% if not page starts with "blog/" %}...{% endif %}`
+4. Make sure to exclude blog articles from your page navigation. You can achieve
+ this by adding `{% if not (page.id starts with "blog/") %}...{% endif %}`
to the navigation loop (`{% for page in pages %}...{% endfor %}`) in your
- themes `index.twig`.
+ theme's `index.twig`.
## Customization
@@ -284,13 +284,13 @@ still shows no rewritten URLs, force URL rewriting by setting
`$config['rewrite_url'] = true;` in your `config/config.php`.
If you're using Nginx, you can use the following configuration to enable
-URL rewriting. Don't forget to adjust the path (`/pico/`; line `1` and `4`)
+URL rewriting. Don't forget to adjust the path (`/pico`; line `1` and `4`)
to match your installation directory. You can then enable URL rewriting by
setting `$config['rewrite_url'] = true;` in your `config/config.php`.
- location /pico/ {
+ location ~ ^/pico(.*) {
index index.php;
- try_files $uri $uri/ /pico/?$uri&$args;
+ try_files $uri $uri/ /pico/?$1&$args;
}
## Documentation
diff --git a/lib/Pico.php b/lib/Pico.php
index c814ea1..b73400e 100644
--- a/lib/Pico.php
+++ b/lib/Pico.php
@@ -312,7 +312,8 @@ class Pico
// load raw file content
$this->triggerEvent('onContentLoading', array(&$this->requestFile));
- if (file_exists($this->requestFile)) {
+ $notFoundFile = '404' . $this->getConfig('content_ext');
+ if (file_exists($this->requestFile) && (basename($this->requestFile) !== $notFoundFile)) {
$this->rawContent = $this->loadFileContent($this->requestFile);
} else {
$this->triggerEvent('on404ContentLoading', array(&$this->requestFile));
@@ -925,7 +926,17 @@ class Pico
}
if (!empty($meta['date'])) {
- $meta['time'] = strtotime($meta['date']);
+ // workaround for issue #336
+ // Symfony YAML interprets ISO-8601 datetime strings and returns timestamps instead of the string
+ // this behavior conforms to the YAML standard, i.e. this is no bug of Symfony YAML
+ if (is_int($meta['date'])) {
+ $meta['time'] = $meta['date'];
+
+ $rawDateFormat = (date('H:i:s', $meta['time']) === '00:00:00') ? 'Y-m-d' : 'Y-m-d H:i:s';
+ $meta['date'] = date($rawDateFormat, $meta['time']);
+ } else {
+ $meta['time'] = strtotime($meta['date']);
+ }
$meta['date_formatted'] = utf8_encode(strftime($this->getConfig('date_format'), $meta['time']));
} else {
$meta['time'] = $meta['date_formatted'] = '';
@@ -1283,8 +1294,8 @@ class Pico
/**
* Registers the twig template engine
*
- * This method also registers Picos core Twig filters `link` and `content`
- * as well as Picos {@link PicoTwigExtension} Twig extension.
+ * This method also registers Pico's core Twig filters `link` and `content`
+ * as well as Pico's {@link PicoTwigExtension} Twig extension.
*
* @see Pico::getTwig()
* @return void
@@ -1371,12 +1382,13 @@ class Pico
}
$protocol = 'http';
- if (!empty($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] !== 'off')) {
+ if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
+ $secureProxyHeader = strtolower(current(explode(',', $_SERVER['HTTP_X_FORWARDED_PROTO'])));
+ $protocol = in_array($secureProxyHeader, array('https', 'on', 'ssl', '1')) ? 'https' : 'http';
+ } elseif (!empty($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] !== 'off')) {
$protocol = 'https';
} elseif ($_SERVER['SERVER_PORT'] == 443) {
$protocol = 'https';
- } elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')) {
- $protocol = 'https';
}
$this->config['base_url'] =
diff --git a/lib/PicoTwigExtension.php b/lib/PicoTwigExtension.php
index 383330a..5bb0b9f 100644
--- a/lib/PicoTwigExtension.php
+++ b/lib/PicoTwigExtension.php
@@ -1,7 +1,7 @@
{% endif %}
-
+
diff --git a/themes/default/style.css b/themes/default/style.css
index 9073349..cde8e53 100644
--- a/themes/default/style.css
+++ b/themes/default/style.css
@@ -137,13 +137,12 @@ h3 {
margin-top: 2em;
}
-p, table {
+p, table, ol, ul, pre, blockquote, dl {
margin-bottom: 1em;
}
ol, ul {
padding-left: 30px;
- margin-bottom: 1em;
}
b, strong {
@@ -198,17 +197,20 @@ code {
pre {
background: #eee;
padding: 20px;
- margin-bottom: 1em;
overflow: auto;
}
blockquote {
font-style: italic;
- margin: 0 0 1em 15px;
+ margin-left: 15px;
padding-left: 10px;
border-left: 5px solid #dddddd;
}
+dd {
+ margin-left: 2em;
+}
+
/* Structure Styles
/*---------------------------------------------*/
body {
@@ -223,7 +225,8 @@ body > * {
}
.inner {
- width: 850px;
+ width: 100%;
+ max-width: 850px;
margin: 0 auto;
}