diff --git a/CHANGELOG.md b/CHANGELOG.md index 8043b0f9..b0b1bb3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ **h5ai** uses [semantic versioning](http://semver.org/). +## v0.25.1 - *2014-06-25* + +* fixes broken paths for filenames containing '+' characters +* fixes Google Universal Analytics +* fixes file type check + + ## v0.25.0 - *2014-06-22* * adds sidebar diff --git a/package.json b/package.json index dc99766c..b0b7053e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "h5ai", - "version": "0.25.0", + "version": "0.25.1", "description": "a modern HTTP web server index", "url": "http://larsjung.de/h5ai/", "author": "Lars Jung", diff --git a/src/_h5ai/client/js/inc/core/types.js b/src/_h5ai/client/js/inc/core/types.js index b4d765e7..eb86704b 100644 --- a/src/_h5ai/client/js/inc/core/types.js +++ b/src/_h5ai/client/js/inc/core/types.js @@ -14,7 +14,7 @@ modulejs.define('core/types', ['config', '_'], function (config, _) { _.each(types, function (patterns, type) { - var pattern = '^' + _.map(patterns, function (p) { return escapeRegExp(p).replace(/\*/g, '.*'); }).join('|') + '$'; + var pattern = '^(' + _.map(patterns, function (p) { return '(' + escapeRegExp(p).replace(/\*/g, '.*') + ')'; }).join('|') + ')$'; regexps[type] = new RegExp(pattern, 'i'); }); }, diff --git a/src/_h5ai/client/js/inc/ext/google-analytics.js b/src/_h5ai/client/js/inc/ext/google-analytics.js index e9d4cfe3..c82c3ed2 100644 --- a/src/_h5ai/client/js/inc/ext/google-analytics.js +++ b/src/_h5ai/client/js/inc/ext/google-analytics.js @@ -28,24 +28,25 @@ modulejs.define('ext/google-analytics-ga', ['_', 'core/settings'], function (_, }); -modulejs.define('ext/google-analytics-ua', ['_', 'core/settings'], function (_, allsettings) { +modulejs.define('ext/google-analytics-ua', ['_', 'core/settings', 'core/event'], function (_, allsettings, event) { var settings = _.extend({ enabled: false, - calls: [] + id: 'UA-000000-0' }, allsettings['google-analytics-ua']), + win = window, + doc = document, + scriptLiteral = 'script', + id = 'h5ai-ga', + init = function () { if (!settings.enabled) { return; } - var win = window, - doc = document, - scriptLiteral = 'script', - id = 'ga', - el, firstScriptElement; + var el, firstScriptElement; win.GoogleAnalyticsObject = id; win[id] = win[id] || function () { @@ -60,8 +61,16 @@ modulejs.define('ext/google-analytics-ua', ['_', 'core/settings'], function (_, firstScriptElement = doc.getElementsByTagName(scriptLiteral)[0]; firstScriptElement.parentNode.insertBefore(el, firstScriptElement); - _.each(settings.calls, function (call) { - win[id].apply(win, call); + win[id]('create', settings.id, 'auto'); + + event.sub('location.changed', function (item) { + + var loc = win.location; + win[id]('send', 'pageview', { + location: loc.protocol + '//' + loc.hostname + item.absHref, + page: loc.protocol + '//' + loc.host + item.absHref, + title: _.pluck(item.getCrumb(), 'label').join(' > ') + }); }); }; diff --git a/src/_h5ai/conf/options.json b/src/_h5ai/conf/options.json index be3dea5b..e8a1ee99 100644 --- a/src/_h5ai/conf/options.json +++ b/src/_h5ai/conf/options.json @@ -155,17 +155,11 @@ Options /* Adds Google Universial Analytics asynchronous tracking code. - for example: - "calls": [ - ['create', 'UA-XXXX-Y', 'auto'], - ['send', 'pageview'] - ] - see: https://developers.google.com/analytics/devguides/collection/analyticsjs/ */ "google-analytics-ua": { "enabled": false, - "calls": [] + "id": "UA-000000-0" }, /* diff --git a/src/_h5ai/server/php/index.php b/src/_h5ai/server/php/index.php index 3b4dcace..b5459e9c 100644 --- a/src/_h5ai/server/php/index.php +++ b/src/_h5ai/server/php/index.php @@ -2,7 +2,7 @@ function normalize_path($path, $trailing_slash = false) { - $path = preg_replace("#\\+|/+#", "/", $path); + $path = preg_replace("#\\\\+|/+#", "/", $path); return preg_match("#^(\w:)?/$#", $path) ? $path : (rtrim($path, "/") . ($trailing_slash ? "/" : "")); }